diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
index 6c2420249718237c4f70720b2bd03d4951bd8a5d..2925c21d97cb5887f6f0e2cb3a0c0e2cd38ae200 100644
--- a/gcc/tree-vect-loop.cc
+++ b/gcc/tree-vect-loop.cc
@@ -7565,6 +7565,8 @@ vectorizable_reduction (loop_vec_info loop_vinfo,
      values into the low-numbered elements.  */
   if ((double_reduc || neutral_op)
       && !nunits_out.is_constant ()
+      && (SLP_TREE_LANES (slp_node) != 1 && !reduc_chain)
+      && !operand_equal_p (neutral_op, vect_phi_initial_value (reduc_def_phi))
       && !direct_internal_fn_supported_p (IFN_VEC_SHL_INSERT,
 					  vectype_out, OPTIMIZE_FOR_SPEED))
     {
