OSDN Git Service

* combine.c (nonzero_bits): If using reg_nonzero_bits,
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 21 Dec 2001 11:07:59 +0000 (11:07 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 21 Dec 2001 11:07:59 +0000 (11:07 +0000)
we don't know anything about bits outside of X mode.
(num_sign_bit_copies): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@48239 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/combine.c

index 90776b2..486394c 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 a0b08ec..1fa63b8 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;