Commit 1f134bd6 by H.J. Lu Committed by H.J. Lu

Properly handle pointer addition/subtraction in num_sign_bit_copies1.

From-SVN: r175383
parent 89f92025
......@@ -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>
......
......@@ -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:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment