Properly handle pointer addition/subtraction in num_sign_bit_copies1.
authorH.J. Lu <hongjiu.lu@intel.com>
Fri, 24 Jun 2011 15:26:33 +0000 (15:26 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Fri, 24 Jun 2011 15:26:33 +0000 (08:26 -0700)
From-SVN: r175383

gcc/ChangeLog
gcc/rtlanal.c

index 3034c6433ca80fe8e2bd84872e3a12551f7142a7..f0c2f000eba619e95b55c93d2a2da78a8e222f34 100644 (file)
@@ -2,7 +2,8 @@
 
        PR rtl-optimization/49504
        * rtlanal.c (nonzero_bits1): Properly handle addition or
-       subtraction a pointer in Pmode if pointers extend unsigned.
+       subtraction of a pointer in Pmode if pointers extend unsigned.
+       (num_sign_bit_copies1): Likewise.
 
 2011-06-24  Martin Jambor  <mjambor@suse.cz>
 
index e5c045df38ec25d03a5f69c30b49fe949a89c580..0be6504a9432b0cccf7e1faf3f6ec3d6a84647aa 100644 (file)
@@ -4605,21 +4605,6 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
                                         known_x, known_mode, known_ret);
       result = MAX (1, MIN (num0, num1) - 1);
 
-#ifdef POINTERS_EXTEND_UNSIGNED
-      /* If pointers extend signed and this is an addition or subtraction
-        to a pointer in Pmode, all the bits above ptr_mode are known to be
-        sign bit copies.  */
-      /* As we do not know which address space the pointer is refering to,
-        we can do this only if the target does not support different pointer
-        or address modes depending on the address space.  */
-      if (target_default_pointer_address_modes_p ()
-         && ! POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode
-         && (code == PLUS || code == MINUS)
-         && REG_P (XEXP (x, 0)) && REG_POINTER (XEXP (x, 0)))
-       result = MAX ((int) (GET_MODE_BITSIZE (Pmode)
-                            - GET_MODE_BITSIZE (ptr_mode) + 1),
-                     result);
-#endif
       return result;
 
     case MULT: