[llvm] [memprof] Add extractCallsFromIR (PR #115218)

Kazu Hirata via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 6 15:44:36 PST 2024


================
@@ -795,6 +795,53 @@ struct AllocMatchInfo {
   bool Matched = false;
 };
 
+DenseMap<uint64_t, SmallVector<CallEdgeTy, 0>>
+memprof::extractCallsFromIR(Module &M) {
+  DenseMap<uint64_t, SmallVector<CallEdgeTy, 0>> Calls;
+
+  auto GetOffset = [](const DILocation *DIL) {
+    return (DIL->getLine() - DIL->getScope()->getSubprogram()->getLine()) &
+           0xffff;
+  };
+
+  for (Function &F : M) {
+    if (F.isDeclaration())
+      continue;
+
+    for (auto &BB : F) {
+      for (auto &I : BB) {
+        const DILocation *DIL = I.getDebugLoc();
+        if (!DIL)
+          continue;
+
+        if (!isa<CallBase>(&I) || isa<IntrinsicInst>(&I))
+          continue;
+
+        auto *CB = dyn_cast<CallBase>(&I);
+        auto *CalledFunction = CB->getCalledFunction();
+        if (!CalledFunction || CalledFunction->isIntrinsic())
----------------
kazutakahirata wrote:

Yes, that's intended.  In the future, we may be able to make undrifting smarter with respect to indirect calls.  For now, I'd like to land the very basic feature.

https://github.com/llvm/llvm-project/pull/115218


More information about the llvm-commits mailing list