Index: combine.c =================================================================== --- combine.c (revision 133510) +++ combine.c (working copy) @@ -976,8 +976,18 @@ assignments later. */ if (regno >= FIRST_PSEUDO_REGISTER || asm_noperands (PATTERN (use_insn)) < 0) - LOG_LINKS (use_insn) = - alloc_INSN_LIST (insn, LOG_LINKS (use_insn)); + { + /* Don't add duplicate links between instructions. */ + rtx links; + for (links = LOG_LINKS (use_insn); links; + links = XEXP (links, 1)) + if (insn == XEXP (links, 0)) + break; + + if (!links) + LOG_LINKS (use_insn) = + alloc_INSN_LIST (insn, LOG_LINKS (use_insn)); + } } next_use[regno] = NULL_RTX; }