re PR target/47986 (gcc.c-torture/execute/20040709-1.c fails with non-delegitimized UNSPEC)

PR target/47986
	* config/rs6000/rs6000.c (rs6000_delegitimize_address): Handle
	full cmodel medium/large lo_sum + high addresses.

From-SVN: r170687
This commit is contained in:
Alan Modra 2011-03-05 09:29:07 +10:30 committed by Alan Modra
parent ed4f96af59
commit ea86830567
2 changed files with 19 additions and 7 deletions

View File

@ -1,3 +1,9 @@
2011-03-05 Alan Modra <amodra@gmail.com>
PR target/47986
* config/rs6000/rs6000.c (rs6000_delegitimize_address): Handle
full cmodel medium/large lo_sum + high addresses.
2011-03-04 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* config/s390/s390.c (s390_decompose_address): Reject non-literal

View File

@ -6248,17 +6248,23 @@ rs6000_delegitimize_address (rtx orig_x)
if (MEM_P (x))
x = XEXP (x, 0);
if ((GET_CODE (x) == PLUS
|| GET_CODE (x) == LO_SUM)
&& GET_CODE (XEXP (x, 0)) == REG
&& (REGNO (XEXP (x, 0)) == TOC_REGISTER
|| TARGET_MINIMAL_TOC
|| TARGET_CMODEL != CMODEL_SMALL)
if (GET_CODE (x) == (TARGET_CMODEL != CMODEL_SMALL ? LO_SUM : PLUS)
&& GET_CODE (XEXP (x, 1)) == CONST)
{
y = XEXP (XEXP (x, 1), 0);
if (GET_CODE (y) == UNSPEC
&& XINT (y, 1) == UNSPEC_TOCREL)
&& XINT (y, 1) == UNSPEC_TOCREL
&& ((GET_CODE (XEXP (x, 0)) == REG
&& (REGNO (XEXP (x, 0)) == TOC_REGISTER
|| TARGET_MINIMAL_TOC
|| TARGET_CMODEL != CMODEL_SMALL))
|| (TARGET_CMODEL != CMODEL_SMALL
&& GET_CODE (XEXP (x, 0)) == PLUS
&& GET_CODE (XEXP (XEXP (x, 0), 0)) == REG
&& REGNO (XEXP (XEXP (x, 0), 0)) == TOC_REGISTER
&& GET_CODE (XEXP (XEXP (x, 0), 1)) == HIGH
&& rtx_equal_p (XEXP (x, 1),
XEXP (XEXP (XEXP (x, 0), 1), 0)))))
{
y = XVECEXP (y, 0, 0);
if (!MEM_P (orig_x))