forked from OSchip/llvm-project
parent
a717ce7c70
commit
1985d96dc9
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
}
|
Loading…
Reference in New Issue