mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-25 12:50:00 +00:00
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:
parent
b69050a94c
commit
6b4972518c
@ -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);
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user