Fix PR1817.

llvm-svn: 44284
This commit is contained in:
Chris Lattner 2007-11-22 23:47:13 +00:00
parent a717ce7c70
commit 1985d96dc9
2 changed files with 22 additions and 1 deletions

View File

@ -3463,7 +3463,12 @@ Instruction *InstCombiner::visitAnd(BinaryOperator &I) {
LHSCC != ICmpInst::ICMP_UGE && LHSCC != ICmpInst::ICMP_ULE &&
RHSCC != ICmpInst::ICMP_UGE && RHSCC != ICmpInst::ICMP_ULE &&
LHSCC != ICmpInst::ICMP_SGE && LHSCC != ICmpInst::ICMP_SLE &&
RHSCC != ICmpInst::ICMP_SGE && RHSCC != ICmpInst::ICMP_SLE) {
RHSCC != ICmpInst::ICMP_SGE && RHSCC != ICmpInst::ICMP_SLE &&
// Don't try to fold ICMP_SLT + ICMP_ULT.
(ICmpInst::isEquality(LHSCC) || ICmpInst::isEquality(RHSCC) ||
ICmpInst::isSignedPredicate(LHSCC) ==
ICmpInst::isSignedPredicate(RHSCC))) {
// Ensure that the larger constant is on the RHS.
ICmpInst::Predicate GT = ICmpInst::isSignedPredicate(LHSCC) ?
ICmpInst::ICMP_SGT : ICmpInst::ICMP_UGT;

View File

@ -0,0 +1,16 @@
; RUN: llvm-as < %s | opt -instcombine -disable-output
; PR1817
define i1 @test1(i32 %X) {
%A = icmp slt i32 %X, 10
%B = icmp ult i32 %X, 10
%C = and i1 %A, %B
ret i1 %C
}
define i1 @test2(i32 %X) {
%A = icmp slt i32 %X, 10
%B = icmp ult i32 %X, 10
%C = or i1 %A, %B
ret i1 %C
}