diff --git a/llvm/lib/Transforms/Utils/SCCPSolver.cpp b/llvm/lib/Transforms/Utils/SCCPSolver.cpp --- a/llvm/lib/Transforms/Utils/SCCPSolver.cpp +++ b/llvm/lib/Transforms/Utils/SCCPSolver.cpp @@ -1779,6 +1779,8 @@ SmallVector OpRanges; for (Value *Op : II->args()) { const ValueLatticeElement &State = getValueState(Op); + if (State.isUnknownOrUndef()) + return; OpRanges.push_back(getConstantRange(State, Op->getType())); } diff --git a/llvm/test/Transforms/SCCP/intrinsics.ll b/llvm/test/Transforms/SCCP/intrinsics.ll --- a/llvm/test/Transforms/SCCP/intrinsics.ll +++ b/llvm/test/Transforms/SCCP/intrinsics.ll @@ -107,8 +107,7 @@ ; CHECK: false: ; CHECK-NEXT: br label [[EXIT]] ; CHECK: exit: -; CHECK-NEXT: [[P_UMAX:%.*]] = call i8 @llvm.umax.i8(i8 3, i8 1) -; CHECK-NEXT: ret i8 [[P_UMAX]] +; CHECK-NEXT: ret i8 3 ; br i1 %c.1, label %true, label %false