From b7e0193c4d7bdc4838eb6587d1dc45c38b4c2a03 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229899 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Analysis/LoopAccessAnalysis.h | 15 +++++++++------ lib/Analysis/LoopAccessAnalysis.cpp | 7 ++++--- lib/Transforms/Vectorize/LoopVectorize.cpp | 6 +++--- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/include/llvm/Analysis/LoopAccessAnalysis.h b/include/llvm/Analysis/LoopAccessAnalysis.h index b54279aa1b6..0ce80ddb0fe 100644 --- a/include/llvm/Analysis/LoopAccessAnalysis.h +++ b/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/lib/Analysis/LoopAccessAnalysis.cpp b/lib/Analysis/LoopAccessAnalysis.cpp index e9815eb379f..21d4d96ad3f 100644 --- a/lib/Analysis/LoopAccessAnalysis.cpp +++ b/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/lib/Transforms/Vectorize/LoopVectorize.cpp b/lib/Transforms/Vectorize/LoopVectorize.cpp index 3b3cd5e1389..61423063f46 100644 --- a/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/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.34.1