[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