[llvm] ce78e68 - [InstCombine] Fold select based logic of fcmps with same operands when FMF is present.

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 14 14:45:42 PDT 2022


Author: Craig Topper
Date: 2022-03-14T14:45:07-07:00
New Revision: ce78e68261ff44861cd69d7f37b181fd5c774d3c

URL: https://github.com/llvm/llvm-project/commit/ce78e68261ff44861cd69d7f37b181fd5c774d3c
DIFF: https://github.com/llvm/llvm-project/commit/ce78e68261ff44861cd69d7f37b181fd5c774d3c.diff

LOG: [InstCombine] Fold select based logic of fcmps with same operands when FMF is present.

If we have a logical and/or in select form and the true/false operand
is an fcmp with poison generating FMF, we won't be able to fold it
to an and/or instruction. This prevents us from optimizing the case
where it is a logical operation of two fcmps with identical operands.

This patch adds explicit checks for this case that doesn't rely on
converting to and/or to do the optimization. It reuses the existing
foldLogicOfFCmps, but adds a new flag to disable the other combine
that is inside that function.

FMF flags from the two FCmps are intersected using the logic added in
D121243. The FIXME has been updated to indicate that we can only use
a union for the non-select form.

This allows us to optimize cases like this from compare-fp-3.c in the
gcc torture suite with fast math.

void
test1 (float x, float y)
{
  if ((x==y) && (x!=y))
    link_error0();
}

Reviewed By: spatel

Differential Revision: https://reviews.llvm.org/D121323

Added: 
    

Modified: 
    llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
    llvm/lib/Transforms/InstCombine/InstCombineInternal.h
    llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
    llvm/test/Transforms/InstCombine/and-fcmp.ll
    llvm/test/Transforms/InstCombine/or-fcmp.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
index 1cd06a0371b79..61b439bf430da 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
@@ -1322,7 +1322,7 @@ Value *InstCombinerImpl::foldAndOfICmps(ICmpInst *LHS, ICmpInst *RHS,
 }
 
 Value *InstCombinerImpl::foldLogicOfFCmps(FCmpInst *LHS, FCmpInst *RHS,
-                                          bool IsAnd) {
+                                          bool IsAnd, bool IsLogicalSelect) {
   Value *LHS0 = LHS->getOperand(0), *LHS1 = LHS->getOperand(1);
   Value *RHS0 = RHS->getOperand(0), *RHS1 = RHS->getOperand(1);
   FCmpInst::Predicate PredL = LHS->getPredicate(), PredR = RHS->getPredicate();
@@ -1353,7 +1353,7 @@ Value *InstCombinerImpl::foldLogicOfFCmps(FCmpInst *LHS, FCmpInst *RHS,
     unsigned NewPred = IsAnd ? FCmpCodeL & FCmpCodeR : FCmpCodeL | FCmpCodeR;
 
     // Intersect the fast math flags.
-    // TODO: We can union the fast math flags.
+    // TODO: We can union the fast math flags unless this is a logical select.
     IRBuilder<>::FastMathFlagGuard FMFG(Builder);
     FastMathFlags FMF = LHS->getFastMathFlags();
     FMF &= RHS->getFastMathFlags();
@@ -1362,8 +1362,11 @@ Value *InstCombinerImpl::foldLogicOfFCmps(FCmpInst *LHS, FCmpInst *RHS,
     return getFCmpValue(NewPred, LHS0, LHS1, Builder);
   }
 
-  if ((PredL == FCmpInst::FCMP_ORD && PredR == FCmpInst::FCMP_ORD && IsAnd) ||
-      (PredL == FCmpInst::FCMP_UNO && PredR == FCmpInst::FCMP_UNO && !IsAnd)) {
+  // This transform is not valid for a logical select.
+  if (!IsLogicalSelect &&
+      ((PredL == FCmpInst::FCMP_ORD && PredR == FCmpInst::FCMP_ORD && IsAnd) ||
+       (PredL == FCmpInst::FCMP_UNO && PredR == FCmpInst::FCMP_UNO &&
+        !IsAnd))) {
     if (LHS0->getType() != RHS0->getType())
       return nullptr;
 
@@ -2125,7 +2128,7 @@ Instruction *InstCombinerImpl::visitAnd(BinaryOperator &I) {
 
   if (FCmpInst *LHS = dyn_cast<FCmpInst>(I.getOperand(0)))
     if (FCmpInst *RHS = dyn_cast<FCmpInst>(I.getOperand(1)))
-      if (Value *Res = foldLogicOfFCmps(LHS, RHS, true))
+      if (Value *Res = foldLogicOfFCmps(LHS, RHS, /*IsAnd*/ true))
         return replaceInstUsesWith(I, Res);
 
   if (Instruction *FoldedFCmps = reassociateFCmps(I, Builder))
@@ -2891,7 +2894,7 @@ Instruction *InstCombinerImpl::visitOr(BinaryOperator &I) {
 
   if (FCmpInst *LHS = dyn_cast<FCmpInst>(I.getOperand(0)))
     if (FCmpInst *RHS = dyn_cast<FCmpInst>(I.getOperand(1)))
-      if (Value *Res = foldLogicOfFCmps(LHS, RHS, false))
+      if (Value *Res = foldLogicOfFCmps(LHS, RHS, /*IsAnd*/ false))
         return replaceInstUsesWith(I, Res);
 
   if (Instruction *FoldedFCmps = reassociateFCmps(I, Builder))

diff  --git a/llvm/lib/Transforms/InstCombine/InstCombineInternal.h b/llvm/lib/Transforms/InstCombine/InstCombineInternal.h
index 8f997ffa60057..b6237a54ebc51 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineInternal.h
+++ b/llvm/lib/Transforms/InstCombine/InstCombineInternal.h
@@ -353,7 +353,8 @@ class LLVM_LIBRARY_VISIBILITY InstCombinerImpl final
   /// Optimize (fcmp)&(fcmp) or (fcmp)|(fcmp).
   /// NOTE: Unlike most of instcombine, this returns a Value which should
   /// already be inserted into the function.
-  Value *foldLogicOfFCmps(FCmpInst *LHS, FCmpInst *RHS, bool IsAnd);
+  Value *foldLogicOfFCmps(FCmpInst *LHS, FCmpInst *RHS, bool IsAnd,
+                          bool IsLogicalSelect = false);
 
   Value *foldAndOrOfICmpsOfAndWithPow2(ICmpInst *LHS, ICmpInst *RHS,
                                        Instruction *CxtI, bool IsAnd,

diff  --git a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
index d0d4ec8673cb4..e298c64a31341 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
@@ -2605,13 +2605,29 @@ Instruction *InstCombinerImpl::visitSelectInst(SelectInst &SI) {
     // Folding select to and/or i1 isn't poison safe in general. impliesPoison
     // checks whether folding it does not convert a well-defined value into
     // poison.
-    if (match(TrueVal, m_One()) && impliesPoison(FalseVal, CondVal)) {
-      // Change: A = select B, true, C --> A = or B, C
-      return BinaryOperator::CreateOr(CondVal, FalseVal);
+    if (match(TrueVal, m_One())) {
+      if (impliesPoison(FalseVal, CondVal)) {
+        // Change: A = select B, true, C --> A = or B, C
+        return BinaryOperator::CreateOr(CondVal, FalseVal);
+      }
+
+      if (auto *LHS = dyn_cast<FCmpInst>(CondVal))
+        if (auto *RHS = dyn_cast<FCmpInst>(FalseVal))
+          if (Value *V = foldLogicOfFCmps(LHS, RHS, /*IsAnd*/ false,
+                                          /*IsSelectLogical*/ true))
+            return replaceInstUsesWith(SI, V);
     }
-    if (match(FalseVal, m_Zero()) && impliesPoison(TrueVal, CondVal)) {
-      // Change: A = select B, C, false --> A = and B, C
-      return BinaryOperator::CreateAnd(CondVal, TrueVal);
+    if (match(FalseVal, m_Zero())) {
+      if (impliesPoison(TrueVal, CondVal)) {
+        // Change: A = select B, C, false --> A = and B, C
+        return BinaryOperator::CreateAnd(CondVal, TrueVal);
+      }
+
+      if (auto *LHS = dyn_cast<FCmpInst>(CondVal))
+        if (auto *RHS = dyn_cast<FCmpInst>(TrueVal))
+          if (Value *V = foldLogicOfFCmps(LHS, RHS, /*IsAnd*/ true,
+                                          /*IsSelectLogical*/ true))
+            return replaceInstUsesWith(SI, V);
     }
 
     auto *One = ConstantInt::getTrue(SelType);

diff  --git a/llvm/test/Transforms/InstCombine/and-fcmp.ll b/llvm/test/Transforms/InstCombine/and-fcmp.ll
index 03dbf339b2453..f42e705dfe9fe 100644
--- a/llvm/test/Transforms/InstCombine/and-fcmp.ll
+++ b/llvm/test/Transforms/InstCombine/and-fcmp.ll
@@ -233,6 +233,16 @@ define i1 @auto_gen_0_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_0_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_0_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp false double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_1(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_1(
 ; CHECK-NEXT:    ret i1 false
@@ -253,6 +263,16 @@ define i1 @auto_gen_1_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_1_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_1_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast oeq double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_2(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_2(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
@@ -275,6 +295,17 @@ define i1 @auto_gen_2_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_2_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_2_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp oeq double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_3(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_3(
 ; CHECK-NEXT:    ret i1 false
@@ -295,6 +326,16 @@ define i1 @auto_gen_3_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_3_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_3_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast ogt double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_4(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_4(
 ; CHECK-NEXT:    ret i1 false
@@ -315,6 +356,16 @@ define i1 @auto_gen_4_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_4_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_4_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp ogt double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_5(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_5(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
@@ -337,6 +388,17 @@ define i1 @auto_gen_5_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_5_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_5_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ogt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ogt double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_6(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_6(
 ; CHECK-NEXT:    ret i1 false
@@ -357,6 +419,16 @@ define i1 @auto_gen_6_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_6_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_6_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp oge double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_7(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_7(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
@@ -379,6 +451,17 @@ define i1 @auto_gen_7_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_7_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_7_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast oeq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast oge double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_8(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_8(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
@@ -401,6 +484,17 @@ define i1 @auto_gen_8_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_8_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_8_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp oge double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_9(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_9(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
@@ -423,6 +517,17 @@ define i1 @auto_gen_9_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_9_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_9_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast oge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast oge double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_10(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_10(
 ; CHECK-NEXT:    ret i1 false
@@ -443,6 +548,16 @@ define i1 @auto_gen_10_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_10_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_10_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp olt double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_11(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_11(
 ; CHECK-NEXT:    ret i1 false
@@ -463,6 +578,16 @@ define i1 @auto_gen_11_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_11_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_11_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast olt double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_12(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_12(
 ; CHECK-NEXT:    ret i1 false
@@ -483,6 +608,16 @@ define i1 @auto_gen_12_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_12_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_12_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp olt double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_13(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_13(
 ; CHECK-NEXT:    ret i1 false
@@ -503,6 +638,16 @@ define i1 @auto_gen_13_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_13_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_13_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast olt double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_14(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_14(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
@@ -525,6 +670,17 @@ define i1 @auto_gen_14_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_14_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_14_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp olt double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_15(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_15(
 ; CHECK-NEXT:    ret i1 false
@@ -545,6 +701,16 @@ define i1 @auto_gen_15_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_15_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_15_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast ole double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_16(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_16(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
@@ -567,6 +733,17 @@ define i1 @auto_gen_16_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_16_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_16_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ole double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_17(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_17(
 ; CHECK-NEXT:    ret i1 false
@@ -587,6 +764,16 @@ define i1 @auto_gen_17_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_17_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_17_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast ole double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_18(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_18(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
@@ -609,6 +796,17 @@ define i1 @auto_gen_18_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_18_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_18_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ole double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_19(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_19(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
@@ -631,6 +829,17 @@ define i1 @auto_gen_19_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_19_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_19_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast olt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ole double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_20(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_20(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
@@ -653,6 +862,17 @@ define i1 @auto_gen_20_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_20_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_20_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ole double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_21(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_21(
 ; CHECK-NEXT:    ret i1 false
@@ -673,6 +893,16 @@ define i1 @auto_gen_21_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_21_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_21_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast one double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_22(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_22(
 ; CHECK-NEXT:    ret i1 false
@@ -693,6 +923,16 @@ define i1 @auto_gen_22_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_22_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_22_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp one double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_23(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_23(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
@@ -715,6 +955,17 @@ define i1 @auto_gen_23_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_23_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_23_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ogt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast one double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_24(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_24(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
@@ -737,6 +988,17 @@ define i1 @auto_gen_24_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_24_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_24_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp one double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_25(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_25(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
@@ -759,6 +1021,17 @@ define i1 @auto_gen_25_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_25_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_25_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast olt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast one double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_26(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_26(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
@@ -781,6 +1054,17 @@ define i1 @auto_gen_26_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_26_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_26_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp one double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_27(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_27(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
@@ -803,6 +1087,17 @@ define i1 @auto_gen_27_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_27_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_27_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast one double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast one double %a, %b
+  %cmp1 = fcmp fast one double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_28(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_28(
 ; CHECK-NEXT:    ret i1 false
@@ -823,6 +1118,16 @@ define i1 @auto_gen_28_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_28_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_28_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp ord double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_29(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_29(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
@@ -845,6 +1150,17 @@ define i1 @auto_gen_29_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_29_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_29_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast oeq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp fast ord double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_30(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_30(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
@@ -867,6 +1183,17 @@ define i1 @auto_gen_30_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_30_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_30_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ord double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_31(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_31(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
@@ -889,6 +1216,17 @@ define i1 @auto_gen_31_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_31_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_31_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast oge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp fast ord double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_32(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_32(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
@@ -911,6 +1249,17 @@ define i1 @auto_gen_32_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_32_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_32_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ord double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_33(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_33(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
@@ -933,6 +1282,17 @@ define i1 @auto_gen_33_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_33_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_33_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast ole double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp fast ord double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_34(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_34(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
@@ -955,6 +1315,17 @@ define i1 @auto_gen_34_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_34_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_34_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ord double %a, %b
+  %cmp1 = fcmp fast one double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_35(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_35(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
@@ -977,6 +1348,16 @@ define i1 @auto_gen_35_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_35_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_35_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast ord double %a, %b
+  %cmp1 = fcmp fast ord double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_36(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_36(
 ; CHECK-NEXT:    ret i1 false
@@ -997,6 +1378,16 @@ define i1 @auto_gen_36_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_36_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_36_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp ueq double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_37(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_37(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
@@ -1019,6 +1410,17 @@ define i1 @auto_gen_37_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_37_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_37_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast oeq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ueq double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_38(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_38(
 ; CHECK-NEXT:    ret i1 false
@@ -1039,6 +1441,16 @@ define i1 @auto_gen_38_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_38_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_38_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp ueq double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_39(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_39(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
@@ -1061,6 +1473,17 @@ define i1 @auto_gen_39_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_39_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_39_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast oeq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ueq double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_40(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_40(
 ; CHECK-NEXT:    ret i1 false
@@ -1081,6 +1504,16 @@ define i1 @auto_gen_40_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_40_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_40_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp ueq double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_41(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_41(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
@@ -1103,6 +1536,17 @@ define i1 @auto_gen_41_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_41_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_41_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast oeq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ueq double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_42(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_42(
 ; CHECK-NEXT:    ret i1 false
@@ -1123,6 +1567,16 @@ define i1 @auto_gen_42_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_42_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_42_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp ueq double %a, %b
+  %cmp1 = fcmp fast one double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_43(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_43(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
@@ -1145,6 +1599,17 @@ define i1 @auto_gen_43_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_43_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_43_logical_fmf(
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp fast ueq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = fcmp fast ueq double %a, %b
+  %cmp1 = fcmp fast ord double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_44(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_44(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
@@ -1167,6 +1632,17 @@ define i1 @auto_gen_44_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_44_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_44_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ueq double %a, %b
+  %cmp1 = fcmp fast ueq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_45(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_45(
 ; CHECK-NEXT:    ret i1 false
@@ -1187,6 +1663,16 @@ define i1 @auto_gen_45_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_45_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_45_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast ugt double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_46(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_46(
 ; CHECK-NEXT:    ret i1 false
@@ -1207,6 +1693,16 @@ define i1 @auto_gen_46_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_46_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_46_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp ugt double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_47(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_47(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
@@ -1229,6 +1725,17 @@ define i1 @auto_gen_47_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_47_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_47_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ogt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ugt double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_48(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_48(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
@@ -1251,6 +1758,17 @@ define i1 @auto_gen_48_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_48_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_48_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ugt double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_49(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_49(
 ; CHECK-NEXT:    ret i1 false
@@ -1271,6 +1789,16 @@ define i1 @auto_gen_49_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_49_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_49_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast ugt double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_50(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_50(
 ; CHECK-NEXT:    ret i1 false
@@ -1291,6 +1819,16 @@ define i1 @auto_gen_50_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_50_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_50_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp ugt double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_51(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_51(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
@@ -1313,6 +1851,17 @@ define i1 @auto_gen_51_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_51_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_51_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ogt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ugt double %a, %b
+  %cmp1 = fcmp fast one double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_52(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_52(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
@@ -1335,6 +1884,17 @@ define i1 @auto_gen_52_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_52_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_52_logical_fmf(
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = fcmp ugt double %a, %b
+  %cmp1 = fcmp fast ord double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_53(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_53(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
@@ -1357,6 +1917,16 @@ define i1 @auto_gen_53_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_53_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_53_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast ugt double %a, %b
+  %cmp1 = fcmp fast ueq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_54(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_54(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
@@ -1379,6 +1949,17 @@ define i1 @auto_gen_54_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_54_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_54_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ugt double %a, %b
+  %cmp1 = fcmp fast ugt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_55(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_55(
 ; CHECK-NEXT:    ret i1 false
@@ -1399,6 +1980,16 @@ define i1 @auto_gen_55_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_55_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_55_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast uge double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_56(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_56(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
@@ -1421,6 +2012,17 @@ define i1 @auto_gen_56_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_56_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_56_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp uge double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_57(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_57(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
@@ -1443,6 +2045,17 @@ define i1 @auto_gen_57_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_57_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_57_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ogt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast uge double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_58(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_58(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
@@ -1465,6 +2078,17 @@ define i1 @auto_gen_58_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_58_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_58_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp uge double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_59(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_59(
 ; CHECK-NEXT:    ret i1 false
@@ -1485,6 +2109,16 @@ define i1 @auto_gen_59_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_59_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_59_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast uge double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_60(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_60(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
@@ -1502,7 +2136,18 @@ define i1 @auto_gen_60_logical(double %a, double %b) {
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
   %cmp = fcmp uge double %a, %b
-  %cmp1 = fcmp ole double %a, %b
+  %cmp1 = fcmp ole double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
+define i1 @auto_gen_60_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_60_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp uge double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
   %retval = select i1 %cmp, i1 %cmp1, i1 false
   ret i1 %retval
 }
@@ -1529,6 +2174,17 @@ define i1 @auto_gen_61_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_61_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_61_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ogt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast uge double %a, %b
+  %cmp1 = fcmp fast one double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_62(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_62(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
@@ -1551,6 +2207,17 @@ define i1 @auto_gen_62_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_62_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_62_logical_fmf(
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = fcmp uge double %a, %b
+  %cmp1 = fcmp fast ord double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_63(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_63(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
@@ -1573,6 +2240,17 @@ define i1 @auto_gen_63_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_63_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_63_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ueq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast uge double %a, %b
+  %cmp1 = fcmp fast ueq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_64(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_64(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
@@ -1595,6 +2273,17 @@ define i1 @auto_gen_64_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_64_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_64_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp uge double %a, %b
+  %cmp1 = fcmp fast ugt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_65(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_65(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
@@ -1617,6 +2306,17 @@ define i1 @auto_gen_65_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_65_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_65_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast uge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast uge double %a, %b
+  %cmp1 = fcmp fast uge double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_66(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_66(
 ; CHECK-NEXT:    ret i1 false
@@ -1637,6 +2337,16 @@ define i1 @auto_gen_66_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_66_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_66_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp ult double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_67(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_67(
 ; CHECK-NEXT:    ret i1 false
@@ -1657,6 +2367,16 @@ define i1 @auto_gen_67_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_67_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_67_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast ult double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_68(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_68(
 ; CHECK-NEXT:    ret i1 false
@@ -1677,6 +2397,16 @@ define i1 @auto_gen_68_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_68_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_68_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp ult double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_69(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_69(
 ; CHECK-NEXT:    ret i1 false
@@ -1697,6 +2427,16 @@ define i1 @auto_gen_69_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_69_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_69_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast ult double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_70(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_70(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
@@ -1719,6 +2459,17 @@ define i1 @auto_gen_70_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_70_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_70_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ult double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_71(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_71(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
@@ -1741,6 +2492,17 @@ define i1 @auto_gen_71_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_71_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_71_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast olt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ult double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_72(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_72(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
@@ -1763,6 +2525,17 @@ define i1 @auto_gen_72_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_72_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_72_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ult double %a, %b
+  %cmp1 = fcmp fast one double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_73(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_73(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
@@ -1785,6 +2558,17 @@ define i1 @auto_gen_73_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_73_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_73_logical_fmf(
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp fast ult double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = fcmp fast ult double %a, %b
+  %cmp1 = fcmp fast ord double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_74(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_74(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
@@ -1807,6 +2591,17 @@ define i1 @auto_gen_74_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_74_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_74_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ult double %a, %b
+  %cmp1 = fcmp fast ueq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_75(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_75(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
@@ -1829,6 +2624,16 @@ define i1 @auto_gen_75_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_75_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_75_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast ult double %a, %b
+  %cmp1 = fcmp fast ugt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_76(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_76(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
@@ -1851,6 +2656,17 @@ define i1 @auto_gen_76_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_76_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_76_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ult double %a, %b
+  %cmp1 = fcmp fast uge double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_77(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_77(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
@@ -1873,6 +2689,17 @@ define i1 @auto_gen_77_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_77_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_77_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ult double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ult double %a, %b
+  %cmp1 = fcmp fast ult double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_78(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_78(
 ; CHECK-NEXT:    ret i1 false
@@ -1893,6 +2720,16 @@ define i1 @auto_gen_78_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_78_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_78_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp ule double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_79(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_79(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
@@ -1915,6 +2752,17 @@ define i1 @auto_gen_79_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_79_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_79_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast oeq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ule double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_80(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_80(
 ; CHECK-NEXT:    ret i1 false
@@ -1935,6 +2783,16 @@ define i1 @auto_gen_80_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_80_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_80_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp ule double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_81(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_81(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
@@ -1957,6 +2815,17 @@ define i1 @auto_gen_81_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_81_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_81_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast oeq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ule double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_82(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_82(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
@@ -1979,6 +2848,17 @@ define i1 @auto_gen_82_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_82_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_82_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ule double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_83(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_83(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
@@ -2001,6 +2881,17 @@ define i1 @auto_gen_83_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_83_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_83_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ole double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ule double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_84(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_84(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
@@ -2023,6 +2914,17 @@ define i1 @auto_gen_84_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_84_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_84_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ule double %a, %b
+  %cmp1 = fcmp fast one double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_85(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_85(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
@@ -2045,6 +2947,17 @@ define i1 @auto_gen_85_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_85_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_85_logical_fmf(
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp fast ule double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = fcmp fast ule double %a, %b
+  %cmp1 = fcmp fast ord double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_86(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_86(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
@@ -2067,6 +2980,17 @@ define i1 @auto_gen_86_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_86_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_86_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ule double %a, %b
+  %cmp1 = fcmp fast ueq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_87(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_87(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
@@ -2089,6 +3013,16 @@ define i1 @auto_gen_87_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_87_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_87_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast ule double %a, %b
+  %cmp1 = fcmp fast ugt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_88(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_88(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
@@ -2111,6 +3045,17 @@ define i1 @auto_gen_88_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_88_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_88_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ule double %a, %b
+  %cmp1 = fcmp fast uge double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_89(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_89(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
@@ -2133,6 +3078,17 @@ define i1 @auto_gen_89_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_89_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_89_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ult double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ule double %a, %b
+  %cmp1 = fcmp fast ult double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_90(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_90(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
@@ -2155,6 +3111,17 @@ define i1 @auto_gen_90_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_90_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_90_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ule double %a, %b
+  %cmp1 = fcmp fast ule double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_91(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_91(
 ; CHECK-NEXT:    ret i1 false
@@ -2175,6 +3142,16 @@ define i1 @auto_gen_91_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_91_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_91_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast une double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_92(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_92(
 ; CHECK-NEXT:    ret i1 false
@@ -2195,6 +3172,16 @@ define i1 @auto_gen_92_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_92_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_92_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp une double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_93(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_93(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
@@ -2217,6 +3204,17 @@ define i1 @auto_gen_93_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_93_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_93_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ogt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast une double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_94(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_94(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
@@ -2239,6 +3237,17 @@ define i1 @auto_gen_94_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_94_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_94_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp une double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_95(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_95(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
@@ -2261,6 +3270,17 @@ define i1 @auto_gen_95_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_95_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_95_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast olt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast une double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_96(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_96(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
@@ -2283,6 +3303,17 @@ define i1 @auto_gen_96_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_96_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_96_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp une double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_97(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_97(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
@@ -2299,8 +3330,19 @@ define i1 @auto_gen_97_logical(double %a, double %b) {
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
-  %cmp = fcmp une double %a, %b
-  %cmp1 = fcmp one double %a, %b
+  %cmp = fcmp une double %a, %b
+  %cmp1 = fcmp one double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
+define i1 @auto_gen_97_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_97_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast one double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast une double %a, %b
+  %cmp1 = fcmp fast one double %a, %b
   %retval = select i1 %cmp, i1 %cmp1, i1 false
   ret i1 %retval
 }
@@ -2327,6 +3369,17 @@ define i1 @auto_gen_98_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_98_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_98_logical_fmf(
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = fcmp une double %a, %b
+  %cmp1 = fcmp fast ord double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_99(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_99(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
@@ -2349,6 +3402,16 @@ define i1 @auto_gen_99_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_99_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_99_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast une double %a, %b
+  %cmp1 = fcmp fast ueq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_100(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_100(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
@@ -2371,6 +3434,17 @@ define i1 @auto_gen_100_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_100_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_100_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp une double %a, %b
+  %cmp1 = fcmp fast ugt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_101(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_101(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
@@ -2393,6 +3467,17 @@ define i1 @auto_gen_101_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_101_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_101_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ugt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast une double %a, %b
+  %cmp1 = fcmp fast uge double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_102(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_102(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
@@ -2415,6 +3500,17 @@ define i1 @auto_gen_102_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_102_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_102_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp une double %a, %b
+  %cmp1 = fcmp fast ult double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_103(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_103(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
@@ -2437,6 +3533,17 @@ define i1 @auto_gen_103_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_103_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_103_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ult double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast une double %a, %b
+  %cmp1 = fcmp fast ule double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_104(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_104(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
@@ -2459,6 +3566,17 @@ define i1 @auto_gen_104_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_104_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_104_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp une double %a, %b
+  %cmp1 = fcmp fast une double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_105(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_105(
 ; CHECK-NEXT:    ret i1 false
@@ -2479,6 +3597,16 @@ define i1 @auto_gen_105_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_105_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_105_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast uno double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_106(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_106(
 ; CHECK-NEXT:    ret i1 false
@@ -2499,6 +3627,16 @@ define i1 @auto_gen_106_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_106_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_106_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp uno double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_107(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_107(
 ; CHECK-NEXT:    ret i1 false
@@ -2519,6 +3657,16 @@ define i1 @auto_gen_107_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_107_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_107_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast uno double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_108(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_108(
 ; CHECK-NEXT:    ret i1 false
@@ -2539,6 +3687,16 @@ define i1 @auto_gen_108_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_108_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_108_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp uno double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_109(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_109(
 ; CHECK-NEXT:    ret i1 false
@@ -2559,6 +3717,16 @@ define i1 @auto_gen_109_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_109_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_109_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast uno double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_110(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_110(
 ; CHECK-NEXT:    ret i1 false
@@ -2579,6 +3747,16 @@ define i1 @auto_gen_110_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_110_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_110_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp uno double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_111(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_111(
 ; CHECK-NEXT:    ret i1 false
@@ -2599,6 +3777,16 @@ define i1 @auto_gen_111_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_111_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_111_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast uno double %a, %b
+  %cmp1 = fcmp fast one double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_112(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_112(
 ; CHECK-NEXT:    ret i1 false
@@ -2619,6 +3807,17 @@ define i1 @auto_gen_112_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_112_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_112_logical_fmf(
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = fcmp uno double %a, %b
+  %cmp1 = fcmp fast ord double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_113(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_113(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
@@ -2641,6 +3840,16 @@ define i1 @auto_gen_113_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_113_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_113_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast uno double %a, %b
+  %cmp1 = fcmp fast ueq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_114(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_114(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
@@ -2663,6 +3872,17 @@ define i1 @auto_gen_114_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_114_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_114_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp uno double %a, %b
+  %cmp1 = fcmp fast ugt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_115(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_115(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
@@ -2685,6 +3905,16 @@ define i1 @auto_gen_115_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_115_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_115_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast uno double %a, %b
+  %cmp1 = fcmp fast uge double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_116(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_116(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
@@ -2707,6 +3937,17 @@ define i1 @auto_gen_116_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_116_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_116_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp uno double %a, %b
+  %cmp1 = fcmp fast ult double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_117(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_117(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
@@ -2729,6 +3970,16 @@ define i1 @auto_gen_117_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_117_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_117_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast uno double %a, %b
+  %cmp1 = fcmp fast ule double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_118(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_118(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
@@ -2751,6 +4002,17 @@ define i1 @auto_gen_118_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_118_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_118_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp uno double %a, %b
+  %cmp1 = fcmp fast une double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_119(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_119(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
@@ -2773,6 +4035,16 @@ define i1 @auto_gen_119_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_119_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_119_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast uno double %a, %b
+  %cmp1 = fcmp fast uno double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_120(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_120(
 ; CHECK-NEXT:    ret i1 false
@@ -2793,6 +4065,16 @@ define i1 @auto_gen_120_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_120_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_120_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp true double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_121(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_121(
 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
@@ -2815,6 +4097,17 @@ define i1 @auto_gen_121_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_121_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_121_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast oeq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp fast true double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_122(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_122(
 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
@@ -2837,6 +4130,17 @@ define i1 @auto_gen_122_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_122_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_122_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast ogt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp true double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_123(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_123(
 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
@@ -2859,6 +4163,17 @@ define i1 @auto_gen_123_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_123_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_123_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast oge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp fast true double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_124(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_124(
 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
@@ -2881,6 +4196,17 @@ define i1 @auto_gen_124_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_124_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_124_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast olt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp true double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_125(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_125(
 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
@@ -2903,6 +4229,17 @@ define i1 @auto_gen_125_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_125_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_125_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast ole double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp fast true double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_126(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_126(
 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
@@ -2925,6 +4262,17 @@ define i1 @auto_gen_126_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_126_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_126_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast one double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp true double %a, %b
+  %cmp1 = fcmp fast one double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_127(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_127(
 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
@@ -2947,6 +4295,16 @@ define i1 @auto_gen_127_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_127_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_127_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast true double %a, %b
+  %cmp1 = fcmp fast ord double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_128(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_128(
 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
@@ -2969,6 +4327,17 @@ define i1 @auto_gen_128_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_128_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_128_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast ueq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp true double %a, %b
+  %cmp1 = fcmp fast ueq double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_129(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_129(
 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
@@ -2991,6 +4360,17 @@ define i1 @auto_gen_129_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_129_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_129_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast ugt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp fast true double %a, %b
+  %cmp1 = fcmp fast ugt double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_130(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_130(
 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
@@ -3013,6 +4393,17 @@ define i1 @auto_gen_130_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_130_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_130_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast uge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp true double %a, %b
+  %cmp1 = fcmp fast uge double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_131(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_131(
 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
@@ -3035,6 +4426,17 @@ define i1 @auto_gen_131_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_131_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_131_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast ult double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp fast true double %a, %b
+  %cmp1 = fcmp fast ult double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_132(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_132(
 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
@@ -3057,6 +4459,17 @@ define i1 @auto_gen_132_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_132_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_132_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast ule double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp true double %a, %b
+  %cmp1 = fcmp fast ule double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_133(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_133(
 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
@@ -3079,6 +4492,17 @@ define i1 @auto_gen_133_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_133_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_133_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast une double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp fast true double %a, %b
+  %cmp1 = fcmp fast une double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_134(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_134(
 ; CHECK-NEXT:    [[CMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
@@ -3101,6 +4525,16 @@ define i1 @auto_gen_134_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_134_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_134_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp true double %a, %b
+  %cmp1 = fcmp fast uno double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @auto_gen_135(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_135(
 ; CHECK-NEXT:    ret i1 true
@@ -3121,6 +4555,16 @@ define i1 @auto_gen_135_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_135_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_135_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast true double %a, %b
+  %cmp1 = fcmp fast true double %a, %b
+  %retval = select i1 %cmp, i1 %cmp1, i1 false
+  ret i1 %retval
+}
+
 define i1 @intersect_fmf_1(double %a, double %b) {
 ; CHECK-LABEL: @intersect_fmf_1(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast oeq double [[A:%.*]], [[B:%.*]]

diff  --git a/llvm/test/Transforms/InstCombine/or-fcmp.ll b/llvm/test/Transforms/InstCombine/or-fcmp.ll
index 0ff3d3ddd10a3..45524a14cc74e 100644
--- a/llvm/test/Transforms/InstCombine/or-fcmp.ll
+++ b/llvm/test/Transforms/InstCombine/or-fcmp.ll
@@ -185,6 +185,16 @@ define i1 @auto_gen_0_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_0_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_0_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp false double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_1(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_1(
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
@@ -207,6 +217,17 @@ define i1 @auto_gen_1_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_1_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_1_logical_fmf(
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp fast oeq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = fcmp fast oeq double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_2(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_2(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
@@ -229,6 +250,17 @@ define i1 @auto_gen_2_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_2_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_2_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp oeq double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_3(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_3(
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
@@ -251,6 +283,17 @@ define i1 @auto_gen_3_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_3_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_3_logical_fmf(
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp fast ogt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = fcmp fast ogt double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_4(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_4(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
@@ -273,6 +316,17 @@ define i1 @auto_gen_4_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_4_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_4_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ogt double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_5(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_5(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]]
@@ -295,6 +349,17 @@ define i1 @auto_gen_5_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_5_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_5_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ogt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ogt double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_6(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_6(
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
@@ -317,6 +382,17 @@ define i1 @auto_gen_6_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_6_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_6_logical_fmf(
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = fcmp oge double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_7(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_7(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
@@ -339,6 +415,17 @@ define i1 @auto_gen_7_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_7_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_7_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast oge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast oge double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_8(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_8(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
@@ -361,6 +448,17 @@ define i1 @auto_gen_8_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_8_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_8_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp oge double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_9(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_9(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]]
@@ -383,6 +481,17 @@ define i1 @auto_gen_9_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_9_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_9_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast oge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast oge double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_10(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_10(
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
@@ -405,6 +514,17 @@ define i1 @auto_gen_10_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_10_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_10_logical_fmf(
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = fcmp olt double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_11(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_11(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
@@ -427,6 +547,17 @@ define i1 @auto_gen_11_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_11_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_11_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ole double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast olt double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_12(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_12(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
@@ -449,6 +580,17 @@ define i1 @auto_gen_12_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_12_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_12_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp olt double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_13(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_13(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
@@ -471,6 +613,16 @@ define i1 @auto_gen_13_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_13_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_13_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast olt double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_14(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_14(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
@@ -493,6 +645,17 @@ define i1 @auto_gen_14_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_14_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_14_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp olt double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_15(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_15(
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
@@ -515,6 +678,17 @@ define i1 @auto_gen_15_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_15_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_15_logical_fmf(
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp fast ole double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = fcmp fast ole double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_16(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_16(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
@@ -537,6 +711,17 @@ define i1 @auto_gen_16_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_16_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_16_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ole double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_17(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_17(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
@@ -559,6 +744,16 @@ define i1 @auto_gen_17_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_17_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_17_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast ole double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_18(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_18(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
@@ -581,6 +776,17 @@ define i1 @auto_gen_18_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_18_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_18_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ole double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_19(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_19(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
@@ -603,6 +809,17 @@ define i1 @auto_gen_19_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_19_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_19_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ole double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ole double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_20(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_20(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
@@ -625,6 +842,17 @@ define i1 @auto_gen_20_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_20_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_20_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ole double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_21(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_21(
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
@@ -647,6 +875,17 @@ define i1 @auto_gen_21_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_21_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_21_logical_fmf(
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp fast one double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = fcmp fast one double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_22(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_22(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
@@ -669,6 +908,17 @@ define i1 @auto_gen_22_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_22_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_22_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp one double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_23(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_23(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
@@ -691,6 +941,17 @@ define i1 @auto_gen_23_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_23_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_23_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast one double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast one double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_24(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_24(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
@@ -713,6 +974,17 @@ define i1 @auto_gen_24_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_24_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_24_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp one double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_25(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_25(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
@@ -735,6 +1007,17 @@ define i1 @auto_gen_25_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_25_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_25_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast one double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast one double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_26(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_26(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
@@ -757,6 +1040,17 @@ define i1 @auto_gen_26_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_26_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_26_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp one double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_27(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_27(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]]
@@ -779,6 +1073,17 @@ define i1 @auto_gen_27_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_27_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_27_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast one double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast one double %a, %b
+  %cmp1 = fcmp fast one double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_28(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_28(
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
@@ -801,6 +1106,17 @@ define i1 @auto_gen_28_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_28_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_28_logical_fmf(
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = fcmp ord double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_29(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_29(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
@@ -823,6 +1139,16 @@ define i1 @auto_gen_29_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_29_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_29_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast ord double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_30(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_30(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
@@ -845,6 +1171,17 @@ define i1 @auto_gen_30_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_30_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_30_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ord double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_31(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_31(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
@@ -867,6 +1204,16 @@ define i1 @auto_gen_31_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_31_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_31_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast ord double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_32(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_32(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
@@ -889,6 +1236,17 @@ define i1 @auto_gen_32_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_32_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_32_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ord double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_33(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_33(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
@@ -911,6 +1269,16 @@ define i1 @auto_gen_33_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_33_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_33_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast ord double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_34(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_34(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
@@ -933,6 +1301,17 @@ define i1 @auto_gen_34_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_34_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_34_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ord double %a, %b
+  %cmp1 = fcmp fast one double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_35(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_35(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]]
@@ -955,6 +1334,16 @@ define i1 @auto_gen_35_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_35_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_35_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast ord double %a, %b
+  %cmp1 = fcmp fast ord double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_36(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_36(
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
@@ -977,6 +1366,17 @@ define i1 @auto_gen_36_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_36_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_36_logical_fmf(
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = fcmp ueq double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_37(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_37(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
@@ -999,6 +1399,17 @@ define i1 @auto_gen_37_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_37_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_37_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ueq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ueq double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_38(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_38(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
@@ -1021,6 +1432,17 @@ define i1 @auto_gen_38_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_38_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_38_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ueq double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_39(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_39(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
@@ -1043,6 +1465,17 @@ define i1 @auto_gen_39_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_39_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_39_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast uge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ueq double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_40(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_40(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
@@ -1065,6 +1498,17 @@ define i1 @auto_gen_40_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_40_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_40_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ueq double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_41(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_41(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
@@ -1087,6 +1531,17 @@ define i1 @auto_gen_41_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_41_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_41_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ule double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ueq double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_42(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_42(
 ; CHECK-NEXT:    ret i1 true
@@ -1107,6 +1562,16 @@ define i1 @auto_gen_42_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_42_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_42_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp ueq double %a, %b
+  %cmp1 = fcmp fast one double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_43(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_43(
 ; CHECK-NEXT:    ret i1 true
@@ -1127,6 +1592,16 @@ define i1 @auto_gen_43_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_43_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_43_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast ueq double %a, %b
+  %cmp1 = fcmp fast ord double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_44(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_44(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
@@ -1149,6 +1624,17 @@ define i1 @auto_gen_44_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_44_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_44_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ueq double %a, %b
+  %cmp1 = fcmp fast ueq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_45(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_45(
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
@@ -1171,6 +1657,17 @@ define i1 @auto_gen_45_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_45_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_45_logical_fmf(
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp fast ugt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = fcmp fast ugt double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_46(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_46(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
@@ -1193,6 +1690,17 @@ define i1 @auto_gen_46_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_46_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_46_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ugt double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_47(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_47(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
@@ -1215,6 +1723,17 @@ define i1 @auto_gen_47_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_47_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_47_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ugt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ugt double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_48(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_48(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
@@ -1237,6 +1756,17 @@ define i1 @auto_gen_48_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_48_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_48_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ugt double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_49(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_49(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
@@ -1259,6 +1789,17 @@ define i1 @auto_gen_49_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_49_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_49_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast une double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ugt double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_50(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_50(
 ; CHECK-NEXT:    ret i1 true
@@ -1279,6 +1820,16 @@ define i1 @auto_gen_50_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_50_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_50_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp ugt double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_51(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_51(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
@@ -1301,6 +1852,17 @@ define i1 @auto_gen_51_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_51_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_51_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast une double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ugt double %a, %b
+  %cmp1 = fcmp fast one double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_52(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_52(
 ; CHECK-NEXT:    ret i1 true
@@ -1321,6 +1883,16 @@ define i1 @auto_gen_52_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_52_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_52_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp ugt double %a, %b
+  %cmp1 = fcmp fast ord double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_53(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_53(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
@@ -1343,6 +1915,17 @@ define i1 @auto_gen_53_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_53_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_53_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast uge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ugt double %a, %b
+  %cmp1 = fcmp fast ueq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_54(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_54(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
@@ -1365,6 +1948,17 @@ define i1 @auto_gen_54_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_54_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_54_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ugt double %a, %b
+  %cmp1 = fcmp fast ugt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_55(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_55(
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
@@ -1387,6 +1981,17 @@ define i1 @auto_gen_55_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_55_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_55_logical_fmf(
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp fast uge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = fcmp fast uge double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_56(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_56(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
@@ -1409,6 +2014,17 @@ define i1 @auto_gen_56_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_56_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_56_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp uge double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_57(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_57(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
@@ -1431,6 +2047,17 @@ define i1 @auto_gen_57_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_57_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_57_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast uge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast uge double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_58(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_58(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
@@ -1453,6 +2080,17 @@ define i1 @auto_gen_58_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_58_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_58_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp uge double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_59(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_59(
 ; CHECK-NEXT:    ret i1 true
@@ -1473,6 +2111,16 @@ define i1 @auto_gen_59_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_59_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_59_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast uge double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_60(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_60(
 ; CHECK-NEXT:    ret i1 true
@@ -1483,12 +2131,22 @@ define i1 @auto_gen_60(double %a, double %b) {
   ret i1 %retval
 }
 
-define i1 @auto_gen_60_logical(double %a, double %b) {
-; CHECK-LABEL: @auto_gen_60_logical(
+define i1 @auto_gen_60_logical(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_60_logical(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp uge double %a, %b
+  %cmp1 = fcmp ole double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
+define i1 @auto_gen_60_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_60_logical_fmf(
 ; CHECK-NEXT:    ret i1 true
 ;
   %cmp = fcmp uge double %a, %b
-  %cmp1 = fcmp ole double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
   %retval = select i1 %cmp, i1 true, i1 %cmp1
   ret i1 %retval
 }
@@ -1513,6 +2171,16 @@ define i1 @auto_gen_61_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_61_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_61_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast uge double %a, %b
+  %cmp1 = fcmp fast one double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_62(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_62(
 ; CHECK-NEXT:    ret i1 true
@@ -1533,6 +2201,16 @@ define i1 @auto_gen_62_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_62_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_62_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp uge double %a, %b
+  %cmp1 = fcmp fast ord double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_63(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_63(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
@@ -1555,6 +2233,17 @@ define i1 @auto_gen_63_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_63_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_63_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast uge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast uge double %a, %b
+  %cmp1 = fcmp fast ueq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_64(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_64(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
@@ -1577,6 +2266,17 @@ define i1 @auto_gen_64_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_64_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_64_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp uge double %a, %b
+  %cmp1 = fcmp fast ugt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_65(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_65(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
@@ -1599,6 +2299,17 @@ define i1 @auto_gen_65_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_65_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_65_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast uge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast uge double %a, %b
+  %cmp1 = fcmp fast uge double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_66(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_66(
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
@@ -1621,6 +2332,17 @@ define i1 @auto_gen_66_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_66_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_66_logical_fmf(
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = fcmp ult double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_67(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_67(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
@@ -1643,6 +2365,17 @@ define i1 @auto_gen_67_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_67_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_67_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ule double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ult double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_68(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_68(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
@@ -1665,6 +2398,17 @@ define i1 @auto_gen_68_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_68_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_68_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ult double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_69(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_69(
 ; CHECK-NEXT:    ret i1 true
@@ -1685,6 +2429,16 @@ define i1 @auto_gen_69_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_69_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_69_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast ult double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_70(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_70(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
@@ -1707,6 +2461,17 @@ define i1 @auto_gen_70_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_70_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_70_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ult double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_71(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_71(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
@@ -1729,6 +2494,17 @@ define i1 @auto_gen_71_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_71_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_71_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ule double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ult double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_72(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_72(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
@@ -1751,6 +2527,17 @@ define i1 @auto_gen_72_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_72_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_72_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ult double %a, %b
+  %cmp1 = fcmp fast one double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_73(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_73(
 ; CHECK-NEXT:    ret i1 true
@@ -1771,6 +2558,16 @@ define i1 @auto_gen_73_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_73_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_73_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast ult double %a, %b
+  %cmp1 = fcmp fast ord double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_74(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_74(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
@@ -1793,6 +2590,17 @@ define i1 @auto_gen_74_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_74_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_74_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ult double %a, %b
+  %cmp1 = fcmp fast ueq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_75(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_75(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
@@ -1815,6 +2623,17 @@ define i1 @auto_gen_75_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_75_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_75_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast une double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ult double %a, %b
+  %cmp1 = fcmp fast ugt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_76(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_76(
 ; CHECK-NEXT:    ret i1 true
@@ -1835,6 +2654,16 @@ define i1 @auto_gen_76_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_76_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_76_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp ult double %a, %b
+  %cmp1 = fcmp fast uge double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_77(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_77(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
@@ -1857,6 +2686,17 @@ define i1 @auto_gen_77_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_77_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_77_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ult double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ult double %a, %b
+  %cmp1 = fcmp fast ult double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_78(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_78(
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
@@ -1879,6 +2719,17 @@ define i1 @auto_gen_78_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_78_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_78_logical_fmf(
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = fcmp ule double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_79(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_79(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
@@ -1901,6 +2752,17 @@ define i1 @auto_gen_79_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_79_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_79_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ule double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ule double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_80(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_80(
 ; CHECK-NEXT:    ret i1 true
@@ -1921,6 +2783,16 @@ define i1 @auto_gen_80_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_80_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_80_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp ule double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_81(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_81(
 ; CHECK-NEXT:    ret i1 true
@@ -1941,6 +2813,16 @@ define i1 @auto_gen_81_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_81_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_81_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast ule double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_82(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_82(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
@@ -1963,6 +2845,17 @@ define i1 @auto_gen_82_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_82_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_82_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ule double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_83(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_83(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
@@ -1985,6 +2878,17 @@ define i1 @auto_gen_83_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_83_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_83_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ule double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ule double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_84(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_84(
 ; CHECK-NEXT:    ret i1 true
@@ -2005,6 +2909,16 @@ define i1 @auto_gen_84_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_84_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_84_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp ule double %a, %b
+  %cmp1 = fcmp fast one double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_85(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_85(
 ; CHECK-NEXT:    ret i1 true
@@ -2025,6 +2939,16 @@ define i1 @auto_gen_85_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_85_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_85_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast ule double %a, %b
+  %cmp1 = fcmp fast ord double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_86(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_86(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
@@ -2047,6 +2971,17 @@ define i1 @auto_gen_86_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_86_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_86_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ule double %a, %b
+  %cmp1 = fcmp fast ueq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_87(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_87(
 ; CHECK-NEXT:    ret i1 true
@@ -2067,6 +3002,16 @@ define i1 @auto_gen_87_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_87_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_87_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast ule double %a, %b
+  %cmp1 = fcmp fast ugt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_88(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_88(
 ; CHECK-NEXT:    ret i1 true
@@ -2087,6 +3032,16 @@ define i1 @auto_gen_88_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_88_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_88_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp ule double %a, %b
+  %cmp1 = fcmp fast uge double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_89(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_89(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
@@ -2109,6 +3064,17 @@ define i1 @auto_gen_89_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_89_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_89_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast ule double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast ule double %a, %b
+  %cmp1 = fcmp fast ult double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_90(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_90(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
@@ -2131,6 +3097,17 @@ define i1 @auto_gen_90_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_90_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_90_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp ule double %a, %b
+  %cmp1 = fcmp fast ule double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_91(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_91(
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
@@ -2153,6 +3130,17 @@ define i1 @auto_gen_91_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_91_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_91_logical_fmf(
+; CHECK-NEXT:    [[CMP:%.*]] = fcmp fast une double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %cmp = fcmp fast une double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_92(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_92(
 ; CHECK-NEXT:    ret i1 true
@@ -2173,6 +3161,16 @@ define i1 @auto_gen_92_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_92_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_92_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp une double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_93(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_93(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
@@ -2195,6 +3193,17 @@ define i1 @auto_gen_93_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_93_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_93_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast une double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast une double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_94(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_94(
 ; CHECK-NEXT:    ret i1 true
@@ -2215,6 +3224,16 @@ define i1 @auto_gen_94_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_94_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_94_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp une double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_95(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_95(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
@@ -2237,6 +3256,17 @@ define i1 @auto_gen_95_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_95_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_95_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast une double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast une double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_96(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_96(
 ; CHECK-NEXT:    ret i1 true
@@ -2257,6 +3287,16 @@ define i1 @auto_gen_96_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_96_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_96_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp une double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_97(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_97(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
@@ -2273,8 +3313,19 @@ define i1 @auto_gen_97_logical(double %a, double %b) {
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
-  %cmp = fcmp une double %a, %b
-  %cmp1 = fcmp one double %a, %b
+  %cmp = fcmp une double %a, %b
+  %cmp1 = fcmp one double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
+define i1 @auto_gen_97_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_97_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast une double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp fast une double %a, %b
+  %cmp1 = fcmp fast one double %a, %b
   %retval = select i1 %cmp, i1 true, i1 %cmp1
   ret i1 %retval
 }
@@ -2299,6 +3350,16 @@ define i1 @auto_gen_98_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_98_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_98_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp une double %a, %b
+  %cmp1 = fcmp fast ord double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_99(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_99(
 ; CHECK-NEXT:    ret i1 true
@@ -2319,6 +3380,16 @@ define i1 @auto_gen_99_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_99_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_99_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast une double %a, %b
+  %cmp1 = fcmp fast ueq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_100(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_100(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
@@ -2341,6 +3412,17 @@ define i1 @auto_gen_100_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_100_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_100_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp une double %a, %b
+  %cmp1 = fcmp fast ugt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_101(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_101(
 ; CHECK-NEXT:    ret i1 true
@@ -2361,6 +3443,16 @@ define i1 @auto_gen_101_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_101_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_101_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast une double %a, %b
+  %cmp1 = fcmp fast uge double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_102(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_102(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
@@ -2383,6 +3475,17 @@ define i1 @auto_gen_102_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_102_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_102_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp une double %a, %b
+  %cmp1 = fcmp fast ult double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_103(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_103(
 ; CHECK-NEXT:    ret i1 true
@@ -2403,6 +3506,16 @@ define i1 @auto_gen_103_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_103_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_103_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast une double %a, %b
+  %cmp1 = fcmp fast ule double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_104(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_104(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
@@ -2425,6 +3538,17 @@ define i1 @auto_gen_104_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_104_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_104_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp une double %a, %b
+  %cmp1 = fcmp fast une double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_105(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_105(
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
@@ -2447,6 +3571,16 @@ define i1 @auto_gen_105_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_105_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_105_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast uno double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_106(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_106(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
@@ -2469,6 +3603,17 @@ define i1 @auto_gen_106_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_106_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_106_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp uno double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_107(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_107(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
@@ -2491,6 +3636,17 @@ define i1 @auto_gen_107_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_107_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_107_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast ogt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp fast uno double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_108(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_108(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
@@ -2513,6 +3669,17 @@ define i1 @auto_gen_108_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_108_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_108_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp uno double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_109(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_109(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
@@ -2535,6 +3702,17 @@ define i1 @auto_gen_109_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_109_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_109_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast olt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp fast uno double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_110(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_110(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
@@ -2557,6 +3735,17 @@ define i1 @auto_gen_110_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_110_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_110_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp uno double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_111(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_111(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
@@ -2579,6 +3768,17 @@ define i1 @auto_gen_111_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_111_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_111_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast one double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp fast uno double %a, %b
+  %cmp1 = fcmp fast one double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_112(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_112(
 ; CHECK-NEXT:    ret i1 true
@@ -2599,6 +3799,16 @@ define i1 @auto_gen_112_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_112_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_112_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp uno double %a, %b
+  %cmp1 = fcmp fast ord double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_113(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_113(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]]
@@ -2621,6 +3831,17 @@ define i1 @auto_gen_113_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_113_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_113_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast ueq double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp fast uno double %a, %b
+  %cmp1 = fcmp fast ueq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_114(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_114(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
@@ -2643,6 +3864,17 @@ define i1 @auto_gen_114_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_114_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_114_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp uno double %a, %b
+  %cmp1 = fcmp fast ugt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_115(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_115(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]]
@@ -2665,6 +3897,17 @@ define i1 @auto_gen_115_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_115_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_115_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast uge double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp fast uno double %a, %b
+  %cmp1 = fcmp fast uge double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_116(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_116(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
@@ -2687,6 +3930,17 @@ define i1 @auto_gen_116_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_116_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_116_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp uno double %a, %b
+  %cmp1 = fcmp fast ult double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_117(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_117(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]]
@@ -2709,6 +3963,17 @@ define i1 @auto_gen_117_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_117_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_117_logical_fmf(
+; CHECK-NEXT:    [[CMP1:%.*]] = fcmp fast ule double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[CMP1]]
+;
+  %cmp = fcmp fast uno double %a, %b
+  %cmp1 = fcmp fast ule double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_118(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_118(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
@@ -2731,6 +3996,17 @@ define i1 @auto_gen_118_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_118_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_118_logical_fmf(
+; CHECK-NEXT:    [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    ret i1 [[TMP1]]
+;
+  %cmp = fcmp uno double %a, %b
+  %cmp1 = fcmp fast une double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_119(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_119(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]]
@@ -2753,6 +4029,16 @@ define i1 @auto_gen_119_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_119_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_119_logical_fmf(
+; CHECK-NEXT:    ret i1 false
+;
+  %cmp = fcmp fast uno double %a, %b
+  %cmp1 = fcmp fast uno double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_120(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_120(
 ; CHECK-NEXT:    ret i1 true
@@ -2773,6 +4059,16 @@ define i1 @auto_gen_120_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_120_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_120_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp true double %a, %b
+  %cmp1 = fcmp fast false double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_121(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_121(
 ; CHECK-NEXT:    ret i1 true
@@ -2793,6 +4089,16 @@ define i1 @auto_gen_121_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_121_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_121_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast true double %a, %b
+  %cmp1 = fcmp fast oeq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_122(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_122(
 ; CHECK-NEXT:    ret i1 true
@@ -2813,6 +4119,16 @@ define i1 @auto_gen_122_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_122_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_122_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp true double %a, %b
+  %cmp1 = fcmp fast ogt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_123(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_123(
 ; CHECK-NEXT:    ret i1 true
@@ -2833,6 +4149,16 @@ define i1 @auto_gen_123_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_123_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_123_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast true double %a, %b
+  %cmp1 = fcmp fast oge double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_124(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_124(
 ; CHECK-NEXT:    ret i1 true
@@ -2853,6 +4179,16 @@ define i1 @auto_gen_124_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_124_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_124_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp true double %a, %b
+  %cmp1 = fcmp fast olt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_125(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_125(
 ; CHECK-NEXT:    ret i1 true
@@ -2873,6 +4209,16 @@ define i1 @auto_gen_125_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_125_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_125_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast true double %a, %b
+  %cmp1 = fcmp fast ole double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_126(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_126(
 ; CHECK-NEXT:    ret i1 true
@@ -2893,6 +4239,16 @@ define i1 @auto_gen_126_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_126_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_126_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp true double %a, %b
+  %cmp1 = fcmp fast one double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_127(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_127(
 ; CHECK-NEXT:    ret i1 true
@@ -2913,6 +4269,16 @@ define i1 @auto_gen_127_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_127_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_127_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast true double %a, %b
+  %cmp1 = fcmp fast ord double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_128(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_128(
 ; CHECK-NEXT:    ret i1 true
@@ -2933,6 +4299,16 @@ define i1 @auto_gen_128_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_128_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_128_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp true double %a, %b
+  %cmp1 = fcmp fast ueq double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_129(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_129(
 ; CHECK-NEXT:    ret i1 true
@@ -2953,6 +4329,16 @@ define i1 @auto_gen_129_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_129_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_129_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast true double %a, %b
+  %cmp1 = fcmp fast ugt double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_130(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_130(
 ; CHECK-NEXT:    ret i1 true
@@ -2973,6 +4359,16 @@ define i1 @auto_gen_130_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_130_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_130_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp true double %a, %b
+  %cmp1 = fcmp fast uge double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_131(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_131(
 ; CHECK-NEXT:    ret i1 true
@@ -2993,6 +4389,16 @@ define i1 @auto_gen_131_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_131_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_131_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast true double %a, %b
+  %cmp1 = fcmp fast ult double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_132(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_132(
 ; CHECK-NEXT:    ret i1 true
@@ -3013,6 +4419,16 @@ define i1 @auto_gen_132_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_132_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_132_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp true double %a, %b
+  %cmp1 = fcmp fast ule double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_133(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_133(
 ; CHECK-NEXT:    ret i1 true
@@ -3033,6 +4449,16 @@ define i1 @auto_gen_133_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_133_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_133_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast true double %a, %b
+  %cmp1 = fcmp fast une double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_134(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_134(
 ; CHECK-NEXT:    ret i1 true
@@ -3053,6 +4479,16 @@ define i1 @auto_gen_134_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_134_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_134_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp true double %a, %b
+  %cmp1 = fcmp fast uno double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @auto_gen_135(double %a, double %b) {
 ; CHECK-LABEL: @auto_gen_135(
 ; CHECK-NEXT:    ret i1 true
@@ -3073,6 +4509,16 @@ define i1 @auto_gen_135_logical(double %a, double %b) {
   ret i1 %retval
 }
 
+define i1 @auto_gen_135_logical_fmf(double %a, double %b) {
+; CHECK-LABEL: @auto_gen_135_logical_fmf(
+; CHECK-NEXT:    ret i1 true
+;
+  %cmp = fcmp fast true double %a, %b
+  %cmp1 = fcmp fast true double %a, %b
+  %retval = select i1 %cmp, i1 true, i1 %cmp1
+  ret i1 %retval
+}
+
 define i1 @intersect_fmf_1(double %a, double %b) {
 ; CHECK-LABEL: @intersect_fmf_1(
 ; CHECK-NEXT:    [[TMP1:%.*]] = fcmp fast one double [[A:%.*]], [[B:%.*]]


        


More information about the llvm-commits mailing list