diff options
author | Richard Biener <rguenther@suse.de> | 2017-06-30 13:19:29 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-06-30 13:19:29 +0000 |
commit | bd2f172f0b67c88ad3dd6126e8ee6fd4e87b6787 (patch) | |
tree | 2ab8327e8cb49ed1817c71232164c08f1b01082a /gcc/tree-vect-stmts.c | |
parent | 3b5c768c40c78618962f2d6e86c9c7affdf86eb8 (diff) | |
download | gcc-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.c | 67 |
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); |