mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-17 00:57:54 +00:00
Improved fix for abs(val) != 0 to check other similar case. Also fixed style issues and confusing comment
llvm-svn: 145618
This commit is contained in:
parent
78bd9e81b4
commit
c708e83499
@ -1796,15 +1796,19 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
|
||||
return ReplaceInstUsesWith(I, V);
|
||||
|
||||
// comparing -val or val with non-zero is the same as just comparing val
|
||||
// ie, (val != 0) == (-val != 0)
|
||||
// ie, abs(val) != 0 -> val != 0
|
||||
if (I.getPredicate() == ICmpInst::ICMP_NE && match(Op1, m_Zero()))
|
||||
{
|
||||
Value *Cond, *SubSrc, *SelectFalse;
|
||||
if (match(Op0, m_Select(m_Value(Cond), m_Sub(m_Zero(), m_Value(SubSrc)),
|
||||
Value *Cond, *SelectTrue, *SelectFalse;
|
||||
if (match(Op0, m_Select(m_Value(Cond), m_Value(SelectTrue),
|
||||
m_Value(SelectFalse)))) {
|
||||
if (SubSrc == SelectFalse) {
|
||||
return CmpInst::Create(Instruction::ICmp, I.getPredicate(),
|
||||
SubSrc, Op1);
|
||||
if (Value *V = dyn_castNegVal(SelectTrue)) {
|
||||
if (V == SelectFalse)
|
||||
return CmpInst::Create(Instruction::ICmp, I.getPredicate(), V, Op1);
|
||||
}
|
||||
else if (Value *V = dyn_castNegVal(SelectFalse)) {
|
||||
if (V == SelectTrue)
|
||||
return CmpInst::Create(Instruction::ICmp, I.getPredicate(), V, Op1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -561,12 +561,22 @@ define i1 @test57(i32 %a) {
|
||||
}
|
||||
|
||||
; rdar://problem/10482509
|
||||
; CHECK: @cmpabs
|
||||
; CHECK: @cmpabs1
|
||||
; CHECK-NEXT: icmp ne
|
||||
define zeroext i1 @cmpabs(i64 %val) {
|
||||
define zeroext i1 @cmpabs1(i64 %val) {
|
||||
%sub = sub nsw i64 0, %val
|
||||
%cmp = icmp slt i64 %val, 0
|
||||
%sub.val = select i1 %cmp, i64 %sub, i64 %val
|
||||
%tobool = icmp ne i64 %sub.val, 0
|
||||
ret i1 %tobool
|
||||
}
|
||||
|
||||
; CHECK: @cmpabs2
|
||||
; CHECK-NEXT: icmp ne
|
||||
define zeroext i1 @cmpabs2(i64 %val) {
|
||||
%sub = sub nsw i64 0, %val
|
||||
%cmp = icmp slt i64 %val, 0
|
||||
%sub.val = select i1 %cmp, i64 %val, i64 %sub
|
||||
%tobool = icmp ne i64 %sub.val, 0
|
||||
ret i1 %tobool
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user