[llvm] r272243 - Revert r272194 No need for it if loop Analysis Manager is used
Xinliang David Li via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 8 20:22:39 PDT 2016
Author: davidxl
Date: Wed Jun 8 22:22:39 2016
New Revision: 272243
URL: http://llvm.org/viewvc/llvm-project?rev=272243&view=rev
Log:
Revert r272194 No need for it if loop Analysis Manager is used
Modified:
llvm/trunk/include/llvm/Analysis/LoopAccessAnalysis.h
llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp
llvm/trunk/lib/Transforms/Scalar/LoopDistribute.cpp
llvm/trunk/lib/Transforms/Scalar/LoopLoadElimination.cpp
llvm/trunk/lib/Transforms/Scalar/LoopVersioningLICM.cpp
llvm/trunk/lib/Transforms/Utils/LoopVersioning.cpp
llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
Modified: llvm/trunk/include/llvm/Analysis/LoopAccessAnalysis.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LoopAccessAnalysis.h?rev=272243&r1=272242&r2=272243&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Analysis/LoopAccessAnalysis.h (original)
+++ llvm/trunk/include/llvm/Analysis/LoopAccessAnalysis.h Wed Jun 8 22:22:39 2016
@@ -670,48 +670,10 @@ int getPtrStride(PredicatedScalarEvoluti
bool Assume = false);
/// \brief Returns true if the memory operations \p A and \p B are consecutive.
-/// This is a simple API that does not depend on the analysis pass.
+/// This is a simple API that does not depend on the analysis pass.
bool isConsecutiveAccess(Value *A, Value *B, const DataLayout &DL,
ScalarEvolution &SE, bool CheckType = true);
-/// \brief This class holds the result of LoopAccessAnalysis pass.
-class LoopAccessAnalysisResult {
-public:
- void setDepAnalyses(AliasAnalysis *AA, DominatorTree *DT, LoopInfo *LI,
- ScalarEvolution *SCEV, TargetLibraryInfo *TLI) {
- this->AA = AA;
- this->DT = DT;
- this->LI = LI;
- this->SCEV = SCEV;
- this->TLI = TLI;
- }
- /// \brief Query the result of the loop access information for the loop \p L.
- ///
- /// If the client speculates (and then issues run-time checks) for the values
- /// of symbolic strides, \p Strides provides the mapping (see
- /// replaceSymbolicStrideSCEV). If there is no cached result available run
- /// the analysis.
- const LoopAccessInfo &getInfo(Loop *L, const ValueToValueMap &Strides);
-
- void print(raw_ostream &OS, const Module *M = nullptr) const;
-
- /// \brief Invalidate the cache when the pass is freed.
- void releaseMemory() {
- LoopAccessInfoMap.clear();
- }
-
-private:
- /// \brief LoopAccessInfo is created on demand. This map caches
- /// the computed results.
- DenseMap<Loop *, std::unique_ptr<LoopAccessInfo>> LoopAccessInfoMap;
-
- AliasAnalysis *AA = nullptr;
- DominatorTree *DT = nullptr;
- LoopInfo *LI = nullptr;
- ScalarEvolution *SCEV = nullptr;
- TargetLibraryInfo *TLI = nullptr;
-};
-
/// \brief This analysis provides dependence information for the memory accesses
/// of a loop.
///
@@ -723,7 +685,7 @@ class LoopAccessAnalysis : public Functi
public:
static char ID;
- LoopAccessAnalysis() : FunctionPass(ID), LAAR() {
+ LoopAccessAnalysis() : FunctionPass(ID) {
initializeLoopAccessAnalysisPass(*PassRegistry::getPassRegistry());
}
@@ -731,20 +693,32 @@ public:
void getAnalysisUsage(AnalysisUsage &AU) const override;
- LoopAccessAnalysisResult &getResult() { return LAAR; }
+ /// \brief Query the result of the loop access information for the loop \p L.
+ ///
+ /// If the client speculates (and then issues run-time checks) for the values
+ /// of symbolic strides, \p Strides provides the mapping (see
+ /// replaceSymbolicStrideSCEV). If there is no cached result available run
+ /// the analysis.
+ const LoopAccessInfo &getInfo(Loop *L, const ValueToValueMap &Strides);
void releaseMemory() override {
// Invalidate the cache when the pass is freed.
- LAAR.releaseMemory();
+ LoopAccessInfoMap.clear();
}
/// \brief Print the result of the analysis when invoked with -analyze.
- void print(raw_ostream &OS, const Module *M = nullptr) const override {
- LAAR.print(OS, M);
- }
+ void print(raw_ostream &OS, const Module *M = nullptr) const override;
private:
- LoopAccessAnalysisResult LAAR;
+ /// \brief The cache.
+ DenseMap<Loop *, std::unique_ptr<LoopAccessInfo>> LoopAccessInfoMap;
+
+ // The used analysis passes.
+ ScalarEvolution *SE;
+ const TargetLibraryInfo *TLI;
+ AliasAnalysis *AA;
+ DominatorTree *DT;
+ LoopInfo *LI;
};
inline Instruction *MemoryDepChecker::Dependence::getSource(
Modified: llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp?rev=272243&r1=272242&r2=272243&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp (original)
+++ llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp Wed Jun 8 22:22:39 2016
@@ -1932,7 +1932,7 @@ void LoopAccessInfo::print(raw_ostream &
}
const LoopAccessInfo &
-LoopAccessAnalysisResult::getInfo(Loop *L, const ValueToValueMap &Strides) {
+LoopAccessAnalysis::getInfo(Loop *L, const ValueToValueMap &Strides) {
auto &LAI = LoopAccessInfoMap[L];
#ifndef NDEBUG
@@ -1942,8 +1942,8 @@ LoopAccessAnalysisResult::getInfo(Loop *
if (!LAI) {
const DataLayout &DL = L->getHeader()->getModule()->getDataLayout();
- LAI = llvm::make_unique<LoopAccessInfo>(L, SCEV, DL, TLI, AA, DT, LI,
- Strides);
+ LAI =
+ llvm::make_unique<LoopAccessInfo>(L, SE, DL, TLI, AA, DT, LI, Strides);
#ifndef NDEBUG
LAI->NumSymbolicStrides = Strides.size();
#endif
@@ -1951,25 +1951,26 @@ LoopAccessAnalysisResult::getInfo(Loop *
return *LAI.get();
}
-void LoopAccessAnalysisResult::print(raw_ostream &OS, const Module *M) const {
+void LoopAccessAnalysis::print(raw_ostream &OS, const Module *M) const {
+ LoopAccessAnalysis &LAA = *const_cast<LoopAccessAnalysis *>(this);
+
ValueToValueMap NoSymbolicStrides;
for (Loop *TopLevelLoop : *LI)
for (Loop *L : depth_first(TopLevelLoop)) {
OS.indent(2) << L->getHeader()->getName() << ":\n";
- auto &LAI = const_cast<LoopAccessAnalysisResult *>(this)->getInfo(
- L, NoSymbolicStrides);
+ auto &LAI = LAA.getInfo(L, NoSymbolicStrides);
LAI.print(OS, 4);
}
}
bool LoopAccessAnalysis::runOnFunction(Function &F) {
+ SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
auto *TLIP = getAnalysisIfAvailable<TargetLibraryInfoWrapperPass>();
- LAAR.setDepAnalyses(&getAnalysis<AAResultsWrapperPass>().getAAResults(),
- &getAnalysis<DominatorTreeWrapperPass>().getDomTree(),
- &getAnalysis<LoopInfoWrapperPass>().getLoopInfo(),
- &getAnalysis<ScalarEvolutionWrapperPass>().getSE(),
- TLIP ? &TLIP->getTLI() : nullptr);
+ TLI = TLIP ? &TLIP->getTLI() : nullptr;
+ AA = &getAnalysis<AAResultsWrapperPass>().getAAResults();
+ DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
+ LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
return false;
}
Modified: llvm/trunk/lib/Transforms/Scalar/LoopDistribute.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopDistribute.cpp?rev=272243&r1=272242&r2=272243&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/LoopDistribute.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/LoopDistribute.cpp Wed Jun 8 22:22:39 2016
@@ -608,7 +608,7 @@ public:
return fail("multiple exit blocks");
// LAA will check that we only have a single exiting block.
- LAI = &LAA->getResult().getInfo(L, ValueToValueMap());
+ LAI = &LAA->getInfo(L, ValueToValueMap());
// Currently, we only distribute to isolate the part of the loop with
// dependence cycles to enable partial vectorization.
Modified: llvm/trunk/lib/Transforms/Scalar/LoopLoadElimination.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopLoadElimination.cpp?rev=272243&r1=272242&r2=272243&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/LoopLoadElimination.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/LoopLoadElimination.cpp Wed Jun 8 22:22:39 2016
@@ -552,7 +552,7 @@ public:
// Now walk the identified inner loops.
bool Changed = false;
for (Loop *L : Worklist) {
- const LoopAccessInfo &LAI = LAA->getResult().getInfo(L, ValueToValueMap());
+ const LoopAccessInfo &LAI = LAA->getInfo(L, ValueToValueMap());
// The actual work is performed by LoadEliminationForLoop.
LoadEliminationForLoop LEL(L, LI, LAI, DT);
Changed |= LEL.processLoop();
Modified: llvm/trunk/lib/Transforms/Scalar/LoopVersioningLICM.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopVersioningLICM.cpp?rev=272243&r1=272242&r2=272243&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/LoopVersioningLICM.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/LoopVersioningLICM.cpp Wed Jun 8 22:22:39 2016
@@ -411,7 +411,7 @@ bool LoopVersioningLICM::legalLoopInstru
return false;
}
// Get LoopAccessInfo from current loop.
- LAI = &LAA->getResult().getInfo(CurLoop, Strides);
+ LAI = &LAA->getInfo(CurLoop, Strides);
// Check LoopAccessInfo for need of runtime check.
if (LAI->getRuntimePointerChecking()->getChecks().empty()) {
DEBUG(dbgs() << " LAA: Runtime check not found !!\n");
Modified: llvm/trunk/lib/Transforms/Utils/LoopVersioning.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/LoopVersioning.cpp?rev=272243&r1=272242&r2=272243&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/LoopVersioning.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/LoopVersioning.cpp Wed Jun 8 22:22:39 2016
@@ -268,7 +268,7 @@ public:
// Now walk the identified inner loops.
bool Changed = false;
for (Loop *L : Worklist) {
- const LoopAccessInfo &LAI = LAA->getResult().getInfo(L, ValueToValueMap());
+ const LoopAccessInfo &LAI = LAA->getInfo(L, ValueToValueMap());
if (LAI.getNumRuntimePointerChecks() ||
!LAI.PSE.getUnionPredicate().isAlwaysTrue()) {
LoopVersioning LVer(LAI, L, LI, DT, SE);
Modified: llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp?rev=272243&r1=272242&r2=272243&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp (original)
+++ llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp Wed Jun 8 22:22:39 2016
@@ -4931,7 +4931,7 @@ void LoopVectorizationLegality::collectL
}
bool LoopVectorizationLegality::canVectorizeMemory() {
- LAI = &LAA->getResult().getInfo(TheLoop, Strides);
+ LAI = &LAA->getInfo(TheLoop, Strides);
auto &OptionalReport = LAI->getReport();
if (OptionalReport)
emitAnalysis(VectorizationReport(*OptionalReport));
More information about the llvm-commits
mailing list