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 <andre.simoesdiasvie...@arm.com> 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,