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:
parent
b807e62730
commit
5ac6c59edd
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue