[llvm-branch-commits] [BOLT] Fix merge-fdata for memory events (PR #128108)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Feb 20 18:17:25 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-bolt
Author: Amir Ayupov (aaupov)
<details>
<summary>Changes</summary>
Don't attempt to parse mispredictions for memory entries in LBR profile.
Test Plan: added merge-fdata-mem-prof.test
---
Full diff: https://github.com/llvm/llvm-project/pull/128108.diff
2 Files Affected:
- (added) bolt/test/merge-fdata-mem-prof.test (+13)
- (modified) bolt/tools/merge-fdata/merge-fdata.cpp (+10-3)
``````````diff
diff --git a/bolt/test/merge-fdata-mem-prof.test b/bolt/test/merge-fdata-mem-prof.test
new file mode 100644
index 0000000000000..166d6028f7737
--- /dev/null
+++ b/bolt/test/merge-fdata-mem-prof.test
@@ -0,0 +1,13 @@
+## Check that merge-fdata tool correctly handles memory profile
+
+# REQUIRES: system-linux
+
+# RUN: split-file %s %t
+# RUN: merge-fdata %t/a.fdata -o %t/merged.fdata
+# RUN: FileCheck %s --input-file %t/merged.fdata
+
+# CHECK: 4 Curl_cf_def_query c 4 Curl_cft_h1_proxy 68 3
+
+#--- a.fdata
+4 Curl_cf_def_query c 4 Curl_cft_h1_proxy 68 1
+4 Curl_cf_def_query c 4 Curl_cft_h1_proxy 68 2
diff --git a/bolt/tools/merge-fdata/merge-fdata.cpp b/bolt/tools/merge-fdata/merge-fdata.cpp
index 74a5f8ca2d477..0cf5a03501728 100644
--- a/bolt/tools/merge-fdata/merge-fdata.cpp
+++ b/bolt/tools/merge-fdata/merge-fdata.cpp
@@ -316,11 +316,15 @@ void mergeLegacyProfiles(const SmallVectorImpl<std::string> &Filenames) {
do {
StringRef Line(FdataLine);
CounterTy Count;
+ unsigned Type = 0;
+ if (Line.split(' ').first.getAsInteger(10, Type))
+ report_error(Filename, "Malformed / corrupted entry type");
+ bool IsBranchEntry = Type < 3;
auto [Signature, ExecCount] = Line.rsplit(' ');
if (ExecCount.getAsInteger(10, Count.Exec))
report_error(Filename, "Malformed / corrupted execution count");
- // Only LBR profile has misprediction field
- if (!NoLBRCollection.value_or(false)) {
+ // Only LBR profile has misprediction field, branch entries
+ if (!NoLBRCollection.value_or(false) && IsBranchEntry) {
auto [SignatureLBR, MispredCount] = Signature.rsplit(' ');
Signature = SignatureLBR;
if (MispredCount.getAsInteger(10, Count.Mispred))
@@ -356,7 +360,10 @@ void mergeLegacyProfiles(const SmallVectorImpl<std::string> &Filenames) {
output() << "no_lbr\n";
for (const auto &[Key, Value] : MergedProfile) {
output() << Key << " ";
- if (!NoLBRCollection.value_or(false))
+ unsigned Type = 0;
+ Key.split(' ').first.getAsInteger(10, Type);
+ bool IsBranchEntry = Type < 3;
+ if (!NoLBRCollection.value_or(false) && IsBranchEntry)
output() << Value.Mispred << " ";
output() << Value.Exec << "\n";
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/128108
More information about the llvm-branch-commits
mailing list