Commit ea868305 by Alan Modra Committed by Alan Modra

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
parent ed4f96af
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
......
......@@ -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))
......
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