diff options
Diffstat (limited to 'gcc/reload.c')
-rw-r--r-- | gcc/reload.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/reload.c b/gcc/reload.c index bc3c1771d97..5a82d995a2c 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -4346,7 +4346,17 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p) if (regno < FIRST_PSEUDO_REGISTER && TEST_HARD_REG_BIT (reg_class_contents[rld[i].class], regno) && HARD_REGNO_MODE_OK (regno, rld[i].mode)) - rld[i].reg_rtx = dest; + { + int nr = HARD_REGNO_NREGS (regno, rld[i].mode); + int ok = 1, nri; + + for (nri = 1; nri < nr; nri ++) + if (! TEST_HARD_REG_BIT (reg_class_contents[rld[i].class], regno + nri)) + ok = 0; + + if (ok) + rld[i].reg_rtx = dest; + } } return retval; |