[02/46] Remove dead vectorizable_reduction code

Message ID 87o9exrmcu.fsf@arm.com
State New
Headers show
Series
  • Remove vinfo_for_stmt etc.
Related show

Commit Message

Richard Sandiford July 24, 2018, 9:53 a.m.
vectorizable_reduction has old code to cope with cases in which the
given statement belongs to a reduction group but isn't the first statement.
That can no longer happen, since all statements in the group go into the
same SLP node, and we only check the first statement in each node.

The point is to remove the only path through vectorizable_reduction
in which stmt and stmt_info refer to different statements.


2018-07-24  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* tree-vect-loop.c (vectorizable_reduction): Assert that the
	function is not called for second and subsequent members of
	a reduction group.

Comments

Richard Biener July 25, 2018, 8:43 a.m. | #1
On Tue, Jul 24, 2018 at 11:53 AM Richard Sandiford
<richard.sandiford@arm.com> wrote:
>

> vectorizable_reduction has old code to cope with cases in which the

> given statement belongs to a reduction group but isn't the first statement.

> That can no longer happen, since all statements in the group go into the

> same SLP node, and we only check the first statement in each node.

>

> The point is to remove the only path through vectorizable_reduction

> in which stmt and stmt_info refer to different statements.


OK.

>

> 2018-07-24  Richard Sandiford  <richard.sandiford@arm.com>

>

> gcc/

>         * tree-vect-loop.c (vectorizable_reduction): Assert that the

>         function is not called for second and subsequent members of

>         a reduction group.

>

> Index: gcc/tree-vect-loop.c

> ===================================================================

> --- gcc/tree-vect-loop.c        2018-07-24 10:22:02.965552667 +0100

> +++ gcc/tree-vect-loop.c        2018-07-24 10:22:06.269523330 +0100

> @@ -6162,7 +6162,6 @@ vectorizable_reduction (gimple *stmt, gi

>    auto_vec<gimple *> phis;

>    int vec_num;

>    tree def0, tem;

> -  bool first_p = true;

>    tree cr_index_scalar_type = NULL_TREE, cr_index_vector_type = NULL_TREE;

>    tree cond_reduc_val = NULL_TREE;

>

> @@ -6178,15 +6177,8 @@ vectorizable_reduction (gimple *stmt, gi

>        nested_cycle = true;

>      }

>

> -  /* In case of reduction chain we switch to the first stmt in the chain, but

> -     we don't update STMT_INFO, since only the last stmt is marked as reduction

> -     and has reduction properties.  */

> -  if (REDUC_GROUP_FIRST_ELEMENT (stmt_info)

> -      && REDUC_GROUP_FIRST_ELEMENT (stmt_info) != stmt)

> -    {

> -      stmt = REDUC_GROUP_FIRST_ELEMENT (stmt_info);

> -      first_p = false;

> -    }

> +  if (REDUC_GROUP_FIRST_ELEMENT (stmt_info))

> +    gcc_assert (slp_node && REDUC_GROUP_FIRST_ELEMENT (stmt_info) == stmt);

>

>    if (gimple_code (stmt) == GIMPLE_PHI)

>      {

> @@ -7050,8 +7042,7 @@ vectorizable_reduction (gimple *stmt, gi

>

>    if (!vec_stmt) /* transformation not required.  */

>      {

> -      if (first_p)

> -       vect_model_reduction_cost (stmt_info, reduc_fn, ncopies, cost_vec);

> +      vect_model_reduction_cost (stmt_info, reduc_fn, ncopies, cost_vec);

>        if (loop_vinfo && LOOP_VINFO_CAN_FULLY_MASK_P (loop_vinfo))

>         {

>           if (reduction_type != FOLD_LEFT_REDUCTION

Patch

Index: gcc/tree-vect-loop.c
===================================================================
--- gcc/tree-vect-loop.c	2018-07-24 10:22:02.965552667 +0100
+++ gcc/tree-vect-loop.c	2018-07-24 10:22:06.269523330 +0100
@@ -6162,7 +6162,6 @@  vectorizable_reduction (gimple *stmt, gi
   auto_vec<gimple *> phis;
   int vec_num;
   tree def0, tem;
-  bool first_p = true;
   tree cr_index_scalar_type = NULL_TREE, cr_index_vector_type = NULL_TREE;
   tree cond_reduc_val = NULL_TREE;
 
@@ -6178,15 +6177,8 @@  vectorizable_reduction (gimple *stmt, gi
       nested_cycle = true;
     }
 
-  /* In case of reduction chain we switch to the first stmt in the chain, but
-     we don't update STMT_INFO, since only the last stmt is marked as reduction
-     and has reduction properties.  */
-  if (REDUC_GROUP_FIRST_ELEMENT (stmt_info)
-      && REDUC_GROUP_FIRST_ELEMENT (stmt_info) != stmt)
-    {
-      stmt = REDUC_GROUP_FIRST_ELEMENT (stmt_info);
-      first_p = false;
-    }
+  if (REDUC_GROUP_FIRST_ELEMENT (stmt_info))
+    gcc_assert (slp_node && REDUC_GROUP_FIRST_ELEMENT (stmt_info) == stmt);
 
   if (gimple_code (stmt) == GIMPLE_PHI)
     {
@@ -7050,8 +7042,7 @@  vectorizable_reduction (gimple *stmt, gi
 
   if (!vec_stmt) /* transformation not required.  */
     {
-      if (first_p)
-	vect_model_reduction_cost (stmt_info, reduc_fn, ncopies, cost_vec);
+      vect_model_reduction_cost (stmt_info, reduc_fn, ncopies, cost_vec);
       if (loop_vinfo && LOOP_VINFO_CAN_FULLY_MASK_P (loop_vinfo))
 	{
 	  if (reduction_type != FOLD_LEFT_REDUCTION