Properly handle pointer addition/subtraction.
authorH.J. Lu <hongjiu.lu@intel.com>
Fri, 24 Jun 2011 13:41:40 +0000 (13:41 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Fri, 24 Jun 2011 13:41:40 +0000 (06:41 -0700)
2011-06-24  H.J. Lu  <hongjiu.lu@intel.com>

PR rtl-optimization/49504
* rtlanal.c (nonzero_bits1): Properly handle addition or
subtraction a pointer in Pmode if pointers extend unsigned.

From-SVN: r175377

gcc/ChangeLog
gcc/rtlanal.c

index fa88db30b284047a7f68711105d8426a30bfb597..3034c6433ca80fe8e2bd84872e3a12551f7142a7 100644 (file)
@@ -1,3 +1,9 @@
+2011-06-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR rtl-optimization/49504
+       * rtlanal.c (nonzero_bits1): Properly handle addition or
+       subtraction a pointer in Pmode if pointers extend unsigned.
+
 2011-06-24  Martin Jambor  <mjambor@suse.cz>
 
        PR tree-optimizations/49516
index b52957d4cae62d057b72cf027a1ae0a2957059bc..e5c045df38ec25d03a5f69c30b49fe949a89c580 100644 (file)
@@ -4134,20 +4134,6 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
 
        if (result_low > 0)
          nonzero &= ~(((unsigned HOST_WIDE_INT) 1 << result_low) - 1);
-
-#ifdef POINTERS_EXTEND_UNSIGNED
-       /* If pointers extend unsigned and this is an addition or subtraction
-          to a pointer in Pmode, all the bits above ptr_mode are known to be
-          zero.  */
-       /* 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 > 0 && GET_MODE (x) == Pmode
-           && (code == PLUS || code == MINUS)
-           && REG_P (XEXP (x, 0)) && REG_POINTER (XEXP (x, 0)))
-         nonzero &= GET_MODE_MASK (ptr_mode);
-#endif
       }
       break;