mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 11:42:57 +01:00
[ValueTracking] Improve isKnownNonZero for PHI of non-zero constants
It is clear that a PHI is a non-zero if all incoming values are non-zero constants. llvm-svn: 259370
This commit is contained in:
parent
834c52c879
commit
b95afc3d46
@ -2074,6 +2074,12 @@ bool isKnownNonZero(Value *V, unsigned Depth, const Query &Q) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Check if all incoming values are non-zero constant.
|
||||||
|
bool AllNonZeroConstants = all_of(PN->operands(), [](Value *V) {
|
||||||
|
return isa<ConstantInt>(V) && !cast<ConstantInt>(V)->isZeroValue();
|
||||||
|
});
|
||||||
|
if (AllNonZeroConstants)
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!BitWidth) return false;
|
if (!BitWidth) return false;
|
||||||
|
@ -760,3 +760,27 @@ epilog:
|
|||||||
; CHECK-NEXT: ret i1 %[[RES]]
|
; CHECK-NEXT: ret i1 %[[RES]]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; CHECK-LABEL: phi_allnonzeroconstant
|
||||||
|
; CHECK-NOT: phi i32
|
||||||
|
; CHECK: ret i1 false
|
||||||
|
define i1 @phi_allnonzeroconstant(i1 %c, i32 %a, i32 %b) {
|
||||||
|
entry:
|
||||||
|
br i1 %c, label %if.then, label %if.else
|
||||||
|
|
||||||
|
if.then: ; preds = %entry
|
||||||
|
br label %if.end
|
||||||
|
|
||||||
|
if.else: ; preds = %entry
|
||||||
|
call void @dummy()
|
||||||
|
|
||||||
|
br label %if.end
|
||||||
|
|
||||||
|
if.end: ; preds = %if.else, %if.then
|
||||||
|
%x.0 = phi i32 [ 1, %if.then ], [ 2, %if.else ]
|
||||||
|
%or = or i32 %x.0, %a
|
||||||
|
%cmp1 = icmp eq i32 %or, 0
|
||||||
|
ret i1 %cmp1
|
||||||
|
}
|
||||||
|
|
||||||
|
declare void @dummy()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user