From: Florian Hahn Date: Tue, 4 Oct 2022 07:37:11 +0000 (+0100) Subject: [LAA] Use LoopAccessInfoManager in legacy pass. X-Git-Tag: upstream/17.0.6~31690 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=db720dc17ca435ffb9a0c6ba63ebb92e130b38e6;p=platform%2Fupstream%2Fllvm.git [LAA] Use LoopAccessInfoManager in legacy pass. Simplify LoopAccessLegacyAnalysis by using LoopAccessInfoManager from D134606. As a side-effect this also removes printing support from LoopAccessLegacyAnalysis. Depends on D134606. Reviewed By: aeubanks Differential Revision: https://reviews.llvm.org/D134608 --- diff --git a/llvm/include/llvm/Analysis/LoopAccessAnalysis.h b/llvm/include/llvm/Analysis/LoopAccessAnalysis.h index 0aeb95d..f420b76 100644 --- a/llvm/include/llvm/Analysis/LoopAccessAnalysis.h +++ b/llvm/include/llvm/Analysis/LoopAccessAnalysis.h @@ -781,6 +781,8 @@ public: : SE(SE), AA(AA), DT(DT), LI(LI), TLI(TLI) {} const LoopAccessInfo &getInfo(Loop &L); + + void clear() { LoopAccessInfoMap.clear(); } }; /// This analysis provides dependence information for the memory accesses @@ -803,26 +805,15 @@ public: /// Query the result of the loop access information for the loop \p L. /// /// If there is no cached result available run the analysis. - const LoopAccessInfo &getInfo(Loop *L); + const LoopAccessInfo &getInfo(Loop *L) { return LAIs->getInfo(*L); } void releaseMemory() override { // Invalidate the cache when the pass is freed. - LoopAccessInfoMap.clear(); + LAIs->clear(); } - /// Print the result of the analysis when invoked with -analyze. - void print(raw_ostream &OS, const Module *M = nullptr) const override; - private: - /// The cache. - DenseMap> LoopAccessInfoMap; - - // The used analysis passes. - ScalarEvolution *SE = nullptr; - const TargetLibraryInfo *TLI = nullptr; - AAResults *AA = nullptr; - DominatorTree *DT = nullptr; - LoopInfo *LI = nullptr; + std::unique_ptr LAIs; }; /// This analysis provides dependence information for the memory diff --git a/llvm/lib/Analysis/LoopAccessAnalysis.cpp b/llvm/lib/Analysis/LoopAccessAnalysis.cpp index dda127e..eb06fb6 100644 --- a/llvm/lib/Analysis/LoopAccessAnalysis.cpp +++ b/llvm/lib/Analysis/LoopAccessAnalysis.cpp @@ -2683,34 +2683,14 @@ LoopAccessLegacyAnalysis::LoopAccessLegacyAnalysis() : FunctionPass(ID) { initializeLoopAccessLegacyAnalysisPass(*PassRegistry::getPassRegistry()); } -const LoopAccessInfo &LoopAccessLegacyAnalysis::getInfo(Loop *L) { - auto &LAI = LoopAccessInfoMap[L]; - - if (!LAI) - LAI = std::make_unique(L, SE, TLI, AA, DT, LI); - - return *LAI; -} - -void LoopAccessLegacyAnalysis::print(raw_ostream &OS, const Module *M) const { - LoopAccessLegacyAnalysis &LAA = *const_cast(this); - - for (Loop *TopLevelLoop : *LI) - for (Loop *L : depth_first(TopLevelLoop)) { - OS.indent(2) << L->getHeader()->getName() << ":\n"; - auto &LAI = LAA.getInfo(L); - LAI.print(OS, 4); - } -} - bool LoopAccessLegacyAnalysis::runOnFunction(Function &F) { - SE = &getAnalysis().getSE(); + auto &SE = getAnalysis().getSE(); auto *TLIP = getAnalysisIfAvailable(); - TLI = TLIP ? &TLIP->getTLI(F) : nullptr; - AA = &getAnalysis().getAAResults(); - DT = &getAnalysis().getDomTree(); - LI = &getAnalysis().getLoopInfo(); - + auto *TLI = TLIP ? &TLIP->getTLI(F) : nullptr; + auto &AA = getAnalysis().getAAResults(); + auto &DT = getAnalysis().getDomTree(); + auto &LI = getAnalysis().getLoopInfo(); + LAIs = std::make_unique(SE, AA, DT, LI, TLI); return false; }