aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/ProfileData/Coverage/CoverageMapping.cpp
diff options
context:
space:
mode:
authorKeith Smiley <keithbsmiley@gmail.com>2025-06-13 10:04:45 -0700
committerGitHub <noreply@github.com>2025-06-13 10:04:45 -0700
commit65d88d31ea279bbab8a0fa2c8abfb3f723a1715b (patch)
treecf0b436393566036be4f0ef397867a0729500146 /llvm/lib/ProfileData/Coverage/CoverageMapping.cpp
parent2704b27a0b452f4aaf87ab26d315fdc92857373a (diff)
downloadllvm-65d88d31ea279bbab8a0fa2c8abfb3f723a1715b.zip
llvm-65d88d31ea279bbab8a0fa2c8abfb3f723a1715b.tar.gz
llvm-65d88d31ea279bbab8a0fa2c8abfb3f723a1715b.tar.bz2
Revert "[llvm-cov] Add support for baseline coverage" (#144121)
Reverts llvm/llvm-project#117910 ``` /home/buildbots/llvm-external-buildbots/workers/ppc64le-lld-multistage-test/ppc64le-lld-multistage-test/llvm-project/llvm/unittests/ProfileData/CoverageMappingTest.cpp /home/buildbots/llvm-external-buildbots/workers/ppc64le-lld-multistage-test/ppc64le-lld-multistage-test/llvm-project/llvm/unittests/ProfileData/CoverageMappingTest.cpp:281:28: error: 'std::reference_wrapper' may not intend to support class template argument deduction [-Werror,-Wctad-maybe-unsupported] 281 | std::make_optional(std::reference_wrapper(*ProfileReader)); | ^ /usr/lib/gcc/ppc64le-redhat-linux/8/../../../../include/c++/8/bits/refwrap.h:289:11: note: add a deduction guide to suppress this warning 289 | class reference_wrapper | ^ ```
Diffstat (limited to 'llvm/lib/ProfileData/Coverage/CoverageMapping.cpp')
-rw-r--r--llvm/lib/ProfileData/Coverage/CoverageMapping.cpp123
1 files changed, 48 insertions, 75 deletions
diff --git a/llvm/lib/ProfileData/Coverage/CoverageMapping.cpp b/llvm/lib/ProfileData/Coverage/CoverageMapping.cpp
index 429ec5c..dd74eb0 100644
--- a/llvm/lib/ProfileData/Coverage/CoverageMapping.cpp
+++ b/llvm/lib/ProfileData/Coverage/CoverageMapping.cpp
@@ -823,8 +823,7 @@ public:
Error CoverageMapping::loadFunctionRecord(
const CoverageMappingRecord &Record,
- const std::optional<std::reference_wrapper<IndexedInstrProfReader>>
- &ProfileReader) {
+ IndexedInstrProfReader &ProfileReader) {
StringRef OrigFuncName = Record.FunctionName;
if (OrigFuncName.empty())
return make_error<CoverageMapError>(coveragemap_error::malformed,
@@ -838,44 +837,35 @@ Error CoverageMapping::loadFunctionRecord(
CounterMappingContext Ctx(Record.Expressions);
std::vector<uint64_t> Counts;
- if (ProfileReader) {
- if (Error E = ProfileReader.value().get().getFunctionCounts(
- Record.FunctionName, Record.FunctionHash, Counts)) {
- instrprof_error IPE = std::get<0>(InstrProfError::take(std::move(E)));
- if (IPE == instrprof_error::hash_mismatch) {
- FuncHashMismatches.emplace_back(std::string(Record.FunctionName),
- Record.FunctionHash);
- return Error::success();
- }
- if (IPE != instrprof_error::unknown_function)
- return make_error<InstrProfError>(IPE);
- Counts.assign(getMaxCounterID(Ctx, Record) + 1, 0);
+ if (Error E = ProfileReader.getFunctionCounts(Record.FunctionName,
+ Record.FunctionHash, Counts)) {
+ instrprof_error IPE = std::get<0>(InstrProfError::take(std::move(E)));
+ if (IPE == instrprof_error::hash_mismatch) {
+ FuncHashMismatches.emplace_back(std::string(Record.FunctionName),
+ Record.FunctionHash);
+ return Error::success();
}
- } else {
+ if (IPE != instrprof_error::unknown_function)
+ return make_error<InstrProfError>(IPE);
Counts.assign(getMaxCounterID(Ctx, Record) + 1, 0);
}
Ctx.setCounts(Counts);
bool IsVersion11 =
- ProfileReader && ProfileReader.value().get().getVersion() <
- IndexedInstrProf::ProfVersion::Version12;
+ ProfileReader.getVersion() < IndexedInstrProf::ProfVersion::Version12;
BitVector Bitmap;
- if (ProfileReader) {
- if (Error E = ProfileReader.value().get().getFunctionBitmap(
- Record.FunctionName, Record.FunctionHash, Bitmap)) {
- instrprof_error IPE = std::get<0>(InstrProfError::take(std::move(E)));
- if (IPE == instrprof_error::hash_mismatch) {
- FuncHashMismatches.emplace_back(std::string(Record.FunctionName),
- Record.FunctionHash);
- return Error::success();
- }
- if (IPE != instrprof_error::unknown_function)
- return make_error<InstrProfError>(IPE);
- Bitmap = BitVector(getMaxBitmapSize(Record, IsVersion11));
+ if (Error E = ProfileReader.getFunctionBitmap(Record.FunctionName,
+ Record.FunctionHash, Bitmap)) {
+ instrprof_error IPE = std::get<0>(InstrProfError::take(std::move(E)));
+ if (IPE == instrprof_error::hash_mismatch) {
+ FuncHashMismatches.emplace_back(std::string(Record.FunctionName),
+ Record.FunctionHash);
+ return Error::success();
}
- } else {
- Bitmap = BitVector(getMaxBitmapSize(Record, false));
+ if (IPE != instrprof_error::unknown_function)
+ return make_error<InstrProfError>(IPE);
+ Bitmap = BitVector(getMaxBitmapSize(Record, IsVersion11));
}
Ctx.setBitmap(std::move(Bitmap));
@@ -969,14 +959,10 @@ Error CoverageMapping::loadFunctionRecord(
// of CoverageMappingReader instances.
Error CoverageMapping::loadFromReaders(
ArrayRef<std::unique_ptr<CoverageMappingReader>> CoverageReaders,
- std::optional<std::reference_wrapper<IndexedInstrProfReader>>
- &ProfileReader,
- CoverageMapping &Coverage) {
- assert(!Coverage.SingleByteCoverage || !ProfileReader ||
- *Coverage.SingleByteCoverage ==
- ProfileReader.value().get().hasSingleByteCoverage());
- Coverage.SingleByteCoverage =
- !ProfileReader || ProfileReader.value().get().hasSingleByteCoverage();
+ IndexedInstrProfReader &ProfileReader, CoverageMapping &Coverage) {
+ assert(!Coverage.SingleByteCoverage ||
+ *Coverage.SingleByteCoverage == ProfileReader.hasSingleByteCoverage());
+ Coverage.SingleByteCoverage = ProfileReader.hasSingleByteCoverage();
for (const auto &CoverageReader : CoverageReaders) {
for (auto RecordOrErr : *CoverageReader) {
if (Error E = RecordOrErr.takeError())
@@ -991,8 +977,7 @@ Error CoverageMapping::loadFromReaders(
Expected<std::unique_ptr<CoverageMapping>> CoverageMapping::load(
ArrayRef<std::unique_ptr<CoverageMappingReader>> CoverageReaders,
- std::optional<std::reference_wrapper<IndexedInstrProfReader>>
- &ProfileReader) {
+ IndexedInstrProfReader &ProfileReader) {
auto Coverage = std::unique_ptr<CoverageMapping>(new CoverageMapping());
if (Error E = loadFromReaders(CoverageReaders, ProfileReader, *Coverage))
return std::move(E);
@@ -1001,19 +986,18 @@ Expected<std::unique_ptr<CoverageMapping>> CoverageMapping::load(
// If E is a no_data_found error, returns success. Otherwise returns E.
static Error handleMaybeNoDataFoundError(Error E) {
- return handleErrors(std::move(E), [](const CoverageMapError &CME) {
- if (CME.get() == coveragemap_error::no_data_found)
- return static_cast<Error>(Error::success());
- return make_error<CoverageMapError>(CME.get(), CME.getMessage());
- });
+ return handleErrors(
+ std::move(E), [](const CoverageMapError &CME) {
+ if (CME.get() == coveragemap_error::no_data_found)
+ return static_cast<Error>(Error::success());
+ return make_error<CoverageMapError>(CME.get(), CME.getMessage());
+ });
}
Error CoverageMapping::loadFromFile(
StringRef Filename, StringRef Arch, StringRef CompilationDir,
- std::optional<std::reference_wrapper<IndexedInstrProfReader>>
- &ProfileReader,
- CoverageMapping &Coverage, bool &DataFound,
- SmallVectorImpl<object::BuildID> *FoundBinaryIDs) {
+ IndexedInstrProfReader &ProfileReader, CoverageMapping &Coverage,
+ bool &DataFound, SmallVectorImpl<object::BuildID> *FoundBinaryIDs) {
auto CovMappingBufOrErr = MemoryBuffer::getFileOrSTDIN(
Filename, /*IsText=*/false, /*RequiresNullTerminator=*/false);
if (std::error_code EC = CovMappingBufOrErr.getError())
@@ -1049,23 +1033,13 @@ Error CoverageMapping::loadFromFile(
}
Expected<std::unique_ptr<CoverageMapping>> CoverageMapping::load(
- ArrayRef<StringRef> ObjectFilenames,
- std::optional<StringRef> ProfileFilename, vfs::FileSystem &FS,
- ArrayRef<StringRef> Arches, StringRef CompilationDir,
+ ArrayRef<StringRef> ObjectFilenames, StringRef ProfileFilename,
+ vfs::FileSystem &FS, ArrayRef<StringRef> Arches, StringRef CompilationDir,
const object::BuildIDFetcher *BIDFetcher, bool CheckBinaryIDs) {
- std::unique_ptr<IndexedInstrProfReader> ProfileReader;
- if (ProfileFilename) {
- auto ProfileReaderOrErr =
- IndexedInstrProfReader::create(ProfileFilename.value(), FS);
- if (Error E = ProfileReaderOrErr.takeError())
- return createFileError(ProfileFilename.value(), std::move(E));
- ProfileReader = std::move(ProfileReaderOrErr.get());
- }
- auto ProfileReaderRef =
- ProfileReader
- ? std::optional<std::reference_wrapper<IndexedInstrProfReader>>(
- *ProfileReader)
- : std::nullopt;
+ auto ProfileReaderOrErr = IndexedInstrProfReader::create(ProfileFilename, FS);
+ if (Error E = ProfileReaderOrErr.takeError())
+ return createFileError(ProfileFilename, std::move(E));
+ auto ProfileReader = std::move(ProfileReaderOrErr.get());
auto Coverage = std::unique_ptr<CoverageMapping>(new CoverageMapping());
bool DataFound = false;
@@ -1079,17 +1053,16 @@ Expected<std::unique_ptr<CoverageMapping>> CoverageMapping::load(
SmallVector<object::BuildID> FoundBinaryIDs;
for (const auto &File : llvm::enumerate(ObjectFilenames)) {
- if (Error E = loadFromFile(File.value(), GetArch(File.index()),
- CompilationDir, ProfileReaderRef, *Coverage,
- DataFound, &FoundBinaryIDs))
+ if (Error E =
+ loadFromFile(File.value(), GetArch(File.index()), CompilationDir,
+ *ProfileReader, *Coverage, DataFound, &FoundBinaryIDs))
return std::move(E);
}
if (BIDFetcher) {
std::vector<object::BuildID> ProfileBinaryIDs;
- if (ProfileReader)
- if (Error E = ProfileReader->readBinaryIds(ProfileBinaryIDs))
- return createFileError(ProfileFilename.value(), std::move(E));
+ if (Error E = ProfileReader->readBinaryIds(ProfileBinaryIDs))
+ return createFileError(ProfileFilename, std::move(E));
SmallVector<object::BuildIDRef> BinaryIDsToFetch;
if (!ProfileBinaryIDs.empty()) {
@@ -1109,12 +1082,12 @@ Expected<std::unique_ptr<CoverageMapping>> CoverageMapping::load(
if (PathOpt) {
std::string Path = std::move(*PathOpt);
StringRef Arch = Arches.size() == 1 ? Arches.front() : StringRef();
- if (Error E = loadFromFile(Path, Arch, CompilationDir, ProfileReaderRef,
- *Coverage, DataFound))
+ if (Error E = loadFromFile(Path, Arch, CompilationDir, *ProfileReader,
+ *Coverage, DataFound))
return std::move(E);
} else if (CheckBinaryIDs) {
return createFileError(
- ProfileFilename.value(),
+ ProfileFilename,
createStringError(errc::no_such_file_or_directory,
"Missing binary ID: " +
llvm::toHex(BinaryID, /*LowerCase=*/true)));