http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60520
Bug ID: 60520 Summary: stack adjustment are not merged anymore Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: ubizjak at gmail dot com Following testcase: --cut here-- extern void foo (int *); extern int *bar; void test (void) { if (*bar) foo (bar); } --cut here-- compiles with gcc-4.9 to (-O2 -m32): test: movl bar, %eax movl (%eax), %edx testl %edx, %edx jne .L7 ret .p2align 4,,10 .p2align 3 .L7: subl $24, %esp pushl %eax call foo addl $16, %esp <<< addl $12, %esp <<< ret A single "addl $28, %esp" should be emitted here, as is the case with gcc-4.8: test: movl bar, %eax movl (%eax), %edx testl %edx, %edx jne .L7 ret .p2align 4,,7 .p2align 3 .L7: subl $28, %esp movl %eax, (%esp) call foo addl $28, %esp <<< ret