From 57ac766ee995d717dc032ba35c9100bc7aa77652 Mon Sep 17 00:00:00 2001 From: Adam Nemet Date: Thu, 19 Feb 2015 19:15:21 +0000 Subject: [PATCH] [LoopAccesses] Change LAA:getInfo to return a constant reference As expected, this required a few more const-correctness fixes. Based on Hal's feedback on D7684. llvm-svn: 229899 --- llvm/include/llvm/Analysis/LoopAccessAnalysis.h | 15 +++++++++------ llvm/lib/Analysis/LoopAccessAnalysis.cpp | 7 ++++--- llvm/lib/Transforms/Vectorize/LoopVectorize.cpp | 6 +++--- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/llvm/include/llvm/Analysis/LoopAccessAnalysis.h b/llvm/include/llvm/Analysis/LoopAccessAnalysis.h index b54279a..0ce80dd 100644 --- a/llvm/include/llvm/Analysis/LoopAccessAnalysis.h +++ b/llvm/include/llvm/Analysis/LoopAccessAnalysis.h @@ -155,9 +155,11 @@ public: /// Return true we can analyze the memory accesses in the loop and there are /// no memory dependence cycles. - bool canVectorizeMemory() { return CanVecMem; } + bool canVectorizeMemory() const { return CanVecMem; } - RuntimePointerCheck *getRuntimePointerCheck() { return &PtrRtCheck; } + const RuntimePointerCheck *getRuntimePointerCheck() const { + return &PtrRtCheck; + } /// Return true if the block BB needs to be predicated in order for the loop /// to be vectorized. @@ -165,7 +167,7 @@ public: DominatorTree *DT); /// Returns true if the value V is uniform within the loop. - bool isUniform(Value *V); + bool isUniform(Value *V) const; unsigned getMaxSafeDepDistBytes() const { return MaxSafeDepDistBytes; } unsigned getNumStores() const { return NumStores; } @@ -176,11 +178,12 @@ public: /// Returns a pair of instructions where the first element is the first /// instruction generated in possibly a sequence of instructions and the /// second value is the final comparator value or NULL if no check is needed. - std::pair addRuntimeCheck(Instruction *Loc); + std::pair + addRuntimeCheck(Instruction *Loc) const; /// \brief The diagnostics report generated for the analysis. E.g. why we /// couldn't analyze the loop. - Optional &getReport() { return Report; } + const Optional &getReport() const { return Report; } /// \brief Print the information about the memory accesses in the loop. void print(raw_ostream &OS, unsigned Depth = 0) const; @@ -260,7 +263,7 @@ public: /// of symbolic strides, \p Strides provides the mapping (see /// replaceSymbolicStrideSCEV). If there is no cached result available run /// the analysis. - LoopAccessInfo &getInfo(Loop *L, ValueToValueMap &Strides); + const LoopAccessInfo &getInfo(Loop *L, ValueToValueMap &Strides); void releaseMemory() override { // Invalidate the cache when the pass is freed. diff --git a/llvm/lib/Analysis/LoopAccessAnalysis.cpp b/llvm/lib/Analysis/LoopAccessAnalysis.cpp index e9815eb..21d4d96 100644 --- a/llvm/lib/Analysis/LoopAccessAnalysis.cpp +++ b/llvm/lib/Analysis/LoopAccessAnalysis.cpp @@ -1198,7 +1198,7 @@ void LoopAccessInfo::emitAnalysis(LoopAccessReport &Message) { Report = Message; } -bool LoopAccessInfo::isUniform(Value *V) { +bool LoopAccessInfo::isUniform(Value *V) const { return (SE->isLoopInvariant(SE->getSCEV(V), TheLoop)); } @@ -1214,7 +1214,7 @@ static Instruction *getFirstInst(Instruction *FirstInst, Value *V, } std::pair -LoopAccessInfo::addRuntimeCheck(Instruction *Loc) { +LoopAccessInfo::addRuntimeCheck(Instruction *Loc) const { Instruction *tnullptr = nullptr; if (!PtrRtCheck.Need) return std::pair(tnullptr, tnullptr); @@ -1326,7 +1326,8 @@ void LoopAccessInfo::print(raw_ostream &OS, unsigned Depth) const { OS << "\n"; } -LoopAccessInfo &LoopAccessAnalysis::getInfo(Loop *L, ValueToValueMap &Strides) { +const LoopAccessInfo &LoopAccessAnalysis::getInfo(Loop *L, + ValueToValueMap &Strides) { auto &LAI = LoopAccessInfoMap[L]; #ifndef NDEBUG diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp index 3b3cd5e..6142306 100644 --- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -735,11 +735,11 @@ public: bool isUniformAfterVectorization(Instruction* I) { return Uniforms.count(I); } /// Returns the information that we collected about runtime memory check. - LoopAccessInfo::RuntimePointerCheck *getRuntimePointerCheck() { + const LoopAccessInfo::RuntimePointerCheck *getRuntimePointerCheck() const { return LAI->getRuntimePointerCheck(); } - LoopAccessInfo *getLAI() { + const LoopAccessInfo *getLAI() const { return LAI; } @@ -856,7 +856,7 @@ private: LoopAccessAnalysis *LAA; // And the loop-accesses info corresponding to this loop. This pointer is // null until canVectorizeMemory sets it up. - LoopAccessInfo *LAI; + const LoopAccessInfo *LAI; // --- vectorization state --- // -- 2.7.4