[PATCH] D126695: [BOLT] Allow merge-fdata to take a directory as input

Yi Kong via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue May 31 12:21:50 PDT 2022


This revision was automatically updated to reflect the committed changes.
Closed by commit rG2a42f7f72a13: [BOLT] Allow merge-fdata to take a directory as input (authored by kongyi).
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D126695/new/

https://reviews.llvm.org/D126695

Files:
  bolt/tools/merge-fdata/merge-fdata.cpp


Index: bolt/tools/merge-fdata/merge-fdata.cpp
===================================================================
--- bolt/tools/merge-fdata/merge-fdata.cpp
+++ bolt/tools/merge-fdata/merge-fdata.cpp
@@ -15,6 +15,7 @@
 #include "bolt/Profile/ProfileYAMLMapping.h"
 #include "llvm/ADT/StringMap.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Support/FileSystem.h"
 #include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/Support/Signals.h"
@@ -235,7 +236,7 @@
   return false;
 }
 
-void mergeLegacyProfiles(const cl::list<std::string> &Filenames) {
+void mergeLegacyProfiles(const SmallVectorImpl<std::string> &Filenames) {
   errs() << "Using legacy profile format.\n";
   bool BoltedCollection = false;
   bool First = true;
@@ -305,8 +306,28 @@
 
   ToolName = argv[0];
 
-  if (!isYAML(opts::InputDataFilenames.front())) {
-    mergeLegacyProfiles(opts::InputDataFilenames);
+  // Recursively expand input directories into input file lists.
+  SmallVector<std::string> Inputs;
+  for (std::string &InputDataFilename : opts::InputDataFilenames) {
+    if (!llvm::sys::fs::exists(InputDataFilename))
+      report_error(InputDataFilename,
+                   std::make_error_code(std::errc::no_such_file_or_directory));
+    if (llvm::sys::fs::is_regular_file(InputDataFilename))
+      Inputs.emplace_back(InputDataFilename);
+    else if (llvm::sys::fs::is_directory(InputDataFilename)) {
+      std::error_code EC;
+      for (llvm::sys::fs::recursive_directory_iterator F(InputDataFilename, EC),
+           E;
+           F != E && !EC; F.increment(EC))
+        if (llvm::sys::fs::is_regular_file(F->path()))
+          Inputs.emplace_back(F->path());
+      if (EC)
+        report_error(InputDataFilename, EC);
+    }
+  }
+
+  if (!isYAML(Inputs.front())) {
+    mergeLegacyProfiles(Inputs);
     return 0;
   }
 
@@ -317,7 +338,7 @@
   // Merged information for all functions.
   StringMap<BinaryFunctionProfile> MergedBFs;
 
-  for (std::string &InputDataFilename : opts::InputDataFilenames) {
+  for (std::string &InputDataFilename : Inputs) {
     ErrorOr<std::unique_ptr<MemoryBuffer>> MB =
         MemoryBuffer::getFileOrSTDIN(InputDataFilename);
     if (std::error_code EC = MB.getError())


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D126695.433165.patch
Type: text/x-patch
Size: 2265 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220531/faa9fcb6/attachment.bin>


More information about the llvm-commits mailing list