Properly handle pointer addition/subtraction.

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
This commit is contained in:
H.J. Lu 2011-06-24 13:41:40 +00:00 committed by H.J. Lu
parent b807e62730
commit 5ac6c59edd
2 changed files with 6 additions and 14 deletions

View 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

View 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;