https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116753
Bug ID: 116753 Summary: [regression from GCC 12.4] GCC trunk (-O3) can't fold a loop into a constant Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: dccitaliano at gmail dot com Target Milestone: --- https://godbolt.org/z/xGh9vY57b ``` long patatino() { long x = 0; for (int i = 0; i < 5; ++i) { while (x < 10) { if (x % 2 == 0) { x += 2; } else { x += 1; } // Dead while loop while ((x > 20) && (i % 3 == 0) && (x % 5 == 0)) { x -= 5; } // Dead while loop while ((x < -5) && (i % 2 == 0) && (x % 3 == 0)) { x += 3; } } } return x; } ``` GCC trunk emits: patatino(): mov eax, 2 .L2: add rax, 2 cmp rax, 9 jle .L2 ret GCC 12.4 emits: patatino(): mov eax, 10 ret