Skip to content

Commit aa2fdc6

Browse files
authored
[Coverage] Move SingleByteCoverage out of CountedRegion (#110966)
`SingleByteCoverage` is not per-region attribute at least. Move it into `CoverageData` since it comes from `profdata`. Depends on: #120841
1 parent 223521b commit aa2fdc6

File tree

3 files changed

+30
-30
lines changed

3 files changed

+30
-30
lines changed

llvm/include/llvm/ProfileData/Coverage/CoverageMapping.h

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -364,19 +364,16 @@ struct CountedRegion : public CounterMappingRegion {
364364
uint64_t FalseExecutionCount;
365365
bool TrueFolded;
366366
bool FalseFolded;
367-
bool HasSingleByteCoverage;
368367

369-
CountedRegion(const CounterMappingRegion &R, uint64_t ExecutionCount,
370-
bool HasSingleByteCoverage)
368+
CountedRegion(const CounterMappingRegion &R, uint64_t ExecutionCount)
371369
: CounterMappingRegion(R), ExecutionCount(ExecutionCount),
372-
FalseExecutionCount(0), TrueFolded(false), FalseFolded(true),
373-
HasSingleByteCoverage(HasSingleByteCoverage) {}
370+
FalseExecutionCount(0), TrueFolded(false), FalseFolded(true) {}
374371

375372
CountedRegion(const CounterMappingRegion &R, uint64_t ExecutionCount,
376-
uint64_t FalseExecutionCount, bool HasSingleByteCoverage)
373+
uint64_t FalseExecutionCount)
377374
: CounterMappingRegion(R), ExecutionCount(ExecutionCount),
378375
FalseExecutionCount(FalseExecutionCount), TrueFolded(false),
379-
FalseFolded(false), HasSingleByteCoverage(HasSingleByteCoverage) {}
376+
FalseFolded(false) {}
380377
};
381378

382379
/// MCDC Record grouping all information together.
@@ -719,10 +716,9 @@ struct FunctionRecord {
719716
}
720717

721718
void pushRegion(CounterMappingRegion Region, uint64_t Count,
722-
uint64_t FalseCount, bool HasSingleByteCoverage) {
719+
uint64_t FalseCount) {
723720
if (Region.isBranch()) {
724-
CountedBranchRegions.emplace_back(Region, Count, FalseCount,
725-
HasSingleByteCoverage);
721+
CountedBranchRegions.emplace_back(Region, Count, FalseCount);
726722
// If either counter is hard-coded to zero, then this region represents a
727723
// constant-folded branch.
728724
CountedBranchRegions.back().TrueFolded = Region.Count.isZero();
@@ -731,8 +727,7 @@ struct FunctionRecord {
731727
}
732728
if (CountedRegions.empty())
733729
ExecutionCount = Count;
734-
CountedRegions.emplace_back(Region, Count, FalseCount,
735-
HasSingleByteCoverage);
730+
CountedRegions.emplace_back(Region, Count, FalseCount);
736731
}
737732
};
738733

@@ -895,14 +890,19 @@ class CoverageData {
895890
std::vector<CountedRegion> BranchRegions;
896891
std::vector<MCDCRecord> MCDCRecords;
897892

893+
bool SingleByteCoverage = false;
894+
898895
public:
899896
CoverageData() = default;
900897

901-
CoverageData(StringRef Filename) : Filename(Filename) {}
898+
CoverageData(bool Single, StringRef Filename)
899+
: Filename(Filename), SingleByteCoverage(Single) {}
902900

903901
/// Get the name of the file this data covers.
904902
StringRef getFilename() const { return Filename; }
905903

904+
bool getSingleByteCoverage() const { return SingleByteCoverage; }
905+
906906
/// Get an iterator over the coverage segments for this object. The segments
907907
/// are guaranteed to be uniqued and sorted by location.
908908
std::vector<CoverageSegment>::const_iterator begin() const {
@@ -935,6 +935,8 @@ class CoverageMapping {
935935
DenseMap<size_t, SmallVector<unsigned, 0>> FilenameHash2RecordIndices;
936936
std::vector<std::pair<std::string, uint64_t>> FuncHashMismatches;
937937

938+
std::optional<bool> SingleByteCoverage;
939+
938940
CoverageMapping() = default;
939941

940942
// Load coverage records from readers.

llvm/lib/ProfileData/Coverage/CoverageMapping.cpp

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -805,7 +805,6 @@ Error CoverageMapping::loadFunctionRecord(
805805
else
806806
OrigFuncName = getFuncNameWithoutPrefix(OrigFuncName, Record.Filenames[0]);
807807

808-
bool SingleByteCoverage = ProfileReader.hasSingleByteCoverage();
809808
CounterMappingContext Ctx(Record.Expressions);
810809

811810
std::vector<uint64_t> Counts;
@@ -871,10 +870,7 @@ Error CoverageMapping::loadFunctionRecord(
871870
consumeError(std::move(E));
872871
return Error::success();
873872
}
874-
Function.pushRegion(
875-
Region, (SingleByteCoverage && *ExecutionCount ? 1 : *ExecutionCount),
876-
(SingleByteCoverage && *AltExecutionCount ? 1 : *AltExecutionCount),
877-
SingleByteCoverage);
873+
Function.pushRegion(Region, *ExecutionCount, *AltExecutionCount);
878874

879875
// Record ExpansionRegion.
880876
if (Region.Kind == CounterMappingRegion::ExpansionRegion) {
@@ -936,6 +932,9 @@ Error CoverageMapping::loadFunctionRecord(
936932
Error CoverageMapping::loadFromReaders(
937933
ArrayRef<std::unique_ptr<CoverageMappingReader>> CoverageReaders,
938934
IndexedInstrProfReader &ProfileReader, CoverageMapping &Coverage) {
935+
assert(!Coverage.SingleByteCoverage ||
936+
*Coverage.SingleByteCoverage == ProfileReader.hasSingleByteCoverage());
937+
Coverage.SingleByteCoverage = ProfileReader.hasSingleByteCoverage();
939938
for (const auto &CoverageReader : CoverageReaders) {
940939
for (auto RecordOrErr : *CoverageReader) {
941940
if (Error E = RecordOrErr.takeError())
@@ -1296,14 +1295,8 @@ class SegmentBuilder {
12961295
// value for that area.
12971296
// We add counts of the regions of the same kind as the active region
12981297
// to handle the both situations.
1299-
if (I->Kind == Active->Kind) {
1300-
assert(I->HasSingleByteCoverage == Active->HasSingleByteCoverage &&
1301-
"Regions are generated in different coverage modes");
1302-
if (I->HasSingleByteCoverage)
1303-
Active->ExecutionCount = Active->ExecutionCount || I->ExecutionCount;
1304-
else
1305-
Active->ExecutionCount += I->ExecutionCount;
1306-
}
1298+
if (I->Kind == Active->Kind)
1299+
Active->ExecutionCount += I->ExecutionCount;
13071300
}
13081301
return Regions.drop_back(std::distance(++Active, End));
13091302
}
@@ -1396,7 +1389,8 @@ static bool isExpansion(const CountedRegion &R, unsigned FileID) {
13961389
}
13971390

13981391
CoverageData CoverageMapping::getCoverageForFile(StringRef Filename) const {
1399-
CoverageData FileCoverage(Filename);
1392+
assert(SingleByteCoverage);
1393+
CoverageData FileCoverage(*SingleByteCoverage, Filename);
14001394
std::vector<CountedRegion> Regions;
14011395

14021396
// Look up the function records in the given file. Due to hash collisions on
@@ -1460,7 +1454,9 @@ CoverageMapping::getCoverageForFunction(const FunctionRecord &Function) const {
14601454
if (!MainFileID)
14611455
return CoverageData();
14621456

1463-
CoverageData FunctionCoverage(Function.Filenames[*MainFileID]);
1457+
assert(SingleByteCoverage);
1458+
CoverageData FunctionCoverage(*SingleByteCoverage,
1459+
Function.Filenames[*MainFileID]);
14641460
std::vector<CountedRegion> Regions;
14651461
for (const auto &CR : Function.CountedRegions)
14661462
if (CR.FileID == *MainFileID) {
@@ -1487,8 +1483,9 @@ CoverageMapping::getCoverageForFunction(const FunctionRecord &Function) const {
14871483

14881484
CoverageData CoverageMapping::getCoverageForExpansion(
14891485
const ExpansionRecord &Expansion) const {
1486+
assert(SingleByteCoverage);
14901487
CoverageData ExpansionCoverage(
1491-
Expansion.Function.Filenames[Expansion.FileID]);
1488+
*SingleByteCoverage, Expansion.Function.Filenames[Expansion.FileID]);
14921489
std::vector<CountedRegion> Regions;
14931490
for (const auto &CR : Expansion.Function.CountedRegions)
14941491
if (CR.FileID == Expansion.FileID) {

llvm/tools/llvm-cov/SourceCoverageView.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,8 @@ class SourceCoverageView {
287287
CoverageData &&CoverageInfo)
288288
: SourceName(SourceName), File(File), Options(Options),
289289
CoverageInfo(std::move(CoverageInfo)),
290-
BinaryCounters(Options.BinaryCounters) {}
290+
BinaryCounters(Options.BinaryCounters ||
291+
CoverageInfo.getSingleByteCoverage()) {}
291292

292293
public:
293294
static std::unique_ptr<SourceCoverageView>

0 commit comments

Comments
 (0)