Hi,
As mentioned in the PR, this patch fixes up the nvectors parameter passed to
vect_get_loop_mask in vectorizable_condition.
Before the STMT_VINFO_VEC_STMTS rework we used to handle each ncopy separately,
now we gather them all at the same time and don't need to multiply vec_num with
ncopies.
The reduced testcase I used to illustrate the issue in the PR gives a warning,
if someone knows how to get rid of that (it's Fortran) I'd include it as a
testcase for this.
Bootstrapped and regression tested on aarch64-none-linux-gnu. I don't believe
that code triggers for other targets, so not sure it makes sense to test on
others?
Is this OK for trunk? Would you rather wait for the testcase?
gcc/ChangeLog:
2021-02-05 Andre Vieira <[email protected]>
PR middle-end/98974
* tree-vect-stmts.c (vectorizable_condition): Fix nvectors parameter
for vect_get_loop_mask call.
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index
0bc1cb1c5b4f6c1f0447241b4d31434bf7cca1a4..d07602f6d38f9c51936ac09942599fc5a14f46ab
100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -10237,8 +10237,7 @@ vectorizable_condition (vec_info *vinfo,
{
unsigned vec_num = vec_oprnds0.length ();
tree loop_mask
- = vect_get_loop_mask (gsi, masks, vec_num * ncopies,
- vectype, i);
+ = vect_get_loop_mask (gsi, masks, vec_num, vectype, i);
tree tmp2 = make_ssa_name (vec_cmp_type);
gassign *g
= gimple_build_assign (tmp2, BIT_AND_EXPR, vec_compare,