re PR target/53789 (ICE in gen_reg_rtx, at emit-rtl.c:864/865 when compiling GNU...
authorJohn David Anglin <dave.anglin@nrc-cnrc.gc.ca>
Fri, 4 Jan 2013 03:55:43 +0000 (03:55 +0000)
committerJohn David Anglin <danglin@gcc.gnu.org>
Fri, 4 Jan 2013 03:55:43 +0000 (03:55 +0000)
PR target/53789
* config/pa/pa.md (movsi): Revert previous change.
* pa.c (pa_legitimate_constant_p): Reject all TLS symbol references.

From-SVN: r194879

gcc/ChangeLog
gcc/config/pa/pa.c
gcc/config/pa/pa.md

index f27a56b..a211e36 100644 (file)
@@ -1,3 +1,9 @@
+2013-01-03  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       PR target/53789
+       * config/pa/pa.md (movsi): Revert previous change.
+       * pa.c (pa_legitimate_constant_p): Reject all TLS symbol references.
+
 2013-01-03  Richard Henderson  <rth@redhat.com>
 
        * config/i386/i386.c (ix86_expand_move): Always assign to op1
index 8b93aa9..f697fd6 100644 (file)
@@ -10358,14 +10358,10 @@ pa_legitimate_constant_p (enum machine_mode mode, rtx x)
     return false;
 
   /* TLS_MODEL_GLOBAL_DYNAMIC and TLS_MODEL_LOCAL_DYNAMIC are not
-     legitimate constants.  */
+     legitimate constants.  The other variants can't be handled by
+     the move patterns after reload starts.  */
   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;
-   }
+    return false;
 
   if (TARGET_64BIT && GET_CODE (x) == CONST_DOUBLE)
     return false;
index 5cef94b..9c6a361 100644 (file)
   ""
   "
 {
-  /* A TLS symbol reference is not a valid move source operand.
-     pa_emit_move_sequence can only handle them prior to reload.
-     There is also no way to reload a TLS symbol reference, so
-     we must reject them after reload starts.  */
-  if (PA_SYMBOL_REF_TLS_P (operands[1]) && !can_create_pseudo_p ())
-    FAIL;
   if (pa_emit_move_sequence (operands, SImode, 0))
     DONE;
 }")