[llvm] r361585 - [AArch64] Preserve X8 for thunks ending in variadic musttail calls

Reid Kleckner via llvm-commits llvm-commits at lists.llvm.org
Thu May 23 18:27:21 PDT 2019


Author: rnk
Date: Thu May 23 18:27:20 2019
New Revision: 361585

URL: http://llvm.org/viewvc/llvm-project?rev=361585&view=rev
Log:
[AArch64] Preserve X8 for thunks ending in variadic musttail calls

Summary:
On Windows, X8 may be used to pass in the address of an aggregate that
is returned indirectly. Therefore, it should be forwarded to variadic
musttail calls and preserved in thunks.

Fixes PR41997

Reviewers: mgrang, efriedma

Subscribers: javed.absar, kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D62344

Modified:
    llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp
    llvm/trunk/test/CodeGen/AArch64/vararg-tallcall.ll

Modified: llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp?rev=361585&r1=361584&r2=361585&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp Thu May 23 18:27:20 2019
@@ -3207,6 +3207,12 @@ SDValue AArch64TargetLowering::LowerForm
                                        FuncInfo->getForwardedMustTailRegParms();
       CCInfo.analyzeMustTailForwardedRegisters(Forwards, RegParmTypes,
                                                CC_AArch64_AAPCS);
+
+      // Conservatively forward X8, since it might be used for aggregate return.
+      if (!CCInfo.isAllocated(AArch64::X8)) {
+        unsigned X8VReg = MF.addLiveIn(AArch64::X8, &AArch64::GPR64RegClass);
+        Forwards.push_back(ForwardedRegister(X8VReg, AArch64::X8, MVT::i64));
+      }
     }
   }
 

Modified: llvm/trunk/test/CodeGen/AArch64/vararg-tallcall.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/vararg-tallcall.ll?rev=361585&r1=361584&r2=361585&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/vararg-tallcall.ll (original)
+++ llvm/trunk/test/CodeGen/AArch64/vararg-tallcall.ll Thu May 23 18:27:20 2019
@@ -28,7 +28,7 @@ entry:
 attributes #1 = { noinline optnone "thunk" }
 
 ; CHECK: mov     v16.16b, v0.16b
-; CHECK: ldr     x8, [x0]
-; CHECK: ldr     x8, [x8]
+; CHECK: ldr     x9, [x0]
+; CHECK: ldr     x9, [x9]
 ; CHECK: mov     v0.16b, v16.16b
-; CHECK: br      x8
+; CHECK: br      x9




More information about the llvm-commits mailing list