[24/46] Make stmt_info_for_cost use a stmt_vec_info

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

Commit Message

Richard Sandiford July 24, 2018, 10:02 a.m.
This patch makes stmt_info_for_cost carry a stmt_vec_info instead
of a gimple stmt.  The structure is internal to the vectoriser,
so targets aren't affected.


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

gcc/
	* tree-vectorizer.h (stmt_info_for_cost::stmt): Replace with...
	(stmt_info_for_cost::stmt_info): ...this new field.
	(add_stmt_costs): Update accordingly.
	* tree-vect-loop.c (vect_compute_single_scalar_iteration_cost)
	(vect_get_known_peeling_cost): Likewise.
	(vect_estimate_min_profitable_iters): Likewise.
	* tree-vect-stmts.c (record_stmt_cost): Likewise.

Comments

Richard Biener July 25, 2018, 9:30 a.m. | #1
On Tue, Jul 24, 2018 at 12:02 PM Richard Sandiford
<richard.sandiford@arm.com> wrote:
>

> This patch makes stmt_info_for_cost carry a stmt_vec_info instead

> of a gimple stmt.  The structure is internal to the vectoriser,

> so targets aren't affected.


OK

>

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

>

> gcc/

>         * tree-vectorizer.h (stmt_info_for_cost::stmt): Replace with...

>         (stmt_info_for_cost::stmt_info): ...this new field.

>         (add_stmt_costs): Update accordingly.

>         * tree-vect-loop.c (vect_compute_single_scalar_iteration_cost)

>         (vect_get_known_peeling_cost): Likewise.

>         (vect_estimate_min_profitable_iters): Likewise.

>         * tree-vect-stmts.c (record_stmt_cost): Likewise.

>

> Index: gcc/tree-vectorizer.h

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

> --- gcc/tree-vectorizer.h       2018-07-24 10:23:18.856878757 +0100

> +++ gcc/tree-vectorizer.h       2018-07-24 10:23:22.264848493 +0100

> @@ -116,7 +116,7 @@ struct stmt_info_for_cost {

>    int count;

>    enum vect_cost_for_stmt kind;

>    enum vect_cost_model_location where;

> -  gimple *stmt;

> +  stmt_vec_info stmt_info;

>    int misalign;

>  };

>

> @@ -1282,10 +1282,7 @@ add_stmt_costs (void *data, stmt_vector_

>    stmt_info_for_cost *cost;

>    unsigned i;

>    FOR_EACH_VEC_ELT (*cost_vec, i, cost)

> -    add_stmt_cost (data, cost->count, cost->kind,

> -                  (cost->stmt

> -                   ? vinfo_for_stmt (cost->stmt)

> -                   : NULL_STMT_VEC_INFO),

> +    add_stmt_cost (data, cost->count, cost->kind, cost->stmt_info,

>                    cost->misalign, cost->where);

>  }

>

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

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

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

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

> @@ -1136,13 +1136,9 @@ vect_compute_single_scalar_iteration_cos

>    int j;

>    FOR_EACH_VEC_ELT (LOOP_VINFO_SCALAR_ITERATION_COST (loop_vinfo),

>                     j, si)

> -    {

> -      struct _stmt_vec_info *stmt_info

> -       = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;

> -      (void) add_stmt_cost (target_cost_data, si->count,

> -                           si->kind, stmt_info, si->misalign,

> -                           vect_body);

> -    }

> +    (void) add_stmt_cost (target_cost_data, si->count,

> +                         si->kind, si->stmt_info, si->misalign,

> +                         vect_body);

>    unsigned dummy, body_cost = 0;

>    finish_cost (target_cost_data, &dummy, &body_cost, &dummy);

>    destroy_cost_data (target_cost_data);

> @@ -3344,24 +3340,16 @@ vect_get_known_peeling_cost (loop_vec_in

>    int j;

>    if (peel_iters_prologue)

>      FOR_EACH_VEC_ELT (*scalar_cost_vec, j, si)

> -       {

> -         stmt_vec_info stmt_info

> -           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;

> -         retval += record_stmt_cost (prologue_cost_vec,

> -                                     si->count * peel_iters_prologue,

> -                                     si->kind, stmt_info, si->misalign,

> -                                     vect_prologue);

> -       }

> +      retval += record_stmt_cost (prologue_cost_vec,

> +                                 si->count * peel_iters_prologue,

> +                                 si->kind, si->stmt_info, si->misalign,

> +                                 vect_prologue);

>    if (*peel_iters_epilogue)

>      FOR_EACH_VEC_ELT (*scalar_cost_vec, j, si)

> -       {

> -         stmt_vec_info stmt_info

> -           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;

> -         retval += record_stmt_cost (epilogue_cost_vec,

> -                                     si->count * *peel_iters_epilogue,

> -                                     si->kind, stmt_info, si->misalign,

> -                                     vect_epilogue);

> -       }

> +      retval += record_stmt_cost (epilogue_cost_vec,

> +                                 si->count * *peel_iters_epilogue,

> +                                 si->kind, si->stmt_info, si->misalign,

> +                                 vect_epilogue);

>

>    return retval;

>  }

> @@ -3497,13 +3485,9 @@ vect_estimate_min_profitable_iters (loop

>           int j;

>           FOR_EACH_VEC_ELT (LOOP_VINFO_SCALAR_ITERATION_COST (loop_vinfo),

>                             j, si)

> -           {

> -             struct _stmt_vec_info *stmt_info

> -               = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;

> -             (void) add_stmt_cost (target_cost_data, si->count,

> -                                   si->kind, stmt_info, si->misalign,

> -                                   vect_epilogue);

> -           }

> +           (void) add_stmt_cost (target_cost_data, si->count,

> +                                 si->kind, si->stmt_info, si->misalign,

> +                                 vect_epilogue);

>         }

>      }

>    else if (npeel < 0)

> @@ -3535,15 +3519,13 @@ vect_estimate_min_profitable_iters (loop

>        int j;

>        FOR_EACH_VEC_ELT (LOOP_VINFO_SCALAR_ITERATION_COST (loop_vinfo), j, si)

>         {

> -         struct _stmt_vec_info *stmt_info

> -           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;

>           (void) add_stmt_cost (target_cost_data,

>                                 si->count * peel_iters_prologue,

> -                               si->kind, stmt_info, si->misalign,

> +                               si->kind, si->stmt_info, si->misalign,

>                                 vect_prologue);

>           (void) add_stmt_cost (target_cost_data,

>                                 si->count * peel_iters_epilogue,

> -                               si->kind, stmt_info, si->misalign,

> +                               si->kind, si->stmt_info, si->misalign,

>                                 vect_epilogue);

>         }

>      }

> @@ -3566,20 +3548,12 @@ vect_estimate_min_profitable_iters (loop

>                                           &epilogue_cost_vec);

>

>        FOR_EACH_VEC_ELT (prologue_cost_vec, j, si)

> -       {

> -         struct _stmt_vec_info *stmt_info

> -           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;

> -         (void) add_stmt_cost (data, si->count, si->kind, stmt_info,

> -                               si->misalign, vect_prologue);

> -       }

> +       (void) add_stmt_cost (data, si->count, si->kind, si->stmt_info,

> +                             si->misalign, vect_prologue);

>

>        FOR_EACH_VEC_ELT (epilogue_cost_vec, j, si)

> -       {

> -         struct _stmt_vec_info *stmt_info

> -           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;

> -         (void) add_stmt_cost (data, si->count, si->kind, stmt_info,

> -                               si->misalign, vect_epilogue);

> -       }

> +       (void) add_stmt_cost (data, si->count, si->kind, si->stmt_info,

> +                             si->misalign, vect_epilogue);

>

>        prologue_cost_vec.release ();

>        epilogue_cost_vec.release ();

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

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

> --- gcc/tree-vect-stmts.c       2018-07-24 10:23:15.756906285 +0100

> +++ gcc/tree-vect-stmts.c       2018-07-24 10:23:22.260848529 +0100

> @@ -98,9 +98,7 @@ record_stmt_cost (stmt_vector_for_cost *

>        && STMT_VINFO_GATHER_SCATTER_P (stmt_info))

>      kind = vector_scatter_store;

>

> -  stmt_info_for_cost si = { count, kind, where,

> -      stmt_info ? STMT_VINFO_STMT (stmt_info) : NULL,

> -      misalign };

> +  stmt_info_for_cost si = { count, kind, where, stmt_info, misalign };

>    body_cost_vec->safe_push (si);

>

>    tree vectype = stmt_info ? stmt_vectype (stmt_info) : NULL_TREE;

Patch

Index: gcc/tree-vectorizer.h
===================================================================
--- gcc/tree-vectorizer.h	2018-07-24 10:23:18.856878757 +0100
+++ gcc/tree-vectorizer.h	2018-07-24 10:23:22.264848493 +0100
@@ -116,7 +116,7 @@  struct stmt_info_for_cost {
   int count;
   enum vect_cost_for_stmt kind;
   enum vect_cost_model_location where;
-  gimple *stmt;
+  stmt_vec_info stmt_info;
   int misalign;
 };
 
@@ -1282,10 +1282,7 @@  add_stmt_costs (void *data, stmt_vector_
   stmt_info_for_cost *cost;
   unsigned i;
   FOR_EACH_VEC_ELT (*cost_vec, i, cost)
-    add_stmt_cost (data, cost->count, cost->kind,
-		   (cost->stmt
-		    ? vinfo_for_stmt (cost->stmt)
-		    : NULL_STMT_VEC_INFO),
+    add_stmt_cost (data, cost->count, cost->kind, cost->stmt_info,
 		   cost->misalign, cost->where);
 }
 
Index: gcc/tree-vect-loop.c
===================================================================
--- gcc/tree-vect-loop.c	2018-07-24 10:23:12.060939107 +0100
+++ gcc/tree-vect-loop.c	2018-07-24 10:23:22.260848529 +0100
@@ -1136,13 +1136,9 @@  vect_compute_single_scalar_iteration_cos
   int j;
   FOR_EACH_VEC_ELT (LOOP_VINFO_SCALAR_ITERATION_COST (loop_vinfo),
 		    j, si)
-    {
-      struct _stmt_vec_info *stmt_info
-	= si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
-      (void) add_stmt_cost (target_cost_data, si->count,
-			    si->kind, stmt_info, si->misalign,
-			    vect_body);
-    }
+    (void) add_stmt_cost (target_cost_data, si->count,
+			  si->kind, si->stmt_info, si->misalign,
+			  vect_body);
   unsigned dummy, body_cost = 0;
   finish_cost (target_cost_data, &dummy, &body_cost, &dummy);
   destroy_cost_data (target_cost_data);
@@ -3344,24 +3340,16 @@  vect_get_known_peeling_cost (loop_vec_in
   int j;
   if (peel_iters_prologue)
     FOR_EACH_VEC_ELT (*scalar_cost_vec, j, si)
-	{
-	  stmt_vec_info stmt_info
-	    = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
-	  retval += record_stmt_cost (prologue_cost_vec,
-				      si->count * peel_iters_prologue,
-				      si->kind, stmt_info, si->misalign,
-				      vect_prologue);
-	}
+      retval += record_stmt_cost (prologue_cost_vec,
+				  si->count * peel_iters_prologue,
+				  si->kind, si->stmt_info, si->misalign,
+				  vect_prologue);
   if (*peel_iters_epilogue)
     FOR_EACH_VEC_ELT (*scalar_cost_vec, j, si)
-	{
-	  stmt_vec_info stmt_info
-	    = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
-	  retval += record_stmt_cost (epilogue_cost_vec,
-				      si->count * *peel_iters_epilogue,
-				      si->kind, stmt_info, si->misalign,
-				      vect_epilogue);
-	}
+      retval += record_stmt_cost (epilogue_cost_vec,
+				  si->count * *peel_iters_epilogue,
+				  si->kind, si->stmt_info, si->misalign,
+				  vect_epilogue);
 
   return retval;
 }
@@ -3497,13 +3485,9 @@  vect_estimate_min_profitable_iters (loop
 	  int j;
 	  FOR_EACH_VEC_ELT (LOOP_VINFO_SCALAR_ITERATION_COST (loop_vinfo),
 			    j, si)
-	    {
-	      struct _stmt_vec_info *stmt_info
-		= si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
-	      (void) add_stmt_cost (target_cost_data, si->count,
-				    si->kind, stmt_info, si->misalign,
-				    vect_epilogue);
-	    }
+	    (void) add_stmt_cost (target_cost_data, si->count,
+				  si->kind, si->stmt_info, si->misalign,
+				  vect_epilogue);
 	}
     }
   else if (npeel < 0)
@@ -3535,15 +3519,13 @@  vect_estimate_min_profitable_iters (loop
       int j;
       FOR_EACH_VEC_ELT (LOOP_VINFO_SCALAR_ITERATION_COST (loop_vinfo), j, si)
 	{
-	  struct _stmt_vec_info *stmt_info
-	    = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
 	  (void) add_stmt_cost (target_cost_data,
 				si->count * peel_iters_prologue,
-				si->kind, stmt_info, si->misalign,
+				si->kind, si->stmt_info, si->misalign,
 				vect_prologue);
 	  (void) add_stmt_cost (target_cost_data,
 				si->count * peel_iters_epilogue,
-				si->kind, stmt_info, si->misalign,
+				si->kind, si->stmt_info, si->misalign,
 				vect_epilogue);
 	}
     }
@@ -3566,20 +3548,12 @@  vect_estimate_min_profitable_iters (loop
 					  &epilogue_cost_vec);
 
       FOR_EACH_VEC_ELT (prologue_cost_vec, j, si)
-	{
-	  struct _stmt_vec_info *stmt_info
-	    = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
-	  (void) add_stmt_cost (data, si->count, si->kind, stmt_info,
-				si->misalign, vect_prologue);
-	}
+	(void) add_stmt_cost (data, si->count, si->kind, si->stmt_info,
+			      si->misalign, vect_prologue);
 
       FOR_EACH_VEC_ELT (epilogue_cost_vec, j, si)
-	{
-	  struct _stmt_vec_info *stmt_info
-	    = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
-	  (void) add_stmt_cost (data, si->count, si->kind, stmt_info,
-				si->misalign, vect_epilogue);
-	}
+	(void) add_stmt_cost (data, si->count, si->kind, si->stmt_info,
+			      si->misalign, vect_epilogue);
 
       prologue_cost_vec.release ();
       epilogue_cost_vec.release ();
Index: gcc/tree-vect-stmts.c
===================================================================
--- gcc/tree-vect-stmts.c	2018-07-24 10:23:15.756906285 +0100
+++ gcc/tree-vect-stmts.c	2018-07-24 10:23:22.260848529 +0100
@@ -98,9 +98,7 @@  record_stmt_cost (stmt_vector_for_cost *
       && STMT_VINFO_GATHER_SCATTER_P (stmt_info))
     kind = vector_scatter_store;
 
-  stmt_info_for_cost si = { count, kind, where,
-      stmt_info ? STMT_VINFO_STMT (stmt_info) : NULL,
-      misalign };
+  stmt_info_for_cost si = { count, kind, where, stmt_info, misalign };
   body_cost_vec->safe_push (si);
 
   tree vectype = stmt_info ? stmt_vectype (stmt_info) : NULL_TREE;