diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-06-06 02:40:14 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-06-06 02:40:14 +0000 |
commit | 170ce3354eed3a3e03610a5317e64328b346db31 (patch) | |
tree | 1e11df212e7a9e31a1b29f36b3c6912ef4daccd4 /gcc/reload1.c | |
parent | 2bd9055c6c1237d2cffc7513fdd4d850110aeb0c (diff) | |
download | gcc-170ce3354eed3a3e03610a5317e64328b346db31.tar.gz |
* reload1.c (choose_reload_regs): Mind CLASS_CANNOT_CHANGE_SIZE
while looking for a register to inherit from.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34420 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reload1.c')
-rw-r--r-- | gcc/reload1.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c index 3378a689d61..6f73aeaf13a 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -5308,8 +5308,18 @@ choose_reload_regs (chain) i = REGNO (last_reg) + word; last_class = REGNO_REG_CLASS (i); - if ((GET_MODE_SIZE (GET_MODE (last_reg)) + if ( +#ifdef CLASS_CANNOT_CHANGE_SIZE + (TEST_HARD_REG_BIT + (reg_class_contents[CLASS_CANNOT_CHANGE_SIZE], i) + ? (GET_MODE_SIZE (GET_MODE (last_reg)) + == GET_MODE_SIZE (mode) + word * UNITS_PER_WORD) + : (GET_MODE_SIZE (GET_MODE (last_reg)) + >= GET_MODE_SIZE (mode) + word * UNITS_PER_WORD)) +#else + (GET_MODE_SIZE (GET_MODE (last_reg)) >= GET_MODE_SIZE (mode) + word * UNITS_PER_WORD) +#endif && reg_reloaded_contents[i] == regno && TEST_HARD_REG_BIT (reg_reloaded_valid, i) && HARD_REGNO_MODE_OK (i, rld[r].mode) |