http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21182
--- Comment #12 from Steven Bosscher <steven at gcc dot gnu.org> 2013-03-13 20:37:23 UTC --- Curious to hear whether "-fschedule-insns -fsched-pressure" helps. At least from the %esp and %ebp counts, it looks hopeful: $ ./cc1 -quiet -m32 -O2 t.c -DNAIL_REGS -o t.s.NAIL $ ./cc1 -quiet -m32 -O2 t.c -UNAIL_REGS -o t.s $ ./cc1 -quiet -m32 -O2 t.c -UNAIL_REGS -o t.s.sched_pres \ -fschedule-insns -fsched-pressure $ egrep -c '%ebp|%esp' t.s* t.s:366 t.s.NAIL:305 t.s.sched_pres:277 $ grep ident t.s .ident "GCC: (GNU) 4.8.0 20130313 (experimental) [trunk revision 196638]" It is unfortunate that nobody has put in the resources yet to make options like "-fschedule-insns -fsched-pressure" the default for x86.