diff options
Diffstat (limited to 'llvm/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp')
-rw-r--r-- | llvm/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp b/llvm/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp index 7455a02b06d..29e2bc32dfb 100644 --- a/llvm/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp +++ b/llvm/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp @@ -2117,9 +2117,10 @@ CleanupAndExit: Value *CmpA = Builder.CreateICmpULT(LowA, HighA); Value *Cond = CmpA; - // Check for distance between pointers. - Value *Dist = Builder.CreateSub(HighA, LowA); - Value *CmpD = Builder.CreateICmpSLT(NumBytes, Dist); + // Check for distance between pointers. Since the case LowA < HighA + // is checked for above, assume LowA >= HighA. + Value *Dist = Builder.CreateSub(LowA, HighA); + Value *CmpD = Builder.CreateICmpSLE(NumBytes, Dist); Value *CmpEither = Builder.CreateOr(Cond, CmpD); Cond = CmpEither; |