diff options
author | Alan Phipps <a-phipps@ti.com> | 2023-09-18 15:49:56 -0500 |
---|---|---|
committer | Alan Phipps <a-phipps@ti.com> | 2023-09-20 15:30:47 -0500 |
commit | 618a22144db5e45da8c95dc22064103e1b5e5b71 (patch) | |
tree | 3d354382909b78f7293bbce1e6e00351b6ff59c6 /llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp | |
parent | 33dfd90700a11fb39802d0b1ab500f3a8efd7e78 (diff) | |
download | llvm-618a22144db5e45da8c95dc22064103e1b5e5b71.zip llvm-618a22144db5e45da8c95dc22064103e1b5e5b71.tar.gz llvm-618a22144db5e45da8c95dc22064103e1b5e5b71.tar.bz2 |
[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/lib/ProfileData/Coverage/CoverageMappingReader.cpp')
-rw-r--r-- | llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp index 5c888cb..5e2340e 100644 --- a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp +++ b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp @@ -245,6 +245,7 @@ Error RawCoverageMappingReader::readMappingRegionsSubArray( unsigned LineStart = 0; for (size_t I = 0; I < NumRegions; ++I) { Counter C, C2; + uint64_t BIDX = 0, NC = 0, ID = 0, TID = 0, FID = 0; CounterMappingRegion::RegionKind Kind = CounterMappingRegion::CodeRegion; // Read the combined counter + region kind. @@ -295,6 +296,27 @@ Error RawCoverageMappingReader::readMappingRegionsSubArray( if (auto Err = readCounter(C2)) return Err; break; + case CounterMappingRegion::MCDCBranchRegion: + // For a MCDC Branch Region, read two successive counters and 3 IDs. + Kind = CounterMappingRegion::MCDCBranchRegion; + if (auto Err = readCounter(C)) + return Err; + if (auto Err = readCounter(C2)) + return Err; + if (auto Err = readIntMax(ID, std::numeric_limits<unsigned>::max())) + return Err; + if (auto Err = readIntMax(TID, std::numeric_limits<unsigned>::max())) + return Err; + if (auto Err = readIntMax(FID, std::numeric_limits<unsigned>::max())) + return Err; + break; + case CounterMappingRegion::MCDCDecisionRegion: + Kind = CounterMappingRegion::MCDCDecisionRegion; + if (auto Err = readIntMax(BIDX, std::numeric_limits<unsigned>::max())) + return Err; + if (auto Err = readIntMax(NC, std::numeric_limits<unsigned>::max())) + return Err; + break; default: return make_error<CoverageMapError>(coveragemap_error::malformed, "region kind is incorrect"); @@ -348,9 +370,14 @@ Error RawCoverageMappingReader::readMappingRegionsSubArray( dbgs() << "\n"; }); - auto CMR = CounterMappingRegion(C, C2, InferredFileID, ExpandedFileID, - LineStart, ColumnStart, - LineStart + NumLines, ColumnEnd, Kind); + auto CMR = CounterMappingRegion( + C, C2, + CounterMappingRegion::MCDCParameters{ + static_cast<unsigned>(BIDX), static_cast<unsigned>(NC), + static_cast<unsigned>(ID), static_cast<unsigned>(TID), + static_cast<unsigned>(FID)}, + InferredFileID, ExpandedFileID, LineStart, ColumnStart, + LineStart + NumLines, ColumnEnd, Kind); if (CMR.startLoc() > CMR.endLoc()) return make_error<CoverageMapError>( coveragemap_error::malformed, |