At "-Os", the two "popl %ebp" instructions
in the alternate branches could have been collapsed.
$ cat tailcall.c
void foo(int a)
{
if (a)
bar();
else
baz();
}
$ gcc -Os -S tailcall.c
$ cat tailcall.s
.file "tailcall.c"
.text
.globl foo
.type foo, @function
foo:
pushl %ebp
movl %esp, %ebp
cmpl $0, 8(%ebp)
je .L2
popl %ebp
jmp bar
.L2:
popl %ebp
jmp baz
.size foo, .-foo
.ident "GCC: (GNU) 4.4.0 20080330 (experimental)"
.section .note.GNU-stack,"",@progbits
--
Summary: collapsing popping args for tail calls at -Os
Product: gcc
Version: 4.4.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: enhancement
Priority: P3
Component: rtl-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: tkoenig at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35775