http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50764
--- Comment #4 from vries at gcc dot gnu.org 2011-10-27 15:29:10 UTC --- Created attachment 25634 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=25634 sdiff between 209r.split4 and 210r.sched2 with -ftree-tail-merge The effect of -fsched2-use-superblocks (with -ftree-tail-merge) is that note 59 and insn 51 are moved from block 4 to block 3. ... (note 59 27 51 3 NOTE_INSN_EPILOGUE_BEG) (insn/f 51 50 52 4 (set (reg:DI 39 r10) (mem/c:DI (plus:DI (reg/f:DI 6 bp) (const_int -8 [0xfffffffffffffff8])) [3 S8 A8])) pr50764.c:13 62 {*movdi_internal_rex64} (expr_list:REG_CFA_DEF_CFA (reg:DI 39 r10) (nil))) ... block 4 contains a return, and block 3 jumps either to block 4 or block 5, which calls abort. 2 bar | -------+----- / \ * * 5 *------------ 3 abort bar | | * 4 return The move looks ok, bp and memory are not modified in between the original and new position, and r10 does not overwrite a value in block 3 or 5. Possibly the dead label at the start of block 4 prevents this move in case of -fno-tree-tail-merge.