(simplify_set): Don't move a SUBREG to dest if it is changing the size
authorRichard Kenner <kenner@gcc.gnu.org>
Mon, 10 Apr 1995 11:57:09 +0000 (07:57 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Mon, 10 Apr 1995 11:57:09 +0000 (07:57 -0400)
of a hard reg in CLASS_CANNOT_CHANGE_SIZE.

From-SVN: r9346

gcc/combine.c

index 48e5a87c2ac86e424d7728a42bd93cf6a7c36e95..2bb00d41bfd3010f4954371a87b526bf3d346b72 100644 (file)
@@ -4334,6 +4334,14 @@ simplify_set (x)
       && (GET_MODE_SIZE (GET_MODE (src))
          < GET_MODE_SIZE (GET_MODE (SUBREG_REG (src))))
 #endif
+#ifdef CLASS_CANNOT_CHANGE_SIZE
+      && ! (GET_CODE (dest) == REG && REGNO (dest) < FIRST_PSEUDO_REGISTER
+           && (TEST_HARD_REG_BIT
+               (reg_class_contents[(int) CLASS_CANNOT_CHANGE_SIZE],
+                REGNO (dest)))
+           && (GET_MODE_SIZE (GET_MODE (src))
+               != GET_MODE_SIZE (GET_MODE (SUBREG_REG (src)))))
+#endif                           
       && (GET_CODE (dest) == REG
          || (GET_CODE (dest) == SUBREG
              && GET_CODE (SUBREG_REG (dest)) == REG)))