diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index 9db10340a12..58eb3bc2750 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/lib/Transforms/Scalar/InstructionCombining.cpp @@ -4563,7 +4563,9 @@ Instruction *InstCombiner::FoldGEPICmp(User *GEPLHS, Value *RHS, if (NumDifferences == 0) // SAME GEP? return ReplaceInstUsesWith(I, // No comparison is needed here. ConstantInt::get(Type::Int1Ty, - Cond == ICmpInst::ICMP_EQ)); + Cond == ICmpInst::ICMP_EQ || + Cond == ICmpInst::ICMP_ULE || Cond == ICmpInst::ICMP_UGE || + Cond == ICmpInst::ICMP_SLE || Cond == ICmpInst::ICMP_SGE)); else if (NumDifferences == 1) { Value *LHSV = GEPLHS->getOperand(DiffOperand); Value *RHSV = GEPRHS->getOperand(DiffOperand); diff --git a/test/Transforms/InstCombine/2007-09-05-EqualGEP.ll b/test/Transforms/InstCombine/2007-09-05-EqualGEP.ll new file mode 100644 index 00000000000..77bae78ccd4 --- /dev/null +++ b/test/Transforms/InstCombine/2007-09-05-EqualGEP.ll @@ -0,0 +1,10 @@ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep {ret i1 true} +; PR1637 + +define i1 @f(i8* %arr) { + %X = getelementptr i8* %arr, i32 1 + %Y = getelementptr i8* %arr, i32 1 + %test = icmp uge i8* %X, %Y + ret i1 %test +} +