Fix incorrect note handling.
authorBernd Schmidt <bernds@redhat.com>
Tue, 19 Jun 2001 14:34:23 +0000 (14:34 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Tue, 19 Jun 2001 14:34:23 +0000 (14:34 +0000)
From-SVN: r43462

gcc/ChangeLog
gcc/regmove.c

index ab7ae32d345601d4534706dfe9d426148f5993e5..2e4b2553dea1a7ae66d4892453e0672d98cb702b 100644 (file)
@@ -1,3 +1,9 @@
+2001-06-19  Bernd Schmidt  <bernds@redhat.com>
+
+       * regmove.c (optimize_reg_copy_3): Do nothing if previous insn
+       carries a REG_EQUIV note.  If it carries REG_EQUAL, delete the
+       note.
+
 Tue Jun 19 07:53:52 2001  Jeffrey A Law  (law@cygnus.com)
 
        * ssa.c (ssa_uses): Remove definition.
index 910c422ee4f4987dfaa885665dcd303e9dd46ad1..85ca4efaa7d49bd1ad8503d46553fc398dc0834a 100644 (file)
@@ -703,6 +703,9 @@ optimize_reg_copy_3 (insn, dest, src)
 
   if (! (set = single_set (p))
       || GET_CODE (SET_SRC (set)) != MEM
+      /* If there's a REG_EQUIV note, this must be an insn that loads an
+        argument.  Prefer keeping the note over doing this optimization.  */
+      || find_reg_note (p, REG_EQUIV, NULL_RTX)
       || SET_DEST (set) != src_reg)
     return;
 
@@ -747,6 +750,12 @@ optimize_reg_copy_3 (insn, dest, src)
       PUT_MODE (src_reg, old_mode);
       XEXP (src, 0) = src_reg;
     }
+  else
+    {
+      rtx note = find_reg_note (p, REG_EQUAL, NULL_RTX);
+      if (note)
+       remove_note (p, note);
+    }
 }
 
 \f