Commit 5d6358a5 by Alan Modra Committed by Alan Modra

rs6000.c (rs6000_delegitimize_address): Handle unspec plus offset.

	* config/rs6000/rs6000.c (rs6000_delegitimize_address): Handle
	unspec plus offset.  Tidy macho code.

From-SVN: r173141
parent 85ad2ef5
2011-04-29 Alan Modra <amodra@gmail.com>
* config/rs6000/rs6000.c (rs6000_delegitimize_address): Handle
unspec plus offset. Tidy macho code.
2011-04-29 Martin Jambor <mjambor@suse.cz> 2011-04-29 Martin Jambor <mjambor@suse.cz>
* cgraphunit.c (cgraph_preserve_function_body_p): Accept a cgraph * cgraphunit.c (cgraph_preserve_function_body_p): Accept a cgraph
......
...@@ -6380,7 +6380,16 @@ rs6000_delegitimize_address (rtx orig_x) ...@@ -6380,7 +6380,16 @@ rs6000_delegitimize_address (rtx orig_x)
if (GET_CODE (x) == (TARGET_CMODEL != CMODEL_SMALL ? LO_SUM : PLUS) if (GET_CODE (x) == (TARGET_CMODEL != CMODEL_SMALL ? LO_SUM : PLUS)
&& GET_CODE (XEXP (x, 1)) == CONST) && GET_CODE (XEXP (x, 1)) == CONST)
{ {
rtx offset = NULL_RTX;
y = XEXP (XEXP (x, 1), 0); y = XEXP (XEXP (x, 1), 0);
if (GET_CODE (y) == PLUS
&& GET_MODE (y) == Pmode
&& CONST_INT_P (XEXP (y, 1)))
{
offset = XEXP (y, 1);
y = XEXP (y, 0);
}
if (GET_CODE (y) == UNSPEC if (GET_CODE (y) == UNSPEC
&& XINT (y, 1) == UNSPEC_TOCREL && XINT (y, 1) == UNSPEC_TOCREL
&& ((GET_CODE (XEXP (x, 0)) == REG && ((GET_CODE (XEXP (x, 0)) == REG
...@@ -6396,6 +6405,8 @@ rs6000_delegitimize_address (rtx orig_x) ...@@ -6396,6 +6405,8 @@ rs6000_delegitimize_address (rtx orig_x)
XEXP (XEXP (XEXP (x, 0), 1), 0))))) XEXP (XEXP (XEXP (x, 0), 1), 0)))))
{ {
y = XVECEXP (y, 0, 0); y = XVECEXP (y, 0, 0);
if (offset != NULL_RTX)
y = gen_rtx_PLUS (Pmode, y, offset);
if (!MEM_P (orig_x)) if (!MEM_P (orig_x))
return y; return y;
else else
...@@ -6405,9 +6416,9 @@ rs6000_delegitimize_address (rtx orig_x) ...@@ -6405,9 +6416,9 @@ rs6000_delegitimize_address (rtx orig_x)
if (TARGET_MACHO if (TARGET_MACHO
&& GET_CODE (orig_x) == LO_SUM && GET_CODE (orig_x) == LO_SUM
&& GET_CODE (XEXP (x, 1)) == CONST) && GET_CODE (XEXP (orig_x, 1)) == CONST)
{ {
y = XEXP (XEXP (x, 1), 0); y = XEXP (XEXP (orig_x, 1), 0);
if (GET_CODE (y) == UNSPEC if (GET_CODE (y) == UNSPEC
&& XINT (y, 1) == UNSPEC_MACHOPIC_OFFSET) && XINT (y, 1) == UNSPEC_MACHOPIC_OFFSET)
return XVECEXP (y, 0, 0); return XVECEXP (y, 0, 0);
......
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