Profile Analysis
Hot-code detection based on profiling data for feedback-directed optimization.
Headers: include/Analysis/Profile/
Implementation: lib/Analysis/Profile/
Build target: CanaryProfile
Overview
The Profile Analysis module provides profile-guided hot-code detection using
LLVM’s BlockFrequencyInfo and BranchProbabilityInfo. It identifies
frequently executed code regions (hot functions, loops, basic blocks) from
profiling data, enabling downstream optimizations and analyses to focus on
performance-critical paths.
Hot Class
File: Profile/Hot.h
The central Hot class queries profiling metadata to classify code regions
by execution frequency:
#include "Analysis/Profile/Hot.h"
lotus::analysis::profile::Hot hot(M, getBFI, getBPI);
Query Methods:
For instructions, basic blocks, and loops:
getStaticInstructions()— Total static instruction count.getSelfInstructions()— Instructions excluding callees.getTotalInstructions()— Dynamic instruction count (sum over executions).getInvocations()— How many times the region was entered at runtime.hasBeenExecuted()— Whether the region was ever reached.getDynamicTotalInstructionCoverage()— Fraction of dynamic instructions this region accounts for.
Loop-specific:
getIterations()— Average trip count per invocation.getAverageLoopIterationsPerInvocation()— Mean iterations per entry.getAverageTotalInstructionsPerInvocation()— Mean instructions per entry.getAverageTotalInstructionsPerIteration()— Mean instructions per trip.
Usage
#include "Analysis/Profile/Hot.h"
llvm::Module &M = ...;
auto getBFI = [&](llvm::Function &F) -> llvm::BlockFrequencyInfo & { ... };
auto getBPI = [&](llvm::Function &F) -> llvm::BranchProbabilityInfo & { ... };
lotus::analysis::profile::Hot hot(M, getBFI, getBPI);
for (auto &F : M) {
for (auto &B : F) {
for (auto &I : B) {
if (hot.hasBeenExecuted(&I)) {
uint64_t dyn = hot.getTotalInstructions(&I);
// Focus optimisation effort on high-dynamic-count instructions
}
}
}
}
See Also
SWPrefetching (Software Prefetching) — Profile-guided software prefetching
Optimization — Optimisation passes consuming profile data