mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
Coverage: improve efficiency of the counter propagation to the expansion regions.
This patch reduces the complexity of the two inner loops in order to speed up the loading of coverage data for very large functions. llvm-svn: 214228
This commit is contained in:
parent
1d332e5199
commit
9503511918
@ -251,15 +251,19 @@ std::error_code RawCoverageMappingReader::read(CoverageMappingRecord &Record) {
|
||||
// from the expanded file.
|
||||
// Perform multiple passes to correctly propagate the counters through
|
||||
// all the nested expansion regions.
|
||||
SmallVector<CounterMappingRegion *, 8> FileIDExpansionRegionMapping;
|
||||
FileIDExpansionRegionMapping.resize(VirtualFileMapping.size(), nullptr);
|
||||
for (unsigned Pass = 1, S = VirtualFileMapping.size(); Pass < S; ++Pass) {
|
||||
for (auto &I : MappingRegions) {
|
||||
if (I.Kind == CounterMappingRegion::ExpansionRegion) {
|
||||
for (const auto &J : MappingRegions) {
|
||||
if (J.FileID == I.ExpandedFileID) {
|
||||
I.Count = J.Count;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (auto &R : MappingRegions) {
|
||||
if (R.Kind != CounterMappingRegion::ExpansionRegion)
|
||||
continue;
|
||||
assert(!FileIDExpansionRegionMapping[R.ExpandedFileID]);
|
||||
FileIDExpansionRegionMapping[R.ExpandedFileID] = &R;
|
||||
}
|
||||
for (auto &R : MappingRegions) {
|
||||
if (FileIDExpansionRegionMapping[R.FileID]) {
|
||||
FileIDExpansionRegionMapping[R.FileID]->Count = R.Count;
|
||||
FileIDExpansionRegionMapping[R.FileID] = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user