Skip to content

Commit cb9f66d

Browse files
committed
[Profile] Pass InstrProfSymtab instead of IndexedInstrProfReader when creating BinaryCoverageReader
Only InstrProfSymtab is needed to retrieve function names when debug info corrletaion is enabled.
1 parent 0722800 commit cb9f66d

File tree

3 files changed

+21
-14
lines changed

3 files changed

+21
-14
lines changed

llvm/include/llvm/ProfileData/Coverage/CoverageMappingReader.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,9 +203,10 @@ class BinaryCoverageReader : public CoverageMappingReader {
203203
BinaryCoverageReader &operator=(const BinaryCoverageReader &) = delete;
204204

205205
static Expected<std::vector<std::unique_ptr<BinaryCoverageReader>>>
206-
create(MemoryBufferRef ObjectBuffer, IndexedInstrProfReader &ProfileReader,
206+
create(MemoryBufferRef ObjectBuffer,
207207
StringRef Arch,
208208
SmallVectorImpl<std::unique_ptr<MemoryBuffer>> &ObjectFileBuffers,
209+
InstrProfSymtab IndexedProfSymTab,
209210
StringRef CompilationDir = "",
210211
SmallVectorImpl<object::BuildIDRef> *BinaryIDs = nullptr);
211212

llvm/lib/ProfileData/Coverage/CoverageMapping.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -358,11 +358,12 @@ Error CoverageMapping::loadFromFile(
358358
MemoryBufferRef CovMappingBufRef =
359359
CovMappingBufOrErr.get()->getMemBufferRef();
360360
SmallVector<std::unique_ptr<MemoryBuffer>, 4> Buffers;
361+
InstrProfSymtab& ProfSymTab = ProfileReader.getSymtab();
361362

362363
SmallVector<object::BuildIDRef> BinaryIDs;
363364
auto CoverageReadersOrErr = BinaryCoverageReader::create(
364-
CovMappingBufRef, ProfileReader, Arch, Buffers, CompilationDir,
365-
FoundBinaryIDs ? &BinaryIDs : nullptr);
365+
CovMappingBufRef, Arch, Buffers, ProfSymTab,
366+
CompilationDir, FoundBinaryIDs ? &BinaryIDs : nullptr);
366367
if (Error E = CoverageReadersOrErr.takeError()) {
367368
E = handleMaybeNoDataFoundError(std::move(E));
368369
if (E)

llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1037,9 +1037,8 @@ static Error getProfileNamesFromDebugInfo(StringRef FileName,
10371037
}
10381038

10391039
static Expected<std::unique_ptr<BinaryCoverageReader>>
1040-
loadBinaryFormat(std::unique_ptr<Binary> Bin,
1041-
IndexedInstrProfReader &ProfileReader, StringRef Arch,
1042-
StringRef CompilationDir = "",
1040+
loadBinaryFormat(std::unique_ptr<Binary> Bin, StringRef Arch,
1041+
InstrProfSymtab ProfSymTab, StringRef CompilationDir = "",
10431042
object::BuildIDRef *BinaryID = nullptr) {
10441043
std::unique_ptr<ObjectFile> OF;
10451044
if (auto *Universal = dyn_cast<MachOUniversalBinary>(Bin.get())) {
@@ -1068,7 +1067,12 @@ loadBinaryFormat(std::unique_ptr<Binary> Bin,
10681067

10691068
// Look for the sections that we are interested in.
10701069
auto ObjFormat = OF->getTripleObjectFormat();
1071-
InstrProfSymtab ProfileNames = ProfileReader.getSymtab();
1070+
// Without debug info correlation, all function names are stored in the
1071+
// binary's profile name section.
1072+
// When debug info correlation is enabled, instrumented function names are
1073+
// stored in the indexed profile file, and unused function names are stored in
1074+
// the binary's debug info.
1075+
InstrProfSymtab ProfileNames = ProfSymTab;
10721076
auto NamesSection =
10731077
lookupSections(*OF, getInstrProfSectionName(IPSK_name, ObjFormat,
10741078
/*AddSegmentInfo=*/false));
@@ -1086,6 +1090,7 @@ loadBinaryFormat(std::unique_ptr<Binary> Bin,
10861090
if (Error E = ProfileNames.create(NamesSectionRefs.back()))
10871091
return std::move(E);
10881092
}
1093+
10891094
auto CoverageSection =
10901095
lookupSections(*OF, getInstrProfSectionName(IPSK_covmap, ObjFormat,
10911096
/*AddSegmentInfo=*/false));
@@ -1169,10 +1174,10 @@ static bool isArchSpecifierInvalidOrMissing(Binary *Bin, StringRef Arch) {
11691174

11701175
Expected<std::vector<std::unique_ptr<BinaryCoverageReader>>>
11711176
BinaryCoverageReader::create(
1172-
MemoryBufferRef ObjectBuffer, IndexedInstrProfReader &ProfileReader,
1173-
StringRef Arch,
1177+
MemoryBufferRef ObjectBuffer, StringRef Arch,
11741178
SmallVectorImpl<std::unique_ptr<MemoryBuffer>> &ObjectFileBuffers,
1175-
StringRef CompilationDir, SmallVectorImpl<object::BuildIDRef> *BinaryIDs) {
1179+
InstrProfSymtab ProfSymTab, StringRef CompilationDir,
1180+
SmallVectorImpl<object::BuildIDRef> *BinaryIDs) {
11761181
std::vector<std::unique_ptr<BinaryCoverageReader>> Readers;
11771182

11781183
if (ObjectBuffer.getBuffer().size() > sizeof(TestingFormatMagic)) {
@@ -1216,8 +1221,8 @@ BinaryCoverageReader::create(
12161221
}
12171222

12181223
return BinaryCoverageReader::create(
1219-
ArchiveOrErr.get()->getMemoryBufferRef(), ProfileReader, Arch,
1220-
ObjectFileBuffers, CompilationDir, BinaryIDs);
1224+
ArchiveOrErr.get()->getMemoryBufferRef(), Arch,
1225+
ObjectFileBuffers, ProfSymTab, CompilationDir, BinaryIDs);
12211226
}
12221227
}
12231228

@@ -1230,7 +1235,7 @@ BinaryCoverageReader::create(
12301235
return ChildBufOrErr.takeError();
12311236

12321237
auto ChildReadersOrErr = BinaryCoverageReader::create(
1233-
ChildBufOrErr.get(), ProfileReader, Arch, ObjectFileBuffers,
1238+
ChildBufOrErr.get(), Arch, ObjectFileBuffers, ProfSymTab,
12341239
CompilationDir, BinaryIDs);
12351240
if (!ChildReadersOrErr)
12361241
return ChildReadersOrErr.takeError();
@@ -1252,7 +1257,7 @@ BinaryCoverageReader::create(
12521257

12531258
object::BuildIDRef BinaryID;
12541259
auto ReaderOrErr =
1255-
loadBinaryFormat(std::move(Bin), ProfileReader, Arch, CompilationDir,
1260+
loadBinaryFormat(std::move(Bin), Arch, ProfSymTab, CompilationDir,
12561261
BinaryIDs ? &BinaryID : nullptr);
12571262
if (!ReaderOrErr)
12581263
return ReaderOrErr.takeError();

0 commit comments

Comments
 (0)