(num_sign_bit_copies): Ifndef WORD_REGISTER_OPERATIONS, ensure we
authorRichard Kenner <kenner@gcc.gnu.org>
Sat, 22 Jan 1994 20:50:06 +0000 (15:50 -0500)
committerRichard Kenner <kenner@gcc.gnu.org>
Sat, 22 Jan 1994 20:50:06 +0000 (15:50 -0500)
don't do the wrong thing if X is narrower than MODE.

From-SVN: r6403

gcc/combine.c

index a71b201859477df6682c3dace83f3e1cdb911180..729d557c7d87994fb2fed97d22c19955bbde1f5d 100644 (file)
@@ -1,5 +1,5 @@
 /* Optimize by combining instructions for GNU compiler.
-   Copyright (C) 1987, 1988, 1992, 1993 Free Software Foundation, Inc.
+   Copyright (C) 1987, 1988, 1992, 1993, 1994 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -6965,6 +6965,14 @@ num_sign_bit_copies (x, mode)
     return MAX (1, (num_sign_bit_copies (x, GET_MODE (x))
                    - (GET_MODE_BITSIZE (GET_MODE (x)) - bitwidth)));
      
+#ifndef WORD_REGISTER_OPERATIONS
+  /* If this machine does not do all register operations on the entire
+     register and MODE is wider than the mode of X, we can say nothing
+     at all about the high-order bits.  */
+  if (GET_MODE (x) != VOIDmode && bitwidth > GET_MODE_BITSIZE (GET_MODE (x)))
+    return 1;
+#endif
+
   switch (code)
     {
     case REG: