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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@361585
91177308-0d34-0410-b5e6-
96231b3b80d8
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));
+ }
}
}
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