backport: pa.c (pa_legitimate_address_p): For scaled indexing...

Backport from mainline
	2017-12-03  John David Anglin  <danglin@gcc.gnu.org>

	* config/pa/pa.c (pa_legitimate_address_p): For scaled indexing,
	require base operand is a REG_POINTER prior to reload on targets
	with non-equivalent space registers.

From-SVN: r255762
This commit is contained in:
John David Anglin 2017-12-17 17:02:10 +00:00
parent eb94321967
commit 4e138baf89
2 changed files with 17 additions and 1 deletions

View File

@ -1,3 +1,12 @@
2017-12-17 John David Anglin <danglin@gcc.gnu.org>
Backport from mainline
2017-12-03 John David Anglin <danglin@gcc.gnu.org>
* config/pa/pa.c (pa_legitimate_address_p): For scaled indexing,
require base operand is a REG_POINTER prior to reload on targets
with non-equivalent space registers.
2017-12-15 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/83269

View File

@ -10511,9 +10511,16 @@ pa_legitimate_address_p (machine_mode mode, rtx x, bool strict)
if (!TARGET_DISABLE_INDEXING
&& GET_CODE (index) == MULT
&& MODE_OK_FOR_SCALED_INDEXING_P (mode)
/* Only accept base operands with the REG_POINTER flag prior to
reload on targets with non-equivalent space registers. */
&& (TARGET_NO_SPACE_REGS
|| (base == XEXP (x, 1)
&& (reload_completed
|| (reload_in_progress && HARD_REGISTER_P (base))
|| REG_POINTER (base))))
&& REG_P (XEXP (index, 0))
&& GET_MODE (XEXP (index, 0)) == Pmode
&& MODE_OK_FOR_SCALED_INDEXING_P (mode)
&& (strict ? STRICT_REG_OK_FOR_INDEX_P (XEXP (index, 0))
: REG_OK_FOR_INDEX_P (XEXP (index, 0)))
&& GET_CODE (XEXP (index, 1)) == CONST_INT