aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Peter Nilsson <hp@axis.com>2000-04-05 18:36:20 +0000
committerJeffrey A Law <law@cygnus.com>2000-04-05 18:36:20 +0000
commit220652ff4359c5cbedb893719af8b5b202531d30 (patch)
tree90ba96f0b60f9a5f80e58f1335c1dabc7ef715b6
parent398fb5e9f2af5a9e61c75191f3e6d350362b3201 (diff)
* optabs.c (emit_libcall_block): Remove spurious REG_EQUAL notes
from the insn where REG_RETVAL is added. (emit_no_conflict_block): Ditto. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@32935 138bc75d-0d04-0410-961f-82ee72b054a4
-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 f2f4df9301c..43c4ef820a2 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 61b1547bb27..dbdea0412ba 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 ();