llvm.org GIT mirror llvm / 5993754
Merging r345353: ------------------------------------------------------------------------ r345353 | sima | 2018-10-25 18:28:36 -0700 (Thu, 25 Oct 2018) | 21 lines Teach the DominatorTree fallback to recalculation when applying updates to speedup JT (PR37929) Summary: This patch makes the dominatortree recalculate when applying updates with the size of the update vector larger than a threshold. Directly applying updates is usually slower than recalculating the whole domtree in this case. This patch fixes an issue which causes JT running slowly on some inputs. In bug 37929, the dominator tree is trying to apply 19,000+ updates several times, which takes several minutes. After this patch, the time used by DT.applyUpdates: | Input | Before (s) | After (s) | Speedup | | the 2nd Reproducer in 37929 | 297 | 0.15 | 1980x | | clang-5.0.0.0.bc | 9.7 | 4.3 | 2.26x | | clang-5.0.0.4.bc | 11.6 | 2.6 | 4.46x | Reviewers: kuhar, brzycki, trentxintong, davide, dmgreen, grosser Reviewed By: kuhar, brzycki Subscribers: kristina, llvm-commits Differential Revision: https://reviews.llvm.org/D53245 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_70@347285 91177308-0d34-0410-b5e6-96231b3b80d8 Tom Stellard 1 year, 8 months ago
1 changed file(s) with 14 addition(s) and 0 deletion(s). Raw diff Collapse all Expand all
11851185 << '\t' << U << "\n");
11861186 LLVM_DEBUG(dbgs() << "\n");
11871187
1188 // Recalculate the DominatorTree when the number of updates
1189 // exceeds a threshold, which usually makes direct updating slower than
1190 // recalculation. We select this threshold proportional to the
1191 // size of the DominatorTree. The constant is selected
1192 // by choosing the one with an acceptable performance on some real-world
1193 // inputs.
1194
1195 // Make unittests of the incremental algorithm work
1196 if (DT.DomTreeNodes.size() <= 100) {
1197 if (NumLegalized > DT.DomTreeNodes.size())
1198 CalculateFromScratch(DT, &BUI);
1199 } else if (NumLegalized > DT.DomTreeNodes.size() / 40)
1200 CalculateFromScratch(DT, &BUI);
1201
11881202 // If the DominatorTree was recalculated at some point, stop the batch
11891203 // updates. Full recalculations ignore batch updates and look at the actual
11901204 // CFG.