aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-stmts.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2017-06-30 13:19:29 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2017-06-30 13:19:29 +0000
commitbd2f172f0b67c88ad3dd6126e8ee6fd4e87b6787 (patch)
tree2ab8327e8cb49ed1817c71232164c08f1b01082a /gcc/tree-vect-stmts.c
parent3b5c768c40c78618962f2d6e86c9c7affdf86eb8 (diff)
downloadgcc-bd2f172f0b67c88ad3dd6126e8ee6fd4e87b6787.zip
gcc-bd2f172f0b67c88ad3dd6126e8ee6fd4e87b6787.tar.gz
gcc-bd2f172f0b67c88ad3dd6126e8ee6fd4e87b6787.tar.bz2
tree-vect-slp.c (vect_slp_analyze_node_operations): Only analyze the first scalar stmt.
2017-06-30 Richard Biener <rguenther@suse.de> * tree-vect-slp.c (vect_slp_analyze_node_operations): Only analyze the first scalar stmt. Move vector type computation for the BB case here from ... * tree-vect-stmts.c (vect_analyze_stmt): ... here. Guard live operation processing in the SLP case properly. From-SVN: r249839
Diffstat (limited to 'gcc/tree-vect-stmts.c')
-rw-r--r--gcc/tree-vect-stmts.c67
1 files changed, 12 insertions, 55 deletions
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index e04390e..9647c11 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -8398,7 +8398,6 @@ vect_analyze_stmt (gimple *stmt, bool *need_to_vectorize, slp_tree node)
bb_vec_info bb_vinfo = STMT_VINFO_BB_VINFO (stmt_info);
enum vect_relevant relevance = STMT_VINFO_RELEVANT (stmt_info);
bool ok;
- tree scalar_type, vectype;
gimple *pattern_stmt;
gimple_seq pattern_def_seq;
@@ -8529,48 +8528,6 @@ vect_analyze_stmt (gimple *stmt, bool *need_to_vectorize, slp_tree node)
gcc_unreachable ();
}
- if (bb_vinfo)
- {
- gcc_assert (PURE_SLP_STMT (stmt_info));
-
- /* Memory accesses already got their vector type assigned
- in vect_analyze_data_refs. */
- if (! STMT_VINFO_DATA_REF (stmt_info))
- {
- scalar_type = TREE_TYPE (gimple_get_lhs (stmt));
- if (dump_enabled_p ())
- {
- dump_printf_loc (MSG_NOTE, vect_location,
- "get vectype for scalar type: ");
- dump_generic_expr (MSG_NOTE, TDF_SLIM, scalar_type);
- dump_printf (MSG_NOTE, "\n");
- }
-
- vectype = get_vectype_for_scalar_type (scalar_type);
- if (!vectype)
- {
- if (dump_enabled_p ())
- {
- dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
- "not SLPed: unsupported data-type ");
- dump_generic_expr (MSG_MISSED_OPTIMIZATION, TDF_SLIM,
- scalar_type);
- dump_printf (MSG_MISSED_OPTIMIZATION, "\n");
- }
- return false;
- }
-
- if (dump_enabled_p ())
- {
- dump_printf_loc (MSG_NOTE, vect_location, "vectype: ");
- dump_generic_expr (MSG_NOTE, TDF_SLIM, vectype);
- dump_printf (MSG_NOTE, "\n");
- }
-
- STMT_VINFO_VECTYPE (stmt_info) = vectype;
- }
- }
-
if (STMT_VINFO_RELEVANT_P (stmt_info))
{
gcc_assert (!VECTOR_MODE_P (TYPE_MODE (gimple_expr_type (stmt))));
@@ -8815,20 +8772,20 @@ vect_transform_stmt (gimple *stmt, gimple_stmt_iterator *gsi,
{
gimple *slp_stmt;
int i;
- FOR_EACH_VEC_ELT (SLP_TREE_SCALAR_STMTS (slp_node), i, slp_stmt)
- {
- stmt_vec_info slp_stmt_info = vinfo_for_stmt (slp_stmt);
- if (STMT_VINFO_LIVE_P (slp_stmt_info)
- && STMT_VINFO_TYPE (slp_stmt_info) != reduc_vec_info_type)
- {
- done = vectorizable_live_operation (slp_stmt, gsi, slp_node, i,
- &vec_stmt);
- gcc_assert (done);
- }
- }
+ if (STMT_VINFO_TYPE (stmt_info) != reduc_vec_info_type)
+ FOR_EACH_VEC_ELT (SLP_TREE_SCALAR_STMTS (slp_node), i, slp_stmt)
+ {
+ stmt_vec_info slp_stmt_info = vinfo_for_stmt (slp_stmt);
+ if (STMT_VINFO_LIVE_P (slp_stmt_info))
+ {
+ done = vectorizable_live_operation (slp_stmt, gsi, slp_node, i,
+ &vec_stmt);
+ gcc_assert (done);
+ }
+ }
}
else if (STMT_VINFO_LIVE_P (stmt_info)
- && STMT_VINFO_TYPE (stmt_info) != reduc_vec_info_type)
+ && STMT_VINFO_TYPE (stmt_info) != reduc_vec_info_type)
{
done = vectorizable_live_operation (stmt, gsi, slp_node, -1, &vec_stmt);
gcc_assert (done);