mirror of git://gcc.gnu.org/git/gcc.git
Properly handle pointer addition/subtraction in num_sign_bit_copies1.
From-SVN: r175383
This commit is contained in:
parent
89f920259c
commit
1f134bd6d6
|
@ -2,7 +2,8 @@
|
||||||
|
|
||||||
PR rtl-optimization/49504
|
PR rtl-optimization/49504
|
||||||
* rtlanal.c (nonzero_bits1): Properly handle addition or
|
* 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>
|
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);
|
known_x, known_mode, known_ret);
|
||||||
result = MAX (1, MIN (num0, num1) - 1);
|
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;
|
return result;
|
||||||
|
|
||||||
case MULT:
|
case MULT:
|
||||||
|
|
Loading…
Reference in New Issue