diff --git a/bolt/lib/Passes/BinaryPasses.cpp b/bolt/lib/Passes/BinaryPasses.cpp index 1b6c450c0b48d..e9602b0e88f30 100644 --- a/bolt/lib/Passes/BinaryPasses.cpp +++ b/bolt/lib/Passes/BinaryPasses.cpp @@ -1467,7 +1467,11 @@ Error PrintProgramStats::runOnFunctions(BinaryContext &BC) { if (IsHotParentOfBOLTSplitFunction) for (const BinaryFunction *Fragment : Function.getFragments()) Size += Fragment->getSize(); - double Density = (double)1.0 * Function.getSampleCountInBytes() / Size; + uint64_t ExecutedBytes = Function.getSampleCountInBytes(); + if (!ExecutedBytes && Function.hasCFG()) + for (const BinaryBasicBlock &BB : Function) + ExecutedBytes += BB.getOriginalSize() * BB.getKnownExecutionCount(); + double Density = (double)1.0 * ExecutedBytes / Size; FuncDensityList.emplace_back(Density, SampleCount); LLVM_DEBUG(BC.outs() << Function << ": executed bytes " << Function.getSampleCountInBytes() << ", size (b) "