blob: 2a049eb803aed0c2fc5acc28a2a3f27d60af41b1 [file] [log] [blame]
From 7d7771f34d14e0108adf02a6fd0b33943afae3da Mon Sep 17 00:00:00 2001
From: Yi Kong <yikong@google.com>
Date: Mon, 11 Apr 2022 21:56:12 +0800
Subject: [PATCH] [BOLT] Compact legacy profiles
Merging multiple legacy profiles (produced by instrumentation BOLT) can
easily reach GiBs. Let merge-fdata compact the profiles during merge to
significantly reduce space usage.
Differential Revision: https://reviews.llvm.org/D123513
---
bolt/tools/merge-fdata/merge-fdata.cpp | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/bolt/tools/merge-fdata/merge-fdata.cpp b/bolt/tools/merge-fdata/merge-fdata.cpp
index cd8f343ac08c..5738219247ba 100644
--- a/bolt/tools/merge-fdata/merge-fdata.cpp
+++ b/bolt/tools/merge-fdata/merge-fdata.cpp
@@ -239,6 +239,7 @@ void mergeLegacyProfiles(const cl::list<std::string> &Filenames) {
errs() << "Using legacy profile format.\n";
bool BoltedCollection = false;
bool First = true;
+ StringMap<uint64_t> Entries;
for (const std::string &Filename : Filenames) {
if (isYAML(Filename))
report_error(Filename, "cannot mix YAML and legacy formats");
@@ -265,9 +266,25 @@ void mergeLegacyProfiles(const cl::list<std::string> &Filenames) {
"cannot mix profile collected in BOLT and non-BOLT deployments");
}
- outs() << Buf;
+ SmallVector<StringRef, 10> Lines;
+ SplitString(Buf, Lines, "\n");
+ for (StringRef Line : Lines) {
+ size_t Pos = Line.rfind(" ");
+ if (Pos == StringRef::npos)
+ report_error(Filename, "Malformed / corrupted profile");
+ StringRef Signature = Line.substr(0, Pos);
+ uint64_t Count;
+ if (Line.substr(Pos + 1, Line.size() - Pos).getAsInteger(10, Count))
+ report_error(Filename, "Malformed / corrupted profile counter");
+ Count += Entries.lookup(Signature);
+ Entries.insert_or_assign(Signature, Count);
+ }
First = false;
}
+
+ for (const auto &Entry : Entries)
+ outs() << Entry.getKey() << " " << Entry.getValue() << "\n";
+
errs() << "Profile from " << Filenames.size() << " files merged.\n";
}
--
2.35.1.1178.g4f1659d476-goog