------- Comment #3 from steven at gcc dot gnu dot org 2007-02-15 20:06 ------- The third hunk of the patch changes something:
Index: local-alloc.c =================================================================== --- local-alloc.c (revision 121794) +++ local-alloc.c (working copy) @@ -1061,9 +1064,8 @@ update_equiv_regs (void) if (validate_equiv_mem (init_insn, src, dest) && ! memref_used_between_p (dest, init_insn, insn)) { - REG_NOTES (init_insn) - = gen_rtx_EXPR_LIST (REG_EQUIV, copy_rtx (dest), - REG_NOTES (init_insn)); + set_unique_reg_note (init_insn, REG_EQUIV, copy_rtx (dest)); + /* This insn makes the equivalence, not the one initializing the register. */ reg_equiv_init[regno] With this change, we refuse to put a REG_EQUIV note on an insn with more than one set: diff -U 12 good/utt.i.157r.lreg broken/utt.i.157r.lreg --- good/utt.i.157r.lreg 2007-02-15 21:07:13.000000000 +0100 +++ broken/utt.i.157r.lreg 2007-02-15 21:07:42.000000000 +0100 @@ -938,30 +938,28 @@ (insn:HI 136 135 137 16 (parallel [ (set (reg:SI 100) (div:SI (reg:SI 98) (mem/s:SI (plus:SI (reg/v/f:SI 85 [ kb ]) (const_int 8 [0x8])) [9 <variable>.nfr+0 S4 A32]))) (set (reg:SI 101) (mod:SI (reg:SI 98) (mem/s:SI (plus:SI (reg/v/f:SI 85 [ kb ]) (const_int 8 [0x8])) [9 <variable>.nfr+0 S4 A32]))) (clobber (reg:CC 17 flags)) ]) 279 {*divmodsi4_nocltd} (insn_list:REG_DEP_TRUE 135 (nil)) - (expr_list:REG_EQUIV (mem:SI (plus:SI (reg/f:SI 7 sp) - (const_int 12 [0xc])) [0 S4 A32]) - (expr_list:REG_DEAD (reg:SI 98) - (expr_list:REG_UNUSED (reg:CC 17 flags) - (expr_list:REG_UNUSED (reg:SI 101) - (nil)))))) + (expr_list:REG_DEAD (reg:SI 98) + (expr_list:REG_UNUSED (reg:CC 17 flags) + (expr_list:REG_UNUSED (reg:SI 101) + (nil))))) (insn:HI 137 136 138 16 (set (mem:SI (plus:SI (reg/f:SI 7 sp) (const_int 12 [0xc])) [0 S4 A32]) (reg:SI 100)) 40 {*movsi_1} (insn_list:REG_DEP_TRUE 136 (nil)) (expr_list:REG_DEAD (reg:SI 100) (nil))) (insn:HI 138 137 139 16 (set (mem:SI (plus:SI (reg/f:SI 7 sp) (const_int 8 [0x8])) [0 S4 A32]) (reg:SI 80 [ D.1724 ])) 40 {*movsi_1} (nil) (expr_list:REG_DEAD (reg:SI 80 [ D.1724 ]) (nil))) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30773