diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2023-04-14 21:41:27 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2023-06-22 18:20:56 +0000 |
commit | bdd1243df58e60e85101c09001d9812a789b6bc4 (patch) | |
tree | a1ce621c7301dd47ba2ddc3b8eaa63b441389481 /contrib/llvm-project/llvm/lib/Transforms/Utils/LoopVersioning.cpp | |
parent | 781624ca2d054430052c828ba8d2c2eaf2d733e7 (diff) | |
parent | e3b557809604d036af6e00c60f012c2025b59a5e (diff) |
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Transforms/Utils/LoopVersioning.cpp')
-rw-r--r-- | contrib/llvm-project/llvm/lib/Transforms/Utils/LoopVersioning.cpp | 30 |
1 files changed, 9 insertions, 21 deletions
diff --git a/contrib/llvm-project/llvm/lib/Transforms/Utils/LoopVersioning.cpp b/contrib/llvm-project/llvm/lib/Transforms/Utils/LoopVersioning.cpp index 6309eed7963d..17e71cf5a6c4 100644 --- a/contrib/llvm-project/llvm/lib/Transforms/Utils/LoopVersioning.cpp +++ b/contrib/llvm-project/llvm/lib/Transforms/Utils/LoopVersioning.cpp @@ -256,8 +256,8 @@ void LoopVersioning::annotateInstWithNoAlias(Instruction *VersionedInst, } namespace { -bool runImpl(LoopInfo *LI, function_ref<const LoopAccessInfo &(Loop &)> GetLAA, - DominatorTree *DT, ScalarEvolution *SE) { +bool runImpl(LoopInfo *LI, LoopAccessInfoManager &LAIs, DominatorTree *DT, + ScalarEvolution *SE) { // Build up a worklist of inner-loops to version. This is necessary as the // act of versioning a loop creates new loops and can invalidate iterators // across the loops. @@ -275,7 +275,7 @@ bool runImpl(LoopInfo *LI, function_ref<const LoopAccessInfo &(Loop &)> GetLAA, if (!L->isLoopSimplifyForm() || !L->isRotatedForm() || !L->getExitingBlock()) continue; - const LoopAccessInfo &LAI = GetLAA(*L); + const LoopAccessInfo &LAI = LAIs.getInfo(*L); if (!LAI.hasConvergentOp() && (LAI.getNumRuntimePointerChecks() || !LAI.getPSE().getPredicate().isAlwaysTrue())) { @@ -284,6 +284,7 @@ bool runImpl(LoopInfo *LI, function_ref<const LoopAccessInfo &(Loop &)> GetLAA, LVer.versionLoop(); LVer.annotateLoopWithNoAlias(); Changed = true; + LAIs.clear(); } } @@ -301,14 +302,11 @@ public: bool runOnFunction(Function &F) override { auto *LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo(); - auto GetLAA = [&](Loop &L) -> const LoopAccessInfo & { - return getAnalysis<LoopAccessLegacyAnalysis>().getInfo(&L); - }; - + auto &LAIs = getAnalysis<LoopAccessLegacyAnalysis>().getLAIs(); auto *DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree(); auto *SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE(); - return runImpl(LI, GetLAA, DT, SE); + return runImpl(LI, LAIs, DT, SE); } void getAnalysisUsage(AnalysisUsage &AU) const override { @@ -348,20 +346,10 @@ PreservedAnalyses LoopVersioningPass::run(Function &F, FunctionAnalysisManager &AM) { auto &SE = AM.getResult<ScalarEvolutionAnalysis>(F); auto &LI = AM.getResult<LoopAnalysis>(F); - auto &TTI = AM.getResult<TargetIRAnalysis>(F); + LoopAccessInfoManager &LAIs = AM.getResult<LoopAccessAnalysis>(F); auto &DT = AM.getResult<DominatorTreeAnalysis>(F); - auto &TLI = AM.getResult<TargetLibraryAnalysis>(F); - auto &AA = AM.getResult<AAManager>(F); - auto &AC = AM.getResult<AssumptionAnalysis>(F); - - auto &LAM = AM.getResult<LoopAnalysisManagerFunctionProxy>(F).getManager(); - auto GetLAA = [&](Loop &L) -> const LoopAccessInfo & { - LoopStandardAnalysisResults AR = {AA, AC, DT, LI, SE, - TLI, TTI, nullptr, nullptr, nullptr}; - return LAM.getResult<LoopAccessAnalysis>(L, AR); - }; - - if (runImpl(&LI, GetLAA, &DT, &SE)) + + if (runImpl(&LI, LAIs, &DT, &SE)) return PreservedAnalyses::none(); return PreservedAnalyses::all(); } |