diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7e943e4affe..b0b58100383 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2002-07-19 Richard Henderson + + * loop.c (loop_givs_rescan): Delete the REG_EQUAL note, not the insn. + 2002-07-19 Alan Modra * prefix.c (update_path): Don't zap single `.' path components diff --git a/gcc/loop.c b/gcc/loop.c index 5966324dc34..c943c6d8905 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -4875,6 +4875,7 @@ loop_givs_rescan (loop, bl, reg_map) else { rtx original_insn = v->insn; + rtx note; /* Not replaceable; emit an insn to set the original giv reg from the reduced giv, same as above. */ @@ -4882,12 +4883,13 @@ loop_givs_rescan (loop, bl, reg_map) gen_move_insn (v->dest_reg, v->new_reg)); - /* The original insn may have a REG_EQUAL note. This note is - now incorrect and may result in invalid substitutions later. - We could just delete the note, but we know that the entire - insn is dead, so we might as well save ourselves the bother - and remove the whole thing. */ - delete_insn (original_insn); + /* The original insn may have a REG_EQUAL note. This note is + now incorrect and may result in invalid substitutions later. + The original insn is dead, but may be part of a libcall + sequence, which doesn't seem worth the bother of handling. */ + note = find_reg_note (original_insn, REG_EQUAL, NULL_RTX); + if (note) + remove_note (original_insn, note); } /* When a loop is reversed, givs which depend on the reversed