[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:
Sanjay Patel 2017-11-27 16:37:09 +00:00
parent b34814e683
commit 52a381f749

View File

@ -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))