aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/optabs.c20
2 files changed, 25 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f2f4df9..43c4ef8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+Wed Apr 5 12:35:18 2000 Hans-Peter Nilsson <hp@axis.com>
+
+ * optabs.c (emit_libcall_block): Remove spurious REG_EQUAL notes
+ from the insn where REG_RETVAL is added.
+ (emit_no_conflict_block): Ditto.
+
Wed Apr 5 18:03:31 2000 Toshiyasu Morita (toshi.morita@sega.com)
J"orn Rennecke <amylaar@cygnus.co.uk>
diff --git a/gcc/optabs.c b/gcc/optabs.c
index 61b1547..dbdea04 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -2699,7 +2699,16 @@ emit_no_conflict_block (insns, target, op0, op1, equiv)
set_unique_reg_note (last, REG_EQUAL, equiv);
}
else
- last = get_last_insn ();
+ {
+ last = get_last_insn ();
+
+ /* Remove any existing REG_EQUAL note from "last", or else it will
+ be mistaken for a note referring to the full contents of the
+ alleged libcall value when found together with the REG_RETVAL
+ note added below. An existing note can come from an insn
+ expansion at "last". */
+ remove_note (last, find_reg_note (last, REG_EQUAL, NULL_RTX));
+ }
if (prev == 0)
first = get_insns ();
@@ -2810,6 +2819,15 @@ emit_libcall_block (insns, target, result, equiv)
if (mov_optab->handlers[(int) GET_MODE (target)].insn_code
!= CODE_FOR_nothing)
set_unique_reg_note (last, REG_EQUAL, copy_rtx (equiv));
+ else
+ {
+ /* Remove any existing REG_EQUAL note from "last", or else it will
+ be mistaken for a note referring to the full contents of the
+ libcall value when found together with the REG_RETVAL note added
+ below. An existing note can come from an insn expansion at
+ "last". */
+ remove_note (last, find_reg_note (last, REG_EQUAL, NULL_RTX));
+ }
if (prev == 0)
first = get_insns ();