diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ab7ae32d345..2e4b2553dea 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2001-06-19 Bernd Schmidt + + * 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 910c422ee4f..85ca4efaa7d 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); + } }