Index: include/llvm/Analysis/LoopAccessAnalysis.h =================================================================== --- include/llvm/Analysis/LoopAccessAnalysis.h +++ include/llvm/Analysis/LoopAccessAnalysis.h @@ -131,6 +131,8 @@ /// Return true if the block BB needs to be predicated in order for the loop /// to be vectorized. + static bool blockNeedsPredication(BasicBlock *BB, Loop *TheLoop, + DominatorTree *DT); bool blockNeedsPredication(BasicBlock *BB); /// Returns true if the value V is uniform within the loop. Index: lib/Analysis/LoopAccessAnalysis.cpp =================================================================== --- lib/Analysis/LoopAccessAnalysis.cpp +++ lib/Analysis/LoopAccessAnalysis.cpp @@ -1075,7 +1075,8 @@ " need a runtime memory check.\n"); } -bool LoopAccessInfo::blockNeedsPredication(BasicBlock *BB) { +bool LoopAccessInfo::blockNeedsPredication(BasicBlock *BB, Loop *TheLoop, + DominatorTree *DT) { assert(TheLoop->contains(BB) && "Unknown block used"); // Blocks that do not dominate the latch need predication. @@ -1083,6 +1084,10 @@ return !DT->dominates(BB, Latch); } +bool LoopAccessInfo::blockNeedsPredication(BasicBlock *BB) { + return blockNeedsPredication(BB, TheLoop, DT); +} + void LoopAccessInfo::emitAnalysis(VectorizationReport &Message) { assert(!Report && "Multiple report generated"); Report = Message; Index: lib/Transforms/Vectorize/LoopVectorize.cpp =================================================================== --- lib/Transforms/Vectorize/LoopVectorize.cpp +++ lib/Transforms/Vectorize/LoopVectorize.cpp @@ -554,7 +554,7 @@ AliasAnalysis *AA, Function *F, const TargetTransformInfo *TTI) : NumPredStores(0), TheLoop(L), SE(SE), DL(DL), - TLI(TLI), TheFunction(F), TTI(TTI), Induction(nullptr), + TLI(TLI), TheFunction(F), TTI(TTI), DT(DT), Induction(nullptr), WidestIndTy(nullptr), LAI(L, SE, DL, TLI, AA, DT), HasFunNoNaNAttr(false) {} @@ -855,6 +855,8 @@ Function *TheFunction; /// Target Transform Info const TargetTransformInfo *TTI; + /// Dominator Tree. + DominatorTree *DT; // --- vectorization state --- // @@ -4174,7 +4176,7 @@ } bool LoopVectorizationLegality::blockNeedsPredication(BasicBlock *BB) { - return LAI.blockNeedsPredication(BB); + return LoopAccessInfo::blockNeedsPredication(BB, TheLoop, DT); } bool LoopVectorizationLegality::blockCanBePredicated(BasicBlock *BB,