mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-12 13:30:51 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237298 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
da645e31a7
commit
42ab8c0a90
@ -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
Block a user