[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