diff --git a/include/llvm/Analysis/LoopAccessAnalysis.h b/include/llvm/Analysis/LoopAccessAnalysis.h index a87ecd9efd4..bd0f880340f 100644 --- a/include/llvm/Analysis/LoopAccessAnalysis.h +++ b/include/llvm/Analysis/LoopAccessAnalysis.h @@ -153,9 +153,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. @@ -163,7 +165,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; } @@ -174,11 +176,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; @@ -258,7 +261,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/lib/Analysis/LoopAccessAnalysis.cpp b/lib/Analysis/LoopAccessAnalysis.cpp index a99d657ed31..c974b36d76e 100644 --- a/lib/Analysis/LoopAccessAnalysis.cpp +++ b/lib/Analysis/LoopAccessAnalysis.cpp @@ -1173,7 +1173,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)); } @@ -1189,7 +1189,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); @@ -1301,7 +1301,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/lib/Transforms/Vectorize/LoopVectorize.cpp b/lib/Transforms/Vectorize/LoopVectorize.cpp index ed4210b5bcf..d75eead0683 100644 --- a/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -756,11 +756,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; } @@ -877,7 +877,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 --- //