llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-bolt

Author: Amir Ayupov (aaupov)

<details>
<summary>Changes</summary>



Test Plan: added merge-fdata-no-lbr-event*.test


---
Full diff: https://github.com/llvm/llvm-project/pull/199323.diff


3 Files Affected:

- (added) bolt/test/merge-fdata-no-lbr-event-multi.test (+22) 
- (added) bolt/test/merge-fdata-no-lbr-event.test (+18) 
- (modified) bolt/tools/merge-fdata/merge-fdata.cpp (+21-2) 


``````````diff
diff --git a/bolt/test/merge-fdata-no-lbr-event-multi.test 
b/bolt/test/merge-fdata-no-lbr-event-multi.test
new file mode 100644
index 0000000000000..68707b6e5f159
--- /dev/null
+++ b/bolt/test/merge-fdata-no-lbr-event-multi.test
@@ -0,0 +1,22 @@
+## Check that merge-fdata preserves and propagates multiple event names from
+## the "no_lbr" header line, deduplicating across input files, when combined
+## with boltedcollection.
+
+# REQUIRES: system-linux
+
+# RUN: split-file %s %t
+# RUN: merge-fdata %t/a.fdata %t/b.fdata -o %t/merged.fdata
+# RUN: FileCheck %s --input-file %t/merged.fdata
+
+# CHECK: boltedcollection
+# CHECK: no_lbr{{.*( cycles:u| instructions)( cycles:u| instructions)}}
+# CHECK: 0 main 10 150
+
+#--- a.fdata
+boltedcollection
+no_lbr cycles:u instructions
+0 main 10 100
+#--- b.fdata
+boltedcollection
+no_lbr instructions cycles:u
+0 main 10 50
diff --git a/bolt/test/merge-fdata-no-lbr-event.test 
b/bolt/test/merge-fdata-no-lbr-event.test
new file mode 100644
index 0000000000000..5a649178ae8fd
--- /dev/null
+++ b/bolt/test/merge-fdata-no-lbr-event.test
@@ -0,0 +1,18 @@
+## Check that merge-fdata preserves and propagates event names from the
+## "no_lbr" header line to the merged output.
+
+# REQUIRES: system-linux
+
+# RUN: split-file %s %t
+# RUN: merge-fdata %t/a.fdata %t/b.fdata -o %t/merged.fdata
+# RUN: FileCheck %s --input-file %t/merged.fdata
+
+# CHECK: no_lbr cycles:u
+# CHECK: 1 main 0 2
+
+#--- a.fdata
+no_lbr cycles:u
+1 main 0 1
+#--- b.fdata
+no_lbr cycles:u
+1 main 0 1
diff --git a/bolt/tools/merge-fdata/merge-fdata.cpp 
b/bolt/tools/merge-fdata/merge-fdata.cpp
index 23b178eee17bc..2b54bcbc830b9 100644
--- a/bolt/tools/merge-fdata/merge-fdata.cpp
+++ b/bolt/tools/merge-fdata/merge-fdata.cpp
@@ -15,6 +15,7 @@
 #include "bolt/Profile/ProfileYAMLMapping.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/StringSet.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/FileSystem.h"
 #include "llvm/Support/ManagedStatic.h"
@@ -268,6 +269,7 @@ void mergeLegacyProfiles(const SmallVectorImpl<std::string> 
&Filenames) {
   std::optional<bool> BoltedCollection;
   std::optional<bool> NoLBRCollection;
   std::mutex BoltedCollectionMutex;
+  StringSet<> EventNames;
   struct CounterTy {
     uint64_t Exec{0};
     uint64_t Mispred{0};
@@ -312,7 +314,20 @@ void mergeLegacyProfiles(const 
SmallVectorImpl<std::string> &Filenames) {
       checkMode("boltedcollection", BoltedCollection);
       // Check if the string "no_lbr" is in the first line
       // (or second line if BoltedCollection is true)
+      // The line may also contain space-separated event names following
+      // "no_lbr", e.g. "no_lbr cycles:u". Preserve and propagate them to
+      // the merged output.
+      std::string NoLBRLineCopy = FdataLine;
       checkMode("no_lbr", NoLBRCollection);
+      StringRef NoLBRLine(NoLBRLineCopy);
+      if (NoLBRCollection.value_or(false) &&
+          NoLBRLine.consume_front("no_lbr")) {
+        SmallVector<StringRef> Events;
+        NoLBRLine.trim().split(Events, ' ', /*MaxSplit=*/-1,
+                               /*KeepEmpty=*/false);
+        for (StringRef Event : Events)
+          EventNames.insert(Event);
+      }
       Profile = &Profiles[tid];
     }
 
@@ -382,8 +397,12 @@ void mergeLegacyProfiles(const 
SmallVectorImpl<std::string> &Filenames) {
 
   if (BoltedCollection.value_or(false))
     output() << "boltedcollection\n";
-  if (NoLBRCollection.value_or(false))
-    output() << "no_lbr\n";
+  if (NoLBRCollection.value_or(false)) {
+    output() << "no_lbr";
+    for (StringRef Entry : EventNames.keys())
+      output() << ' ' << Entry;
+    output() << '\n';
+  }
   for (const auto &[Key, Value] : MergedProfile.Branch) {
     output() << Key << " ";
     if (!NoLBRCollection.value_or(false))

``````````

</details>


https://github.com/llvm/llvm-project/pull/199323
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to