aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1995-08-13 21:21:45 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1995-08-13 21:21:45 -0400
commitfabd69e8324a8aa1c5ba70e133b0c19aa01b6d58 (patch)
tree7557c68fc68396a3c000ada17dfb94f0ff009c42
parent1b4a2731be82eb65e9dffd50459555be9fa7b40e (diff)
downloadgcc-fabd69e8324a8aa1c5ba70e133b0c19aa01b6d58.zip
gcc-fabd69e8324a8aa1c5ba70e133b0c19aa01b6d58.tar.gz
gcc-fabd69e8324a8aa1c5ba70e133b0c19aa01b6d58.tar.bz2
(move_deaths): When have a multi-reg hard register, if don't find a
note, then recur for each individual hard register. From-SVN: r10225
-rw-r--r--gcc/combine.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index d066a44..13eea3f 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -10407,6 +10407,21 @@ move_deaths (x, from_cuid, to_insn, pnotes)
gen_rtx (REG, reg_raw_mode[i], i),
REG_NOTES (where_dead));
}
+ /* If we didn't find any note, and we have a multi-reg hard
+ register, then to be safe we must check for REG_DEAD notes
+ for each register other than the first. They could have
+ their own REG_DEAD notes lying around. */
+ else if (note == 0 && regno < FIRST_PSEUDO_REGISTER
+ && HARD_REGNO_NREGS (regno, GET_MODE (x)) > 1)
+ {
+ int ourend = regno + HARD_REGNO_NREGS (regno, GET_MODE (x));
+ int i;
+ rtx oldnotes = 0;
+
+ for (i = regno + 1; i < ourend; i++)
+ move_deaths (gen_rtx (REG, reg_raw_mode[i], i),
+ from_cuid, to_insn, &oldnotes);
+ }
if (note != 0 && GET_MODE (XEXP (note, 0)) == GET_MODE (x))
{