diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1995-08-13 21:21:45 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1995-08-13 21:21:45 -0400 |
commit | fabd69e8324a8aa1c5ba70e133b0c19aa01b6d58 (patch) | |
tree | 7557c68fc68396a3c000ada17dfb94f0ff009c42 /gcc | |
parent | 1b4a2731be82eb65e9dffd50459555be9fa7b40e (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/combine.c | 15 |
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)) { |