reload1.c (choose_reload_regs): Mind CLASS_CANNOT_CHANGE_SIZE while looking for a...
authorRichard Henderson <rth@cygnus.com>
Tue, 6 Jun 2000 02:40:14 +0000 (19:40 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Tue, 6 Jun 2000 02:40:14 +0000 (19:40 -0700)
        * reload1.c (choose_reload_regs): Mind CLASS_CANNOT_CHANGE_SIZE
        while looking for a register to inherit from.

From-SVN: r34420

gcc/ChangeLog
gcc/reload1.c

index c74aaf981d56790356467cf5b91541d78d6dda98..c0040dd62050230eb8630ec32cc98711c93dd76b 100644 (file)
@@ -1,3 +1,8 @@
+2000-06-05  Richard Henderson  <rth@cygnus.com>
+
+       * reload1.c (choose_reload_regs): Mind CLASS_CANNOT_CHANGE_SIZE
+       while looking for a register to inherit from.
+
 2000-06-05  Jason Merrill  <jason@casey.soma.redhat.com>
 
        * Makefile.in (libgcc.ready): Lose.
index 3378a689d61ca77e23ad7bfa84276dbbe7a6af8a..6f73aeaf13a2728cf796e717f2fd17d4a001bbe7 100644 (file)
@@ -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)