diff options
Diffstat (limited to 'llvm/lib/Transforms/IPO/SCCP.cpp')
| -rw-r--r-- | llvm/lib/Transforms/IPO/SCCP.cpp | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/llvm/lib/Transforms/IPO/SCCP.cpp b/llvm/lib/Transforms/IPO/SCCP.cpp index e2bb6f185c3..7cb7cdc0ebb 100644 --- a/llvm/lib/Transforms/IPO/SCCP.cpp +++ b/llvm/lib/Transforms/IPO/SCCP.cpp @@ -10,16 +10,20 @@ PreservedAnalyses IPSCCPPass::run(Module &M, ModuleAnalysisManager &AM) { const DataLayout &DL = M.getDataLayout(); auto &TLI = AM.getResult<TargetLibraryAnalysis>(M); auto &FAM = AM.getResult<FunctionAnalysisManagerModuleProxy>(M).getManager(); - auto getPredicateInfo = - [&FAM](Function &F) -> std::unique_ptr<PredicateInfo> { - return make_unique<PredicateInfo>(F, - FAM.getResult<DominatorTreeAnalysis>(F), - FAM.getResult<AssumptionAnalysis>(F)); + auto getAnalysis = [&FAM](Function &F) -> AnalysisResultsForFn { + DominatorTree &DT = FAM.getResult<DominatorTreeAnalysis>(F); + return { + make_unique<PredicateInfo>(F, DT, FAM.getResult<AssumptionAnalysis>(F)), + &DT}; }; - if (!runIPSCCP(M, DL, &TLI, getPredicateInfo)) + if (!runIPSCCP(M, DL, &TLI, getAnalysis)) return PreservedAnalyses::all(); - return PreservedAnalyses::none(); + + PreservedAnalyses PA; + PA.preserve<DominatorTreeAnalysis>(); + PA.preserve<FunctionAnalysisManagerModuleProxy>(); + return PA; } namespace { @@ -44,14 +48,19 @@ public: const TargetLibraryInfo *TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI(); - auto getPredicateInfo = - [this](Function &F) -> std::unique_ptr<PredicateInfo> { - return make_unique<PredicateInfo>( - F, this->getAnalysis<DominatorTreeWrapperPass>(F).getDomTree(), - this->getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F)); + auto getAnalysis = [this](Function &F) -> AnalysisResultsForFn { + DominatorTree &DT = + this->getAnalysis<DominatorTreeWrapperPass>(F).getDomTree(); + return { + make_unique<PredicateInfo>( + F, DT, + this->getAnalysis<AssumptionCacheTracker>().getAssumptionCache( + F)), + nullptr}; // We cannot preserve the DT with the legacy pass manager, + // so so set it to nullptr. }; - return runIPSCCP(M, DL, TLI, getPredicateInfo); + return runIPSCCP(M, DL, TLI, getAnalysis); } void getAnalysisUsage(AnalysisUsage &AU) const override { |

