InstCombine: Fix a thinko where transform an icmp under the assumption that it's a zero comparison when it's not.

Fixes PR9454.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127464 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Benjamin Kramer 2011-03-11 11:37:40 +00:00
parent b69050a94c
commit 6b4972518c
2 changed files with 12 additions and 3 deletions

View File

@ -503,9 +503,8 @@ static Value *foldSelectICmpAnd(const SelectInst &SI, ConstantInt *TrueVal,
if (!IC || !IC->isEquality())
return 0;
if (ConstantInt *C = dyn_cast<ConstantInt>(IC->getOperand(1)))
if (!C->isZero())
return 0;
if (!match(IC->getOperand(1), m_Zero()))
return 0;
ConstantInt *AndRHS;
Value *LHS = IC->getOperand(0);

View File

@ -714,3 +714,13 @@ define i32 @test52(i32 %n, i32 %m) nounwind {
ret i32 %storemerge
}
; PR9454
define i32 @test53(i32 %x) nounwind {
%and = and i32 %x, 2
%cmp = icmp eq i32 %and, %x
%sel = select i1 %cmp, i32 2, i32 1
ret i32 %sel
; CHECK: @test53
; CHECK: select i1 %cmp
; CHECK: ret
}