From ab76e48ac2c2dbfc7d6a600b9b0dd0672e6d9439 Mon Sep 17 00:00:00 2001 From: NAKAMURA Takumi Date: Thu, 15 Feb 2024 16:24:37 +0900 Subject: [MC/DC] Refactor: Let MCDCConditionID int16_t with zero-origin (#81257) Also, Let `NumConditions` `uint16_t`. It is smarter to handle the ID as signed. Narrowing to `int16_t` will reduce costs of handling byvalue. (See also #81221 and #81227) External behavior doesn't change. They below handle values as internal values plus 1. * `-dump-coverage-mapping` * `CoverageMappingReader.cpp` * `CoverageMappingWriter.cpp` --- .../ProfileData/Coverage/CoverageMappingReader.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp') diff --git a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp index de7be52..d328460 100644 --- a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp +++ b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp @@ -244,7 +244,9 @@ Error RawCoverageMappingReader::readMappingRegionsSubArray( unsigned LineStart = 0; for (size_t I = 0; I < NumRegions; ++I) { Counter C, C2; - uint64_t BIDX, NC, ID, TID, FID; + uint64_t BIDX, NC; + // They are stored as internal values plus 1 (min is -1) + uint64_t ID1, TID1, FID1; mcdc::Parameters Params; CounterMappingRegion::RegionKind Kind = CounterMappingRegion::CodeRegion; @@ -303,28 +305,29 @@ Error RawCoverageMappingReader::readMappingRegionsSubArray( return Err; if (auto Err = readCounter(C2)) return Err; - if (auto Err = readIntMax(ID, std::numeric_limits::max())) + if (auto Err = readIntMax(ID1, std::numeric_limits::max())) return Err; - if (auto Err = readIntMax(TID, std::numeric_limits::max())) + if (auto Err = readIntMax(TID1, std::numeric_limits::max())) return Err; - if (auto Err = readIntMax(FID, std::numeric_limits::max())) + if (auto Err = readIntMax(FID1, std::numeric_limits::max())) return Err; - if (ID == 0) + if (ID1 == 0) return make_error( coveragemap_error::malformed, "MCDCConditionID shouldn't be zero"); Params = mcdc::BranchParameters{ - static_cast(ID), - {static_cast(FID), static_cast(TID)}}; + static_cast(static_cast(ID1) - 1), + {static_cast(static_cast(FID1) - 1), + static_cast(static_cast(TID1) - 1)}}; break; case CounterMappingRegion::MCDCDecisionRegion: Kind = CounterMappingRegion::MCDCDecisionRegion; if (auto Err = readIntMax(BIDX, std::numeric_limits::max())) return Err; - if (auto Err = readIntMax(NC, std::numeric_limits::max())) + if (auto Err = readIntMax(NC, std::numeric_limits::max())) return Err; Params = mcdc::DecisionParameters{static_cast(BIDX), - static_cast(NC)}; + static_cast(NC)}; break; default: return make_error(coveragemap_error::malformed, -- cgit v1.1