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.

Richard


2017-11-17  Richard Sandiford  <richard.sandif...@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.

Index: gcc/tree-vectorizer.h
===================================================================
--- gcc/tree-vectorizer.h       2017-11-17 09:06:36.818836579 +0000
+++ gcc/tree-vectorizer.h       2017-11-17 09:06:46.238323981 +0000
@@ -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
                                    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,
Index: gcc/tree-vect-stmts.c
===================================================================
--- gcc/tree-vect-stmts.c       2017-11-17 09:06:42.553230162 +0000
+++ gcc/tree-vect-stmts.c       2017-11-17 09:06:46.238323981 +0000
@@ -52,14 +52,6 @@ Software Foundation; either version 3, o
 /* 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
@@ -906,7 +898,7 @@ vect_model_promotion_demotion_cost (stmt
 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)
 {
@@ -915,7 +907,7 @@ vect_model_store_cost (stmt_vec_info stm
   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);
 
@@ -2169,7 +2161,7 @@ vectorizable_mask_load_store (gimple *st
                              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));
@@ -5797,8 +5789,8 @@ vectorizable_store (gimple *stmt, gimple
       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: gcc/tree-vect-slp.c
===================================================================
--- gcc/tree-vect-slp.c 2017-11-17 09:06:36.818836579 +0000
+++ gcc/tree-vect-slp.c 2017-11-17 09:06:46.237364571 +0000
@@ -1724,7 +1724,7 @@ vect_analyze_slp_cost_1 (slp_instance in
           : 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
        {

Reply via email to