From ff42f49576b368ce3b7eccb7fdddd492ae9adaff Mon Sep 17 00:00:00 2001 From: Mike Stump Date: Mon, 9 Feb 1998 21:20:52 +0000 Subject: [PATCH] rtlanal.c (dead_or_set_regno_p): Ignore REG_DEAD notes after reload completes. * rtlanal.c (dead_or_set_regno_p): Ignore REG_DEAD notes after reload completes. * genattrtab.c (reload_completed, optimize): Define. From-SVN: r17812 --- gcc/ChangeLog | 6 ++++++ gcc/genattrtab.c | 8 ++++++++ gcc/rtlanal.c | 31 +++++++++++++++++++++---------- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5f7c7fa457ff..22ec94226737 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +1998-01-28 Mike Stump + + * rtlanal.c (dead_or_set_regno_p): Ignore REG_DEAD notes after + reload completes. + * genattrtab.c (reload_completed, optimize): Define. + Mon Feb 9 22:16:04 1998 J"orn Rennecke * c-decl.c (grokdeclarator): Get parameter tags from diff --git a/gcc/genattrtab.c b/gcc/genattrtab.c index 8e4f423b5adb..99b0f819e00c 100644 --- a/gcc/genattrtab.c +++ b/gcc/genattrtab.c @@ -340,6 +340,14 @@ static rtx true_rtx, false_rtx; static char *alternative_name; +/* Indicate that REG_DEAD notes are valid if dead_or_set_p is ever + called. */ + +int reload_completed = 0; + +/* Similarly since PRESERVE_DEATH_INFO_REGNO_P might reference "optimize". */ +int optimize = 0; + /* Simplify an expression. Only call the routine if there is something to simplify. */ #define SIMPLIFY_TEST_EXP(EXP,INSN_CODE,INSN_INDEX) \ diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index c8b21b847c4c..daf57bb51d36 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -1138,19 +1138,30 @@ dead_or_set_regno_p (insn, test_regno) int regno, endregno; rtx link; - /* See if there is a death note for something that includes TEST_REGNO. */ - for (link = REG_NOTES (insn); link; link = XEXP (link, 1)) + /* REG_READ notes are not normally maintained after reload, so we + ignore them if the are invalid. */ + if (! reload_completed +#ifdef PRESERVE_DEATH_INFO_REGNO_P + || PRESERVE_DEATH_INFO_REGNO_P (test_regno) +#endif + ) { - if (REG_NOTE_KIND (link) != REG_DEAD || GET_CODE (XEXP (link, 0)) != REG) - continue; + /* See if there is a death note for something that includes + TEST_REGNO. */ + for (link = REG_NOTES (insn); link; link = XEXP (link, 1)) + { + if (REG_NOTE_KIND (link) != REG_DEAD + || GET_CODE (XEXP (link, 0)) != REG) + continue; - regno = REGNO (XEXP (link, 0)); - endregno = (regno >= FIRST_PSEUDO_REGISTER ? regno + 1 - : regno + HARD_REGNO_NREGS (regno, - GET_MODE (XEXP (link, 0)))); + regno = REGNO (XEXP (link, 0)); + endregno = (regno >= FIRST_PSEUDO_REGISTER ? regno + 1 + : regno + HARD_REGNO_NREGS (regno, + GET_MODE (XEXP (link, 0)))); - if (test_regno >= regno && test_regno < endregno) - return 1; + if (test_regno >= regno && test_regno < endregno) + return 1; + } } if (GET_CODE (insn) == CALL_INSN -- 2.47.2