https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121465
Bug ID: 121465 Summary: wrong code at -O3 on x86_64-linux-gnu Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: zhendong.su at inf dot ethz.ch Target Milestone: --- Compiler Explorer: https://godbolt.org/z/b1zrP3ce6 Note: - It is a regression from 14.* and affects 15.1 and the trunk - -fno-tree-slsr makes it disappear - It seems not easy to reduce it much further [505] % gcctk -v Using built-in specs. COLLECT_GCC=gcctk COLLECT_LTO_WRAPPER=/local/home/suz/suz-local/software/local/gcc-trunk/bin/../libexec/gcc/x86_64-pc-linux-gnu/16.0.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: ../gcc-trunk/configure --disable-bootstrap --enable-checking=yes --prefix=/local/suz-local/software/local/gcc-trunk --enable-sanitizers --enable-languages=c,c++ --disable-werror --enable-multilib Thread model: posix Supported LTO compression algorithms: zlib gcc version 16.0.0 20250807 (experimental) (GCC) [506] % [506] % gcctk -O2 small.c; ./a.out [507] % [507] % gcctk -O3 small.c [508] % timeout -s 9 5 ./a.out Killed [509] % cat small.c int a[] = { 0, 1996959894, 8, 4, 7, 1886057615, 5, 2657392035, 4, 2044508324, 0, 4, 5, 1, 7, 4049, 536548, 6, 4089016648, 4, 50548861, 3, 107580753, 9, 0, 2, 2, 2321926636, 7, 5, 5, 7, 997073096, 6, 2, 2, 1006888145, 607687, 101629, 3, 901097722, 9000684, 6, 8065728, 1, 1, 705015759, 5, 0, 6, 4, 104598, 565507253, 1454621731, 5, 3099436303, 4, 4, 3322730930, 70347812, 795835527, 5, 5, 3060149565, 2, 4, 2, 4023717930, 907459465, 5, 3, 904427059, 2013776290, 6, 2517215374, 3775830040, 3, 141376813, 9, 7, 1802195444, 476864866, 2238001368, 4066508878, 70925, 3092731, 5, 3, 706088902, 4, 2, 2, 1, 7, 3, 5, 303535960, 6, 2747007092, 9037538, 70817, 1, 3, 4079995, 6, 6, 909243462, 6, 1141124467, 7, 1, 708648649, 8, 654459306, 6048, 4, 909, 5, 10523913, 5, 4, 702138776, 2966460450, 2, 504918807, 3, 3082640443, 9, 4, 2596254646, 7068, 10842, 5, 1, 70997, 3, 0, 2489596804, 0, 2053790376, 5, 2466906013, 3, 2097651377, 4027552580, 90386, 2, 2050814, 5, 5, 5, 507879, 6, 0, 282753626, 2, 708143, 5, 3, 7, 604390888, 8, 2, 6, 5, 60999, 1068828381, 9, 0, 8, 906185462, 1090812512, 3, 9, 5, 1, 4, 60834842, 8085408, 1382605366, 109, 8078467, 3, 400815, 2, 608, 4, 1555261956, 1, 5, 3, 1, 607071920, 0, 2, 40735498, 5, 3943577151, 3087877, 908371, 4, 803740692, 2075208622, 213261112, 3, 90285, 2094854071, 198958881, 2262029012, 0, 759359992, 0, 1, 5, 1, 7, 2282248934, 200368, 11684554, 6, 405801727, 5, 5, 1, 2685067896, 608007406, 308918612, 956543938, 808555105, 3, 1, 5, 8, 703836, 1088359270, 0, 9, 9, 202900863, 7, 3183342108, 0, 2, 0, 207493, 3, 9, 601450431, 3009837614, 6, 1567103746, 4, 3020668471, 5, 5, 7}; int e, h, j, c, d; int k(unsigned l, char m) { return l >> 8 ^ a[(l ^ m) & 255]; } int n(int l, int m) { int f; unsigned g = l; f = g >> 8 ^ a[(g ^ m) & 255]; l = f; l = k(l, m >> 8); l = k(l, m >> 16); l = k(l, m >> 24); return l; } int o(int l, int m[]) { int b = 4294967295; for (int i = 0; i < l; ++i) b = n(b, m[i]); b = (b ^ 4294967295) % 2147483647; return b; } int p(int l, int m, int q, int r, int s, int t, int y) { int u, v, w; v = 3 * r + 1; u = o(9, (int[]){e, h, 0, 1, 4, 8, 1073741824, 5, 8}); if (u) goto x; x: w = v - 1; return o(9, (int[]){l, m, q, r, w, s, v, t, y}); } int z(int l, int m, int q) { while (1) { l = l - 1000 - q - 1000; if ((p(15, 14, -2, -2, -2, -3, 13) - 82725512) * l) { j = (p(15, 14, -2, -2, -2, -3, 13) - 82725501) * l; return o(9, (int[]){996, l, j, 0, c, m, d, 996, q}); } } } int main() { while (z(-500, 502, -238608963)) ; }