------- 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

Reply via email to