diff options
author | dj <dj@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-05-02 00:53:45 +0000 |
---|---|---|
committer | dj <dj@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-05-02 00:53:45 +0000 |
commit | 7497bc177f3695cd2b8c1a494ca039aefe47c15e (patch) | |
tree | f02237b045073ac68384cd8f7ab318ce172d5b13 /gcc/reload.c | |
parent | 18175ea321133c34ea21eaa572e113a426f7702e (diff) | |
download | gcc-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.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; |