[PATCH] D116410: [X86] Start tracking arguments passed on stack
Milica Lazarevic via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 30 05:27:18 PST 2021
milica-lazarevic created this revision.
milica-lazarevic added reviewers: Orlando, jmorse, djtodoro, aprantl.
Herald added subscribers: pengfei, hiraditya.
milica-lazarevic requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
In call-lowering phase, information about stack offset for every argument are attached to the corresponding SDNode.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D116410
Files:
llvm/lib/Target/X86/X86ISelLowering.cpp
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"))
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D116410.396656.patch
Type: text/x-patch
Size: 1645 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211230/6972d9e4/attachment.bin>
More information about the llvm-commits
mailing list