[llvm] [ctxprof] Scale up everything under a root by its `TotalRootEntryCount` (PR #136015)
Snehasish Kumar via llvm-commits
llvm-commits at lists.llvm.org
Sun Apr 20 16:16:26 PDT 2025
================
@@ -683,40 +689,46 @@ void PGOContextualProfile::visit(ConstVisitor V, const Function *F) const {
const CtxProfFlatProfile PGOContextualProfile::flatten() const {
CtxProfFlatProfile Flat;
auto Accummulate = [](SmallVectorImpl<uint64_t> &Into,
- const SmallVectorImpl<uint64_t> &From) {
+ const SmallVectorImpl<uint64_t> &From,
+ uint64_t SamplingRate) {
if (Into.empty())
Into.resize(From.size());
assert(Into.size() == From.size() &&
"All contexts corresponding to a function should have the exact "
"same number of counters.");
for (size_t I = 0, E = Into.size(); I < E; ++I)
- Into[I] += From[I];
+ Into[I] += From[I] * SamplingRate;
};
- preorderVisit<const PGOCtxProfContext::CallTargetMapTy,
- const PGOCtxProfContext>(
- Profiles.Contexts, [&](const PGOCtxProfContext &Ctx) {
- Accummulate(Flat[Ctx.guid()], Ctx.counters());
- });
- for (const auto &[_, RC] : Profiles.Contexts)
- for (const auto &[G, Unh] : RC.getUnhandled())
- Accummulate(Flat[G], Unh);
+ for (const auto &[_, CtxRoot] : Profiles.Contexts) {
+ const uint64_t SamplingFactor = CtxRoot.getTotalRootEntryCount();
+ preorderVisitOneRoot<const PGOCtxProfContext>(
+ CtxRoot, [&](const PGOCtxProfContext &Ctx) {
+ Accummulate(Flat[Ctx.guid()], Ctx.counters(), SamplingFactor);
+ });
+
+ for (const auto &[G, Unh] : CtxRoot.getUnhandled())
+ Accummulate(Flat[G], Unh, SamplingFactor);
+ }
for (const auto &[G, FC] : Profiles.FlatProfiles)
- Accummulate(Flat[G], FC);
+ Accummulate(Flat[G], FC, /*SamplingRate=*/1);
----------------
snehasish wrote:
Why is this hardcoded to 1?
https://github.com/llvm/llvm-project/pull/136015
More information about the llvm-commits
mailing list