diff options
author | Tom Wood <wood@gnu.org> | 1992-12-11 13:18:32 +0000 |
---|---|---|
committer | Tom Wood <wood@gnu.org> | 1992-12-11 13:18:32 +0000 |
commit | db660765c7a94b5dec6d95f34797e29f69aed990 (patch) | |
tree | 7e825ea2d6908df23fbb50fbb104bf7c7fb432b3 /gcc/reload1.c | |
parent | d8cfa4ee64a9f661e35b2e1549b0ae85ae5a9888 (diff) | |
download | gcc-db660765c7a94b5dec6d95f34797e29f69aed990.zip gcc-db660765c7a94b5dec6d95f34797e29f69aed990.tar.gz gcc-db660765c7a94b5dec6d95f34797e29f69aed990.tar.bz2 |
(choose_reload_regs): Don't inherit a reload if the
previous reload wasn't at least as wide as the current reload.
From-SVN: r2864
Diffstat (limited to 'gcc/reload1.c')
-rw-r--r-- | gcc/reload1.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c index 7458018..261be05 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -4382,13 +4382,20 @@ choose_reload_regs (insn, avoid_return_reg) if (inheritance) { register int regno = -1; + enum machine_mode mode; if (reload_in[r] == 0) ; else if (GET_CODE (reload_in[r]) == REG) - regno = REGNO (reload_in[r]); + { + regno = REGNO (reload_in[r]); + mode = GET_MODE (reload_in[r]); + } else if (GET_CODE (reload_in_reg[r]) == REG) - regno = REGNO (reload_in_reg[r]); + { + regno = REGNO (reload_in_reg[r]); + mode = GET_MODE (reload_in_reg[r]); + } #if 0 /* This won't work, since REGNO can be a pseudo reg number. Also, it takes much more hair to keep track of all the things @@ -4403,6 +4410,8 @@ choose_reload_regs (insn, avoid_return_reg) i = spill_reg_order[REGNO (reg_last_reload_reg[regno])]; if (reg_reloaded_contents[i] == regno + && (GET_MODE_SIZE (GET_MODE (reg_last_reload_reg[regno])) + >= GET_MODE_SIZE (mode)) && HARD_REGNO_MODE_OK (spill_regs[i], reload_mode[r]) && TEST_HARD_REG_BIT (reg_class_contents[(int) reload_reg_class[r]], spill_regs[i]) |