[llvm] r319990 - [Coverage] Scan ahead for the most-recent completed count (PR35495)
Vedant Kumar via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 6 16:01:16 PST 2017
Author: vedantk
Date: Wed Dec 6 16:01:15 2017
New Revision: 319990
URL: http://llvm.org/viewvc/llvm-project?rev=319990&view=rev
Log:
[Coverage] Scan ahead for the most-recent completed count (PR35495)
This extends r319391. It teaches the segment builder to emit the right
completed segment when more than one region ends at the same location.
Fixes PR35495.
Modified:
llvm/trunk/lib/ProfileData/Coverage/CoverageMapping.cpp
llvm/trunk/unittests/ProfileData/CoverageMappingTest.cpp
Modified: llvm/trunk/lib/ProfileData/Coverage/CoverageMapping.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ProfileData/Coverage/CoverageMapping.cpp?rev=319990&r1=319989&r2=319990&view=diff
==============================================================================
--- llvm/trunk/lib/ProfileData/Coverage/CoverageMapping.cpp (original)
+++ llvm/trunk/lib/ProfileData/Coverage/CoverageMapping.cpp Wed Dec 6 16:01:15 2017
@@ -388,11 +388,10 @@ class SegmentBuilder {
if (CompletedSegmentLoc == CompletedRegion->endLoc())
continue;
- // Use the count from the next completed region if it ends at the same
- // location.
- if (I + 1 < E &&
- CompletedRegion->endLoc() == ActiveRegions[I + 1]->endLoc())
- CompletedRegion = ActiveRegions[I + 1];
+ // Use the count from the last completed region which ends at this loc.
+ for (unsigned J = I + 1; J < E; ++J)
+ if (CompletedRegion->endLoc() == ActiveRegions[J]->endLoc())
+ CompletedRegion = ActiveRegions[J];
startSegment(*CompletedRegion, CompletedSegmentLoc, false);
}
Modified: llvm/trunk/unittests/ProfileData/CoverageMappingTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ProfileData/CoverageMappingTest.cpp?rev=319990&r1=319989&r2=319990&view=diff
==============================================================================
--- llvm/trunk/unittests/ProfileData/CoverageMappingTest.cpp (original)
+++ llvm/trunk/unittests/ProfileData/CoverageMappingTest.cpp Wed Dec 6 16:01:15 2017
@@ -470,8 +470,9 @@ TEST_P(CoverageMappingTest, multiple_com
ProfileWriter.addRecord({"func1", 0x1234, {0, 1, 2}}, Err);
startFunction("func1", 0x1234);
- // PR35437
+ // PR35495
addCMR(Counter::getCounter(1), "file1", 2, 1, 18, 2);
+ addCMR(Counter::getCounter(0), "file1", 8, 10, 14, 6);
addCMR(Counter::getCounter(0), "file1", 8, 12, 14, 6);
addCMR(Counter::getCounter(1), "file1", 9, 1, 14, 6);
addCMR(Counter::getCounter(2), "file1", 11, 13, 11, 14);
@@ -482,14 +483,15 @@ TEST_P(CoverageMappingTest, multiple_com
CoverageData Data = LoadedCoverage->getCoverageForFunction(FunctionRecord);
std::vector<CoverageSegment> Segments(Data.begin(), Data.end());
- ASSERT_EQ(6U, Segments.size());
+ ASSERT_EQ(7U, Segments.size());
EXPECT_EQ(CoverageSegment(2, 1, 1, true), Segments[0]);
- EXPECT_EQ(CoverageSegment(8, 12, 0, true), Segments[1]);
- EXPECT_EQ(CoverageSegment(9, 1, 1, true), Segments[2]);
- EXPECT_EQ(CoverageSegment(11, 13, 2, true), Segments[3]);
+ EXPECT_EQ(CoverageSegment(8, 10, 0, true), Segments[1]);
+ EXPECT_EQ(CoverageSegment(8, 12, 0, true), Segments[2]);
+ EXPECT_EQ(CoverageSegment(9, 1, 1, true), Segments[3]);
+ EXPECT_EQ(CoverageSegment(11, 13, 2, true), Segments[4]);
// Use count=1 (from 9:1 -> 14:6), not count=0 (from 8:12 -> 14:6).
- EXPECT_EQ(CoverageSegment(11, 14, 1, false), Segments[4]);
- EXPECT_EQ(CoverageSegment(18, 2, false), Segments[5]);
+ EXPECT_EQ(CoverageSegment(11, 14, 1, false), Segments[5]);
+ EXPECT_EQ(CoverageSegment(18, 2, false), Segments[6]);
}
TEST_P(CoverageMappingTest, dont_emit_redundant_segments) {
More information about the llvm-commits
mailing list