diff options
-rw-r--r-- | llvm/test/tools/llvm-profdata/input-dir.test | 22 | ||||
-rw-r--r-- | llvm/test/tools/llvm-profdata/input-filenames.test | 18 | ||||
-rw-r--r-- | llvm/tools/llvm-profdata/llvm-profdata.cpp | 43 |
3 files changed, 18 insertions, 65 deletions
diff --git a/llvm/test/tools/llvm-profdata/input-dir.test b/llvm/test/tools/llvm-profdata/input-dir.test deleted file mode 100644 index 16b5d721bc1..00000000000 --- a/llvm/test/tools/llvm-profdata/input-dir.test +++ /dev/null @@ -1,22 +0,0 @@ -# Create an input file. -RUN: echo "#" > %t.input -RUN: echo "%t.dir1" >> %t.input -RUN: echo "2,%t.dir2" >> %t.input - -RUN: mkdir -p %t.dir1 -RUN: mkdir -p %t.dir2/subdir - -RUN: echo ' ' > %t.dir1/bar -RUN: echo ' ' > %t.dir1/foo -RUN: echo ' ' > %t.dir2/bar -RUN: echo ' ' > %t.dir2/foo -RUN: echo ' ' > %t.dir2/subdir/baz - -RUN: llvm-profdata merge -f %t.input -dump-input-file-list -o /dev/null | FileCheck %s -RUN: llvm-profdata merge -weighted-input=2,%t.dir2 -dump-input-file-list -o /dev/null %t.dir1 | FileCheck %s - -CHECK: 1,{{.*}}.dir1/bar -CHECK-NEXT: 1,{{.*}}.dir1/foo -CHECK-NEXT: 2,{{.*}}.dir2/bar -CHECK-NEXT: 2,{{.*}}.dir2/foo -CHECK-NEXT: 2,{{.*}}.dir2/subdir/baz diff --git a/llvm/test/tools/llvm-profdata/input-filenames.test b/llvm/test/tools/llvm-profdata/input-filenames.test index 4f29e7bea9b..da0c47bf82a 100644 --- a/llvm/test/tools/llvm-profdata/input-filenames.test +++ b/llvm/test/tools/llvm-profdata/input-filenames.test @@ -1,19 +1,17 @@ # Create an input file. RUN: echo '# comment 1' > %t.input RUN: echo ' # comment 2' >> %t.input -RUN: echo " %t.bar" >> %t.input -RUN: echo " %t.baz" >> %t.input +RUN: echo 'bar' >> %t.input +RUN: echo ' baz' >> %t.input RUN: echo "2,%t.weighted" >> %t.input +# Create the weighted file, since these actually need to exist. RUN: echo ' ' > %t.weighted -RUN: echo ' ' > %t.foo -RUN: echo ' ' > %t.bar -RUN: echo ' ' > %t.baz -RUN: llvm-profdata merge -f %t.input -dump-input-file-list -o /dev/null %t.foo | FileCheck %s -RUN: llvm-profdata merge -input-files %t.input -dump-input-file-list -o /dev/null %t.foo | FileCheck %s +RUN: llvm-profdata merge -f %t.input -dump-input-file-list -o /dev/null foo | FileCheck %s +RUN: llvm-profdata merge -input-files %t.input -dump-input-file-list -o /dev/null foo | FileCheck %s -CHECK: 1,{{.*}}.foo -CHECK-NEXT: 1,{{.*}}.bar -CHECK-NEXT: 1,{{.*}}.baz +CHECK: 1,foo +CHECK-NEXT: 1,bar +CHECK-NEXT: 1,baz CHECK-NEXT: 2,{{.*}}.weighted diff --git a/llvm/tools/llvm-profdata/llvm-profdata.cpp b/llvm/tools/llvm-profdata/llvm-profdata.cpp index b2da3c24664..26ce4cc234f 100644 --- a/llvm/tools/llvm-profdata/llvm-profdata.cpp +++ b/llvm/tools/llvm-profdata/llvm-profdata.cpp @@ -109,12 +109,12 @@ static void handleMergeWriterError(Error E, StringRef WhenceFile = "", } struct WeightedFile { - std::string Filename; + StringRef Filename; uint64_t Weight; WeightedFile() {} - WeightedFile(const std::string &F, uint64_t W) : Filename{F}, Weight{W} {} + WeightedFile(StringRef F, uint64_t W) : Filename{F}, Weight{W} {} }; typedef SmallVector<WeightedFile, 5> WeightedFileVector; @@ -305,6 +305,10 @@ static WeightedFile parseWeightedFile(const StringRef &WeightedFilename) { if (WeightStr.getAsInteger(10, Weight) || Weight < 1) exitWithError("Input weight must be a positive integer."); + if (!sys::fs::exists(FileName)) + exitWithErrorCode(make_error_code(errc::no_such_file_or_directory), + FileName); + return WeightedFile(FileName, Weight); } @@ -320,33 +324,6 @@ getInputFilenamesFileBuf(const StringRef &InputFilenamesFile) { return std::move(*BufOrError); } -static void addWeightedInput(WeightedFileVector &WNI, const WeightedFile &WF) { - StringRef Filename = WF.Filename; - uint64_t Weight = WF.Weight; - llvm::sys::fs::file_status Status; - llvm::sys::fs::status(Filename, Status); - if (!llvm::sys::fs::exists(Status)) - exitWithErrorCode(make_error_code(errc::no_such_file_or_directory), - Filename); - // If it's a source file, collect it. - if (llvm::sys::fs::is_regular_file(Status)) { - WNI.emplace_back(Filename, Weight); - return; - } - - if (llvm::sys::fs::is_directory(Status)) { - std::error_code EC; - for (llvm::sys::fs::recursive_directory_iterator F(Filename, EC), E; - F != E && !EC; F.increment(EC)) { - if (llvm::sys::fs::is_regular_file(F->path())) { - addWeightedInput(WNI, {F->path(), Weight}); - } - } - if (EC) - exitWithErrorCode(EC, Filename); - } -} - static void parseInputFilenamesFile(MemoryBuffer *Buffer, WeightedFileVector &WFV) { if (!Buffer) @@ -362,9 +339,9 @@ static void parseInputFilenamesFile(MemoryBuffer *Buffer, continue; // If there's no comma, it's an unweighted profile. else if (SanitizedEntry.find(',') == StringRef::npos) - addWeightedInput(WFV, {SanitizedEntry, 1}); + WFV.emplace_back(SanitizedEntry, 1); else - addWeightedInput(WFV, parseWeightedFile(SanitizedEntry)); + WFV.emplace_back(parseWeightedFile(SanitizedEntry)); } } @@ -410,9 +387,9 @@ static int merge_main(int argc, const char *argv[]) { WeightedFileVector WeightedInputs; for (StringRef Filename : InputFilenames) - addWeightedInput(WeightedInputs, {Filename, 1}); + WeightedInputs.emplace_back(Filename, 1); for (StringRef WeightedFilename : WeightedInputFilenames) - addWeightedInput(WeightedInputs, parseWeightedFile(WeightedFilename)); + WeightedInputs.emplace_back(parseWeightedFile(WeightedFilename)); // Make sure that the file buffer stays alive for the duration of the // weighted input vector's lifetime. |