revert: re PR middle-end/49721 (convert_memory_address_addr_space may generate invalid new insns)
2014-10-14 Andrew Pinski <apinski@cavium.com> Revert: 2011-08-19 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/49721 * explow.c (convert_memory_address_addr_space): Also permute the conversion and addition of constant for zero-extend. From-SVN: r216229
This commit is contained in:
parent
e24ad4ec60
commit
ceeb2cbc4f
2 changed files with 16 additions and 12 deletions
|
@ -1,3 +1,12 @@
|
|||
2014-10-14 Andrew Pinski <apinski@cavium.com>
|
||||
|
||||
Revert:
|
||||
2011-08-19 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR middle-end/49721
|
||||
* explow.c (convert_memory_address_addr_space): Also permute the
|
||||
conversion and addition of constant for zero-extend.
|
||||
|
||||
2014-10-14 DJ Delorie <dj@redhat.com>
|
||||
|
||||
* config/msp430/msp430-modes.def (PSI): Add.
|
||||
|
|
19
gcc/explow.c
19
gcc/explow.c
|
@ -376,23 +376,18 @@ convert_memory_address_addr_space (enum machine_mode to_mode ATTRIBUTE_UNUSED,
|
|||
|
||||
case PLUS:
|
||||
case MULT:
|
||||
/* FIXME: For addition, we used to permute the conversion and
|
||||
addition operation only if one operand is a constant and
|
||||
converting the constant does not change it or if one operand
|
||||
is a constant and we are using a ptr_extend instruction
|
||||
(POINTERS_EXTEND_UNSIGNED < 0) even if the resulting address
|
||||
may overflow/underflow. We relax the condition to include
|
||||
zero-extend (POINTERS_EXTEND_UNSIGNED > 0) since the other
|
||||
parts of the compiler depend on it. See PR 49721.
|
||||
|
||||
/* For addition we can safely permute the conversion and addition
|
||||
operation if one operand is a constant and converting the constant
|
||||
does not change it or if one operand is a constant and we are
|
||||
using a ptr_extend instruction (POINTERS_EXTEND_UNSIGNED < 0).
|
||||
We can always safely permute them if we are making the address
|
||||
narrower. */
|
||||
if (GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (from_mode)
|
||||
|| (GET_CODE (x) == PLUS
|
||||
&& CONST_INT_P (XEXP (x, 1))
|
||||
&& (POINTERS_EXTEND_UNSIGNED != 0
|
||||
|| XEXP (x, 1) == convert_memory_address_addr_space
|
||||
(to_mode, XEXP (x, 1), as))))
|
||||
&& (XEXP (x, 1) == convert_memory_address_addr_space
|
||||
(to_mode, XEXP (x, 1), as)
|
||||
|| POINTERS_EXTEND_UNSIGNED < 0)))
|
||||
return gen_rtx_fmt_ee (GET_CODE (x), to_mode,
|
||||
convert_memory_address_addr_space
|
||||
(to_mode, XEXP (x, 0), as),
|
||||
|
|
Loading…
Add table
Reference in a new issue