(gen_lowpart_for_combine): Allow MODE to be wider than a word in
authorRichard Kenner <kenner@gcc.gnu.org>
Sat, 26 Dec 1992 23:11:20 +0000 (18:11 -0500)
committerRichard Kenner <kenner@gcc.gnu.org>
Sat, 26 Dec 1992 23:11:20 +0000 (18:11 -0500)
restricted circumstances.

From-SVN: r2914

gcc/combine.c

index 331e6ce8d07aab73a87ea8e996dd05368abbb91a..360c81e5daf8620d3375769ef728c4df189fe6b3 100644 (file)
@@ -7416,7 +7416,14 @@ gen_lowpart_for_combine (mode, x)
   if (GET_MODE (x) == mode)
     return x;
 
-  if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
+  /* We can only support MODE being wider than a word if X is a
+     constant integer or has a mode the same size.  */
+
+  if (GET_MODE_SIZE (mode) > UNITS_PER_WORD
+      && ! ((GET_MODE (x) == VOIDmode
+            && (GET_CODE (x) == CONST_INT
+                || GET_CODE (x) == CONST_DOUBLE))
+           || GET_MODE_SIZE (GET_MODE (x)) == GET_MODE_SIZE (mode)))
     return gen_rtx (CLOBBER, GET_MODE (x), const0_rtx);
 
   /* X might be a paradoxical (subreg (mem)).  In that case, gen_lowpart