re PR target/8366 ([sparc-sun-solaris2.7] C testsuite failure w/-m64 -fpic -O in execute/loop-2d.c)

PR optimization/8366
	* config/sparc/sparc.h: (SYMBOLIC_CONST): New macro.
	(GO_IF_LEGITIMATE_ADDRESS): Use it. Reject the form
	PIC+SYMBOLIC_CONST in other modes than Pmode.
	(GO_IF_MODE_DEPENDENT_ADDRESS): Use it. Mark
	the form PIC+SYMBOLIC_CONST as mode dependent.

Co-Authored-By: Richard Henderson <rth@redhat.com>

From-SVN: r64657
This commit is contained in:
Eric Botcazou 2003-03-21 10:46:38 +01:00 committed by Eric Botcazou
parent 30b3f14228
commit 731458a46d
2 changed files with 42 additions and 6 deletions

View File

@ -1,3 +1,13 @@
2003-03-21 Eric Botcazou <ebotcazou@libertysurf.fr>
Richard Henderson <rth@redhat.com>
PR optimization/8366
* config/sparc/sparc.h: (SYMBOLIC_CONST): New macro.
(GO_IF_LEGITIMATE_ADDRESS): Use it. Reject the form
PIC+SYMBOLIC_CONST in other modes than Pmode.
(GO_IF_MODE_DEPENDENT_ADDRESS): Use it. Mark
the form PIC+SYMBOLIC_CONST as mode dependent.
2003-03-21 DJ Delorie <dj@redhat.com> 2003-03-21 DJ Delorie <dj@redhat.com>
* config/stormy16/stormy16.c (xstormy16_expand_arith): Make * config/stormy16/stormy16.c (xstormy16_expand_arith): Make

View File

@ -2180,6 +2180,8 @@ do { \
If you change this, execute "rm explow.o recog.o reload.o". */ If you change this, execute "rm explow.o recog.o reload.o". */
#define SYMBOLIC_CONST(X) symbolic_operand (X, VOIDmode)
#define RTX_OK_FOR_BASE_P(X) \ #define RTX_OK_FOR_BASE_P(X) \
((GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) \ ((GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) \
|| (GET_CODE (X) == SUBREG \ || (GET_CODE (X) == SUBREG \
@ -2213,6 +2215,8 @@ do { \
&& GET_CODE (op1) != REG \ && GET_CODE (op1) != REG \
&& GET_CODE (op1) != LO_SUM \ && GET_CODE (op1) != LO_SUM \
&& GET_CODE (op1) != MEM \ && GET_CODE (op1) != MEM \
&& (! SYMBOLIC_CONST (op1) \
|| MODE == Pmode) \
&& (GET_CODE (op1) != CONST_INT \ && (GET_CODE (op1) != CONST_INT \
|| SMALL_INT (op1))) \ || SMALL_INT (op1))) \
goto ADDR; \ goto ADDR; \
@ -2300,6 +2304,34 @@ do { \
else if (GET_CODE (X) == CONST_INT && SMALL_INT (X)) \ else if (GET_CODE (X) == CONST_INT && SMALL_INT (X)) \
goto ADDR; \ goto ADDR; \
} }
/* Go to LABEL if ADDR (a legitimate address expression)
has an effect that depends on the machine mode it is used for.
In PIC mode,
(mem:HI [%l7+a])
is not equivalent to
(mem:QI [%l7+a]) (mem:QI [%l7+a+1])
because [%l7+a+1] is interpreted as the address of (a+1). */
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \
{ \
if (flag_pic == 1) \
{ \
if (GET_CODE (ADDR) == PLUS) \
{ \
rtx op0 = XEXP (ADDR, 0); \
rtx op1 = XEXP (ADDR, 1); \
if (op0 == pic_offset_table_rtx \
&& SYMBOLIC_CONST (op1)) \
goto LABEL; \
} \
} \
}
/* Try machine-dependent ways of modifying an illegitimate address /* Try machine-dependent ways of modifying an illegitimate address
to be legitimate. If we find one, return the new, valid address. to be legitimate. If we find one, return the new, valid address.
@ -2377,12 +2409,6 @@ do { \
} \ } \
/* ??? 64-bit reloads. */ \ /* ??? 64-bit reloads. */ \
} while (0) } while (0)
/* Go to LABEL if ADDR (a legitimate address expression)
has an effect that depends on the machine mode it is used for.
On the SPARC this is never true. */
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)
/* Specify the machine mode that this machine uses /* Specify the machine mode that this machine uses
for the index in the tablejump instruction. */ for the index in the tablejump instruction. */