[PATCH] D138847: MC/DC in LLVM Source-Based Code Coverage: llvm-cov visualization

Alan Phipps via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 13 07:02:44 PDT 2023


alanphipps marked 2 inline comments as done.
alanphipps added inline comments.


================
Comment at: llvm/include/llvm/ProfileData/Coverage/CoverageMapping.h:238
+    /// A Branch Region can be extended to include IDs to facilitate MC/DC.
+    MCDCBranchRegion
   };
----------------
Ibnmardanis24 wrote:
> gulfem wrote:
> > What is the purpose of `MCDCBranchRegion`?  We already have branch regions, and why adding `MCDCDecisionRegion` is not enough? 
> My understanding is that MCDCDecisionRegion is used for storing the set of minimum condition permutations required for complete MC/DC coverage. This is fundamentally different from BranchRegion's purpose. BranchRegion records the path taken, rather than the condition set that produced it. There is an interesting interaction between the 2, which I believe to be the reason for MCDCBranchRegion: when on a given path, subsequent branching could be conditioned by the particular permutation that allowed it, meaning the path taken downstream could be guessed from MC/DC information. This condition projection can only be done when on MC/DC mode and it also requires more space to exercise. Therefore, this should justify having BranchRegion and MCDCBranchRegion separated.
Yes there are three region types that apply:

1.) "BranchRegion" applies to BranchCoverage when MC/DC is not enabled or to single conditions (where MC/DC doesn't make sense) and simply represents the True/False Counters for a condition.  This is also maintained for backward compatibility in the format.  It requires less data than MCDCBranchRegion.

2.) "MCDCBranchRegion" extends "BranchRegion" to also apply condition IDs to the condition and is only used when MC/DC is enabled and used.

3.) "MCDCDecisionRegion" is intended to apply to the entire set of conditions in the boolean expression, supplying the source begin/end for the whole region, and supply bitmap index used to track the test vectors for the region.

llvm-cov associates MCDCDecisionRegion with a set of MCDCBranchRegions based on its tie to the source code.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138847/new/

https://reviews.llvm.org/D138847



More information about the llvm-commits mailing list