diff options
author | Alex Lorenz <arphaman@gmail.com> | 2014-07-29 21:42:24 +0000 |
---|---|---|
committer | Alex Lorenz <arphaman@gmail.com> | 2014-07-29 21:42:24 +0000 |
commit | 251b3e3fbc156e7ac710986fce297da82603c135 (patch) | |
tree | e393359e94f4b716e9af82d5b807216847be423a /llvm/lib/ProfileData/CoverageMappingReader.cpp | |
parent | b2eb492df4dea6a07d1166c4e7bf692c38741f7c (diff) | |
download | bcm5719-llvm-251b3e3fbc156e7ac710986fce297da82603c135.tar.gz bcm5719-llvm-251b3e3fbc156e7ac710986fce297da82603c135.zip |
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
Diffstat (limited to 'llvm/lib/ProfileData/CoverageMappingReader.cpp')
-rw-r--r-- | llvm/lib/ProfileData/CoverageMappingReader.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/llvm/lib/ProfileData/CoverageMappingReader.cpp b/llvm/lib/ProfileData/CoverageMappingReader.cpp index 21acae1bbdd..75ade55e2ed 100644 --- a/llvm/lib/ProfileData/CoverageMappingReader.cpp +++ b/llvm/lib/ProfileData/CoverageMappingReader.cpp @@ -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; } } } |