aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@redhat.com>2001-06-19 14:34:23 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2001-06-19 14:34:23 +0000
commit4fb3cbd7e5e72c22c0fc63a0fec1101ed0590776 (patch)
tree6ac67c97d5cd4f5b33f45d5cd0c55d5fc749f23b
parent10ab5c54a1b1feef2c1696efa107d437026e1c69 (diff)
downloadgcc-4fb3cbd7e5e72c22c0fc63a0fec1101ed0590776.zip
gcc-4fb3cbd7e5e72c22c0fc63a0fec1101ed0590776.tar.gz
gcc-4fb3cbd7e5e72c22c0fc63a0fec1101ed0590776.tar.bz2
Fix incorrect note handling.
From-SVN: r43462
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/regmove.c9
2 files changed, 15 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ab7ae32..2e4b255 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/regmove.c b/gcc/regmove.c
index 910c422..85ca4ef 100644
--- a/gcc/regmove.c
+++ b/gcc/regmove.c
@@ -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);
+ }
}