summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustin Bogner <mail@justinbogner.com>2014-09-15 03:41:01 +0000
committerJustin Bogner <mail@justinbogner.com>2014-09-15 03:41:01 +0000
commitaee36f94396f1b7eb301a1ff01230fa7fa33cd2f (patch)
tree41455747d89e461cf4423e65cb1b7d04160fb02f
parent0a98790b3202a5888c824fa9c3d18c3e484f8d69 (diff)
downloadbcm5719-llvm-aee36f94396f1b7eb301a1ff01230fa7fa33cd2f.tar.gz
bcm5719-llvm-aee36f94396f1b7eb301a1ff01230fa7fa33cd2f.zip
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. llvm-svn: 217745
-rw-r--r--llvm/include/llvm/ProfileData/CoverageMapping.h26
-rw-r--r--llvm/tools/llvm-cov/SourceCoverageDataManager.cpp9
2 files changed, 17 insertions, 18 deletions
diff --git a/llvm/include/llvm/ProfileData/CoverageMapping.h b/llvm/include/llvm/ProfileData/CoverageMapping.h
index 144fc521755..4c74436c0b7 100644
--- a/llvm/include/llvm/ProfileData/CoverageMapping.h
+++ b/llvm/include/llvm/ProfileData/CoverageMapping.h
@@ -164,30 +164,26 @@ struct CounterMappingRegion {
ColumnStart(ColumnStart), LineEnd(LineEnd), ColumnEnd(ColumnEnd),
Kind(Kind), HasCodeBefore(HasCodeBefore) {}
+ inline std::pair<unsigned, unsigned> startLoc() const {
+ return std::pair<unsigned, unsigned>(LineStart, ColumnStart);
+ }
+
+ inline std::pair<unsigned, unsigned> endLoc() const {
+ return std::pair<unsigned, unsigned>(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/llvm/tools/llvm-cov/SourceCoverageDataManager.cpp b/llvm/tools/llvm-cov/SourceCoverageDataManager.cpp
index f64162822ab..6f7c8e5d985 100644
--- a/llvm/tools/llvm-cov/SourceCoverageDataManager.cpp
+++ b/llvm/tools/llvm-cov/SourceCoverageDataManager.cpp
@@ -26,13 +26,16 @@ ArrayRef<CountedRegion> 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;
}
OpenPOWER on IntegriCloud