diff options
author | Bernd Schmidt <bernds@redhat.com> | 2001-06-19 14:34:23 +0000 |
---|---|---|
committer | Bernd Schmidt <bernds@gcc.gnu.org> | 2001-06-19 14:34:23 +0000 |
commit | 4fb3cbd7e5e72c22c0fc63a0fec1101ed0590776 (patch) | |
tree | 6ac67c97d5cd4f5b33f45d5cd0c55d5fc749f23b | |
parent | 10ab5c54a1b1feef2c1696efa107d437026e1c69 (diff) | |
download | gcc-4fb3cbd7e5e72c22c0fc63a0fec1101ed0590776.zip gcc-4fb3cbd7e5e72c22c0fc63a0fec1101ed0590776.tar.gz gcc-4fb3cbd7e5e72c22c0fc63a0fec1101ed0590776.tar.bz2 |
Fix incorrect note handling.
From-SVN: r43462
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/regmove.c | 9 |
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); + } } |