[llvm] [ctx_prof] Profile flatterner (PR #104539)
Snehasish Kumar via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 21 08:55:29 PDT 2024
================
@@ -193,3 +201,35 @@ InstrProfCallsite *CtxProfAnalysis::getCallsiteInstrumentation(CallBase &CB) {
return IPC;
return nullptr;
}
+
+static void
+preorderVisit(const PGOCtxProfContext::CallTargetMapTy &Profiles,
+ function_ref<void(const PGOCtxProfContext &)> Visitor) {
+ std::function<void(const PGOCtxProfContext &)> Traverser =
+ [&](const auto &Ctx) {
+ Visitor(Ctx);
+ for (const auto &[_, SubCtxSet] : Ctx.callsites())
+ for (const auto &[__, Subctx] : SubCtxSet)
+ Traverser(Subctx);
+ };
+ for (const auto &[_, P] : Profiles)
+ Traverser(P);
+}
+
+const CtxProfFlatProfile PGOContextualProfile::flatten() const {
+ assert(Profiles.has_value());
+ CtxProfFlatProfile Flat;
+ preorderVisit(*Profiles, [&](const PGOCtxProfContext &Ctx) {
+ auto [It, Ins] = Flat.insert({Ctx.guid(), {}});
+ if (Ins) {
+ llvm::append_range(It->second, Ctx.counters());
----------------
snehasish wrote:
if you return after this, then you can drop the nesting for the else.
https://github.com/llvm/llvm-project/pull/104539
More information about the llvm-commits
mailing list