[24/46] Make stmt_info_for_cost use a stmt_vec_info
authorRichard Sandiford <richard.sandiford@arm.com>
Tue, 31 Jul 2018 14:23:48 +0000 (14:23 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Tue, 31 Jul 2018 14:23:48 +0000 (14:23 +0000)
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-31  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.

From-SVN: r263139

gcc/ChangeLog
gcc/tree-vect-loop.c
gcc/tree-vect-stmts.c
gcc/tree-vectorizer.h

index dde2596749d438a2441435238ab81fd153126801..e67403d1ca2c32126486737c0b8575c994320f32 100644 (file)
@@ -1,3 +1,13 @@
+2018-07-31  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * 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.
+
 2018-07-31  Richard Sandiford  <richard.sandiford@arm.com>
 
        * tree-vectorizer.h (_loop_vec_info::may_misalign_stmts): Change
index e611e9908e33d227325e2914db12a0f32b058b45..f6b2b4554f5cd759e38138888b0efe7e2fdc203f 100644 (file)
@@ -1136,13 +1136,9 @@ vect_compute_single_scalar_iteration_cost (loop_vec_info loop_vinfo)
   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_info loop_vinfo, int peel_iters_prologue,
   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_vec_info loop_vinfo,
          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_vec_info loop_vinfo,
       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_vec_info loop_vinfo,
                                          &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 288bdfaa599424a38e8d17095bf03228e421a0e9..18b242c3ed607350791a8c6a552581dc7d638e9a 100644 (file)
@@ -98,9 +98,7 @@ record_stmt_cost (stmt_vector_for_cost *body_cost_vec, int count,
       && 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;
index ff3b4c641b9ce453493c11a099513d0c2a7caa42..fa206a2e87133841e8e02259f35007ea7adbf843 100644 (file)
@@ -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_for_cost *cost_vec)
   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);
 }