mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-28 06:00:30 +00:00
[InstSimplify] use m_APFloat to simplify fcmp folds; NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@319043 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b34814e683
commit
52a381f749
@ -3326,17 +3326,11 @@ static Value *SimplifyFCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
|
||||
return getFalse(RetTy);
|
||||
}
|
||||
|
||||
// Handle fcmp with constant RHS
|
||||
const ConstantFP *CFP = nullptr;
|
||||
if (const auto *RHSC = dyn_cast<Constant>(RHS)) {
|
||||
if (RHS->getType()->isVectorTy())
|
||||
CFP = dyn_cast_or_null<ConstantFP>(RHSC->getSplatValue());
|
||||
else
|
||||
CFP = dyn_cast<ConstantFP>(RHSC);
|
||||
}
|
||||
if (CFP) {
|
||||
// Handle fcmp with constant RHS.
|
||||
const APFloat *C;
|
||||
if (match(RHS, m_APFloat(C))) {
|
||||
// If the constant is a nan, see if we can fold the comparison based on it.
|
||||
if (CFP->getValueAPF().isNaN()) {
|
||||
if (C->isNaN()) {
|
||||
if (FCmpInst::isOrdered(Pred)) // True "if ordered and foo"
|
||||
return getFalse(RetTy);
|
||||
assert(FCmpInst::isUnordered(Pred) &&
|
||||
@ -3345,8 +3339,8 @@ static Value *SimplifyFCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
|
||||
return getTrue(RetTy);
|
||||
}
|
||||
// Check whether the constant is an infinity.
|
||||
if (CFP->getValueAPF().isInfinity()) {
|
||||
if (CFP->getValueAPF().isNegative()) {
|
||||
if (C->isInfinity()) {
|
||||
if (C->isNegative()) {
|
||||
switch (Pred) {
|
||||
case FCmpInst::FCMP_OLT:
|
||||
// No value is ordered and less than negative infinity.
|
||||
@ -3370,7 +3364,7 @@ static Value *SimplifyFCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
|
||||
}
|
||||
}
|
||||
}
|
||||
if (CFP->getValueAPF().isZero()) {
|
||||
if (C->isZero()) {
|
||||
switch (Pred) {
|
||||
case FCmpInst::FCMP_UGE:
|
||||
if (CannotBeOrderedLessThanZero(LHS, Q.TLI))
|
||||
|
Loading…
Reference in New Issue
Block a user