Skip to content

Commit

Permalink
InstrProf: Treat functions with a coverage map but no profile as unre…
Browse files Browse the repository at this point in the history
…ached

If we have a coverage mapping but no profile data for a function,
calling it mismatched is misleading. This can just as easily be
unreachable code that was stripped from the binary. Instead, treat
these the same as functions where we have an explicit "zero" coverage
map by setting the count to zero for each mapped region.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237298 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
bogner committed May 13, 2015
1 parent da645e3 commit 42ab8c0
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
5 changes: 3 additions & 2 deletions lib/ProfileData/CoverageMapping.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -209,8 +209,9 @@ CoverageMapping::load(CoverageMappingReader &CoverageReader,
continue;
} else if (EC != instrprof_error::unknown_function)
return EC;
} else
Ctx.setCounts(Counts);
Counts.assign(Record.MappingRegions.size(), 0);
}
Ctx.setCounts(Counts);

assert(!Record.MappingRegions.empty() && "Function has no regions");

Expand Down
15 changes: 15 additions & 0 deletions unittests/ProfileData/CoverageMappingTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,21 @@ TEST_F(CoverageMappingTest, uncovered_function) {
ASSERT_EQ(CoverageSegment(3, 4, false), Segments[1]);
}

TEST_F(CoverageMappingTest, uncovered_function_with_mapping) {
readProfCounts();

addCMR(Counter::getCounter(0), "file1", 1, 1, 9, 9);
addCMR(Counter::getCounter(1), "file1", 1, 1, 4, 7);
loadCoverageMapping("func", 0x1234);

CoverageData Data = LoadedCoverage->getCoverageForFile("file1");
std::vector<CoverageSegment> Segments(Data.begin(), Data.end());
ASSERT_EQ(3U, Segments.size());
ASSERT_EQ(CoverageSegment(1, 1, 0, true), Segments[0]);
ASSERT_EQ(CoverageSegment(4, 7, 0, false), Segments[1]);
ASSERT_EQ(CoverageSegment(9, 9, false), Segments[2]);
}

TEST_F(CoverageMappingTest, combine_regions) {
ProfileWriter.addFunctionCounts("func", 0x1234, {10, 20, 30});
readProfCounts();
Expand Down

0 comments on commit 42ab8c0

Please sign in to comment.