]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/50691 (Incorrect argument evaluation in call with __thread argument)
authorJohn David Anglin <dave.anglin@nrc-cnrc.gc.ca>
Sun, 30 Oct 2011 03:21:45 +0000 (03:21 +0000)
committerJohn David Anglin <danglin@gcc.gnu.org>
Sun, 30 Oct 2011 03:21:45 +0000 (03:21 +0000)
PR target/50691
* config/pa/pa.c (emit_move_sequence): Legitimize TLS symbol references.
* config/pa/pa.h (LEGITIMATE_CONSTANT_P): Return false for
TLS_MODEL_GLOBAL_DYNAMIC and TLS_MODEL_LOCAL_DYNAMIC symbol references.

From-SVN: r180672

gcc/ChangeLog
gcc/config/pa/pa.c
gcc/config/pa/pa.h

index 21cb741228ed8afc12907658853f031513cb6a1a..10200c204693252a41c6cef964e69c5abc877ca3 100644 (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.
+       * config/pa/pa.h (LEGITIMATE_CONSTANT_P): Return false for
+       TLS_MODEL_GLOBAL_DYNAMIC and TLS_MODEL_LOCAL_DYNAMIC symbol references.
+
 2011-10-23  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/50788
index 6318611bd9af9347a15efd253a6052c71b3261f3..1bba63e1d9e2f910114daeeab17b0a5b1720e531 100644 (file)
@@ -1669,6 +1669,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)))
index aec5fa12d4a492a40a3cb00de097cc8ee8c5997e..f4e56a769766a11a9a7d2fff77d10e4382c628aa 100644 (file)
@@ -1070,6 +1070,9 @@ extern int may_call_alloca;
    && (NEW_HP_ASSEMBLER                                                \
        || TARGET_GAS                                           \
        || GET_CODE (X) != LABEL_REF)                           \
+   && (!PA_SYMBOL_REF_TLS_P (X)                                        \
+       || (SYMBOL_REF_TLS_MODEL (X) != TLS_MODEL_GLOBAL_DYNAMIC                \
+          && SYMBOL_REF_TLS_MODEL (X) != TLS_MODEL_LOCAL_DYNAMIC))     \
    && (!TARGET_64BIT                                           \
        || GET_CODE (X) != CONST_DOUBLE)                                \
    && (!TARGET_64BIT                                           \