From baca0016838d47d7c78605cdb1090f7bc11fc905 Mon Sep 17 00:00:00 2001 From: Justin Bogner Date: Mon, 15 Sep 2014 03:41:01 +0000 Subject: [PATCH] llvm-cov: Simplify CounterMappingRegion, pushing logic to its user A single function in SourceCoverageDataManager was the only user of some of the comparisons in CounterMappingRegion, and at this point we know that only one file is relevant. This lets us use slightly simpler logic directly in the client. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217745 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ProfileData/CoverageMapping.h | 26 +++++++++----------- tools/llvm-cov/SourceCoverageDataManager.cpp | 9 ++++--- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/include/llvm/ProfileData/CoverageMapping.h b/include/llvm/ProfileData/CoverageMapping.h index 144fc521755..4c74436c0b7 100644 --- a/include/llvm/ProfileData/CoverageMapping.h +++ b/include/llvm/ProfileData/CoverageMapping.h @@ -164,30 +164,26 @@ struct CounterMappingRegion { ColumnStart(ColumnStart), LineEnd(LineEnd), ColumnEnd(ColumnEnd), Kind(Kind), HasCodeBefore(HasCodeBefore) {} + inline std::pair startLoc() const { + return std::pair(LineStart, ColumnStart); + } + + inline std::pair endLoc() const { + return std::pair(LineEnd, ColumnEnd); + } + bool operator<(const CounterMappingRegion &Other) const { if (FileID != Other.FileID) return FileID < Other.FileID; - if (LineStart == Other.LineStart) - return ColumnStart < Other.ColumnStart; - return LineStart < Other.LineStart; - } - - bool coversSameSource(const CounterMappingRegion &Other) const { - return FileID == Other.FileID && - LineStart == Other.LineStart && - ColumnStart == Other.ColumnStart && - LineEnd == Other.LineEnd && - ColumnEnd == Other.ColumnEnd; + return startLoc() < Other.startLoc(); } bool contains(const CounterMappingRegion &Other) const { if (FileID != Other.FileID) return false; - if (LineStart > Other.LineStart || - (LineStart == Other.LineStart && ColumnStart > Other.ColumnStart)) + if (startLoc() > Other.startLoc()) return false; - if (LineEnd < Other.LineEnd || - (LineEnd == Other.LineEnd && ColumnEnd < Other.ColumnEnd)) + if (endLoc() < Other.endLoc()) return false; return true; } diff --git a/tools/llvm-cov/SourceCoverageDataManager.cpp b/tools/llvm-cov/SourceCoverageDataManager.cpp index f64162822ab..6f7c8e5d985 100644 --- a/tools/llvm-cov/SourceCoverageDataManager.cpp +++ b/tools/llvm-cov/SourceCoverageDataManager.cpp @@ -26,13 +26,16 @@ ArrayRef SourceCoverageDataManager::getSourceRegions() { if (Uniqued || Regions.size() <= 1) return Regions; - // Sort. - std::sort(Regions.begin(), Regions.end()); + // Sort the regions given that they're all in the same file at this point. + std::sort(Regions.begin(), Regions.end(), + [](const CountedRegion &LHS, const CountedRegion &RHS) { + return LHS.startLoc() < RHS.startLoc(); + }); // Merge duplicate source ranges and sum their execution counts. auto Prev = Regions.begin(); for (auto I = Prev + 1, E = Regions.end(); I != E; ++I) { - if (I->coversSameSource(*Prev)) { + if (I->startLoc() == Prev->startLoc() && I->endLoc() == Prev->endLoc()) { Prev->ExecutionCount += I->ExecutionCount; continue; }