Fix logic error in previous commit. The != case needs to become an or, not an

and.

llvm-svn: 92419
This commit is contained in:
Nick Lewycky 2010-01-02 16:14:56 +00:00
parent 357d41b3c1
commit a67519be12
2 changed files with 21 additions and 3 deletions

View File

@ -7324,9 +7324,13 @@ Instruction *InstCombiner::visitICmpInstWithInstAndIntCst(ICmpInst &ICI,
Constant::getNullValue(P->getType()));
Value *ICIQ = Builder->CreateICmp(ICI.getPredicate(), Q,
Constant::getNullValue(Q->getType()));
Instruction *And = BinaryOperator::CreateAnd(ICIP, ICIQ, "");
And->takeName(&ICI);
return And;
Instruction *Op;
if (ICI.getPredicate() == ICmpInst::ICMP_EQ)
Op = BinaryOperator::CreateAnd(ICIP, ICIQ, "");
else
Op = BinaryOperator::CreateOr(ICIP, ICIQ, "");
Op->takeName(&ICI);
return Op;
}
break;
}

View File

@ -293,3 +293,17 @@ define i1 @test28(i32 %A, i32 %B) {
; CHECK: icmp ne i32 {{.*}}, 0
; CHECK: ret i1
}
define i1 @test29(i32* %A, i32* %B) {
%C1 = ptrtoint i32* %A to i32
%C2 = ptrtoint i32* %B to i32
%D = or i32 %C1, %C2
%E = icmp ne i32 %D, 0
ret i1 %E
; CHECK: @test29
; CHECK: icmp ne i32* %A, null
; CHECK: icmp ne i32* %B, null
; CHECK: or i1
; CHECK: ret i1
}