diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 831320fa040..ac3b7739829 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Wed Mar 17 21:29:12 1999 J"orn Rennecke + + * 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 * function.c (fixup_var_refs_1): First try moving the expression diff --git a/gcc/reload1.c b/gcc/reload1.c index 1e83d5fe4be..02002fdd23d 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 ... */