aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload1.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@cygnus.com>2000-06-05 19:40:14 -0700
committerRichard Henderson <rth@gcc.gnu.org>2000-06-05 19:40:14 -0700
commitc9d8a8136198b464ef8de88f9ea5d8364d848e8b (patch)
tree1e11df212e7a9e31a1b29f36b3c6912ef4daccd4 /gcc/reload1.c
parent2aceb30d9029b71a65670c044a9ef43a501786fa (diff)
downloadgcc-c9d8a8136198b464ef8de88f9ea5d8364d848e8b.zip
gcc-c9d8a8136198b464ef8de88f9ea5d8364d848e8b.tar.gz
gcc-c9d8a8136198b464ef8de88f9ea5d8364d848e8b.tar.bz2
reload1.c (choose_reload_regs): Mind CLASS_CANNOT_CHANGE_SIZE while looking for a register to inherit from.
* reload1.c (choose_reload_regs): Mind CLASS_CANNOT_CHANGE_SIZE while looking for a register to inherit from. From-SVN: r34420
Diffstat (limited to 'gcc/reload1.c')
-rw-r--r--gcc/reload1.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 3378a68..6f73aea 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)