diff options
author | Alan Phipps <a-phipps@ti.com> | 2023-12-13 14:13:56 -0600 |
---|---|---|
committer | Alan Phipps <a-phipps@ti.com> | 2023-12-13 15:10:05 -0600 |
commit | 8ecbb0404d740d1ab173554e47cef39cd5e3ef8c (patch) | |
tree | 93cc0afc02965f5ccc27dc83c7389662ef772661 /llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp | |
parent | 14d7e0bb0f75066da5d2eff718b6d59215a02077 (diff) | |
download | llvm-8ecbb0404d740d1ab173554e47cef39cd5e3ef8c.zip llvm-8ecbb0404d740d1ab173554e47cef39cd5e3ef8c.tar.gz llvm-8ecbb0404d740d1ab173554e47cef39cd5e3ef8c.tar.bz2 |
Reland "[Coverage][llvm-cov] Enable MC/DC Support in LLVM Source-based Code Coverage (2/3)"
Part 2 of 3. This includes the Visualization and Evaluation components.
Differential Revision: https://reviews.llvm.org/D138847
Diffstat (limited to 'llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp')
-rw-r--r-- | llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp b/llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp index d0a2e44..b43e9e6 100644 --- a/llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp +++ b/llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp @@ -335,6 +335,10 @@ void emitTableRow(raw_ostream &OS, const CoverageViewOptions &Opts, AddCoverageTripleToColumn(FCS.BranchCoverage.getCovered(), FCS.BranchCoverage.getNumBranches(), FCS.BranchCoverage.getPercentCovered()); + if (Opts.ShowMCDCSummary) + AddCoverageTripleToColumn(FCS.MCDCCoverage.getCoveredPairs(), + FCS.MCDCCoverage.getNumPairs(), + FCS.MCDCCoverage.getPercentCovered()); if (IsTotals) OS << tag("tr", join(Columns.begin(), Columns.end(), ""), "light-row-bold"); @@ -385,6 +389,8 @@ static void emitColumnLabelsForIndex(raw_ostream &OS, Columns.emplace_back(tag("td", "Region Coverage", "column-entry-bold")); if (Opts.ShowBranchSummary) Columns.emplace_back(tag("td", "Branch Coverage", "column-entry-bold")); + if (Opts.ShowMCDCSummary) + Columns.emplace_back(tag("td", "MC/DC", "column-entry-bold")); OS << tag("tr", join(Columns.begin(), Columns.end(), "")); } @@ -955,6 +961,52 @@ void SourceCoverageViewHTML::renderBranchView(raw_ostream &OS, BranchView &BRV, OS << EndExpansionDiv; } +void SourceCoverageViewHTML::renderMCDCView(raw_ostream &OS, MCDCView &MRV, + unsigned ViewDepth) { + for (auto &Record : MRV.Records) { + OS << BeginExpansionDiv; + OS << BeginPre; + OS << " MC/DC Decision Region ("; + + // Display Line + Column information. + const CounterMappingRegion &DecisionRegion = Record.getDecisionRegion(); + std::string LineNoStr = Twine(DecisionRegion.LineStart).str(); + std::string ColNoStr = Twine(DecisionRegion.ColumnStart).str(); + std::string TargetName = "L" + LineNoStr; + OS << tag("span", + a("#" + TargetName, tag("span", LineNoStr + ":" + ColNoStr), + TargetName), + "line-number") + + ") to ("; + LineNoStr = utostr(uint64_t(DecisionRegion.LineEnd)); + ColNoStr = utostr(uint64_t(DecisionRegion.ColumnEnd)); + OS << tag("span", + a("#" + TargetName, tag("span", LineNoStr + ":" + ColNoStr), + TargetName), + "line-number") + + ")\n\n"; + + // Display MC/DC Information. + OS << " Number of Conditions: " << Record.getNumConditions() << "\n"; + for (unsigned i = 0; i < Record.getNumConditions(); i++) { + OS << " " << Record.getConditionHeaderString(i); + } + OS << "\n"; + OS << " Executed MC/DC Test Vectors:\n\n "; + OS << Record.getTestVectorHeaderString(); + for (unsigned i = 0; i < Record.getNumTestVectors(); i++) + OS << Record.getTestVectorString(i); + OS << "\n"; + for (unsigned i = 0; i < Record.getNumConditions(); i++) + OS << Record.getConditionCoverageString(i); + OS << " MC/DC Coverage for Expression: "; + OS << format("%0.2f", Record.getPercentCovered()) << "%\n"; + OS << EndPre; + OS << EndExpansionDiv; + } + return; +} + void SourceCoverageViewHTML::renderInstantiationView(raw_ostream &OS, InstantiationView &ISV, unsigned ViewDepth) { |