OSDN Git Service

PR c/2454
authorsayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 11 Jul 2002 01:23:07 +0000 (01:23 +0000)
committersayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 11 Jul 2002 01:23:07 +0000 (01:23 +0000)
* combine.c (nonzero_bits): LOAD_EXTEND_OP should only apply
to SUBREGs of MEMs.  (num_sign_bit_copies): Likewise.

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

gcc/ChangeLog
gcc/combine.c

index 6865e06..b94e96b 100644 (file)
@@ -1,4 +1,10 @@
 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>
 
        * builtins.def: Make the argument types of abort and exit
index f9d4b40..e7f2255 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