diff options
author | Nathan Sidwell <nathan@acm.org> | 2021-08-26 04:05:25 -0700 |
---|---|---|
committer | Nathan Sidwell <nathan@acm.org> | 2021-08-27 04:03:49 -0700 |
commit | 199ac3a839d900a5274da019c0dca41aac61cf2c (patch) | |
tree | f98831186f7361411460dcb3ee1612da7748a07f | |
parent | 5d9de3ea1818c247917af23b82b481ac5d40b901 (diff) | |
download | llvm-199ac3a839d900a5274da019c0dca41aac61cf2c.tar.gz |
[NFC][X86] Sret return register cleanup
There are no paths into LowerFormalParms that have already specified
the sret register. We always materialize a virtual and then assign it
to the physical reg at the point of the return.
Differential Revision: https://reviews.llvm.org/D108762
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index b2189ccb1987..2d48e714c2fc 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -3960,12 +3960,12 @@ SDValue X86TargetLowering::LowerFormalArguments( // the argument into a virtual register so that we can access it from the // return points. if (Ins[I].Flags.isSRet()) { - Register Reg = FuncInfo->getSRetReturnReg(); - if (!Reg) { - MVT PtrTy = getPointerTy(DAG.getDataLayout()); - Reg = MF.getRegInfo().createVirtualRegister(getRegClassFor(PtrTy)); - FuncInfo->setSRetReturnReg(Reg); - } + assert(!FuncInfo->getSRetReturnReg() && + "SRet return has already been set"); + MVT PtrTy = getPointerTy(DAG.getDataLayout()); + Register Reg = + MF.getRegInfo().createVirtualRegister(getRegClassFor(PtrTy)); + FuncInfo->setSRetReturnReg(Reg); SDValue Copy = DAG.getCopyToReg(DAG.getEntryNode(), dl, Reg, InVals[I]); Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Copy, Chain); break; |