aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ"orn Rennecke <amylaar@cygnus.co.uk>1999-03-17 13:31:30 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>1999-03-17 13:31:30 +0000
commit13bb79d45ec025042ffaa3a359222d32eb5a7dff (patch)
treea6a0ccf73646fb9d4f8986abffb05232e577bd6c
parentf541e78dd0e404a264df6bb1050d552a03007deb (diff)
downloadgcc-13bb79d45ec025042ffaa3a359222d32eb5a7dff.zip
gcc-13bb79d45ec025042ffaa3a359222d32eb5a7dff.tar.gz
gcc-13bb79d45ec025042ffaa3a359222d32eb5a7dff.tar.bz2
reload1.c (eliminate_regs): Don't keep REG_DEAD notes around for things that were eliminated.
* reload1.c (eliminate_regs): Don't keep REG_DEAD notes around for things that were eliminated. From-SVN: r25823
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/reload1.c12
2 files changed, 16 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 831320f..ac3b773 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Wed Mar 17 21:29:12 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * reload1.c (eliminate_regs): Don't keep REG_DEAD notes around for
+ things that were eliminated.
+
Wed Mar 17 12:16:26 1999 Richard Henderson <rth@cygnus.com>
* function.c (fixup_var_refs_1): First try moving the expression
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 1e83d5f..02002fd 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -2914,7 +2914,17 @@ eliminate_regs (x, mem_mode, insn)
{
new = eliminate_regs (XEXP (x, 0), mem_mode, insn);
if (new != XEXP (x, 0))
- x = gen_rtx_EXPR_LIST (REG_NOTE_KIND (x), new, XEXP (x, 1));
+ {
+ /* If this is a REG_DEAD note, it is not valid anymore.
+ Using the eliminated version could result in creating a
+ REG_DEAD note for the stack or frame pointer. */
+ if (GET_MODE (x) == REG_DEAD)
+ return (XEXP (x, 1)
+ ? eliminate_regs (XEXP (x, 1), mem_mode, insn)
+ : NULL_RTX);
+
+ x = gen_rtx_EXPR_LIST (REG_NOTE_KIND (x), new, XEXP (x, 1));
+ }
}
/* ... fall through ... */