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:
parent
ed4f96af59
commit
ea86830567
@ -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
|
||||
|
@ -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))
|
||||
|
Loading…
Reference in New Issue
Block a user