Skip to content

Commit c8edf58

Browse files
committed
Flatten with getBranchCounterPair(SkipCntForOld)
1 parent 6bae87d commit c8edf58

File tree

1 file changed

+44
-51
lines changed

1 file changed

+44
-51
lines changed

clang/lib/CodeGen/CoverageMappingGen.cpp

Lines changed: 44 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -939,8 +939,17 @@ struct CounterCoverageMappingBuilder
939939
Counter Skipped;
940940
};
941941

942-
BranchCounterPair getBranchCounterPair(const Stmt *S, Counter ParentCnt) {
942+
BranchCounterPair
943+
getBranchCounterPair(const Stmt *S, Counter ParentCnt,
944+
std::optional<Counter> SkipCntForOld = std::nullopt) {
943945
Counter ExecCnt = getRegionCounter(S);
946+
947+
// The old behavior of SingleByte shouldn't emit Branches.
948+
if (llvm::EnableSingleByteCoverage) {
949+
assert(SkipCntForOld);
950+
return {ExecCnt, *SkipCntForOld};
951+
}
952+
944953
return {ExecCnt, Builder.subtract(ParentCnt, ExecCnt)};
945954
}
946955

@@ -1601,14 +1610,10 @@ struct CounterCoverageMappingBuilder
16011610
llvm::EnableSingleByteCoverage
16021611
? getRegionCounter(S->getCond())
16031612
: addCounters(ParentCount, BackedgeCount, BC.ContinueCount);
1604-
auto BranchCount =
1605-
(llvm::EnableSingleByteCoverage
1606-
? BranchCounterPair{getRegionCounter(S), Counter::getZero()}
1607-
: getBranchCounterPair(S, CondCount));
1608-
if (!llvm::EnableSingleByteCoverage) {
1609-
assert(BranchCount.Executed.isZero() ||
1610-
BranchCount.Executed == BodyCount);
1611-
}
1613+
auto BranchCount = getBranchCounterPair(S, CondCount, getRegionCounter(S));
1614+
assert(BranchCount.Executed.isZero() || BranchCount.Executed == BodyCount ||
1615+
llvm::EnableSingleByteCoverage);
1616+
16121617
propagateCounts(CondCount, S->getCond());
16131618
adjustForOutOfOrderTraversal(getEnd(S));
16141619

@@ -1617,10 +1622,10 @@ struct CounterCoverageMappingBuilder
16171622
if (Gap)
16181623
fillGapAreaWithCount(Gap->getBegin(), Gap->getEnd(), BodyCount);
16191624

1620-
Counter OutCount = llvm::EnableSingleByteCoverage
1621-
? getRegionCounter(S)
1622-
: addCounters(BC.BreakCount, BranchCount.Skipped);
1623-
1625+
assert(
1626+
!llvm::EnableSingleByteCoverage ||
1627+
(BC.BreakCount.isZero() && BranchCount.Skipped == getRegionCounter(S)));
1628+
Counter OutCount = addCounters(BC.BreakCount, BranchCount.Skipped);
16241629
if (!IsCounterEqual(OutCount, ParentCount)) {
16251630
pushRegion(OutCount);
16261631
GapRegionCounter = OutCount;
@@ -1659,19 +1664,16 @@ struct CounterCoverageMappingBuilder
16591664
Counter CondCount = llvm::EnableSingleByteCoverage
16601665
? getRegionCounter(S->getCond())
16611666
: addCounters(BackedgeCount, BC.ContinueCount);
1662-
auto BranchCount =
1663-
(llvm::EnableSingleByteCoverage
1664-
? BranchCounterPair{getRegionCounter(S), Counter::getZero()}
1665-
: getBranchCounterPair(S, CondCount));
1666-
if (!llvm::EnableSingleByteCoverage) {
1667-
assert(BranchCount.Executed.isZero() ||
1668-
BranchCount.Executed == BodyCount);
1669-
}
1667+
auto BranchCount = getBranchCounterPair(S, CondCount, getRegionCounter(S));
1668+
assert(BranchCount.Executed.isZero() || BranchCount.Executed == BodyCount ||
1669+
llvm::EnableSingleByteCoverage);
1670+
16701671
propagateCounts(CondCount, S->getCond());
16711672

1672-
Counter OutCount = llvm::EnableSingleByteCoverage
1673-
? getRegionCounter(S)
1674-
: addCounters(BC.BreakCount, BranchCount.Skipped);
1673+
assert(
1674+
!llvm::EnableSingleByteCoverage ||
1675+
(BC.BreakCount.isZero() && BranchCount.Skipped == getRegionCounter(S)));
1676+
Counter OutCount = addCounters(BC.BreakCount, BranchCount.Skipped);
16751677
if (!IsCounterEqual(OutCount, ParentCount)) {
16761678
pushRegion(OutCount);
16771679
GapRegionCounter = OutCount;
@@ -1728,14 +1730,9 @@ struct CounterCoverageMappingBuilder
17281730
: addCounters(
17291731
addCounters(ParentCount, BackedgeCount, BodyBC.ContinueCount),
17301732
IncrementBC.ContinueCount);
1731-
auto BranchCount =
1732-
(llvm::EnableSingleByteCoverage
1733-
? BranchCounterPair{getRegionCounter(S), Counter::getZero()}
1734-
: getBranchCounterPair(S, CondCount));
1735-
if (!llvm::EnableSingleByteCoverage) {
1736-
assert(BranchCount.Executed.isZero() ||
1737-
BranchCount.Executed == BodyCount);
1738-
}
1733+
auto BranchCount = getBranchCounterPair(S, CondCount, getRegionCounter(S));
1734+
assert(BranchCount.Executed.isZero() || BranchCount.Executed == BodyCount ||
1735+
llvm::EnableSingleByteCoverage);
17391736

17401737
if (const Expr *Cond = S->getCond()) {
17411738
propagateCounts(CondCount, Cond);
@@ -1747,11 +1744,10 @@ struct CounterCoverageMappingBuilder
17471744
if (Gap)
17481745
fillGapAreaWithCount(Gap->getBegin(), Gap->getEnd(), BodyCount);
17491746

1750-
Counter OutCount =
1751-
llvm::EnableSingleByteCoverage
1752-
? getRegionCounter(S)
1753-
: addCounters(BodyBC.BreakCount, IncrementBC.BreakCount,
1754-
BranchCount.Skipped);
1747+
assert(!llvm::EnableSingleByteCoverage ||
1748+
(BodyBC.BreakCount.isZero() && IncrementBC.BreakCount.isZero()));
1749+
Counter OutCount = addCounters(BodyBC.BreakCount, IncrementBC.BreakCount,
1750+
BranchCount.Skipped);
17551751
if (!IsCounterEqual(OutCount, ParentCount)) {
17561752
pushRegion(OutCount);
17571753
GapRegionCounter = OutCount;
@@ -1789,19 +1785,16 @@ struct CounterCoverageMappingBuilder
17891785
if (Gap)
17901786
fillGapAreaWithCount(Gap->getBegin(), Gap->getEnd(), BodyCount);
17911787

1792-
Counter OutCount;
1793-
Counter ExitCount;
1794-
Counter LoopCount;
1795-
if (llvm::EnableSingleByteCoverage)
1796-
OutCount = getRegionCounter(S);
1797-
else {
1798-
LoopCount = addCounters(ParentCount, BackedgeCount, BC.ContinueCount);
1799-
auto BranchCount = getBranchCounterPair(S, LoopCount);
1800-
ExitCount = BranchCount.Skipped;
1801-
assert(BranchCount.Executed.isZero() ||
1802-
BranchCount.Executed == BodyCount);
1803-
OutCount = addCounters(BC.BreakCount, ExitCount);
1804-
}
1788+
Counter LoopCount =
1789+
addCounters(ParentCount, BackedgeCount, BC.ContinueCount);
1790+
auto BranchCount = getBranchCounterPair(S, LoopCount, getRegionCounter(S));
1791+
assert(BranchCount.Executed.isZero() || BranchCount.Executed == BodyCount ||
1792+
llvm::EnableSingleByteCoverage);
1793+
assert(
1794+
!llvm::EnableSingleByteCoverage ||
1795+
(BC.BreakCount.isZero() && BranchCount.Skipped == getRegionCounter(S)));
1796+
1797+
Counter OutCount = addCounters(BC.BreakCount, BranchCount.Skipped);
18051798
if (!IsCounterEqual(OutCount, ParentCount)) {
18061799
pushRegion(OutCount);
18071800
GapRegionCounter = OutCount;
@@ -1811,7 +1804,7 @@ struct CounterCoverageMappingBuilder
18111804

18121805
// Create Branch Region around condition.
18131806
if (!llvm::EnableSingleByteCoverage)
1814-
createBranchRegion(S->getCond(), BodyCount, ExitCount);
1807+
createBranchRegion(S->getCond(), BodyCount, BranchCount.Skipped);
18151808
}
18161809

18171810
void VisitObjCForCollectionStmt(const ObjCForCollectionStmt *S) {

0 commit comments

Comments
 (0)