Index: gcc/combine.c =================================================================== --- gcc/combine.c (revision 316468) +++ gcc/combine.c (working copy) @@ -3511,7 +3511,7 @@ try_combine (rtx i3, rtx i2, rtx i1, int as two separate insns. This case occurs when some SET allows two other insns to combine, but the destination of that SET is still live. */ - else if (i1 && insn_code_number < 0 && asm_noperands (newpat) < 0 + else if (insn_code_number < 0 && asm_noperands (newpat) < 0 && GET_CODE (newpat) == PARALLEL && XVECLEN (newpat, 0) == 2 && GET_CODE (XVECEXP (newpat, 0, 0)) == SET @@ -3883,7 +3883,7 @@ try_combine (rtx i3, rtx i2, rtx i1, int patterns, move from I1 to I2 then I2 to I3 so that we get the proper movement on registers that I2 modifies. */ - if (newi2pat) + if (newi2pat && i1) { move_deaths (newi2pat, NULL_RTX, DF_INSN_LUID (i1), i2, &midnotes); move_deaths (newpat, newi2pat, DF_INSN_LUID (i1), i3, &midnotes);