diff options
| author | Philip Reames <listmail@philipreames.com> | 2019-04-18 19:17:14 +0000 |
|---|---|---|
| committer | Philip Reames <listmail@philipreames.com> | 2019-04-18 19:17:14 +0000 |
| commit | 137995d8daf39e435eceb0dc77a97dff089ded18 (patch) | |
| tree | 422b53148761a5aba33ae37382bd6ca90b0b6214 /llvm/lib | |
| parent | 139e216e6610091b7ee3c30bc11114f5d73cbd3e (diff) | |
| download | bcm5719-llvm-137995d8daf39e435eceb0dc77a97dff089ded18.tar.gz bcm5719-llvm-137995d8daf39e435eceb0dc77a97dff089ded18.zip | |
[GuardWidening] Wire up a NPM version of the LoopGuardWidening pass
llvm-svn: 358704
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Passes/PassRegistry.def | 1 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Scalar/GuardWidening.cpp | 25 |
2 files changed, 26 insertions, 0 deletions
diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def index d3220c8f2e6..23ebbcfa675 100644 --- a/llvm/lib/Passes/PassRegistry.def +++ b/llvm/lib/Passes/PassRegistry.def @@ -294,4 +294,5 @@ LOOP_PASS("unswitch", SimpleLoopUnswitchPass()) LOOP_PASS("print-access-info", LoopAccessInfoPrinterPass(dbgs())) LOOP_PASS("print<ivusers>", IVUsersPrinterPass(dbgs())) LOOP_PASS("loop-predication", LoopPredicationPass()) +LOOP_PASS("guard-widening", GuardWideningPass()) #undef LOOP_PASS diff --git a/llvm/lib/Transforms/Scalar/GuardWidening.cpp b/llvm/lib/Transforms/Scalar/GuardWidening.cpp index ec1f9144a15..e14f44bb706 100644 --- a/llvm/lib/Transforms/Scalar/GuardWidening.cpp +++ b/llvm/lib/Transforms/Scalar/GuardWidening.cpp @@ -817,6 +817,31 @@ PreservedAnalyses GuardWideningPass::run(Function &F, return PA; } +PreservedAnalyses GuardWideningPass::run(Loop &L, LoopAnalysisManager &AM, + LoopStandardAnalysisResults &AR, + LPMUpdater &U) { + + const auto &FAM = + AM.getResult<FunctionAnalysisManagerLoopProxy>(L, AR).getManager(); + Function &F = *L.getHeader()->getParent(); + BranchProbabilityInfo *BPI = nullptr; + if (WidenFrequentBranches) + BPI = FAM.getCachedResult<BranchProbabilityAnalysis>(F); + + BasicBlock *RootBB = L.getLoopPredecessor(); + if (!RootBB) + RootBB = L.getHeader(); + auto BlockFilter = [&](BasicBlock *BB) { + return BB == RootBB || L.contains(BB); + }; + if (!GuardWideningImpl(AR.DT, nullptr, AR.LI, BPI, + AR.DT.getNode(RootBB), + BlockFilter).run()) + return PreservedAnalyses::all(); + + return getLoopPassPreservedAnalyses(); +} + namespace { struct GuardWideningLegacyPass : public FunctionPass { static char ID; |

