forked from OSchip/llvm-project
InstrProf: Treat functions with a coverage map but no profile as unreached
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. llvm-svn: 237298
This commit is contained in:
parent
307b3c4c30
commit
82a645174a
|
@ -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");
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue