re PR target/50691 (Incorrect argument evaluation in call with __thread argument)

PR target/50691
	config/pa/pa.c (emit_move_sequence): Legitimize TLS symbol references.
	(pa_legitimate_constant_p): Return false for TLS_MODEL_GLOBAL_DYNAMIC
	and TLS_MODEL_LOCAL_DYNAMIC symbol references.

From-SVN: r180655
This commit is contained in:
John David Anglin 2011-10-29 15:57:00 +00:00 committed by John David Anglin
parent d702f362b5
commit 9a20164505
2 changed files with 22 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2011-10-29 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
PR target/50691
config/pa/pa.c (emit_move_sequence): Legitimize TLS symbol references.
(pa_legitimate_constant_p): Return false for TLS_MODEL_GLOBAL_DYNAMIC
and TLS_MODEL_LOCAL_DYNAMIC symbol references.
2011-10-29 Georg-Johann Lay <avr@gjlay.de>
PR target/50887

View File

@ -1781,6 +1781,11 @@ emit_move_sequence (rtx *operands, enum machine_mode mode, rtx scratch_reg)
/* Handle the most common case: storing into a register. */
else if (register_operand (operand0, mode))
{
/* Legitimize TLS symbol references. This happens for references
that aren't a legitimate constant. */
if (PA_SYMBOL_REF_TLS_P (operand1))
operand1 = legitimize_tls_address (operand1);
if (register_operand (operand1, mode)
|| (GET_CODE (operand1) == CONST_INT
&& cint_ok_for_move (INTVAL (operand1)))
@ -10271,6 +10276,16 @@ pa_legitimate_constant_p (enum machine_mode mode, rtx x)
if (!NEW_HP_ASSEMBLER && !TARGET_GAS && GET_CODE (x) == LABEL_REF)
return false;
/* TLS_MODEL_GLOBAL_DYNAMIC and TLS_MODEL_LOCAL_DYNAMIC are not
legitimate constants. */
if (PA_SYMBOL_REF_TLS_P (x))
{
enum tls_model model = SYMBOL_REF_TLS_MODEL (x);
if (model == TLS_MODEL_GLOBAL_DYNAMIC || model == TLS_MODEL_LOCAL_DYNAMIC)
return false;
}
if (TARGET_64BIT && GET_CODE (x) == CONST_DOUBLE)
return false;