aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-09-22 07:13:24 +0000
committerRichard Stallman <rms@gnu.org>1992-09-22 07:13:24 +0000
commit372e033b8f9c7b7f5f38313a8638570908b90b1f (patch)
tree6ef8b12f199b00ef180f129148c649c9e5302a77
parent4323a0e11eab7e6eb217fe00e19e9363c8f1e240 (diff)
downloadgcc-372e033b8f9c7b7f5f38313a8638570908b90b1f.zip
gcc-372e033b8f9c7b7f5f38313a8638570908b90b1f.tar.gz
gcc-372e033b8f9c7b7f5f38313a8638570908b90b1f.tar.bz2
(choose_reload_regs): When setting reg_has_output_reload,
loop over multiple regs only for hard reg. Set reg_is_output_reload in separate loop. From-SVN: r2204
-rw-r--r--gcc/reload1.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 1b322bb..a6d95efb 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -4634,12 +4634,18 @@ choose_reload_regs (insn, avoid_return_reg)
&& reload_reg_rtx[r] != 0)
{
register int nregno = REGNO (reload_out[r]);
- int nr = HARD_REGNO_NREGS (nregno, reload_mode[r]);
+ int nr = 1;
+
+ if (nregno < FIRST_PSEUDO_REGISTER)
+ nr = HARD_REGNO_NREGS (nregno, reload_mode[r]);
while (--nr >= 0)
+ reg_has_output_reload[nregno + nr] = 1;
+
+ if (i >= 0)
{
- reg_has_output_reload[nregno + nr] = 1;
- if (i >= 0)
+ nr = HARD_REGNO_NREGS (spill_regs[i], reload_mode[r]);
+ while (--nr >= 0)
SET_HARD_REG_BIT (reg_is_output_reload, spill_regs[i] + nr);
}