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