https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89250
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords|needs-bisection | Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org --- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> --- The 2nd rev looks odd. So we do perform if-conversion here and some if-conversion enhancement looking at array bounds / niter ranges might have enabled that. This also means vectorization has to support the if-converted form: _1 = ib[i_360]; _2 = ic[i_360]; _20 = _2 != 0; _328 = (int) _20; iftmp.0_343 = _1 == 0 ? _328 : 1; ia[i_360] = iftmp.0_343; so vect_condition is probably required (we fail to see we could use a bitwise OR here). I am going to install the following on trunk and see what targets end up FAILing. Index: gcc/testsuite/gcc.dg/vect/vect-24.c =================================================================== --- gcc/testsuite/gcc.dg/vect/vect-24.c (revision 268668) +++ gcc/testsuite/gcc.dg/vect/vect-24.c (working copy) @@ -122,5 +122,7 @@ int main (void) return main1 (); } -/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail { { ! aarch64*-*-* } && { ! arm-*-* } } } } } */ +/* The short-cutting || is if-converted using COND_EXPRs rather than + bitwise or. */ +/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail { ! vect_condition } } } } */ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */