Index: include/llvm/Analysis/Loads.h =================================================================== --- include/llvm/Analysis/Loads.h +++ include/llvm/Analysis/Loads.h @@ -28,7 +28,9 @@ /// specified pointer, we do a quick local scan of the basic block containing /// ScanFrom, to determine if the address is already accessed. bool isSafeToLoadUnconditionally(Value *V, unsigned Align, - Instruction *ScanFrom); + Instruction *ScanFrom, + const DominatorTree *DT = nullptr, + const TargetLibraryInfo *TLI = nullptr); /// DefMaxInstsToScan - the default number of maximum instructions /// to scan in the block, used by FindAvailableLoadedValue(). Index: lib/Analysis/Loads.cpp =================================================================== --- lib/Analysis/Loads.cpp +++ lib/Analysis/Loads.cpp @@ -63,7 +63,9 @@ /// This uses the pointee type to determine how many bytes need to be safe to /// load from the pointer. bool llvm::isSafeToLoadUnconditionally(Value *V, unsigned Align, - Instruction *ScanFrom) { + Instruction *ScanFrom, + const DominatorTree *DT, + const TargetLibraryInfo *TLI) { const DataLayout &DL = ScanFrom->getModule()->getDataLayout(); // Zero alignment means that the load has the ABI alignment for the target @@ -71,7 +73,7 @@ Align = DL.getABITypeAlignment(V->getType()->getPointerElementType()); assert(isPowerOf2_32(Align)); - if (isDereferenceableAndAlignedPointer(V, Align, DL)) + if (isDereferenceableAndAlignedPointer(V, Align, DL, ScanFrom, DT, TLI)) return true; int64_t ByteOffset = 0;