[ProfileData] Fix data racing in merging indexed profiles

There is data racing to the static variable RecordIndex in index profile reader
when merging in multiple threads. Make it a member variable in
IndexedInstrProfReader to fix this.

Differential Revision: https://reviews.llvm.org/D38431

llvm-svn: 314990
This commit is contained in:
Rong Xu 2017-10-05 17:05:20 +00:00
parent d636a4062e
commit c705f0e0e8
4 changed files with 120 additions and 3 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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

View File

@ -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