aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-slp.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2015-06-25 12:34:46 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2015-06-25 12:34:46 +0000
commit502f0263635b6a9fbb8feeb50b9b80947cc2a410 (patch)
treee412ac0169dc40f3da3b79a8cdb541285acb979c /gcc/tree-vect-slp.c
parented1332ee11848c7d2ded43f143f4fdb05b0645eb (diff)
downloadgcc-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.c29
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++);