Folds loops that used ncopies and now no longer need to be loops
---
 gcc/tree-vect-loop.cc | 51 +++++++++++++++----------------------------
 1 file changed, 18 insertions(+), 33 deletions(-)

diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
index c47ebc564c7..b2fa2703d34 100644
--- a/gcc/tree-vect-loop.cc
+++ b/gcc/tree-vect-loop.cc
@@ -5881,7 +5881,6 @@ vect_create_epilog_for_reduction (loop_vec_info loop_vinfo,
      loop-closed PHI of the inner loop which we remember as
      def for the reduction PHI generation.  */
   bool double_reduc = false;
-  stmt_vec_info rdef_info = stmt_info;
   if (STMT_VINFO_DEF_TYPE (stmt_info) == vect_double_reduction_def)
     {
       double_reduc = true;
@@ -6104,22 +6103,17 @@ vect_create_epilog_for_reduction (loop_vec_info loop_vinfo,
     {
       gimple_seq stmts = NULL;
       def = vect_get_slp_vect_def (slp_node, i);
-      for (j = 0; j < 1; j++)
-	{
-	  tree new_def = copy_ssa_name (def);
-	  phi = create_phi_node (new_def, exit_bb);
-	  if (0)
-	    def = gimple_get_lhs (STMT_VINFO_VEC_STMTS (rdef_info)[j]);
-	  if (LOOP_VINFO_IV_EXIT (loop_vinfo) == loop_exit)
-	    SET_PHI_ARG_DEF (phi, loop_exit->dest_idx, def);
-	  else
-	    {
-	      for (unsigned k = 0; k < gimple_phi_num_args (phi); k++)
-		SET_PHI_ARG_DEF (phi, k, def);
-	    }
-	  new_def = gimple_convert (&stmts, vectype, new_def);
-	  reduc_inputs.quick_push (new_def);
+      tree new_def = copy_ssa_name (def);
+      phi = create_phi_node (new_def, exit_bb);
+      if (LOOP_VINFO_IV_EXIT (loop_vinfo) == loop_exit)
+	SET_PHI_ARG_DEF (phi, loop_exit->dest_idx, def);
+      else
+	{
+	  for (unsigned k = 0; k < gimple_phi_num_args (phi); k++)
+	    SET_PHI_ARG_DEF (phi, k, def);
 	}
+      new_def = gimple_convert (&stmts, vectype, new_def);
+      reduc_inputs.quick_push (new_def);
       gsi_insert_seq_before (&exit_gsi, stmts, GSI_SAME_STMT);
     }
 
@@ -8819,7 +8813,6 @@ vect_transform_cycle_phi (loop_vec_info loop_vinfo,
   tree vectype_out = STMT_VINFO_VECTYPE (stmt_info);
   class loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
   int i;
-  int j;
   bool nested_cycle = false;
   int vec_num;
 
@@ -8933,8 +8926,7 @@ vect_transform_cycle_phi (loop_vec_info loop_vinfo,
   if (vec_initial_def)
     {
       vec_initial_defs.create (1);
-      for (i = 0; i < 1; ++i)
-	vec_initial_defs.quick_push (vec_initial_def);
+      vec_initial_defs.quick_push (vec_initial_def);
     }
 
   if (auto *accumulator = reduc_info->reused_accumulator)
@@ -9009,22 +9001,15 @@ vect_transform_cycle_phi (loop_vec_info loop_vinfo,
   for (i = 0; i < vec_num; i++)
     {
       tree vec_init_def = vec_initial_defs[i];
-      for (j = 0; j < 1; j++)
-	{
-	  /* Create the reduction-phi that defines the reduction
-	     operand.  */
-	  gphi *new_phi = create_phi_node (vec_dest, loop->header);
-
-	  /* Set the loop-entry arg of the reduction-phi.  */
-	  if (j != 0 && nested_cycle)
-	    vec_init_def = vec_initial_defs[j];
-	  add_phi_arg (new_phi, vec_init_def, loop_preheader_edge (loop),
-		       UNKNOWN_LOCATION);
+      /* Create the reduction-phi that defines the reduction
+	 operand.  */
+      gphi *new_phi = create_phi_node (vec_dest, loop->header);
+      add_phi_arg (new_phi, vec_init_def, loop_preheader_edge (loop),
+		   UNKNOWN_LOCATION);
 
-	  /* The loop-latch arg is set in epilogue processing.  */
+      /* The loop-latch arg is set in epilogue processing.  */
 
-	  slp_node->push_vec_def (new_phi);
-	}
+      slp_node->push_vec_def (new_phi);
     }
 
   return true;

Reply via email to