aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1996-06-28 21:34:25 -0600
committerJeff Law <law@gcc.gnu.org>1996-06-28 21:34:25 -0600
commit100338dfc493aef6cfcaba4d6faca31fc4a6f0a8 (patch)
tree72511a709211c2106277d786c61f6a8dac7f4a5e /gcc
parent49c8f4a40c9492dc7d3b1659d9422d0de73f067e (diff)
downloadgcc-100338dfc493aef6cfcaba4d6faca31fc4a6f0a8.zip
gcc-100338dfc493aef6cfcaba4d6faca31fc4a6f0a8.tar.gz
gcc-100338dfc493aef6cfcaba4d6faca31fc4a6f0a8.tar.bz2
reload1.c (choose_reload_regs): Properly mark spill registers as in use for inherited reloads.
* reload1.c (choose_reload_regs): Properly mark spill registers as in use for inherited reloads. From-SVN: r12377
Diffstat (limited to 'gcc')
-rw-r--r--gcc/reload1.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 09922ce..03d313f 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -5376,20 +5376,24 @@ choose_reload_regs (insn, avoid_return_reg)
to load it, and use it as our reload reg. */
if (equiv != 0 && regno != HARD_FRAME_POINTER_REGNUM)
{
+ int nr = HARD_REGNO_NREGS (regno, reload_mode[r]);
+ int k;
reload_reg_rtx[r] = equiv;
reload_inherited[r] = 1;
- /* If it is a spill reg,
- mark the spill reg as in use for this insn. */
- i = spill_reg_order[regno];
- if (i >= 0)
+
+ /* If any of the hard registers in EQUIV are spill
+ registers, mark them as in use for this insn. */
+ for (k = 0; k < nr; k++)
{
- int nr = HARD_REGNO_NREGS (regno, reload_mode[r]);
- int k;
- mark_reload_reg_in_use (regno, reload_opnum[r],
- reload_when_needed[r],
- reload_mode[r]);
- for (k = 0; k < nr; k++)
- SET_HARD_REG_BIT (reload_reg_used_for_inherit, regno + k);
+ i = spill_reg_order[regno + k];
+ if (i >= 0)
+ {
+ mark_reload_reg_in_use (regno, reload_opnum[r],
+ reload_when_needed[r],
+ reload_mode[r]);
+ SET_HARD_REG_BIT (reload_reg_used_for_inherit,
+ regno + k);
+ }
}
}
}