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.