Index: llvm/lib/Analysis/ScalarEvolution.cpp =================================================================== --- llvm/lib/Analysis/ScalarEvolution.cpp +++ llvm/lib/Analysis/ScalarEvolution.cpp @@ -6832,8 +6832,10 @@ APInt MinVal = APInt::getZero(BitWidth); if (llvm::isKnownNonZero(V, DL)) MinVal = Align; - ConservativeResult = ConservativeResult.intersectWith( - {MinVal, MaxVal + 1}, RangeType); + if (MinVal != MaxVal + 1) { + ConservativeResult = ConservativeResult.intersectWith( + {MinVal, MaxVal + 1}, RangeType); + } } } Index: llvm/test/Transforms/LoopStrengthReduce/scev-operator-new.ll =================================================================== --- /dev/null +++ llvm/test/Transforms/LoopStrengthReduce/scev-operator-new.ll @@ -0,0 +1,24 @@ +; RUN: opt < %s -passes=loop-reduce -S | FileCheck %s + +; CHECK: define void @patatino() { +; CHECK-NEXT: entry: +; CHECK-NEXT: br label %for.cond9 + +; CHECK: for.cond9: +; CHECK-NEXT: br label %for.cond9 +; CHECK-NEXT:} + +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" + +define void @patatino() { +entry: + %call443 = tail call nonnull ptr @_Znam(i64 -1) + br label %for.cond9 + +for.cond9: + %lsr.iv = phi ptr [ %call443, %entry ], [ %scevgep, %for.cond9 ] + %scevgep = getelementptr i8, ptr %lsr.iv, i64 4 + br label %for.cond9 +} + +declare ptr @_Znam(i64)