@@ -2493,6 +2493,10 @@ X86TargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
24932493 // would clobber.
24942494 Chain = DAG.getStackArgumentTokenFactor (Chain);
24952495
2496+ if (ByValTempChain)
2497+ Chain =
2498+ DAG.getNode (ISD::TokenFactor, dl, MVT::Other, Chain, ByValTempChain);
2499+
24962500 SmallVector<SDValue, 8 > MemOpChains2;
24972501 SDValue FIN;
24982502 int FI = 0 ;
@@ -2536,12 +2540,12 @@ X86TargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
25362540 NeedsStackCopy = !isTailCall;
25372541 }
25382542
2539- SDValue Source = DAG.getIntPtrConstant (VA.getLocMemOffset (), dl);
2540- Source = DAG.getNode (ISD::ADD, dl, getPointerTy (DAG.getDataLayout ()),
2541- ByValSrc, Source);
2543+ auto PtrVT = getPointerTy (DAG.getDataLayout ());
2544+ SDValue DstAddr = DAG.getFrameIndex (FI, PtrVT);
25422545
2543- MemOpChains2.push_back (
2544- CreateCopyOfByValArgument (Source, FIN, Chain, Flags, DAG, dl));
2546+ // Copy the struct contents from ByValSrc to DstAddr.
2547+ MemOpChains2.push_back (CreateCopyOfByValArgument (
2548+ ByValSrc, DstAddr, Chain, Flags, DAG, dl));
25452549 } else {
25462550 // Store relative to framepointer.
25472551 MemOpChains2.push_back (DAG.getStore (
0 commit comments