https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114121
--- Comment #14 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Tried __attribute__((noipa)) unsigned long foo (unsigned long x) { unsigned long y[128], z = 0, w = 0; y[127] = x; __builtin_memset (&y, 0, 127 * sizeof (long)); for (unsigned long i = 0; i < 128; i += 2) { unsigned long a = y[i], b, c, d; b = __builtin_subcl (0, a, z, &c); z = c; if (i >= 64) { if (i == 64) w = c != 0; else w = (c != 0) | w; } d = i + 1; a = y[d]; b = __builtin_subcl (0, a, z, &c); z = c; if (d > 64) w = (c != 0) | w; } return w; } but that doesn't reproduce it unfortunately.