aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-objdump/llvm-objdump.cpp
diff options
context:
space:
mode:
authorMicah Weston <micahsweston@gmail.com>2024-02-27 14:13:00 -0500
committerGitHub <noreply@github.com>2024-02-27 14:13:00 -0500
commit9ca8db352d22444feabd859380252f13826a8aff (patch)
treef3aeac0d336a4851c07525c4e4707596af57f450 /llvm/tools/llvm-objdump/llvm-objdump.cpp
parent19181f24e516ce1cb58cd5ba27515eb968ae22d9 (diff)
downloadllvm-9ca8db352d22444feabd859380252f13826a8aff.zip
llvm-9ca8db352d22444feabd859380252f13826a8aff.tar.gz
llvm-9ca8db352d22444feabd859380252f13826a8aff.tar.bz2
[SHT_LLVM_BB_ADDR_MAP] Adds pretty printing of BFI and BPI for PGO Analysis Map in tools. (#82292)
Primary change is to add a flag `--pretty-pgo-analysis-map` to llvm-readobj and llvm-objdump that prints block frequencies and branch probabilities in the same manner as BFI and BPI respectively. This can be helpful if you are manually inspecting the outputs from the tools. In order to print, I moved the `printBlockFreqImpl` function from Analysis to Support and renamed it to `printRelativeBlockFreq`.
Diffstat (limited to 'llvm/tools/llvm-objdump/llvm-objdump.cpp')
-rw-r--r--llvm/tools/llvm-objdump/llvm-objdump.cpp29
1 files changed, 22 insertions, 7 deletions
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index 948a5d7..78cf67b 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -188,8 +188,10 @@ public:
const BBAddrMap &getAddrMap() const { return AddrMap; }
// Returns the PGO string associated with the entry of index `PGOBBEntryIndex`
- // in `PGOMap`.
- std::string constructPGOLabelString(size_t PGOBBEntryIndex) const {
+ // in `PGOMap`. If PrettyPGOAnalysis is true, prints BFI as relative frequency
+ // and BPI as percentage. Otherwise raw values are displayed.
+ std::string constructPGOLabelString(size_t PGOBBEntryIndex,
+ bool PrettyPGOAnalysis) const {
if (!PGOMap.FeatEnable.hasPGOAnalysis())
return "";
std::string PGOString;
@@ -211,7 +213,12 @@ public:
PGOMap.BBEntries[PGOBBEntryIndex];
if (PGOMap.FeatEnable.BBFreq) {
- PGOSS << "Frequency: " << Twine(PGOBBEntry.BlockFreq.getFrequency());
+ PGOSS << "Frequency: ";
+ if (PrettyPGOAnalysis)
+ printRelativeBlockFreq(PGOSS, PGOMap.BBEntries.front().BlockFreq,
+ PGOBBEntry.BlockFreq);
+ else
+ PGOSS << Twine(PGOBBEntry.BlockFreq.getFrequency());
if (PGOMap.FeatEnable.BrProb && PGOBBEntry.Successors.size() > 0) {
PGOSS << ", ";
}
@@ -220,9 +227,12 @@ public:
PGOSS << "Successors: ";
interleaveComma(
PGOBBEntry.Successors, PGOSS,
- [&PGOSS](const PGOAnalysisMap::PGOBBEntry::SuccessorEntry &SE) {
+ [&](const PGOAnalysisMap::PGOBBEntry::SuccessorEntry &SE) {
PGOSS << "BB" << SE.ID << ":";
- PGOSS.write_hex(SE.Prob.getNumerator());
+ if (PrettyPGOAnalysis)
+ PGOSS << "[" << SE.Prob << "]";
+ else
+ PGOSS.write_hex(SE.Prob.getNumerator());
});
}
}
@@ -331,6 +341,7 @@ static bool HasStopAddressFlag;
bool objdump::SymbolTable;
static bool SymbolizeOperands;
+static bool PrettyPGOAnalysisMap;
static bool DynamicSymbolTable;
std::string objdump::TripleName;
bool objdump::UnwindInfo;
@@ -1410,8 +1421,8 @@ static void collectBBAddrMapLabels(
std::string LabelString = ("BB" + Twine(BBEntry.ID)).str();
Labels[BBAddress].push_back(
- {LabelString,
- FunctionMap->constructPGOLabelString(NumBBEntriesBeforeRange + I)});
+ {LabelString, FunctionMap->constructPGOLabelString(
+ NumBBEntriesBeforeRange + I, PrettyPGOAnalysisMap)});
}
}
@@ -3473,6 +3484,10 @@ static void parseObjdumpOptions(const llvm::opt::InputArgList &InputArgs) {
HasStopAddressFlag = InputArgs.hasArg(OBJDUMP_stop_address_EQ);
SymbolTable = InputArgs.hasArg(OBJDUMP_syms);
SymbolizeOperands = InputArgs.hasArg(OBJDUMP_symbolize_operands);
+ PrettyPGOAnalysisMap = InputArgs.hasArg(OBJDUMP_pretty_pgo_analysis_map);
+ if (PrettyPGOAnalysisMap && !SymbolizeOperands)
+ reportCmdLineWarning("--symbolize-operands must be enabled for "
+ "--pretty-pgo-analysis-map to have an effect");
DynamicSymbolTable = InputArgs.hasArg(OBJDUMP_dynamic_syms);
TripleName = InputArgs.getLastArgValue(OBJDUMP_triple_EQ).str();
UnwindInfo = InputArgs.hasArg(OBJDUMP_unwind_info);