This adds a loop_vinfo argument for future use, making the next patch smaller.
* tree-vectorizer.h (vect_get_loop_mask): Add loop_vec_info argument. * tree-vect-loop.cc (vect_get_loop_mask): Likewise. (vectorize_fold_left_reduction): Adjust. (vect_transform_reduction): Likewise. (vectorizable_live_operation): Likewise. * tree-vect-stmts.cc (vectorizable_call): Likewise. (vectorizable_operation): Likewise. (vectorizable_store): Likewise. (vectorizable_load): Likewise. (vectorizable_condition): Likewise. --- gcc/tree-vect-loop.cc | 16 +++++++++------- gcc/tree-vect-stmts.cc | 36 +++++++++++++++++++----------------- gcc/tree-vectorizer.h | 3 ++- 3 files changed, 30 insertions(+), 25 deletions(-) diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index a9695e5b25d..1897e720389 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -6637,7 +6637,7 @@ vectorize_fold_left_reduction (loop_vec_info loop_vinfo, gimple *new_stmt; tree mask = NULL_TREE; if (LOOP_VINFO_FULLY_MASKED_P (loop_vinfo)) - mask = vect_get_loop_mask (gsi, masks, vec_num, vectype_in, i); + mask = vect_get_loop_mask (loop_vinfo, gsi, masks, vec_num, vectype_in, i); /* Handle MINUS by adding the negative. */ if (reduc_fn != IFN_LAST && code == MINUS_EXPR) @@ -7950,8 +7950,8 @@ vect_transform_reduction (loop_vec_info loop_vinfo, gcc_assert (commutative_binary_op_p (code, op.type)); std::swap (vop[0], vop[1]); } - tree mask = vect_get_loop_mask (gsi, masks, vec_num * ncopies, - vectype_in, i); + tree mask = vect_get_loop_mask (loop_vinfo, gsi, masks, + vec_num * ncopies, vectype_in, i); gcall *call = gimple_build_call_internal (cond_fn, 4, mask, vop[0], vop[1], vop[0]); new_temp = make_ssa_name (vec_dest, call); @@ -7967,8 +7967,8 @@ vect_transform_reduction (loop_vec_info loop_vinfo, if (masked_loop_p && mask_by_cond_expr) { - tree mask = vect_get_loop_mask (gsi, masks, vec_num * ncopies, - vectype_in, i); + tree mask = vect_get_loop_mask (loop_vinfo, gsi, masks, + vec_num * ncopies, vectype_in, i); build_vect_cond_expr (code, vop, mask, gsi); } @@ -10075,7 +10075,8 @@ vectorizable_live_operation (vec_info *vinfo, the loop mask for the final iteration. */ gcc_assert (ncopies == 1 && !slp_node); tree scalar_type = TREE_TYPE (STMT_VINFO_VECTYPE (stmt_info)); - tree mask = vect_get_loop_mask (gsi, &LOOP_VINFO_MASKS (loop_vinfo), + tree mask = vect_get_loop_mask (loop_vinfo, gsi, + &LOOP_VINFO_MASKS (loop_vinfo), 1, vectype, 0); tree scalar_res = gimple_build (&stmts, CFN_EXTRACT_LAST, scalar_type, mask, vec_lhs_phi); @@ -10359,7 +10360,8 @@ vect_record_loop_mask (loop_vec_info loop_vinfo, vec_loop_masks *masks, arrangement. */ tree -vect_get_loop_mask (gimple_stmt_iterator *gsi, vec_loop_masks *masks, +vect_get_loop_mask (loop_vec_info, + gimple_stmt_iterator *gsi, vec_loop_masks *masks, unsigned int nvectors, tree vectype, unsigned int index) { rgroup_controls *rgm = &(*masks)[nvectors - 1]; diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index a7acc032d47..47baf35227f 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -3692,7 +3692,8 @@ vectorizable_call (vec_info *vinfo, unsigned int vec_num = vec_oprnds0.length (); /* Always true for SLP. */ gcc_assert (ncopies == 1); - vargs[varg++] = vect_get_loop_mask (gsi, masks, vec_num, + vargs[varg++] = vect_get_loop_mask (loop_vinfo, + gsi, masks, vec_num, vectype_out, i); } size_t k; @@ -3733,7 +3734,8 @@ vectorizable_call (vec_info *vinfo, unsigned int vec_num = vec_oprnds0.length (); /* Always true for SLP. */ gcc_assert (ncopies == 1); - tree mask = vect_get_loop_mask (gsi, masks, vec_num, + tree mask = vect_get_loop_mask (loop_vinfo, + gsi, masks, vec_num, vectype_out, i); vargs[mask_opno] = prepare_vec_mask (loop_vinfo, TREE_TYPE (mask), mask, @@ -3758,7 +3760,7 @@ vectorizable_call (vec_info *vinfo, int varg = 0; if (masked_loop_p && reduc_idx >= 0) - vargs[varg++] = vect_get_loop_mask (gsi, masks, ncopies, + vargs[varg++] = vect_get_loop_mask (loop_vinfo, gsi, masks, ncopies, vectype_out, j); for (i = 0; i < nargs; i++) { @@ -3777,7 +3779,7 @@ vectorizable_call (vec_info *vinfo, if (mask_opno >= 0 && masked_loop_p) { - tree mask = vect_get_loop_mask (gsi, masks, ncopies, + tree mask = vect_get_loop_mask (loop_vinfo, gsi, masks, ncopies, vectype_out, j); vargs[mask_opno] = prepare_vec_mask (loop_vinfo, TREE_TYPE (mask), mask, @@ -6823,8 +6825,8 @@ vectorizable_operation (vec_info *vinfo, } else if (masked_loop_p && mask_out_inactive) { - tree mask = vect_get_loop_mask (gsi, masks, vec_num * ncopies, - vectype, i); + tree mask = vect_get_loop_mask (loop_vinfo, gsi, masks, + vec_num * ncopies, vectype, i); auto_vec<tree> vops (5); vops.quick_push (mask); vops.quick_push (vop0); @@ -6865,8 +6867,8 @@ vectorizable_operation (vec_info *vinfo, if (loop_vinfo->scalar_cond_masked_set.contains ({ op0, ncopies})) { - mask = vect_get_loop_mask (gsi, masks, vec_num * ncopies, - vectype, i); + mask = vect_get_loop_mask (loop_vinfo, gsi, masks, + vec_num * ncopies, vectype, i); vop0 = prepare_vec_mask (loop_vinfo, TREE_TYPE (mask), mask, vop0, gsi); @@ -6875,8 +6877,8 @@ vectorizable_operation (vec_info *vinfo, if (loop_vinfo->scalar_cond_masked_set.contains ({ op1, ncopies })) { - mask = vect_get_loop_mask (gsi, masks, vec_num * ncopies, - vectype, i); + mask = vect_get_loop_mask (loop_vinfo, gsi, masks, + vec_num * ncopies, vectype, i); vop1 = prepare_vec_mask (loop_vinfo, TREE_TYPE (mask), mask, vop1, gsi); @@ -8760,8 +8762,8 @@ vectorizable_store (vec_info *vinfo, tree final_mask = NULL; if (loop_masks) - final_mask = vect_get_loop_mask (gsi, loop_masks, ncopies, - vectype, j); + final_mask = vect_get_loop_mask (loop_vinfo, gsi, loop_masks, + ncopies, vectype, j); if (vec_mask) final_mask = prepare_vec_mask (loop_vinfo, mask_vectype, final_mask, vec_mask, gsi); @@ -8814,7 +8816,7 @@ vectorizable_store (vec_info *vinfo, tree final_mask = NULL_TREE; if (loop_masks) - final_mask = vect_get_loop_mask (gsi, loop_masks, + final_mask = vect_get_loop_mask (loop_vinfo, gsi, loop_masks, vec_num * ncopies, vectype, vec_num * j + i); if (vec_mask) @@ -10133,8 +10135,8 @@ vectorizable_load (vec_info *vinfo, tree final_mask = NULL_TREE; if (loop_masks) - final_mask = vect_get_loop_mask (gsi, loop_masks, ncopies, - vectype, j); + final_mask = vect_get_loop_mask (loop_vinfo, gsi, loop_masks, + ncopies, vectype, j); if (vec_mask) final_mask = prepare_vec_mask (loop_vinfo, mask_vectype, final_mask, vec_mask, gsi); @@ -10184,7 +10186,7 @@ vectorizable_load (vec_info *vinfo, tree final_mask = NULL_TREE; if (loop_masks && memory_access_type != VMAT_INVARIANT) - final_mask = vect_get_loop_mask (gsi, loop_masks, + final_mask = vect_get_loop_mask (loop_vinfo, gsi, loop_masks, vec_num * ncopies, vectype, vec_num * j + i); if (vec_mask) @@ -11208,7 +11210,7 @@ vectorizable_condition (vec_info *vinfo, if (masks) { tree loop_mask - = vect_get_loop_mask (gsi, masks, vec_num * ncopies, + = vect_get_loop_mask (loop_vinfo, gsi, masks, vec_num * ncopies, vectype, i); tree tmp2 = make_ssa_name (vec_cmp_type); gassign *g diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index af25d20bd7e..767a0774d45 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -2302,7 +2302,8 @@ extern tree vect_halve_mask_nunits (tree, machine_mode); extern tree vect_double_mask_nunits (tree, machine_mode); extern void vect_record_loop_mask (loop_vec_info, vec_loop_masks *, unsigned int, tree, tree); -extern tree vect_get_loop_mask (gimple_stmt_iterator *, vec_loop_masks *, +extern tree vect_get_loop_mask (loop_vec_info, gimple_stmt_iterator *, + vec_loop_masks *, unsigned int, tree, unsigned int); extern void vect_record_loop_len (loop_vec_info, vec_loop_lens *, unsigned int, tree, unsigned int); -- 2.35.3