diff -r 4da9c12daf0f gcc/reorg.c --- a/gcc/reorg.c Fri Feb 27 12:43:31 2015 +0100 +++ b/gcc/reorg.c Tue Mar 10 14:37:46 2015 +0100 @@ -1304,9 +1304,9 @@ int slot_number = 1; int num_slots = XVECLEN (PATTERN (insn), 0); rtx next_to_match = XVECEXP (PATTERN (insn), 0, slot_number); - struct resources set, needed; + struct resources set, needed, modified; rtx merged_insns = 0; - int i; + int i,j; int flags; flags = get_jump_flags (delay_insn, JUMP_LABEL (delay_insn)); @@ -1398,6 +1398,16 @@ { rtx dtrial = XVECEXP (pat, 0, i); + CLEAR_RESOURCE (&modified); + /* Account for resources set by the the insn following next_to_match inside + INSN's delay list. */ + for (j=1; slot_number+j < num_slots; j++) + mark_set_resources (XVECEXP (PATTERN (insn), 0, slot_number+j), &modified, 0, MARK_SRC_DEST_CALL); + /* Account for resources set by the the insn before dtrial and inside + TARGET's delay list. */ + for (j=1; j