https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120357

Alex Coplan <acoplan at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |tnfchris at gcc dot gnu.org
            Summary|[15/16 Regression] ICE in   |[14/15/16 Regression] ICE
                   |vect pass "error:           |in vect "error: definition
                   |definition in block 9 does  |in block 9 does not
                   |not dominate use in block   |dominate use in block 3"
                   |3" since                    |with early break
                   |r15-6807-g68326d5d1a593d    |
           Keywords|                            |ice-checking

--- Comment #4 from Alex Coplan <acoplan at gcc dot gnu.org> ---
The following simplified testcase ICEs in the same way back to the introduction
of early break vectorization in GCC 14:

char a;
unsigned long long t[2][22];
int u[22];
void f(void) {
  for (int v = 0; v < 22; v++)
    for (_Bool w = 0; w < (u[v] < 0) + 1; w = 1)
      a *= 0 != t[w][v];
}

So for AArch64, that's r14-6823-g1bcc07aeb47c0ed7eb50eac8a4e057d6336669ab, but
since that's the AArch64 introduction of the cbranch optab it would of course
be different for other targets.

Either way this shows the problem is independent of alignment peeling and
likely a generic early break vect issue.

Note that it's a checking ICE so needs --enable-checking=yes or compiling with
-fchecking.

Reply via email to