[llvm] [llvm-profgen] Improve sample profile density (PR #92144)
via llvm-commits
llvm-commits at lists.llvm.org
Mon May 20 20:19:17 PDT 2024
================
@@ -768,9 +745,79 @@ void ProfileGenerator::populateBoundarySamplesForAllFunctions(
}
}
+void ProfileGeneratorBase::calculateDensity(
+ const FunctionSamples &FSamples,
+ std::vector<std::pair<double, uint64_t>> &DensityList,
+ uint64_t &TotalProfileSamples) {
+ uint64_t TotalBodySamples = 0;
+ uint64_t FuncBodySize = 0;
+ for (const auto &I : FSamples.getBodySamples()) {
+ TotalBodySamples += I.second.getSamples();
+ FuncBodySize++;
+ }
+
+ // The whole function could be inlined and optimized out, use the callsite
+ // head samples instead to estimate the body count.
+ if (FuncBodySize == 0) {
+ for (const auto &CallsiteSamples : FSamples.getCallsiteSamples()) {
+ FuncBodySize++;
+ for (const auto &Callee : CallsiteSamples.second) {
+ calculateDensity(Callee.second, DensityList, TotalProfileSamples);
----------------
WenleiHe wrote:
Ok, the recursion here covers inlinee samples. Good to know it's not dropped.
Though if we decided to compute density after pre-inline, it might make more sense to include inlinees directly? But yes, data will tell us which one is better. If they are similar, then we can aim for implementation simplicity.
https://github.com/llvm/llvm-project/pull/92144
More information about the llvm-commits
mailing list