diff mbox series

[2/7] Make vect_model_store_cost take a vec_load_store_type

Message ID 87tvxt1cy5.fsf@linaro.org
State New
Headers show
Series Fold vectorizable_mask_load_store into vectorizable_load/store | expand

Commit Message

Richard Sandiford Nov. 17, 2017, 9:17 a.m. UTC
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.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.

Comments

Jeff Law Nov. 17, 2017, 6:43 p.m. UTC | #1
On 11/17/2017 02:17 AM, Richard Sandiford wrote:
> 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.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.

> 

OK.
jeff
diff mbox series

Patch

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
 	{