combine.c (nonzero_bits): If using reg_nonzero_bits, we don't know anything about...
authorJakub Jelinek <jakub@redhat.com>
Fri, 21 Dec 2001 11:07:59 +0000 (12:07 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 21 Dec 2001 11:07:59 +0000 (12:07 +0100)
* combine.c (nonzero_bits): If using reg_nonzero_bits,
we don't know anything about bits outside of X mode.
(num_sign_bit_copies): Likewise.

From-SVN: r48239

gcc/ChangeLog
gcc/combine.c

index 90776b28632126bdcd29bd60c1ec869d98a2014c..486394cc6942dd163b0052a96bcbaeca700713c8 100644 (file)
@@ -1,3 +1,9 @@
+2001-12-21  Jakub Jelinek  <jakub@redhat.com>
+
+       * combine.c (nonzero_bits): If using reg_nonzero_bits,
+       we don't know anything about bits outside of X mode.
+       (num_sign_bit_copies): Likewise.
+
 2001-12-21  Nick Clifton  <nickc@cambridge.redhat.com>
 
        * config/arm/arm.md (prefetch): Use 'a' operand code.
index a0b08ec12581c654e4acc57f272824826a0f9dc3..1fa63b80c9e07370da91d6d2c8e3e2e3194141f0 100644 (file)
@@ -7990,7 +7990,14 @@ nonzero_bits (x, mode)
          return nonzero_bits (tem, mode);
        }
       else if (nonzero_sign_valid && reg_nonzero_bits[REGNO (x)])
-       return reg_nonzero_bits[REGNO (x)] & nonzero;
+       {
+         unsigned HOST_WIDE_INT mask = reg_nonzero_bits[REGNO (x)];
+
+         if (GET_MODE_BITSIZE (GET_MODE (x)) < mode_width)
+           /* We don't know anything about the upper bits.  */
+           mask |= GET_MODE_MASK (mode) ^ GET_MODE_MASK (GET_MODE (x));
+         return nonzero & mask;
+       }
       else
        return nonzero;
 
@@ -8385,7 +8392,8 @@ num_sign_bit_copies (x, mode)
       if (tem != 0)
        return num_sign_bit_copies (tem, mode);
 
-      if (nonzero_sign_valid && reg_sign_bit_copies[REGNO (x)] != 0)
+      if (nonzero_sign_valid && reg_sign_bit_copies[REGNO (x)] != 0
+         && GET_MODE_BITSIZE (GET_MODE (x)) == bitwidth)
        return reg_sign_bit_copies[REGNO (x)];
       break;