diff mbox

[alpha] : Fix PR 71145: Error: No lda !gpdisp!278 was found

Message ID CAFULd4bAe60Ttuj3CUo+N37uMd0sGQ86mRVthEXpMM_nHruTzg@mail.gmail.com
State New
Headers show

Commit Message

Uros Bizjak May 18, 2016, 7:32 p.m. UTC
Hello!

Alpha assembler requires that matching "lda $29,0($29)
!gpdisp!NNN" always follow "ldah $29,0($26)        !gpdisp!NNN".
However, when the compiler inserts trap insn, it (correctly) figures
out that $29 is unused, and removes "lda" from insn stream. Since ldah
is defined as unspec_volatile, it remains present.

The solution is to make trap insn dependent on register $29.

2016-05-18  Uros Bizjak  <ubizjak@gmail.com>

    PR target/71145
    * config/alpha/alpha.md (trap): Add (use (reg:DI 29)).
    (*exception_receiver_1): Return "#" for TARGET_EXPLICIT_RELOCS.

Patch was bootstrapped and regression tested on alpha-linux-gnu.

Commited to mainline and all release branches.

Uros.
diff mbox

Patch

Index: alpha.md
===================================================================
--- alpha.md	(revision 236296)
+++ alpha.md	(working copy)
@@ -3738,7 +3738,8 @@ 
 
 ;; BUGCHK is documented common to OSF/1 and VMS PALcode.
 (define_insn "trap"
-  [(trap_if (const_int 1) (const_int 0))]
+  [(trap_if (const_int 1) (const_int 0))
+   (use (reg:DI 29))]
   ""
   "call_pal 0x81"
   [(set_attr "type" "callpal")])
@@ -5157,7 +5158,7 @@ 
   "TARGET_ABI_OSF"
 {
   if (TARGET_EXPLICIT_RELOCS)
-    return "ldah $29,0($26)\t\t!gpdisp!%*\;lda $29,0($29)\t\t!gpdisp!%*";
+    return "#";
   else
     return "ldgp $29,0($26)";
 }