[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