summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/ProfileData/CoverageMappingTest.cpp
diff options
context:
space:
mode:
authorIgor Kudrin <ikudrin.dev@gmail.com>2016-04-25 09:43:37 +0000
committerIgor Kudrin <ikudrin.dev@gmail.com>2016-04-25 09:43:37 +0000
commited99a96f06d29c7bf3e4a8b5054e6c8fa08410ab (patch)
tree8d19f7177da2bd6b05d21bd521998557a575bdc2 /llvm/unittests/ProfileData/CoverageMappingTest.cpp
parent795c629ec93cfa4da558df3231c1309fbe6883be (diff)
downloadbcm5719-llvm-ed99a96f06d29c7bf3e4a8b5054e6c8fa08410ab.tar.gz
bcm5719-llvm-ed99a96f06d29c7bf3e4a8b5054e6c8fa08410ab.zip
[Coverage] Restore the correct count value after processing a nested region in case of combined regions.
If several regions cover the same area of code, we have to restore the combined value for that area when return from a nested region. This patch achieves that by combining regions before calling buildSegments. Differential Revision: http://reviews.llvm.org/D18610 llvm-svn: 267390
Diffstat (limited to 'llvm/unittests/ProfileData/CoverageMappingTest.cpp')
-rw-r--r--llvm/unittests/ProfileData/CoverageMappingTest.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/unittests/ProfileData/CoverageMappingTest.cpp b/llvm/unittests/ProfileData/CoverageMappingTest.cpp
index 5983d709158..a230d9d59bf 100644
--- a/llvm/unittests/ProfileData/CoverageMappingTest.cpp
+++ b/llvm/unittests/ProfileData/CoverageMappingTest.cpp
@@ -402,6 +402,26 @@ TEST_P(MaybeSparseCoverageMappingTest, combine_regions) {
ASSERT_EQ(CoverageSegment(9, 9, false), Segments[3]);
}
+TEST_P(MaybeSparseCoverageMappingTest,
+ restore_combined_counter_after_nested_region) {
+ InstrProfRecord Record("func", 0x1234, {10, 20, 40});
+ ProfileWriter.addRecord(std::move(Record));
+
+ startFunction("func", 0x1234);
+ addCMR(Counter::getCounter(0), "file1", 1, 1, 9, 9);
+ addCMR(Counter::getCounter(1), "file1", 1, 1, 9, 9);
+ addCMR(Counter::getCounter(2), "file1", 3, 3, 5, 5);
+ loadCoverageMapping();
+
+ CoverageData Data = LoadedCoverage->getCoverageForFile("file1");
+ std::vector<CoverageSegment> Segments(Data.begin(), Data.end());
+ ASSERT_EQ(4U, Segments.size());
+ EXPECT_EQ(CoverageSegment(1, 1, 30, true), Segments[0]);
+ EXPECT_EQ(CoverageSegment(3, 3, 40, true), Segments[1]);
+ EXPECT_EQ(CoverageSegment(5, 5, 30, false), Segments[2]);
+ EXPECT_EQ(CoverageSegment(9, 9, false), Segments[3]);
+}
+
TEST_P(MaybeSparseCoverageMappingTest, dont_combine_expansions) {
InstrProfRecord Record1("func", 0x1234, {10, 20});
InstrProfRecord Record2("func", 0x1234, {0, 0});
OpenPOWER on IntegriCloud