summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ProfileData/CoverageMappingReader.cpp
diff options
context:
space:
mode:
authorAlex Lorenz <arphaman@gmail.com>2014-07-29 21:42:24 +0000
committerAlex Lorenz <arphaman@gmail.com>2014-07-29 21:42:24 +0000
commit251b3e3fbc156e7ac710986fce297da82603c135 (patch)
treee393359e94f4b716e9af82d5b807216847be423a /llvm/lib/ProfileData/CoverageMappingReader.cpp
parentb2eb492df4dea6a07d1166c4e7bf692c38741f7c (diff)
downloadbcm5719-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.cpp20
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;
}
}
}
OpenPOWER on IntegriCloud