https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117103
Bug ID: 117103 Summary: GCC trunk emits push + pop at -Oz when a mov could suffice Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: dccitaliano at gmail dot com Target Milestone: --- Not a big deal, and maybe there are cases where it's not profitable, but I found this while testing: https://clang.godbolt.org/z/6K18T1a7a ``` int f(int a, int b, int increment) { int i = 0; while (i < a) { if (i % 2 == 0) { i += 2; } else { i++; } } int j = 0; while (j < b) { j += increment; if (j > b / 2) { j += 1; } } return 0; } ``` -Os emits: mov ecx, 2 -Oz emits: push 2 [...] pop rcx Another interesting (maybe?, not sure) bit is that the loop could be elided entirely. I can file another bug if there's interest, or just reuse this one.