+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
: 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
{
/* 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
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)
{
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);
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));
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));
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 {
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,