The attached change fixes PR target/5379.  ICE occurs when reload tries
to emit a move instruction containing a TLS symbol reference as the source
operand.  This requires several scratch registers.  As a result, it isn't
possible for a reload pattern to handle this case.  So, the best solution
was to reject TLS symbol reference source operands after reload starts.

Tested on hppa-unknown-linux-gnu and hppa2.0w-hp-hpux11.11 with not observed
regressions.

Committed to all active branches.

Dave
-- 
J. David Anglin                                  dave.ang...@nrc-cnrc.gc.ca
National Research Council of Canada              (613) 990-0752 (FAX: 952-6602)

2012-12-25  John David Anglin  <dave.ang...@nrc-cnrc.gc.ca>

        PR target/53789
        * config/pa/pa.md (movsi): Reject expansion of TLS symbol references
        after reload starts.

Index: config/pa/pa.md
===================================================================
--- config/pa/pa.md     (revision 194709)
+++ config/pa/pa.md     (working copy)
@@ -2051,6 +2110,12 @@
   ""
   "
 {
+  /* 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;
 }")

Reply via email to