http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60520
--- Comment #2 from H.J. Lu <hjl.tools at gmail dot com> --- pro_and_epilogue adds an epilogue after BB 4: (insn 12 11 15 3 (parallel [ (set (reg/f:SI 7 sp) (plus:SI (reg/f:SI 7 sp) (const_int 16 [0x10]))) (clobber (reg:CC 17 flags)) ]) pr60520.c:7 265 {*addsi_1} (expr_list:REG_ARGS_SIZE (const_int 0 [0]) (nil))) ;; succ: 4 [100.0%] (FALLTHRU) ;; lr out 7 [sp] ;; basic block 4, loop depth 0, count 0, freq 3898, maybe hot ;; prev block 3, next block 6, flags: (REACHABLE, RTL, MODIFIED) ;; pred: 3 [100.0%] (FALLTHRU) ;; bb 4 artificial_defs: { } ;; bb 4 artificial_uses: { u-1(7){ }} ;; lr in 7 [sp] ;; lr use 7 [sp] ;; lr def (code_label 15 12 16 4 1 "" [0 uses]) (note 16 15 27 4 [bb 4] NOTE_INSN_BASIC_BLOCK) (note 27 16 28 4 NOTE_INSN_EPILOGUE_BEG) (insn/f 28 27 32 4 (parallel [ (set (reg/f:SI 7 sp) (plus:SI (reg/f:SI 7 sp) (const_int 12 [0xc]))) (clobber (reg:CC 17 flags)) (clobber (mem:BLK (scratch) [0 A8])) ]) pr60520.c:8 -1 (expr_list:REG_CFA_ADJUST_CFA (set (reg/f:SI 7 sp) (plus:SI (reg/f:SI 7 sp) (const_int 12 [0xc]))) (nil))) ;; succ: 6 [100.0%] (FALLTHRU) ;; lr out 7 [sp] It is quite hard to optimize 2 stack adjustment cross basic blocks.