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 &&
|
LHSCC != ICmpInst::ICMP_UGE && LHSCC != ICmpInst::ICMP_ULE &&
|
||||||
RHSCC != ICmpInst::ICMP_UGE && RHSCC != ICmpInst::ICMP_ULE &&
|
RHSCC != ICmpInst::ICMP_UGE && RHSCC != ICmpInst::ICMP_ULE &&
|
||||||
LHSCC != ICmpInst::ICMP_SGE && LHSCC != ICmpInst::ICMP_SLE &&
|
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.
|
// Ensure that the larger constant is on the RHS.
|
||||||
ICmpInst::Predicate GT = ICmpInst::isSignedPredicate(LHSCC) ?
|
ICmpInst::Predicate GT = ICmpInst::isSignedPredicate(LHSCC) ?
|
||||||
ICmpInst::ICMP_SGT : ICmpInst::ICMP_UGT;
|
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