[llvm] [ctx_prof] CtxProfAnalysis: populate module data (PR #102930)
Snehasish Kumar via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 13 09:58:48 PDT 2024
================
@@ -81,7 +83,56 @@ CtxProfAnalysis::Result CtxProfAnalysis::run(Module &M,
toString(MaybeCtx.takeError()));
return {};
}
- return Result(std::move(*MaybeCtx));
+
+ PGOContextualProfile Result;
+
+ for (const auto &F : M) {
+ if (F.isDeclaration())
+ continue;
+ auto GUID = AssignUniqueIDPass::getGUID(F);
+ assert(GUID && "guid not found for defined function");
+ const auto &Entry = F.begin();
+ uint32_t MaxCounters = 0; // we expect at least a counter.
+ for (const auto &I : *Entry)
+ if (auto *C = dyn_cast<InstrProfIncrementInst>(&I)) {
+ MaxCounters =
+ static_cast<uint32_t>(C->getNumCounters()->getZExtValue());
+ break;
+ }
+ if (!MaxCounters)
+ continue;
+ uint32_t MaxCallsites = 0;
+ for (const auto &BB : F)
+ for (const auto &I : BB)
+ if (auto *C = dyn_cast<InstrProfCallsite>(&I)) {
+ MaxCallsites =
+ static_cast<uint32_t>(C->getNumCounters()->getZExtValue());
+ break;
+ }
+ auto [It, Ins] = Result.FuncInfo.insert(
+ {GUID, PGOContextualProfile::FunctionInfo(F.getName())});
+ (void)Ins;
+ assert(Ins);
+ It->second.NextCallsiteIndex = MaxCallsites;
+ It->second.NextCounterIndex = MaxCounters;
+ }
+ // If we made it this far, the Result is valid - which we mark by setting
+ // .Profiles.
+ // Trim first the roots that aren't in this module.
+ DenseSet<GlobalValue::GUID> ProfiledGUIDs;
+ for (auto &[RootGuid, Tree] : llvm::make_early_inc_range(*MaybeCtx))
----------------
snehasish wrote:
Do you need to check MaybeCtx before deref?
Also Tree is unused so maybe just `for auto&[RootGuid, Unused]`?
https://github.com/llvm/llvm-project/pull/102930
More information about the llvm-commits
mailing list