summaryrefslogtreecommitdiff
path: root/gcc/reload.c
diff options
context:
space:
mode:
authordj <dj@138bc75d-0d04-0410-961f-82ee72b054a4>2003-05-02 00:53:45 +0000
committerdj <dj@138bc75d-0d04-0410-961f-82ee72b054a4>2003-05-02 00:53:45 +0000
commit7497bc177f3695cd2b8c1a494ca039aefe47c15e (patch)
treef02237b045073ac68384cd8f7ab318ce172d5b13 /gcc/reload.c
parent18175ea321133c34ea21eaa572e113a426f7702e (diff)
downloadgcc-7497bc177f3695cd2b8c1a494ca039aefe47c15e.tar.gz
* reload.c (find_reloads): Also check that all of a multi-reg
value is in the class. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@66366 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reload.c')
-rw-r--r--gcc/reload.c12
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;