diff options
author | Jeff Law <law@gcc.gnu.org> | 1996-06-28 21:34:25 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1996-06-28 21:34:25 -0600 |
commit | 100338dfc493aef6cfcaba4d6faca31fc4a6f0a8 (patch) | |
tree | 72511a709211c2106277d786c61f6a8dac7f4a5e /gcc | |
parent | 49c8f4a40c9492dc7d3b1659d9422d0de73f067e (diff) | |
download | gcc-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.c | 26 |
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); + } } } } |