diff options
4 files changed, 120 insertions, 3 deletions
diff --git a/llvm/include/llvm/ProfileData/InstrProfReader.h b/llvm/include/llvm/ProfileData/InstrProfReader.h index 424360e0f76..aa58ead1eda 100644 --- a/llvm/include/llvm/ProfileData/InstrProfReader.h +++ b/llvm/include/llvm/ProfileData/InstrProfReader.h @@ -397,6 +397,8 @@ private: std::unique_ptr<InstrProfReaderIndexBase> Index; /// Profile summary data. std::unique_ptr<ProfileSummary> Summary; + // Index to the current record in the record array. + unsigned RecordIndex; // Read the profile summary. Return a pointer pointing to one byte past the // end of the summary data if it exists or the input \c Cur. @@ -405,7 +407,7 @@ private: public: IndexedInstrProfReader(std::unique_ptr<MemoryBuffer> DataBuffer) - : DataBuffer(std::move(DataBuffer)) {} + : DataBuffer(std::move(DataBuffer)), RecordIndex(0) {} IndexedInstrProfReader(const IndexedInstrProfReader &) = delete; IndexedInstrProfReader &operator=(const IndexedInstrProfReader &) = delete; diff --git a/llvm/lib/ProfileData/InstrProfReader.cpp b/llvm/lib/ProfileData/InstrProfReader.cpp index 1b39a0695aa..cdf50c2df0c 100644 --- a/llvm/lib/ProfileData/InstrProfReader.cpp +++ b/llvm/lib/ProfileData/InstrProfReader.cpp @@ -733,8 +733,6 @@ Error IndexedInstrProfReader::getFunctionCounts(StringRef FuncName, } Error IndexedInstrProfReader::readNextRecord(NamedInstrProfRecord &Record) { - static unsigned RecordIndex = 0; - ArrayRef<NamedInstrProfRecord> Data; Error E = Index->getRecords(Data); diff --git a/llvm/test/tools/llvm-profdata/Inputs/multiple-profdata-merge.proftext b/llvm/test/tools/llvm-profdata/Inputs/multiple-profdata-merge.proftext new file mode 100644 index 00000000000..090a40f2da6 --- /dev/null +++ b/llvm/test/tools/llvm-profdata/Inputs/multiple-profdata-merge.proftext @@ -0,0 +1,106 @@ +# IR level Instrumentation Flag +:ir +foo +# Func Hash: +36982789018 +# Num Counters: +4 +# Counter Values: +700000 +700000 +0 +0 + +foo +# Func Hash: +59188585735 +# Num Counters: +6 +# Counter Values: +400000 +400000 +0 +0 +0 +0 + +foo +# Func Hash: +27904764724 +# Num Counters: +3 +# Counter Values: +200000 +200000 +0 + +foo +# Func Hash: +60466382370 +# Num Counters: +6 +# Counter Values: +0 +100000 +0 +0 +0 +0 + +bar +# Func Hash: +12884901887 +# Num Counters: +1 +# Counter Values: +0 + +foo2 +# Func Hash: +12884901887 +# Num Counters: +1 +# Counter Values: +0 + +foo3 +# Func Hash: +12884901887 +# Num Counters: +1 +# Counter Values: +0 + +foo4 +# Func Hash: +12884901887 +# Num Counters: +1 +# Counter Values: +0 + +foo5 +# Func Hash: +12884901887 +# Num Counters: +1 +# Counter Values: +0 + +foo1 +# Func Hash: +12884901887 +# Num Counters: +1 +# Counter Values: +100000 + +main +# Func Hash: +29212902728 +# Num Counters: +2 +# Counter Values: +1400000 +14 + diff --git a/llvm/test/tools/llvm-profdata/multiple-profdata-merge.test b/llvm/test/tools/llvm-profdata/multiple-profdata-merge.test new file mode 100644 index 00000000000..da24cc9305f --- /dev/null +++ b/llvm/test/tools/llvm-profdata/multiple-profdata-merge.test @@ -0,0 +1,11 @@ +Test multi-thread merge of multiple profdata files. + +RUN: llvm-profdata merge %p/Inputs/multiple-profdata-merge.proftext -o %t +RUN: llvm-profdata merge -j 4 %t %t %t %t -o %t_2 +RUN: llvm-profdata show %t_2 | FileCheck %s + +; CHECK:Total functions: 11 +; CHECK:Maximum function count: 5600000 +; CHECK:Maximum internal block count: 2800000 + + |