diff options
author | Richard Biener <rguenther@suse.de> | 2015-06-25 12:34:46 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2015-06-25 12:34:46 +0000 |
commit | 502f0263635b6a9fbb8feeb50b9b80947cc2a410 (patch) | |
tree | e412ac0169dc40f3da3b79a8cdb541285acb979c /gcc/tree-vect-slp.c | |
parent | ed1332ee11848c7d2ded43f143f4fdb05b0645eb (diff) | |
download | gcc-502f0263635b6a9fbb8feeb50b9b80947cc2a410.zip gcc-502f0263635b6a9fbb8feeb50b9b80947cc2a410.tar.gz gcc-502f0263635b6a9fbb8feeb50b9b80947cc2a410.tar.bz2 |
tree-vect-slp.c (vect_detect_hybrid_slp_stmts): Improve debug dumping.
2015-06-25 Richard Biener <rguenther@suse.de>
* tree-vect-slp.c (vect_detect_hybrid_slp_stmts): Improve debug
dumping.
(vect_create_mask_and_perm): Do not set STMT_VINFO_VEC_STMT and
cleanup resulting dead code and parameters.
(vect_transform_slp_perm_load): Adjust.
* gfortran.dg/vect/vect-9.f90: New testcase.
From-SVN: r224938
Diffstat (limited to 'gcc/tree-vect-slp.c')
-rw-r--r-- | gcc/tree-vect-slp.c | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index bbc7d13..e85e80d 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -1998,11 +1998,20 @@ vect_detect_hybrid_slp_stmts (slp_tree node, unsigned i, slp_vect_type stype) || VECTORIZABLE_CYCLE_DEF (STMT_VINFO_DEF_TYPE (use_vinfo))) && !(gimple_code (use_stmt) == GIMPLE_PHI && STMT_VINFO_DEF_TYPE (use_vinfo) == vect_reduction_def)) - stype = hybrid; + { + if (dump_enabled_p ()) + { + dump_printf_loc (MSG_NOTE, vect_location, "use of SLP " + "def in non-SLP stmt: "); + dump_gimple_stmt (MSG_NOTE, TDF_SLIM, use_stmt, 0); + } + stype = hybrid; + } } } - if (stype == hybrid) + if (stype == hybrid + && !HYBRID_SLP_STMT (stmt_vinfo)) { if (dump_enabled_p ()) { @@ -3005,7 +3014,7 @@ vect_get_slp_defs (vec<tree> ops, slp_tree slp_node, the created stmts must be inserted. */ static inline void -vect_create_mask_and_perm (gimple stmt, gimple next_scalar_stmt, +vect_create_mask_and_perm (gimple stmt, tree mask, int first_vec_indx, int second_vec_indx, gimple_stmt_iterator *gsi, slp_tree node, tree vectype, vec<tree> dr_chain, @@ -3013,7 +3022,6 @@ vect_create_mask_and_perm (gimple stmt, gimple next_scalar_stmt, { tree perm_dest; gimple perm_stmt = NULL; - stmt_vec_info next_stmt_info; int i, stride; tree first_vec, second_vec, data_ref; @@ -3044,10 +3052,6 @@ vect_create_mask_and_perm (gimple stmt, gimple next_scalar_stmt, first_vec_indx += stride; second_vec_indx += stride; } - - /* Mark the scalar stmt as vectorized. */ - next_stmt_info = vinfo_for_stmt (next_scalar_stmt); - STMT_VINFO_VEC_STMT (next_stmt_info) = perm_stmt; } @@ -3160,9 +3164,8 @@ vect_transform_slp_perm_load (slp_tree node, vec<tree> dr_chain, gimple stmt = SLP_TREE_SCALAR_STMTS (node)[0]; stmt_vec_info stmt_info = vinfo_for_stmt (stmt); tree mask_element_type = NULL_TREE, mask_type; - int i, j, k, nunits, vec_index = 0, scalar_index; + int i, j, k, nunits, vec_index = 0; tree vectype = STMT_VINFO_VECTYPE (stmt_info); - gimple next_scalar_stmt; int group_size = SLP_INSTANCE_GROUP_SIZE (slp_node_instance); int first_mask_element; int index, unroll_factor, current_mask_element, ncopies; @@ -3234,7 +3237,6 @@ vect_transform_slp_perm_load (slp_tree node, vec<tree> dr_chain, {c2,a3,b3,c3}. */ { - scalar_index = 0; index = 0; vect_stmts_counter = 0; vec_index = 0; @@ -3295,10 +3297,7 @@ vect_transform_slp_perm_load (slp_tree node, vec<tree> dr_chain, second_vec_index = vec_index; } - next_scalar_stmt - = SLP_TREE_SCALAR_STMTS (node)[scalar_index++]; - - vect_create_mask_and_perm (stmt, next_scalar_stmt, + vect_create_mask_and_perm (stmt, mask_vec, first_vec_index, second_vec_index, gsi, node, vectype, dr_chain, ncopies, vect_stmts_counter++); |