gcc/ChangeLog:
* tree-vect-loop.cc (vectorize_fold_left_reduction): Add slp_node
argument.
(vect_transform_reduction): Ditto.
(vectorizable_live_operation_1): Ditto.
(vect_get_loop_mask): Add SLP_NODE argument.
* tree-vect-stmts.cc (vectorizable_call): Ditto.
(vectorizable_simd_clone_call): Ditto.
(vectorizable_operation): Ditto.
(vectorizable_store): Ditto.
(vectorizable_load): Ditto.
(vectorizable_condition): Ditto.
(vectorizable_early_exit): Ditto.
* tree-vectorizer.h (vect_get_loop_mask): Add SLP_NODE argument.
---
gcc/tree-vect-loop.cc | 12 +++++++-----
gcc/tree-vect-stmts.cc | 39 +++++++++++++++++++++------------------
gcc/tree-vectorizer.h | 2 +-
3 files changed, 29 insertions(+), 24 deletions(-)
diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
index f0894ee3e87..7aff5e8971f 100644
--- a/gcc/tree-vect-loop.cc
+++ b/gcc/tree-vect-loop.cc
@@ -6501,7 +6501,8 @@ vectorize_fold_left_reduction (loop_vec_info loop_vinfo,
if (LOOP_VINFO_FULLY_MASKED_P (loop_vinfo))
{
tree loop_mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
- vec_num, vectype_in, i);
+ vec_num, vectype_in, i,
+ slp_node);
if (is_cond_op)
mask = prepare_vec_mask (loop_vinfo, TREE_TYPE (loop_mask),
loop_mask, vec_opmask[i], gsi);
@@ -8226,7 +8227,7 @@ vect_transform_reduction (loop_vec_info loop_vinfo,
tree mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
vec_num, vectype_in,
- mask_index++);
+ mask_index++, slp_node);
gcall *call;
if (code.is_internal_fn () && cond_fn_p)
{
@@ -8256,7 +8257,7 @@ vect_transform_reduction (loop_vec_info loop_vinfo,
{
tree mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
vec_num, vectype_in,
- mask_index++);
+ mask_index++, slp_node);
build_vect_cond_expr (code, vop, mask, gsi);
}
@@ -10096,7 +10097,7 @@ vectorizable_live_operation_1 (loop_vec_info
loop_vinfo, basic_block exit_bb,
gimple_stmt_iterator gsi = gsi_last (tem);
tree mask = vect_get_loop_mask (loop_vinfo, &gsi,
&LOOP_VINFO_MASKS (loop_vinfo),
- 1, vectype, 0);
+ 1, vectype, 0, slp_node);
tree scalar_res;
gimple_seq_add_seq (&stmts, tem);
@@ -10555,7 +10556,8 @@ vect_record_loop_mask (loop_vec_info loop_vinfo,
vec_loop_masks *masks,
tree
vect_get_loop_mask (loop_vec_info loop_vinfo,
gimple_stmt_iterator *gsi, vec_loop_masks *masks,
- unsigned int nvectors, tree vectype, unsigned int index)
+ unsigned int nvectors, tree vectype, unsigned int index,
+ slp_tree slp_node ATTRIBUTE_UNUSED)
{
if (LOOP_VINFO_PARTIAL_VECTORS_STYLE (loop_vinfo)
== vect_partial_vectors_while_ult)
diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
index 3480afb6b6e..03746d6c44c 100644
--- a/gcc/tree-vect-stmts.cc
+++ b/gcc/tree-vect-stmts.cc
@@ -3815,7 +3815,8 @@ vectorizable_call (vec_info *vinfo,
unsigned int vec_num = vec_oprnds0.length ();
vargs[varg++] = vect_get_loop_mask (loop_vinfo, gsi,
masks, vec_num,
- vectype_out, i);
+ vectype_out, i,
+ slp_node);
}
else
{
@@ -3886,7 +3887,8 @@ vectorizable_call (vec_info *vinfo,
{
unsigned int vec_num = vec_oprnds0.length ();
tree mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
- vec_num, vectype_out, i);
+ vec_num, vectype_out, i,
+ slp_node);
vargs[mask_opno]
= prepare_vec_mask (loop_vinfo, TREE_TYPE (mask), mask,
vargs[mask_opno], gsi);
@@ -4695,7 +4697,7 @@ vectorizable_simd_clone_call (vec_info *vinfo,
stmt_vec_info stmt_info,
tree loop_mask
= vect_get_loop_mask (loop_vinfo, gsi,
loop_masks, ncopies_in,
- vectype, j);
+ vectype, j, slp_node);
vec_oprnd0
= prepare_vec_mask (loop_vinfo,
TREE_TYPE (loop_mask),
@@ -4756,7 +4758,7 @@ vectorizable_simd_clone_call (vec_info *vinfo,
stmt_vec_info stmt_info,
tree loop_mask
= vect_get_loop_mask (loop_vinfo, gsi,
loop_masks, ncopies_in,
- vectype, j);
+ vectype, j, slp_node);
vec_oprnd0
= prepare_vec_mask (loop_vinfo,
TREE_TYPE (loop_mask),
@@ -4906,7 +4908,8 @@ vectorizable_simd_clone_call (vec_info *vinfo,
stmt_vec_info stmt_info,
{
vec_loop_masks *loop_masks = &LOOP_VINFO_MASKS (loop_vinfo);
mask = vect_get_loop_mask (loop_vinfo, gsi, loop_masks,
- ncopies * o, mask_vectype, m);
+ ncopies * o, mask_vectype, m,
+ slp_node);
}
else
mask = vect_build_all_ones_mask (vinfo, stmt_info,
@@ -7059,7 +7062,7 @@ vectorizable_operation (vec_info *vinfo,
tree mask;
if (masked_loop_p)
mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
- vec_num, vectype, i);
+ vec_num, vectype, i, slp_node);
else
/* Dummy mask. */
mask = build_minus_one_cst (truth_type_for (vectype));
@@ -7116,7 +7119,7 @@ vectorizable_operation (vec_info *vinfo,
if (loop_vinfo->scalar_cond_masked_set.contains ({ op0, vec_num
}))
{
mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
- vec_num, vectype, i);
+ vec_num, vectype, i, slp_node);
vop0 = prepare_vec_mask (loop_vinfo, TREE_TYPE (mask), mask,
vop0, gsi);
@@ -7125,7 +7128,7 @@ vectorizable_operation (vec_info *vinfo,
if (loop_vinfo->scalar_cond_masked_set.contains ({ op1, vec_num
}))
{
mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
- vec_num, vectype, i);
+ vec_num, vectype, i, slp_node);
vop1 = prepare_vec_mask (loop_vinfo, TREE_TYPE (mask), mask,
vop1, gsi);
@@ -8817,7 +8820,7 @@ vectorizable_store (vec_info *vinfo,
tree bias = NULL;
if (loop_masks)
final_mask = vect_get_loop_mask (loop_vinfo, gsi, loop_masks,
- ncopies, vectype, j);
+ ncopies, vectype, j, slp_node);
if (vec_mask)
final_mask = prepare_vec_mask (loop_vinfo, mask_vectype, final_mask,
vec_mask, gsi);
@@ -8960,7 +8963,7 @@ vectorizable_store (vec_info *vinfo,
if (loop_masks)
final_mask = vect_get_loop_mask (loop_vinfo, gsi,
loop_masks, num_stmts,
- vectype, j);
+ vectype, j, slp_node);
if (vec_mask)
final_mask = prepare_vec_mask (loop_vinfo, mask_vectype,
final_mask, vec_mask, gsi);
@@ -9377,7 +9380,7 @@ vectorizable_store (vec_info *vinfo,
tree bias = NULL_TREE;
if (loop_masks)
final_mask = vect_get_loop_mask (loop_vinfo, gsi, loop_masks,
- vec_num, vectype, i);
+ vec_num, vectype, i, slp_node);
if (vec_mask)
vec_mask = vec_masks[i];
if (vec_mask)
@@ -10793,7 +10796,7 @@ vectorizable_load (vec_info *vinfo,
tree bias = NULL_TREE;
if (loop_masks)
final_mask = vect_get_loop_mask (loop_vinfo, gsi, loop_masks,
- ncopies, vectype, j);
+ ncopies, vectype, j, slp_node);
if (vec_mask)
final_mask = prepare_vec_mask (loop_vinfo, mask_vectype, final_mask,
vec_mask, gsi);
@@ -10943,7 +10946,7 @@ vectorizable_load (vec_info *vinfo,
vec_mask = vec_masks[i];
if (loop_masks)
final_mask = vect_get_loop_mask (loop_vinfo, gsi, loop_masks,
- vec_num, vectype, i);
+ vec_num, vectype, i, slp_node);
if (vec_mask)
final_mask = prepare_vec_mask (loop_vinfo, mask_vectype,
final_mask, vec_mask, gsi);
@@ -11426,7 +11429,7 @@ vectorizable_load (vec_info *vinfo,
vec_mask = vec_masks[i];
if (loop_masks)
final_mask = vect_get_loop_mask (loop_vinfo, gsi, loop_masks,
- vec_num, vectype, i);
+ vec_num, vectype, i, slp_node);
if (vec_mask)
final_mask = prepare_vec_mask (loop_vinfo, mask_vectype,
final_mask, vec_mask, gsi);
@@ -12572,7 +12575,7 @@ vectorizable_condition (vec_info *vinfo,
{
tree loop_mask
= vect_get_loop_mask (loop_vinfo, gsi, masks, vec_num,
- vectype, i);
+ vectype, i, slp_node);
tree tmp2 = make_ssa_name (vec_cmp_type);
gassign *g
= gimple_build_assign (tmp2, BIT_AND_EXPR, vec_compare,
@@ -13151,7 +13154,7 @@ vectorizable_early_exit (loop_vec_info loop_vinfo,
stmt_vec_info stmt_info,
{
tree stmt_mask
= vect_get_loop_mask (loop_vinfo, gsi, masks, vec_num,
- vectype, i);
+ vectype, i, slp_node);
stmt_mask
= prepare_vec_mask (loop_vinfo, TREE_TYPE (stmt_mask), stmt_mask,
stmts[i], &cond_gsi);
@@ -13197,8 +13200,8 @@ vectorizable_early_exit (loop_vec_info loop_vinfo,
stmt_vec_info stmt_info,
new_temp = stmts[0];
if (masked_loop_p)
{
- tree mask
- = vect_get_loop_mask (loop_vinfo, gsi, masks, 1, vectype, 0);
+ tree mask = vect_get_loop_mask (loop_vinfo, gsi, masks, 1, vectype, 0,
+ slp_node);
new_temp = prepare_vec_mask (loop_vinfo, TREE_TYPE (mask), mask,
new_temp, &cond_gsi);
}
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h
index 92444ad46b4..6495f24a45e 100644
--- a/gcc/tree-vectorizer.h
+++ b/gcc/tree-vectorizer.h
@@ -2698,7 +2698,7 @@ extern void vect_record_loop_mask (loop_vec_info,
vec_loop_masks *,
unsigned int, tree, tree);
extern tree vect_get_loop_mask (loop_vec_info, gimple_stmt_iterator *,
vec_loop_masks *,
- unsigned int, tree, unsigned int);
+ unsigned int, tree, unsigned int, slp_tree);
extern void vect_record_loop_len (loop_vec_info, vec_loop_lens *, unsigned int,
tree, unsigned int);
extern tree vect_get_loop_len (loop_vec_info, gimple_stmt_iterator *,
--
2.34.1