re PR c/2454 (Test Program A0376972.c fails with gcc-20010320, works with gcc-2.95.3)
authorRoger Sayle <roger@eyesopen.com>
Thu, 11 Jul 2002 01:23:07 +0000 (01:23 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Thu, 11 Jul 2002 01:23:07 +0000 (01:23 +0000)
PR c/2454
* combine.c (nonzero_bits): LOAD_EXTEND_OP should only apply
to SUBREGs of MEMs.  (num_sign_bit_copies): Likewise.

From-SVN: r55386

gcc/ChangeLog
gcc/combine.c

index 6865e0668dd8d8d6689038f09350c7ccf24f7958..b94e96be382c35fce12ca9397df83e917c1c8ca8 100644 (file)
@@ -1,3 +1,9 @@
+2002-07-10  Roger Sayle  <roger@eyesopen.com>
+
+       PR c/2454
+       * combine.c (nonzero_bits): LOAD_EXTEND_OP should only apply
+       to SUBREGs of MEMs.  (num_sign_bit_copies): Likewise.
+
 2002-07-10  Roger Sayle  <roger@eyesopen.com>
            Zack Weinberg <zack@codesourcery.com>
 
index f9d4b40625450679e313363cdd7bf01d1696b0f8..e7f22553062379cacad9f2dc25f0d9110b784e41 100644 (file)
@@ -8344,12 +8344,13 @@ nonzero_bits (x, mode)
 #if defined (WORD_REGISTER_OPERATIONS) && defined (LOAD_EXTEND_OP)
          /* If this is a typical RISC machine, we only have to worry
             about the way loads are extended.  */
-         if (LOAD_EXTEND_OP (GET_MODE (SUBREG_REG (x))) == SIGN_EXTEND
-             ? (((nonzero
-                  & (((unsigned HOST_WIDE_INT) 1
-                      << (GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (x))) - 1))))
-                 != 0))
-             : LOAD_EXTEND_OP (GET_MODE (SUBREG_REG (x))) != ZERO_EXTEND)
+         if ((LOAD_EXTEND_OP (GET_MODE (SUBREG_REG (x))) == SIGN_EXTEND
+              ? (((nonzero
+                   & (((unsigned HOST_WIDE_INT) 1
+                       << (GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (x))) - 1))))
+                  != 0))
+              : LOAD_EXTEND_OP (GET_MODE (SUBREG_REG (x))) != ZERO_EXTEND)
+             || GET_CODE (SUBREG_REG (x)) != MEM)
 #endif
            {
              /* On many CISC machines, accessing an object in a wider mode
@@ -8572,7 +8573,8 @@ num_sign_bit_copies (x, mode)
 
       if ((GET_MODE_SIZE (GET_MODE (x))
           > GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
-         && LOAD_EXTEND_OP (GET_MODE (SUBREG_REG (x))) == SIGN_EXTEND)
+         && LOAD_EXTEND_OP (GET_MODE (SUBREG_REG (x))) == SIGN_EXTEND
+         && GET_CODE (SUBREG_REG (x)) == MEM)
        return num_sign_bit_copies (SUBREG_REG (x), mode);
 #endif
 #endif