[llvm] [BOLT][NFC] Split out parsePerfData (PR #145248)
Amir Ayupov via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 22 14:23:03 PDT 2025
https://github.com/aaupov created https://github.com/llvm/llvm-project/pull/145248
Simplify `preprocessProfile` by separating the processing of
pre-aggregated profile and perf.data parsing.
Test Plan: NFC
>From 113df3b384e4668b22bb17c2217cb2dc1f270338 Mon Sep 17 00:00:00 2001
From: Amir Ayupov <aaupov at fb.com>
Date: Sun, 22 Jun 2025 14:22:44 -0700
Subject: [PATCH] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20initia?=
=?UTF-8?q?l=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Created using spr 1.3.4
---
bolt/include/bolt/Profile/DataAggregator.h | 3 ++
bolt/lib/Profile/DataAggregator.cpp | 37 +++++++++++-----------
2 files changed, 21 insertions(+), 19 deletions(-)
diff --git a/bolt/include/bolt/Profile/DataAggregator.h b/bolt/include/bolt/Profile/DataAggregator.h
index cc28a06c151e5..98e4bba872846 100644
--- a/bolt/include/bolt/Profile/DataAggregator.h
+++ b/bolt/include/bolt/Profile/DataAggregator.h
@@ -374,6 +374,9 @@ class DataAggregator : public DataReader {
/// Parse a single pair of binary full path and associated build-id
std::optional<std::pair<StringRef, StringRef>> parseNameBuildIDPair();
+ /// Coordinate reading and parsing of perf.data file
+ void parsePerfData(BinaryContext &BC);
+
/// Coordinate reading and parsing of pre-aggregated file
///
/// The regular perf2bolt aggregation job is to read perf output directly.
diff --git a/bolt/lib/Profile/DataAggregator.cpp b/bolt/lib/Profile/DataAggregator.cpp
index 5c8af3710720d..88229bb31a2ad 100644
--- a/bolt/lib/Profile/DataAggregator.cpp
+++ b/bolt/lib/Profile/DataAggregator.cpp
@@ -466,9 +466,7 @@ int DataAggregator::prepareToParse(StringRef Name, PerfProcessInfo &Process,
return PI.ReturnCode;
}
-Error DataAggregator::preprocessProfile(BinaryContext &BC) {
- this->BC = &BC;
-
+void DataAggregator::parsePerfData(BinaryContext &BC) {
auto ErrorCallback = [](int ReturnCode, StringRef ErrBuf) {
errs() << "PERF-ERROR: return code " << ReturnCode << "\n" << ErrBuf;
exit(1);
@@ -481,11 +479,6 @@ Error DataAggregator::preprocessProfile(BinaryContext &BC) {
ErrorCallback(ReturnCode, ErrBuf);
};
- if (opts::ReadPreAggregated) {
- parsePreAggregated();
- goto heatmap;
- }
-
if (std::optional<StringRef> FileBuildID = BC.getFileBuildID()) {
outs() << "BOLT-INFO: binary build-id is: " << *FileBuildID << "\n";
processFileBuildID(*FileBuildID);
@@ -534,22 +527,28 @@ Error DataAggregator::preprocessProfile(BinaryContext &BC) {
<< '\n';
deleteTempFiles();
+}
-heatmap:
- // Sort parsed traces for faster processing.
- llvm::sort(Traces, llvm::less_first());
+Error DataAggregator::preprocessProfile(BinaryContext &BC) {
+ this->BC = &BC;
- if (!opts::HeatmapMode)
- return Error::success();
+ if (opts::ReadPreAggregated) {
+ parsePreAggregated();
+ } else {
+ parsePerfData(BC);
+ }
- if (std::error_code EC = printLBRHeatMap())
- return errorCodeToError(EC);
+ // Sort parsed traces for faster processing.
+ llvm::sort(Traces, llvm::less_first());
- if (opts::HeatmapMode == opts::HeatmapModeKind::HM_Optional)
- return Error::success();
+ if (opts::HeatmapMode) {
+ if (std::error_code EC = printLBRHeatMap())
+ return errorCodeToError(EC);
+ if (opts::HeatmapMode == opts::HeatmapModeKind::HM_Exclusive)
+ exit(0);
+ }
- assert(opts::HeatmapMode == opts::HeatmapModeKind::HM_Exclusive);
- exit(0);
+ return Error::success();
}
Error DataAggregator::readProfile(BinaryContext &BC) {
More information about the llvm-commits
mailing list