https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98211
Bug ID: 98211 Summary: [11 Regression] Wrong code at -O3 since r11-4482-gb626b00823af9ca9 Product: gcc Version: 11.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: marxin at gcc dot gnu.org CC: rguenth at gcc dot gnu.org Target Milestone: --- Reduced from a yarpgen test-case. Started with r11-4482-gb626b00823af9ca9 when a new SLP opportunity happens. $ cat pr.C unsigned long long seed; void hash(unsigned long long *seed, int v) { *seed ^= v; } long var_11 = -4439057030159136246; short arr_19[8][2][16]; void test(unsigned long long, bool, unsigned long long); void __attribute__((noipa, optimize("-O0"))) calculate_hash(void) { for (long i_0 = 0; i_0 < 8; ++i_0) for (long i_1 = 0; i_1 < 2; ++i_1) for (long i_2 = 0; i_2 < 16; ++i_2) hash(&seed, arr_19[i_0][i_1][i_2]); } int main() { test(407382096781995, 0, 4); calculate_hash (); __builtin_printf("%llu\n", seed); if (seed != 2570) __builtin_abort (); return 0; } long val_or_zero(long __b) { if (__b) return __b; return 0; } int test_var_3; int counter = 0; void test(unsigned long long var_1, bool var_9, unsigned long long var_12) { for (unsigned i_0 = 0; i_0 < 7; i_0 += 9) for (bool i_1 = 0; i_1 < (bool)var_1; i_1 += 4) for (unsigned i_5 = 0; i_5 < (int)val_or_zero(var_11) - 1940523515U; i_5++) arr_19[i_0][i_1][i_5] = (test_var_3 ?: var_12) ? (short)var_11 : var_9; } $ gcc -O3 pr.C && ./a.out 0 Aborted (core dumped) $ gcc pr.C && ./a.out 2570