This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug pending/30773] Spec cpu2k6/h264ref and sphinx3 miscompare regression
- From: "steven at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 15 Feb 2007 20:06:44 -0000
- Subject: [Bug pending/30773] Spec cpu2k6/h264ref and sphinx3 miscompare regression
- References: <bug-30773-7719@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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