Make vect_model_store_cost take a vec_load_store_type
authorRichard Sandiford <richard.sandiford@linaro.org>
Wed, 3 Jan 2018 21:46:52 +0000 (21:46 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 3 Jan 2018 21:46:52 +0000 (21:46 +0000)
This patch makes vect_model_store_cost take a vec_load_store_type
instead of a vect_def_type.  It's a wash on its own, but it helps
with later patches.

2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* tree-vectorizer.h (vec_load_store_type): Moved from tree-vec-stmts.c
(vect_model_store_cost): Take a vec_load_store_type instead of a
vect_def_type.
* tree-vect-stmts.c (vec_load_store_type): Move to tree-vectorizer.h.
(vect_model_store_cost): Take a vec_load_store_type instead of a
vect_def_type.
(vectorizable_mask_load_store): Update accordingly.
(vectorizable_store): Likewise.
* tree-vect-slp.c (vect_analyze_slp_cost_1): Update accordingly.

From-SVN: r256211

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

index 309c00942bfd5bfa3625f4bc67d712caa57dcebf..be6d5e15ac453cabc1ee6505a1b83f07aea80290 100644 (file)
@@ -1,3 +1,15 @@
+2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
+
+       * tree-vectorizer.h (vec_load_store_type): Moved from tree-vec-stmts.c
+       (vect_model_store_cost): Take a vec_load_store_type instead of a
+       vect_def_type.
+       * tree-vect-stmts.c (vec_load_store_type): Move to tree-vectorizer.h.
+       (vect_model_store_cost): Take a vec_load_store_type instead of a
+       vect_def_type.
+       (vectorizable_mask_load_store): Update accordingly.
+       (vectorizable_store): Likewise.
+       * tree-vect-slp.c (vect_analyze_slp_cost_1): Update accordingly.
+
 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
 
        * tree-vect-loop.c (vect_transform_loop): Stub out scalar
index 2563fc008a8b0d9056e28e1124807e55b30a3dd0..2a6d9244109c3db676e822c18b1fccef818f6488 100644 (file)
@@ -1736,7 +1736,7 @@ vect_analyze_slp_cost_1 (slp_instance instance, slp_tree node,
           : VMAT_CONTIGUOUS);
       if (DR_IS_WRITE (STMT_VINFO_DATA_REF (stmt_info)))
        vect_model_store_cost (stmt_info, ncopies_for_cost,
-                              memory_access_type, vect_uninitialized_def,
+                              memory_access_type, VLS_STORE,
                               node, prologue_cost_vec, body_cost_vec);
       else
        {
index 96c6605d9591856ce98033c7b8f2ca12663bc59c..cdca95acb507e6f230c3cb070881e4837df2aec3 100644 (file)
@@ -54,14 +54,6 @@ along with GCC; see the file COPYING3.  If not see
 /* For lang_hooks.types.type_for_mode.  */
 #include "langhooks.h"
 
-/* Says whether a statement is a load, a store of a vectorized statement
-   result, or a store of an invariant value.  */
-enum vec_load_store_type {
-  VLS_LOAD,
-  VLS_STORE,
-  VLS_STORE_INVARIANT
-};
-
 /* Return the vectorized type for the given statement.  */
 
 tree
@@ -908,7 +900,7 @@ vect_model_promotion_demotion_cost (stmt_vec_info stmt_info,
 void
 vect_model_store_cost (stmt_vec_info stmt_info, int ncopies,
                       vect_memory_access_type memory_access_type,
-                      enum vect_def_type dt, slp_tree slp_node,
+                      vec_load_store_type vls_type, slp_tree slp_node,
                       stmt_vector_for_cost *prologue_cost_vec,
                       stmt_vector_for_cost *body_cost_vec)
 {
@@ -917,7 +909,7 @@ vect_model_store_cost (stmt_vec_info stmt_info, int ncopies,
   gimple *first_stmt = STMT_VINFO_STMT (stmt_info);
   bool grouped_access_p = STMT_VINFO_GROUPED_ACCESS (stmt_info);
 
-  if (dt == vect_constant_def || dt == vect_external_def)
+  if (vls_type == VLS_STORE_INVARIANT)
     prologue_cost += record_stmt_cost (prologue_cost_vec, 1, scalar_to_vec,
                                       stmt_info, 0, vect_prologue);
 
@@ -2170,7 +2162,7 @@ vectorizable_mask_load_store (gimple *stmt, gimple_stmt_iterator *gsi,
                              NULL, NULL, NULL);
       else
        vect_model_store_cost (stmt_info, ncopies, memory_access_type,
-                              dt, NULL, NULL, NULL);
+                              vls_type, NULL, NULL, NULL);
       return true;
     }
   gcc_assert (memory_access_type == STMT_VINFO_MEMORY_ACCESS_TYPE (stmt_info));
@@ -5820,8 +5812,8 @@ vectorizable_store (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
       STMT_VINFO_TYPE (stmt_info) = store_vec_info_type;
       /* The SLP costs are calculated during SLP analysis.  */
       if (!PURE_SLP_STMT (stmt_info))
-       vect_model_store_cost (stmt_info, ncopies, memory_access_type, dt,
-                              NULL, NULL, NULL);
+       vect_model_store_cost (stmt_info, ncopies, memory_access_type,
+                              vls_type, NULL, NULL, NULL);
       return true;
     }
   gcc_assert (memory_access_type == STMT_VINFO_MEMORY_ACCESS_TYPE (stmt_info));
index d72e39a5af5d9c1081c8c815ade3d442bf00a8a0..150b268afb1048dd7fa8e7db7076f636961d5244 100644 (file)
@@ -520,6 +520,14 @@ enum slp_vect_type {
   hybrid
 };
 
+/* Says whether a statement is a load, a store of a vectorized statement
+   result, or a store of an invariant value.  */
+enum vec_load_store_type {
+  VLS_LOAD,
+  VLS_STORE,
+  VLS_STORE_INVARIANT
+};
+
 /* Describes how we're going to vectorize an individual load or store,
    or a group of loads or stores.  */
 enum vect_memory_access_type {
@@ -1220,7 +1228,7 @@ extern void vect_model_simple_cost (stmt_vec_info, int, enum vect_def_type *,
                                    int, stmt_vector_for_cost *,
                                    stmt_vector_for_cost *);
 extern void vect_model_store_cost (stmt_vec_info, int, vect_memory_access_type,
-                                  enum vect_def_type, slp_tree,
+                                  vec_load_store_type, slp_tree,
                                   stmt_vector_for_cost *,
                                   stmt_vector_for_cost *);
 extern void vect_model_load_cost (stmt_vec_info, int, vect_memory_access_type,