From ed99a96f06d29c7bf3e4a8b5054e6c8fa08410ab Mon Sep 17 00:00:00 2001 From: Igor Kudrin Date: Mon, 25 Apr 2016 09:43:37 +0000 Subject: [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 --- llvm/unittests/ProfileData/CoverageMappingTest.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'llvm/unittests/ProfileData/CoverageMappingTest.cpp') 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 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}); -- cgit v1.2.3