Index: llvm/lib/Target/X86/X86ISelLowering.cpp =================================================================== --- llvm/lib/Target/X86/X86ISelLowering.cpp +++ llvm/lib/Target/X86/X86ISelLowering.cpp @@ -4154,6 +4154,7 @@ Metadata *IsCFProtectionSupported = M->getModuleFlag("cf-protection-branch"); MachineFunction::CallSiteInfo CSInfo; + MachineFunction::CallSiteInfoStackFwd CSInfoStack; if (CallConv == CallingConv::X86_INTR) report_fatal_error("X86 interrupts may not be called directly"); @@ -4376,6 +4377,9 @@ } } else if (!IsSibcall && (!isTailCall || isByVal)) { assert(VA.isMemLoc()); + const TargetOptions &Options = DAG.getTarget().Options; + if (Options.EmitCallSiteInfo) + CSInfoStack.emplace_back(VA.getLocMemOffset(), VA.getValNo()); if (!StackPtr.getNode()) StackPtr = DAG.getCopyFromReg(Chain, dl, RegInfo->getStackRegister(), getPointerTy(DAG.getDataLayout())); @@ -4642,6 +4646,7 @@ MF.getFrameInfo().setHasTailCall(); SDValue Ret = DAG.getNode(X86ISD::TC_RETURN, dl, NodeTys, Ops); DAG.addCallSiteInfo(Ret.getNode(), std::move(CSInfo)); + DAG.addCallSiteInfoStackFwd(Ret.getNode(), std::move(CSInfoStack)); return Ret; } @@ -4669,7 +4674,7 @@ InFlag = Chain.getValue(1); DAG.addNoMergeSiteInfo(Chain.getNode(), CLI.NoMerge); DAG.addCallSiteInfo(Chain.getNode(), std::move(CSInfo)); - + DAG.addCallSiteInfoStackFwd(Chain.getNode(), std::move(CSInfoStack)); // Save heapallocsite metadata. if (CLI.CB) if (MDNode *HeapAlloc = CLI.CB->getMetadata("heapallocsite"))