[llvm] [X86][GlobalISel] Support G_FCMP for scalar cases (PR #123598)

via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 30 02:25:28 PST 2025


https://github.com/mahesh-attarde updated https://github.com/llvm/llvm-project/pull/123598

>From c974d712fd6d7e412a89b6d911474bfb425d037e Mon Sep 17 00:00:00 2001
From: mattarde <mattarde at intel.com>
Date: Mon, 20 Jan 2025 04:00:11 -0800
Subject: [PATCH 1/4] Support G_FCMP for scalar cases

---
 .../X86/GISel/X86InstructionSelector.cpp      |   16 +-
 .../lib/Target/X86/GISel/X86LegalizerInfo.cpp |    3 +-
 .../Target/X86/GISel/X86RegisterBankInfo.cpp  |    4 +-
 llvm/test/CodeGen/X86/isel-fcmp-x87.ll        | 1054 +++++++++++++++++
 4 files changed, 1072 insertions(+), 5 deletions(-)
 create mode 100644 llvm/test/CodeGen/X86/isel-fcmp-x87.ll

diff --git a/llvm/lib/Target/X86/GISel/X86InstructionSelector.cpp b/llvm/lib/Target/X86/GISel/X86InstructionSelector.cpp
index ee456a11d58441..9c35b1c06b187a 100644
--- a/llvm/lib/Target/X86/GISel/X86InstructionSelector.cpp
+++ b/llvm/lib/Target/X86/GISel/X86InstructionSelector.cpp
@@ -1048,6 +1048,13 @@ bool X86InstructionSelector::selectFCmp(MachineInstr &I,
     break;
   }
 
+  assert((LhsReg.isVirtual() && RhsReg.isVirtual()) &&
+         "Both arguments of FCMP need to be virtual!");
+  auto *LhsBank = RBI.getRegBank(LhsReg, MRI, TRI);
+  auto *RhsBank = RBI.getRegBank(RhsReg, MRI, TRI);
+  assert((LhsBank == RhsBank) &&
+         "Both banks assigned to FCMP arguments need to be same!");
+
   // Compute the opcode for the CMP instruction.
   unsigned OpCmp;
   LLT Ty = MRI.getType(LhsReg);
@@ -1055,10 +1062,15 @@ bool X86InstructionSelector::selectFCmp(MachineInstr &I,
   default:
     return false;
   case 32:
-    OpCmp = X86::UCOMISSrr;
+    OpCmp = LhsBank->getID() == X86::PSRRegBankID ? X86::UCOM_FpIr32
+                                                  : X86::UCOMISSrr;
     break;
   case 64:
-    OpCmp = X86::UCOMISDrr;
+    OpCmp = LhsBank->getID() == X86::PSRRegBankID ? X86::UCOM_FpIr64
+                                                  : X86::UCOMISDrr;
+    break;
+  case 80:
+    OpCmp = X86::UCOM_FpIr80;
     break;
   }
 
diff --git a/llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp b/llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp
index bab7fe9d25e441..1136438ee742d1 100644
--- a/llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp
+++ b/llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp
@@ -450,7 +450,8 @@ X86LegalizerInfo::X86LegalizerInfo(const X86Subtarget &STI,
   getActionDefinitionsBuilder(G_FCMP)
       .legalIf([=](const LegalityQuery &Query) {
         return (HasSSE1 && typePairInSet(0, 1, {{s8, s32}})(Query)) ||
-               (HasSSE2 && typePairInSet(0, 1, {{s8, s64}})(Query));
+               (HasSSE2 && typePairInSet(0, 1, {{s8, s64}})(Query)) ||
+               (UseX87 && typePairInSet(0, 1, {{s8, s80}})(Query));
       })
       .clampScalar(0, s8, s8)
       .clampScalar(1, s32, HasSSE2 ? s64 : s32)
diff --git a/llvm/lib/Target/X86/GISel/X86RegisterBankInfo.cpp b/llvm/lib/Target/X86/GISel/X86RegisterBankInfo.cpp
index 43c0145ec8e2ad..42faf4299c6d5d 100644
--- a/llvm/lib/Target/X86/GISel/X86RegisterBankInfo.cpp
+++ b/llvm/lib/Target/X86/GISel/X86RegisterBankInfo.cpp
@@ -321,8 +321,8 @@ X86RegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
 
     unsigned Size = Ty1.getSizeInBits();
     (void)Size;
-    assert((Size == 32 || Size == 64) && "Unsupported size for G_FCMP");
-
+    assert((Size == 32 || Size == 64 || Size == 80) &&
+           "Unsupported size for G_FCMP");
     auto FpRegBank = getPartialMappingIdx(MI, Ty1, /* isFP= */ true);
     OpRegBankIdx = {PMI_GPR8,
                     /* Predicate */ PMI_None, FpRegBank, FpRegBank};
diff --git a/llvm/test/CodeGen/X86/isel-fcmp-x87.ll b/llvm/test/CodeGen/X86/isel-fcmp-x87.ll
new file mode 100644
index 00000000000000..c46b354c9c410e
--- /dev/null
+++ b/llvm/test/CodeGen/X86/isel-fcmp-x87.ll
@@ -0,0 +1,1054 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc < %s                               -mtriple=x86_64-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefix=SDAG-X64
+; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefix=FAST-X64
+; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefixes=GISEL-X64
+; RUN: llc < %s                               -mtriple=i686-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefixes=SDAG-X86
+; Allow fast-isel to fallback to selection dag on x86
+; RUN: llc < %s -fast-isel -mtriple=i686-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefixes=FAST-X86
+; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=i686-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefixes=GISEL-X86
+
+  define i1 @fcmp_x86_fp80_oeq(x86_fp80 %x, x86_fp80 %y) {
+; SDAG-X64-LABEL: fcmp_x86_fp80_oeq:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fucompi %st(1), %st
+; SDAG-X64-NEXT:    fstp %st(0)
+; SDAG-X64-NEXT:    setnp %cl
+; SDAG-X64-NEXT:    sete %al
+; SDAG-X64-NEXT:    andb %cl, %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_x86_fp80_oeq:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fucompi %st(1), %st
+; FAST-X64-NEXT:    fstp %st(0)
+; FAST-X64-NEXT:    setnp %cl
+; FAST-X64-NEXT:    sete %al
+; FAST-X64-NEXT:    andb %cl, %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_x86_fp80_oeq:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    sete %cl
+; GISEL-X64-NEXT:    setnp %al
+; GISEL-X64-NEXT:    andb %cl, %al
+; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_x86_fp80_oeq:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    subl $12, %esp
+; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setnp %cl
+; SDAG-X86-NEXT:    sete %al
+; SDAG-X86-NEXT:    andb %cl, %al
+; SDAG-X86-NEXT:    addl $12, %esp
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_x86_fp80_oeq:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    subl $12, %esp
+; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setnp %cl
+; FAST-X86-NEXT:    sete %al
+; FAST-X86-NEXT:    andb %cl, %al
+; FAST-X86-NEXT:    addl $12, %esp
+; FAST-X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_x86_fp80_oeq:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    sete %cl
+; GISEL-X86-NEXT:    setnp %al
+; GISEL-X86-NEXT:    andb %cl, %al
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp oeq x86_fp80 %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_x86_fp80_ogt(x86_fp80 %x, x86_fp80 %y) {
+; SDAG-X64-LABEL: fcmp_x86_fp80_ogt:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fucompi %st(1), %st
+; SDAG-X64-NEXT:    fstp %st(0)
+; SDAG-X64-NEXT:    seta %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_x86_fp80_ogt:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fucompi %st(1), %st
+; FAST-X64-NEXT:    fstp %st(0)
+; FAST-X64-NEXT:    seta %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_x86_fp80_ogt:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    seta %al
+; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_x86_fp80_ogt:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    subl $12, %esp
+; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    seta %al
+; SDAG-X86-NEXT:    addl $12, %esp
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_x86_fp80_ogt:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    subl $12, %esp
+; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    seta %al
+; FAST-X86-NEXT:    addl $12, %esp
+; FAST-X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_x86_fp80_ogt:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    seta %al
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp ogt x86_fp80 %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_x86_fp80_oge(x86_fp80 %x, x86_fp80 %y) {
+; SDAG-X64-LABEL: fcmp_x86_fp80_oge:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fucompi %st(1), %st
+; SDAG-X64-NEXT:    fstp %st(0)
+; SDAG-X64-NEXT:    setae %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_x86_fp80_oge:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fucompi %st(1), %st
+; FAST-X64-NEXT:    fstp %st(0)
+; FAST-X64-NEXT:    setae %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_x86_fp80_oge:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    setae %al
+; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_x86_fp80_oge:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    subl $12, %esp
+; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setae %al
+; SDAG-X86-NEXT:    addl $12, %esp
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_x86_fp80_oge:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    subl $12, %esp
+; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setae %al
+; FAST-X86-NEXT:    addl $12, %esp
+; FAST-X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_x86_fp80_oge:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setae %al
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp oge x86_fp80 %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_x86_fp80_olt(x86_fp80 %x, x86_fp80 %y) {
+; SDAG-X64-LABEL: fcmp_x86_fp80_olt:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fucompi %st(1), %st
+; SDAG-X64-NEXT:    fstp %st(0)
+; SDAG-X64-NEXT:    seta %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_x86_fp80_olt:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fxch %st(1)
+; FAST-X64-NEXT:    fucompi %st(1), %st
+; FAST-X64-NEXT:    fstp %st(0)
+; FAST-X64-NEXT:    seta %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_x86_fp80_olt:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    seta %al
+; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_x86_fp80_olt:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    subl $12, %esp
+; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    seta %al
+; SDAG-X86-NEXT:    addl $12, %esp
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_x86_fp80_olt:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    subl $12, %esp
+; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fxch %st(1)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    seta %al
+; FAST-X86-NEXT:    addl $12, %esp
+; FAST-X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_x86_fp80_olt:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    seta %al
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp olt x86_fp80 %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_x86_fp80_ole(x86_fp80 %x, x86_fp80 %y) {
+; SDAG-X64-LABEL: fcmp_x86_fp80_ole:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fucompi %st(1), %st
+; SDAG-X64-NEXT:    fstp %st(0)
+; SDAG-X64-NEXT:    setae %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_x86_fp80_ole:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fxch %st(1)
+; FAST-X64-NEXT:    fucompi %st(1), %st
+; FAST-X64-NEXT:    fstp %st(0)
+; FAST-X64-NEXT:    setae %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_x86_fp80_ole:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    setae %al
+; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_x86_fp80_ole:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    subl $12, %esp
+; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setae %al
+; SDAG-X86-NEXT:    addl $12, %esp
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_x86_fp80_ole:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    subl $12, %esp
+; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fxch %st(1)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setae %al
+; FAST-X86-NEXT:    addl $12, %esp
+; FAST-X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_x86_fp80_ole:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setae %al
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp ole x86_fp80 %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_x86_fp80_one(x86_fp80 %x, x86_fp80 %y) {
+; SDAG-X64-LABEL: fcmp_x86_fp80_one:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fucompi %st(1), %st
+; SDAG-X64-NEXT:    fstp %st(0)
+; SDAG-X64-NEXT:    setne %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_x86_fp80_one:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fucompi %st(1), %st
+; FAST-X64-NEXT:    fstp %st(0)
+; FAST-X64-NEXT:    setne %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_x86_fp80_one:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    setne %al
+; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_x86_fp80_one:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    subl $12, %esp
+; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setne %al
+; SDAG-X86-NEXT:    addl $12, %esp
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_x86_fp80_one:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    subl $12, %esp
+; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setne %al
+; FAST-X86-NEXT:    addl $12, %esp
+; FAST-X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_x86_fp80_one:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setne %al
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp one x86_fp80 %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_x86_fp80_ord(x86_fp80 %x, x86_fp80 %y) {
+; SDAG-X64-LABEL: fcmp_x86_fp80_ord:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fucompi %st(1), %st
+; SDAG-X64-NEXT:    fstp %st(0)
+; SDAG-X64-NEXT:    setnp %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_x86_fp80_ord:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fucompi %st(1), %st
+; FAST-X64-NEXT:    fstp %st(0)
+; FAST-X64-NEXT:    setnp %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_x86_fp80_ord:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    setnp %al
+; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_x86_fp80_ord:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    subl $12, %esp
+; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setnp %al
+; SDAG-X86-NEXT:    addl $12, %esp
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_x86_fp80_ord:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    subl $12, %esp
+; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setnp %al
+; FAST-X86-NEXT:    addl $12, %esp
+; FAST-X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_x86_fp80_ord:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setnp %al
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp ord x86_fp80 %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_x86_fp80_uno(x86_fp80 %x, x86_fp80 %y) {
+; SDAG-X64-LABEL: fcmp_x86_fp80_uno:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fucompi %st(1), %st
+; SDAG-X64-NEXT:    fstp %st(0)
+; SDAG-X64-NEXT:    setp %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_x86_fp80_uno:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fucompi %st(1), %st
+; FAST-X64-NEXT:    fstp %st(0)
+; FAST-X64-NEXT:    setp %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_x86_fp80_uno:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    setp %al
+; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_x86_fp80_uno:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    subl $12, %esp
+; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setp %al
+; SDAG-X86-NEXT:    addl $12, %esp
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_x86_fp80_uno:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    subl $12, %esp
+; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setp %al
+; FAST-X86-NEXT:    addl $12, %esp
+; FAST-X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_x86_fp80_uno:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setp %al
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp uno x86_fp80 %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_x86_fp80_ueq(x86_fp80 %x, x86_fp80 %y) {
+; SDAG-X64-LABEL: fcmp_x86_fp80_ueq:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fucompi %st(1), %st
+; SDAG-X64-NEXT:    fstp %st(0)
+; SDAG-X64-NEXT:    sete %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_x86_fp80_ueq:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fucompi %st(1), %st
+; FAST-X64-NEXT:    fstp %st(0)
+; FAST-X64-NEXT:    sete %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_x86_fp80_ueq:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    sete %al
+; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_x86_fp80_ueq:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    subl $12, %esp
+; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    sete %al
+; SDAG-X86-NEXT:    addl $12, %esp
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_x86_fp80_ueq:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    subl $12, %esp
+; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    sete %al
+; FAST-X86-NEXT:    addl $12, %esp
+; FAST-X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_x86_fp80_ueq:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    sete %al
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp ueq x86_fp80 %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_x86_fp80_ugt(x86_fp80 %x, x86_fp80 %y) {
+; SDAG-X64-LABEL: fcmp_x86_fp80_ugt:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fucompi %st(1), %st
+; SDAG-X64-NEXT:    fstp %st(0)
+; SDAG-X64-NEXT:    setb %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_x86_fp80_ugt:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fxch %st(1)
+; FAST-X64-NEXT:    fucompi %st(1), %st
+; FAST-X64-NEXT:    fstp %st(0)
+; FAST-X64-NEXT:    setb %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_x86_fp80_ugt:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    setb %al
+; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_x86_fp80_ugt:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    subl $12, %esp
+; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setb %al
+; SDAG-X86-NEXT:    addl $12, %esp
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_x86_fp80_ugt:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    subl $12, %esp
+; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fxch %st(1)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setb %al
+; FAST-X86-NEXT:    addl $12, %esp
+; FAST-X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_x86_fp80_ugt:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setb %al
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp ugt x86_fp80 %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_x86_fp80_uge(x86_fp80 %x, x86_fp80 %y) {
+; SDAG-X64-LABEL: fcmp_x86_fp80_uge:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fucompi %st(1), %st
+; SDAG-X64-NEXT:    fstp %st(0)
+; SDAG-X64-NEXT:    setbe %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_x86_fp80_uge:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fxch %st(1)
+; FAST-X64-NEXT:    fucompi %st(1), %st
+; FAST-X64-NEXT:    fstp %st(0)
+; FAST-X64-NEXT:    setbe %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_x86_fp80_uge:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    setbe %al
+; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_x86_fp80_uge:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    subl $12, %esp
+; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setbe %al
+; SDAG-X86-NEXT:    addl $12, %esp
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_x86_fp80_uge:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    subl $12, %esp
+; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fxch %st(1)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setbe %al
+; FAST-X86-NEXT:    addl $12, %esp
+; FAST-X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_x86_fp80_uge:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setbe %al
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp uge x86_fp80 %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_x86_fp80_ult(x86_fp80 %x, x86_fp80 %y) {
+; SDAG-X64-LABEL: fcmp_x86_fp80_ult:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fucompi %st(1), %st
+; SDAG-X64-NEXT:    fstp %st(0)
+; SDAG-X64-NEXT:    setb %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_x86_fp80_ult:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fucompi %st(1), %st
+; FAST-X64-NEXT:    fstp %st(0)
+; FAST-X64-NEXT:    setb %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_x86_fp80_ult:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    setb %al
+; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_x86_fp80_ult:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    subl $12, %esp
+; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setb %al
+; SDAG-X86-NEXT:    addl $12, %esp
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_x86_fp80_ult:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    subl $12, %esp
+; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setb %al
+; FAST-X86-NEXT:    addl $12, %esp
+; FAST-X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_x86_fp80_ult:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setb %al
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp ult x86_fp80 %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_x86_fp80_ule(x86_fp80 %x, x86_fp80 %y) {
+; SDAG-X64-LABEL: fcmp_x86_fp80_ule:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fucompi %st(1), %st
+; SDAG-X64-NEXT:    fstp %st(0)
+; SDAG-X64-NEXT:    setbe %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_x86_fp80_ule:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fucompi %st(1), %st
+; FAST-X64-NEXT:    fstp %st(0)
+; FAST-X64-NEXT:    setbe %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_x86_fp80_ule:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    setbe %al
+; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_x86_fp80_ule:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    subl $12, %esp
+; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setbe %al
+; SDAG-X86-NEXT:    addl $12, %esp
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_x86_fp80_ule:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    subl $12, %esp
+; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setbe %al
+; FAST-X86-NEXT:    addl $12, %esp
+; FAST-X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_x86_fp80_ule:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setbe %al
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp ule x86_fp80 %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_x86_fp80_une(x86_fp80 %x, x86_fp80 %y) {
+; SDAG-X64-LABEL: fcmp_x86_fp80_une:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fucompi %st(1), %st
+; SDAG-X64-NEXT:    fstp %st(0)
+; SDAG-X64-NEXT:    setp %cl
+; SDAG-X64-NEXT:    setne %al
+; SDAG-X64-NEXT:    orb %cl, %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_x86_fp80_une:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fucompi %st(1), %st
+; FAST-X64-NEXT:    fstp %st(0)
+; FAST-X64-NEXT:    setp %cl
+; FAST-X64-NEXT:    setne %al
+; FAST-X64-NEXT:    orb %cl, %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_x86_fp80_une:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    setne %cl
+; GISEL-X64-NEXT:    setp %al
+; GISEL-X64-NEXT:    orb %cl, %al
+; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_x86_fp80_une:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    subl $12, %esp
+; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setp %cl
+; SDAG-X86-NEXT:    setne %al
+; SDAG-X86-NEXT:    orb %cl, %al
+; SDAG-X86-NEXT:    addl $12, %esp
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_x86_fp80_une:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    subl $12, %esp
+; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setp %cl
+; FAST-X86-NEXT:    setne %al
+; FAST-X86-NEXT:    orb %cl, %al
+; FAST-X86-NEXT:    addl $12, %esp
+; FAST-X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_x86_fp80_une:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setne %cl
+; GISEL-X86-NEXT:    setp %al
+; GISEL-X86-NEXT:    orb %cl, %al
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp une x86_fp80 %x, %y
+    ret i1 %1
+  }

>From 87ef7b67210cfdfb60cd0f280107bfd41526fac7 Mon Sep 17 00:00:00 2001
From: mattarde <mattarde at intel.com>
Date: Thu, 23 Jan 2025 12:11:31 -0800
Subject: [PATCH 2/4] add 32 and 64 fcmp test

---
 .../lib/Target/X86/GISel/X86LegalizerInfo.cpp |   6 +-
 llvm/test/CodeGen/X86/isel-fcmp-x87.ll        |  70 +-
 llvm/test/CodeGen/X86/isel-fcmp.ll            | 649 ++++++++++++++++++
 3 files changed, 667 insertions(+), 58 deletions(-)
 create mode 100644 llvm/test/CodeGen/X86/isel-fcmp.ll

diff --git a/llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp b/llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp
index 1136438ee742d1..bc0c03a84c45cd 100644
--- a/llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp
+++ b/llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp
@@ -449,8 +449,10 @@ X86LegalizerInfo::X86LegalizerInfo(const X86Subtarget &STI,
   // fp comparison
   getActionDefinitionsBuilder(G_FCMP)
       .legalIf([=](const LegalityQuery &Query) {
-        return (HasSSE1 && typePairInSet(0, 1, {{s8, s32}})(Query)) ||
-               (HasSSE2 && typePairInSet(0, 1, {{s8, s64}})(Query)) ||
+        return ((HasSSE1 || UseX87) &&
+                typePairInSet(0, 1, {{s8, s32}})(Query)) ||
+               ((HasSSE2 || UseX87) &&
+                typePairInSet(0, 1, {{s8, s64}})(Query)) ||
                (UseX87 && typePairInSet(0, 1, {{s8, s80}})(Query));
       })
       .clampScalar(0, s8, s8)
diff --git a/llvm/test/CodeGen/X86/isel-fcmp-x87.ll b/llvm/test/CodeGen/X86/isel-fcmp-x87.ll
index c46b354c9c410e..5324f816db8a86 100644
--- a/llvm/test/CodeGen/X86/isel-fcmp-x87.ll
+++ b/llvm/test/CodeGen/X86/isel-fcmp-x87.ll
@@ -7,7 +7,7 @@
 ; RUN: llc < %s -fast-isel -mtriple=i686-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefixes=FAST-X86
 ; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=i686-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefixes=GISEL-X86
 
-  define i1 @fcmp_x86_fp80_oeq(x86_fp80 %x, x86_fp80 %y) {
+  define i1 @fcmp_x86_fp80_oeq(x86_fp80 %x, x86_fp80 %y) nounwind {
 ; SDAG-X64-LABEL: fcmp_x86_fp80_oeq:
 ; SDAG-X64:       ## %bb.0:
 ; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
@@ -45,7 +45,6 @@
 ; SDAG-X86-LABEL: fcmp_x86_fp80_oeq:
 ; SDAG-X86:       ## %bb.0:
 ; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fucompp
@@ -61,7 +60,6 @@
 ; FAST-X86-LABEL: fcmp_x86_fp80_oeq:
 ; FAST-X86:       ## %bb.0:
 ; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fucompp
@@ -77,7 +75,6 @@
 ; GISEL-X86-LABEL: fcmp_x86_fp80_oeq:
 ; GISEL-X86:       ## %bb.0:
 ; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fxch %st(1)
@@ -92,7 +89,7 @@
     ret i1 %1
   }
 
-  define i1 @fcmp_x86_fp80_ogt(x86_fp80 %x, x86_fp80 %y) {
+  define i1 @fcmp_x86_fp80_ogt(x86_fp80 %x, x86_fp80 %y) nounwind {
 ; SDAG-X64-LABEL: fcmp_x86_fp80_ogt:
 ; SDAG-X64:       ## %bb.0:
 ; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
@@ -124,7 +121,6 @@
 ; SDAG-X86-LABEL: fcmp_x86_fp80_ogt:
 ; SDAG-X86:       ## %bb.0:
 ; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fucompp
@@ -138,7 +134,6 @@
 ; FAST-X86-LABEL: fcmp_x86_fp80_ogt:
 ; FAST-X86:       ## %bb.0:
 ; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fucompp
@@ -152,7 +147,6 @@
 ; GISEL-X86-LABEL: fcmp_x86_fp80_ogt:
 ; GISEL-X86:       ## %bb.0:
 ; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fxch %st(1)
@@ -165,7 +159,7 @@
     ret i1 %1
   }
 
-  define i1 @fcmp_x86_fp80_oge(x86_fp80 %x, x86_fp80 %y) {
+  define i1 @fcmp_x86_fp80_oge(x86_fp80 %x, x86_fp80 %y) nounwind {
 ; SDAG-X64-LABEL: fcmp_x86_fp80_oge:
 ; SDAG-X64:       ## %bb.0:
 ; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
@@ -197,7 +191,6 @@
 ; SDAG-X86-LABEL: fcmp_x86_fp80_oge:
 ; SDAG-X86:       ## %bb.0:
 ; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fucompp
@@ -211,7 +204,6 @@
 ; FAST-X86-LABEL: fcmp_x86_fp80_oge:
 ; FAST-X86:       ## %bb.0:
 ; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fucompp
@@ -225,7 +217,6 @@
 ; GISEL-X86-LABEL: fcmp_x86_fp80_oge:
 ; GISEL-X86:       ## %bb.0:
 ; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fxch %st(1)
@@ -238,7 +229,7 @@
     ret i1 %1
   }
 
-  define i1 @fcmp_x86_fp80_olt(x86_fp80 %x, x86_fp80 %y) {
+  define i1 @fcmp_x86_fp80_olt(x86_fp80 %x, x86_fp80 %y) nounwind {
 ; SDAG-X64-LABEL: fcmp_x86_fp80_olt:
 ; SDAG-X64:       ## %bb.0:
 ; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
@@ -270,7 +261,6 @@
 ; SDAG-X86-LABEL: fcmp_x86_fp80_olt:
 ; SDAG-X86:       ## %bb.0:
 ; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fucompp
@@ -284,7 +274,6 @@
 ; FAST-X86-LABEL: fcmp_x86_fp80_olt:
 ; FAST-X86:       ## %bb.0:
 ; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fxch %st(1)
@@ -299,7 +288,6 @@
 ; GISEL-X86-LABEL: fcmp_x86_fp80_olt:
 ; GISEL-X86:       ## %bb.0:
 ; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fucompi %st(1), %st
@@ -311,7 +299,7 @@
     ret i1 %1
   }
 
-  define i1 @fcmp_x86_fp80_ole(x86_fp80 %x, x86_fp80 %y) {
+  define i1 @fcmp_x86_fp80_ole(x86_fp80 %x, x86_fp80 %y) nounwind {
 ; SDAG-X64-LABEL: fcmp_x86_fp80_ole:
 ; SDAG-X64:       ## %bb.0:
 ; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
@@ -343,7 +331,6 @@
 ; SDAG-X86-LABEL: fcmp_x86_fp80_ole:
 ; SDAG-X86:       ## %bb.0:
 ; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fucompp
@@ -357,7 +344,6 @@
 ; FAST-X86-LABEL: fcmp_x86_fp80_ole:
 ; FAST-X86:       ## %bb.0:
 ; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fxch %st(1)
@@ -372,7 +358,6 @@
 ; GISEL-X86-LABEL: fcmp_x86_fp80_ole:
 ; GISEL-X86:       ## %bb.0:
 ; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fucompi %st(1), %st
@@ -384,7 +369,7 @@
     ret i1 %1
   }
 
-  define i1 @fcmp_x86_fp80_one(x86_fp80 %x, x86_fp80 %y) {
+  define i1 @fcmp_x86_fp80_one(x86_fp80 %x, x86_fp80 %y) nounwind {
 ; SDAG-X64-LABEL: fcmp_x86_fp80_one:
 ; SDAG-X64:       ## %bb.0:
 ; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
@@ -416,7 +401,6 @@
 ; SDAG-X86-LABEL: fcmp_x86_fp80_one:
 ; SDAG-X86:       ## %bb.0:
 ; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fucompp
@@ -430,7 +414,6 @@
 ; FAST-X86-LABEL: fcmp_x86_fp80_one:
 ; FAST-X86:       ## %bb.0:
 ; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fucompp
@@ -444,7 +427,6 @@
 ; GISEL-X86-LABEL: fcmp_x86_fp80_one:
 ; GISEL-X86:       ## %bb.0:
 ; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fxch %st(1)
@@ -457,7 +439,7 @@
     ret i1 %1
   }
 
-  define i1 @fcmp_x86_fp80_ord(x86_fp80 %x, x86_fp80 %y) {
+  define i1 @fcmp_x86_fp80_ord(x86_fp80 %x, x86_fp80 %y) nounwind {
 ; SDAG-X64-LABEL: fcmp_x86_fp80_ord:
 ; SDAG-X64:       ## %bb.0:
 ; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
@@ -489,7 +471,6 @@
 ; SDAG-X86-LABEL: fcmp_x86_fp80_ord:
 ; SDAG-X86:       ## %bb.0:
 ; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fucompp
@@ -503,7 +484,6 @@
 ; FAST-X86-LABEL: fcmp_x86_fp80_ord:
 ; FAST-X86:       ## %bb.0:
 ; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fucompp
@@ -517,7 +497,6 @@
 ; GISEL-X86-LABEL: fcmp_x86_fp80_ord:
 ; GISEL-X86:       ## %bb.0:
 ; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fxch %st(1)
@@ -530,7 +509,7 @@
     ret i1 %1
   }
 
-  define i1 @fcmp_x86_fp80_uno(x86_fp80 %x, x86_fp80 %y) {
+  define i1 @fcmp_x86_fp80_uno(x86_fp80 %x, x86_fp80 %y) nounwind {
 ; SDAG-X64-LABEL: fcmp_x86_fp80_uno:
 ; SDAG-X64:       ## %bb.0:
 ; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
@@ -562,7 +541,6 @@
 ; SDAG-X86-LABEL: fcmp_x86_fp80_uno:
 ; SDAG-X86:       ## %bb.0:
 ; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fucompp
@@ -576,7 +554,6 @@
 ; FAST-X86-LABEL: fcmp_x86_fp80_uno:
 ; FAST-X86:       ## %bb.0:
 ; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fucompp
@@ -590,7 +567,6 @@
 ; GISEL-X86-LABEL: fcmp_x86_fp80_uno:
 ; GISEL-X86:       ## %bb.0:
 ; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fxch %st(1)
@@ -603,7 +579,7 @@
     ret i1 %1
   }
 
-  define i1 @fcmp_x86_fp80_ueq(x86_fp80 %x, x86_fp80 %y) {
+  define i1 @fcmp_x86_fp80_ueq(x86_fp80 %x, x86_fp80 %y) nounwind {
 ; SDAG-X64-LABEL: fcmp_x86_fp80_ueq:
 ; SDAG-X64:       ## %bb.0:
 ; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
@@ -635,7 +611,6 @@
 ; SDAG-X86-LABEL: fcmp_x86_fp80_ueq:
 ; SDAG-X86:       ## %bb.0:
 ; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fucompp
@@ -649,7 +624,6 @@
 ; FAST-X86-LABEL: fcmp_x86_fp80_ueq:
 ; FAST-X86:       ## %bb.0:
 ; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fucompp
@@ -663,7 +637,6 @@
 ; GISEL-X86-LABEL: fcmp_x86_fp80_ueq:
 ; GISEL-X86:       ## %bb.0:
 ; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fxch %st(1)
@@ -676,7 +649,7 @@
     ret i1 %1
   }
 
-  define i1 @fcmp_x86_fp80_ugt(x86_fp80 %x, x86_fp80 %y) {
+  define i1 @fcmp_x86_fp80_ugt(x86_fp80 %x, x86_fp80 %y) nounwind {
 ; SDAG-X64-LABEL: fcmp_x86_fp80_ugt:
 ; SDAG-X64:       ## %bb.0:
 ; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
@@ -708,7 +681,6 @@
 ; SDAG-X86-LABEL: fcmp_x86_fp80_ugt:
 ; SDAG-X86:       ## %bb.0:
 ; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fucompp
@@ -722,7 +694,6 @@
 ; FAST-X86-LABEL: fcmp_x86_fp80_ugt:
 ; FAST-X86:       ## %bb.0:
 ; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fxch %st(1)
@@ -737,7 +708,6 @@
 ; GISEL-X86-LABEL: fcmp_x86_fp80_ugt:
 ; GISEL-X86:       ## %bb.0:
 ; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fucompi %st(1), %st
@@ -749,7 +719,7 @@
     ret i1 %1
   }
 
-  define i1 @fcmp_x86_fp80_uge(x86_fp80 %x, x86_fp80 %y) {
+  define i1 @fcmp_x86_fp80_uge(x86_fp80 %x, x86_fp80 %y) nounwind {
 ; SDAG-X64-LABEL: fcmp_x86_fp80_uge:
 ; SDAG-X64:       ## %bb.0:
 ; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
@@ -781,7 +751,6 @@
 ; SDAG-X86-LABEL: fcmp_x86_fp80_uge:
 ; SDAG-X86:       ## %bb.0:
 ; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fucompp
@@ -795,7 +764,6 @@
 ; FAST-X86-LABEL: fcmp_x86_fp80_uge:
 ; FAST-X86:       ## %bb.0:
 ; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fxch %st(1)
@@ -810,7 +778,6 @@
 ; GISEL-X86-LABEL: fcmp_x86_fp80_uge:
 ; GISEL-X86:       ## %bb.0:
 ; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fucompi %st(1), %st
@@ -822,7 +789,7 @@
     ret i1 %1
   }
 
-  define i1 @fcmp_x86_fp80_ult(x86_fp80 %x, x86_fp80 %y) {
+  define i1 @fcmp_x86_fp80_ult(x86_fp80 %x, x86_fp80 %y) nounwind {
 ; SDAG-X64-LABEL: fcmp_x86_fp80_ult:
 ; SDAG-X64:       ## %bb.0:
 ; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
@@ -854,7 +821,6 @@
 ; SDAG-X86-LABEL: fcmp_x86_fp80_ult:
 ; SDAG-X86:       ## %bb.0:
 ; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fucompp
@@ -868,7 +834,6 @@
 ; FAST-X86-LABEL: fcmp_x86_fp80_ult:
 ; FAST-X86:       ## %bb.0:
 ; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fucompp
@@ -882,7 +847,6 @@
 ; GISEL-X86-LABEL: fcmp_x86_fp80_ult:
 ; GISEL-X86:       ## %bb.0:
 ; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fxch %st(1)
@@ -895,7 +859,7 @@
     ret i1 %1
   }
 
-  define i1 @fcmp_x86_fp80_ule(x86_fp80 %x, x86_fp80 %y) {
+  define i1 @fcmp_x86_fp80_ule(x86_fp80 %x, x86_fp80 %y) nounwind {
 ; SDAG-X64-LABEL: fcmp_x86_fp80_ule:
 ; SDAG-X64:       ## %bb.0:
 ; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
@@ -927,7 +891,6 @@
 ; SDAG-X86-LABEL: fcmp_x86_fp80_ule:
 ; SDAG-X86:       ## %bb.0:
 ; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fucompp
@@ -941,7 +904,6 @@
 ; FAST-X86-LABEL: fcmp_x86_fp80_ule:
 ; FAST-X86:       ## %bb.0:
 ; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fucompp
@@ -955,7 +917,6 @@
 ; GISEL-X86-LABEL: fcmp_x86_fp80_ule:
 ; GISEL-X86:       ## %bb.0:
 ; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fxch %st(1)
@@ -968,7 +929,7 @@
     ret i1 %1
   }
 
-  define i1 @fcmp_x86_fp80_une(x86_fp80 %x, x86_fp80 %y) {
+  define i1 @fcmp_x86_fp80_une(x86_fp80 %x, x86_fp80 %y) nounwind {
 ; SDAG-X64-LABEL: fcmp_x86_fp80_une:
 ; SDAG-X64:       ## %bb.0:
 ; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
@@ -1006,7 +967,6 @@
 ; SDAG-X86-LABEL: fcmp_x86_fp80_une:
 ; SDAG-X86:       ## %bb.0:
 ; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    .cfi_def_cfa_offset 16
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fucompp
@@ -1022,7 +982,6 @@
 ; FAST-X86-LABEL: fcmp_x86_fp80_une:
 ; FAST-X86:       ## %bb.0:
 ; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    .cfi_def_cfa_offset 16
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; FAST-X86-NEXT:    fucompp
@@ -1038,7 +997,6 @@
 ; GISEL-X86-LABEL: fcmp_x86_fp80_une:
 ; GISEL-X86:       ## %bb.0:
 ; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    .cfi_def_cfa_offset 16
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fxch %st(1)
diff --git a/llvm/test/CodeGen/X86/isel-fcmp.ll b/llvm/test/CodeGen/X86/isel-fcmp.ll
new file mode 100644
index 00000000000000..fba00d5db660e7
--- /dev/null
+++ b/llvm/test/CodeGen/X86/isel-fcmp.ll
@@ -0,0 +1,649 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc < %s                               -mtriple=x86_64-apple-darwin10 -mattr=+sse,+sse2,-x87 -verify-machineinstrs | FileCheck %s --check-prefix=SDAG-X64
+; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=+sse,+sse2,-x87 -verify-machineinstrs | FileCheck %s --check-prefix=FAST-X64
+; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=+sse,+sse2,-x87 -verify-machineinstrs | FileCheck %s --check-prefixes=GISEL-X64
+; i686 with 64 bit store is issue.
+; COM: RUN: llc < %s                               -mtriple=i686-apple-darwin10 -mattr=-sse,-sse2,+x87 -verify-machineinstrs | FileCheck %s --check-prefixes=SDAG-X86
+; Allow fast-isel to fallback to selection dag on x86
+; COM: RUN: llc < %s -fast-isel -mtriple=i686-apple-darwin10 -mattr=+sse,+sse2,+x87 -verify-machineinstrs | FileCheck %s --check-prefixes=FAST-X86
+; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=i686-apple-darwin10 -mattr=+x87 -verify-machineinstrs | FileCheck %s --check-prefixes=GISEL-X86
+
+  define i1 @fcmp_float_oeq(float %x, float %y) nounwind {
+; SDAG-X64-LABEL: fcmp_float_oeq:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    cmpeqss %xmm1, %xmm0
+; SDAG-X64-NEXT:    movd %xmm0, %eax
+; SDAG-X64-NEXT:    andl $1, %eax
+; SDAG-X64-NEXT:    ## kill: def $al killed $al killed $eax
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_float_oeq:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    cmpeqss %xmm1, %xmm0
+; FAST-X64-NEXT:    movd %xmm0, %eax
+; FAST-X64-NEXT:    andl $1, %eax
+; FAST-X64-NEXT:    ## kill: def $al killed $al killed $eax
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_oeq:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomiss %xmm1, %xmm0
+; GISEL-X64-NEXT:    sete %cl
+; GISEL-X64-NEXT:    setnp %al
+; GISEL-X64-NEXT:    andb %cl, %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp oeq float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_ogt(float %x, float %y) nounwind {
+; SDAG-X64-LABEL: fcmp_float_ogt:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomiss %xmm1, %xmm0
+; SDAG-X64-NEXT:    seta %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_float_ogt:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomiss %xmm1, %xmm0
+; FAST-X64-NEXT:    seta %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_ogt:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomiss %xmm1, %xmm0
+; GISEL-X64-NEXT:    seta %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp ogt float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_oge(float %x, float %y) nounwind {
+; SDAG-X64-LABEL: fcmp_float_oge:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomiss %xmm1, %xmm0
+; SDAG-X64-NEXT:    setae %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_float_oge:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomiss %xmm1, %xmm0
+; FAST-X64-NEXT:    setae %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_oge:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomiss %xmm1, %xmm0
+; GISEL-X64-NEXT:    setae %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp oge float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_olt(float %x, float %y) nounwind {
+; SDAG-X64-LABEL: fcmp_float_olt:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomiss %xmm0, %xmm1
+; SDAG-X64-NEXT:    seta %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_float_olt:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomiss %xmm0, %xmm1
+; FAST-X64-NEXT:    seta %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_olt:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomiss %xmm0, %xmm1
+; GISEL-X64-NEXT:    seta %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp olt float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_ole(float %x, float %y) nounwind {
+; SDAG-X64-LABEL: fcmp_float_ole:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomiss %xmm0, %xmm1
+; SDAG-X64-NEXT:    setae %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_float_ole:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomiss %xmm0, %xmm1
+; FAST-X64-NEXT:    setae %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_ole:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomiss %xmm0, %xmm1
+; GISEL-X64-NEXT:    setae %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp ole float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_one(float %x, float %y) nounwind {
+; SDAG-X64-LABEL: fcmp_float_one:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomiss %xmm1, %xmm0
+; SDAG-X64-NEXT:    setne %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_float_one:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomiss %xmm1, %xmm0
+; FAST-X64-NEXT:    setne %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_one:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomiss %xmm1, %xmm0
+; GISEL-X64-NEXT:    setne %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp one float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_ord(float %x, float %y) nounwind {
+; SDAG-X64-LABEL: fcmp_float_ord:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomiss %xmm1, %xmm0
+; SDAG-X64-NEXT:    setnp %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_float_ord:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomiss %xmm1, %xmm0
+; FAST-X64-NEXT:    setnp %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_ord:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomiss %xmm1, %xmm0
+; GISEL-X64-NEXT:    setnp %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp ord float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_uno(float %x, float %y) nounwind {
+; SDAG-X64-LABEL: fcmp_float_uno:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomiss %xmm1, %xmm0
+; SDAG-X64-NEXT:    setp %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_float_uno:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomiss %xmm1, %xmm0
+; FAST-X64-NEXT:    setp %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_uno:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomiss %xmm1, %xmm0
+; GISEL-X64-NEXT:    setp %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp uno float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_ueq(float %x, float %y) nounwind {
+; SDAG-X64-LABEL: fcmp_float_ueq:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomiss %xmm1, %xmm0
+; SDAG-X64-NEXT:    sete %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_float_ueq:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomiss %xmm1, %xmm0
+; FAST-X64-NEXT:    sete %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_ueq:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomiss %xmm1, %xmm0
+; GISEL-X64-NEXT:    sete %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp ueq float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_ugt(float %x, float %y) nounwind {
+; SDAG-X64-LABEL: fcmp_float_ugt:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomiss %xmm0, %xmm1
+; SDAG-X64-NEXT:    setb %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_float_ugt:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomiss %xmm0, %xmm1
+; FAST-X64-NEXT:    setb %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_ugt:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomiss %xmm0, %xmm1
+; GISEL-X64-NEXT:    setb %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp ugt float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_uge(float %x, float %y) nounwind {
+; SDAG-X64-LABEL: fcmp_float_uge:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomiss %xmm0, %xmm1
+; SDAG-X64-NEXT:    setbe %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_float_uge:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomiss %xmm0, %xmm1
+; FAST-X64-NEXT:    setbe %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_uge:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomiss %xmm0, %xmm1
+; GISEL-X64-NEXT:    setbe %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp uge float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_ult(float %x, float %y) nounwind {
+; SDAG-X64-LABEL: fcmp_float_ult:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomiss %xmm1, %xmm0
+; SDAG-X64-NEXT:    setb %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_float_ult:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomiss %xmm1, %xmm0
+; FAST-X64-NEXT:    setb %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_ult:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomiss %xmm1, %xmm0
+; GISEL-X64-NEXT:    setb %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp ult float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_ule(float %x, float %y) nounwind {
+; SDAG-X64-LABEL: fcmp_float_ule:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomiss %xmm1, %xmm0
+; SDAG-X64-NEXT:    setbe %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_float_ule:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomiss %xmm1, %xmm0
+; FAST-X64-NEXT:    setbe %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_ule:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomiss %xmm1, %xmm0
+; GISEL-X64-NEXT:    setbe %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp ule float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_une(float %x, float %y) nounwind {
+; SDAG-X64-LABEL: fcmp_float_une:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    cmpneqss %xmm1, %xmm0
+; SDAG-X64-NEXT:    movd %xmm0, %eax
+; SDAG-X64-NEXT:    andl $1, %eax
+; SDAG-X64-NEXT:    ## kill: def $al killed $al killed $eax
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_float_une:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    cmpneqss %xmm1, %xmm0
+; FAST-X64-NEXT:    movd %xmm0, %eax
+; FAST-X64-NEXT:    andl $1, %eax
+; FAST-X64-NEXT:    ## kill: def $al killed $al killed $eax
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_une:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomiss %xmm1, %xmm0
+; GISEL-X64-NEXT:    setne %cl
+; GISEL-X64-NEXT:    setp %al
+; GISEL-X64-NEXT:    orb %cl, %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp une float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_double_oeq(double %x, double %y) nounwind {
+; SDAG-X64-LABEL: fcmp_double_oeq:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    cmpeqsd %xmm1, %xmm0
+; SDAG-X64-NEXT:    movq %xmm0, %rax
+; SDAG-X64-NEXT:    andl $1, %eax
+; SDAG-X64-NEXT:    ## kill: def $al killed $al killed $rax
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_double_oeq:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    cmpeqsd %xmm1, %xmm0
+; FAST-X64-NEXT:    movq %xmm0, %rax
+; FAST-X64-NEXT:    andl $1, %eax
+; FAST-X64-NEXT:    ## kill: def $al killed $al killed $rax
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_double_oeq:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomisd %xmm1, %xmm0
+; GISEL-X64-NEXT:    sete %cl
+; GISEL-X64-NEXT:    setnp %al
+; GISEL-X64-NEXT:    andb %cl, %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp oeq double %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_double_ogt(double %x, double %y) nounwind {
+; SDAG-X64-LABEL: fcmp_double_ogt:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomisd %xmm1, %xmm0
+; SDAG-X64-NEXT:    seta %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_double_ogt:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomisd %xmm1, %xmm0
+; FAST-X64-NEXT:    seta %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_double_ogt:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomisd %xmm1, %xmm0
+; GISEL-X64-NEXT:    seta %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp ogt double %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_double_oge(double %x, double %y) nounwind {
+; SDAG-X64-LABEL: fcmp_double_oge:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomisd %xmm1, %xmm0
+; SDAG-X64-NEXT:    setae %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_double_oge:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomisd %xmm1, %xmm0
+; FAST-X64-NEXT:    setae %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_double_oge:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomisd %xmm1, %xmm0
+; GISEL-X64-NEXT:    setae %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp oge double %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_double_olt(double %x, double %y) nounwind {
+; SDAG-X64-LABEL: fcmp_double_olt:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomisd %xmm0, %xmm1
+; SDAG-X64-NEXT:    seta %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_double_olt:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomisd %xmm0, %xmm1
+; FAST-X64-NEXT:    seta %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_double_olt:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomisd %xmm0, %xmm1
+; GISEL-X64-NEXT:    seta %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp olt double %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_double_ole(double %x, double %y) nounwind {
+; SDAG-X64-LABEL: fcmp_double_ole:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomisd %xmm0, %xmm1
+; SDAG-X64-NEXT:    setae %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_double_ole:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomisd %xmm0, %xmm1
+; FAST-X64-NEXT:    setae %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_double_ole:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomisd %xmm0, %xmm1
+; GISEL-X64-NEXT:    setae %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp ole double %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_double_one(double %x, double %y) nounwind {
+; SDAG-X64-LABEL: fcmp_double_one:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomisd %xmm1, %xmm0
+; SDAG-X64-NEXT:    setne %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_double_one:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomisd %xmm1, %xmm0
+; FAST-X64-NEXT:    setne %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_double_one:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomisd %xmm1, %xmm0
+; GISEL-X64-NEXT:    setne %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp one double %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_double_ord(double %x, double %y) nounwind {
+; SDAG-X64-LABEL: fcmp_double_ord:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomisd %xmm1, %xmm0
+; SDAG-X64-NEXT:    setnp %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_double_ord:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomisd %xmm1, %xmm0
+; FAST-X64-NEXT:    setnp %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_double_ord:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomisd %xmm1, %xmm0
+; GISEL-X64-NEXT:    setnp %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp ord double %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_double_uno(double %x, double %y) nounwind {
+; SDAG-X64-LABEL: fcmp_double_uno:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomisd %xmm1, %xmm0
+; SDAG-X64-NEXT:    setp %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_double_uno:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomisd %xmm1, %xmm0
+; FAST-X64-NEXT:    setp %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_double_uno:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomisd %xmm1, %xmm0
+; GISEL-X64-NEXT:    setp %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp uno double %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_double_ueq(double %x, double %y) nounwind {
+; SDAG-X64-LABEL: fcmp_double_ueq:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomisd %xmm1, %xmm0
+; SDAG-X64-NEXT:    sete %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_double_ueq:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomisd %xmm1, %xmm0
+; FAST-X64-NEXT:    sete %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_double_ueq:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomisd %xmm1, %xmm0
+; GISEL-X64-NEXT:    sete %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp ueq double %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_double_ugt(double %x, double %y) nounwind {
+; SDAG-X64-LABEL: fcmp_double_ugt:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomisd %xmm0, %xmm1
+; SDAG-X64-NEXT:    setb %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_double_ugt:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomisd %xmm0, %xmm1
+; FAST-X64-NEXT:    setb %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_double_ugt:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomisd %xmm0, %xmm1
+; GISEL-X64-NEXT:    setb %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp ugt double %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_double_uge(double %x, double %y) nounwind {
+; SDAG-X64-LABEL: fcmp_double_uge:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomisd %xmm0, %xmm1
+; SDAG-X64-NEXT:    setbe %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_double_uge:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomisd %xmm0, %xmm1
+; FAST-X64-NEXT:    setbe %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_double_uge:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomisd %xmm0, %xmm1
+; GISEL-X64-NEXT:    setbe %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp uge double %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_double_ult(double %x, double %y) nounwind {
+; SDAG-X64-LABEL: fcmp_double_ult:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomisd %xmm1, %xmm0
+; SDAG-X64-NEXT:    setb %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_double_ult:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomisd %xmm1, %xmm0
+; FAST-X64-NEXT:    setb %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_double_ult:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomisd %xmm1, %xmm0
+; GISEL-X64-NEXT:    setb %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp ult double %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_double_ule(double %x, double %y) nounwind {
+; SDAG-X64-LABEL: fcmp_double_ule:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    ucomisd %xmm1, %xmm0
+; SDAG-X64-NEXT:    setbe %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_double_ule:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    ucomisd %xmm1, %xmm0
+; FAST-X64-NEXT:    setbe %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_double_ule:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomisd %xmm1, %xmm0
+; GISEL-X64-NEXT:    setbe %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp ule double %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_double_une(double %x, double %y) nounwind {
+; SDAG-X64-LABEL: fcmp_double_une:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    cmpneqsd %xmm1, %xmm0
+; SDAG-X64-NEXT:    movq %xmm0, %rax
+; SDAG-X64-NEXT:    andl $1, %eax
+; SDAG-X64-NEXT:    ## kill: def $al killed $al killed $rax
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_double_une:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    cmpneqsd %xmm1, %xmm0
+; FAST-X64-NEXT:    movq %xmm0, %rax
+; FAST-X64-NEXT:    andl $1, %eax
+; FAST-X64-NEXT:    ## kill: def $al killed $al killed $rax
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_double_une:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    ucomisd %xmm1, %xmm0
+; GISEL-X64-NEXT:    setne %cl
+; GISEL-X64-NEXT:    setp %al
+; GISEL-X64-NEXT:    orb %cl, %al
+; GISEL-X64-NEXT:    retq
+    %1 = fcmp une double %x, %y
+    ret i1 %1
+  }

>From 09557a0193f4052c032df7f42c5e0961b98924e3 Mon Sep 17 00:00:00 2001
From: mattarde <mattarde at intel.com>
Date: Fri, 24 Jan 2025 03:09:21 -0800
Subject: [PATCH 3/4] update i686 with x87 having doubles

---
 .../CodeGen/X86/GlobalISel/isel-fcmp-i686.mir | 2784 +++++++++++++++++
 llvm/test/CodeGen/X86/isel-fcmp.ll            |  646 +++-
 2 files changed, 3427 insertions(+), 3 deletions(-)
 create mode 100644 llvm/test/CodeGen/X86/GlobalISel/isel-fcmp-i686.mir

diff --git a/llvm/test/CodeGen/X86/GlobalISel/isel-fcmp-i686.mir b/llvm/test/CodeGen/X86/GlobalISel/isel-fcmp-i686.mir
new file mode 100644
index 00000000000000..c47a70de24a8f4
--- /dev/null
+++ b/llvm/test/CodeGen/X86/GlobalISel/isel-fcmp-i686.mir
@@ -0,0 +1,2784 @@
+# NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+# NOTE: This MIR test is required because the support for 64 bit memory ops is missing in i686 mode, Due to distinction between float/int types, support is expected in near future and there is this RFC in place https://discourse.llvm.org/t/rfc-globalisel-adding-fp-type-information-to-llt/83349. Once this support is introduced this test must be dropped and integrated into the LLVM IR tests.
+# RUN: llc -O2 -mtriple=i686-linux-gnu -mattr=+x87,-sse,-sse2 -start-after=legalizer -disable-gisel-legality-check -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes GISEL-X86
+
+--- |
+  ; ModuleID = 'c2.ll'
+  source_filename = "c2.ll"
+  target datalayout = "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:128-f64:32:64-f80:32-n8:16:32-S128"
+  target triple = "i686-unknown-linux-gnu"
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_float_oeq(float %x, float %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_float_oeq:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fxch %st(1)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    sete %cl
+  ; GISEL-X86-NEXT:    setnp %al
+  ; GISEL-X86-NEXT:    andb %cl, %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp oeq float %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_float_ogt(float %x, float %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_float_ogt:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fxch %st(1)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    seta %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp ogt float %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_float_oge(float %x, float %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_float_oge:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fxch %st(1)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    setae %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp oge float %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_float_olt(float %x, float %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_float_olt:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    seta %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp olt float %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_float_ole(float %x, float %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_float_ole:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    setae %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp ole float %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_float_one(float %x, float %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_float_one:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fxch %st(1)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    setne %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp one float %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_float_ord(float %x, float %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_float_ord:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fxch %st(1)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    setnp %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp ord float %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_float_uno(float %x, float %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_float_uno:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fxch %st(1)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    setp %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp uno float %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_float_ueq(float %x, float %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_float_ueq:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fxch %st(1)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    sete %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp ueq float %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_float_ugt(float %x, float %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_float_ugt:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    setb %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp ugt float %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_float_uge(float %x, float %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_float_uge:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    setbe %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp uge float %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_float_ult(float %x, float %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_float_ult:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fxch %st(1)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    setb %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp ult float %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_float_ule(float %x, float %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_float_ule:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fxch %st(1)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    setbe %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp ule float %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_float_une(float %x, float %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_float_une:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fxch %st(1)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    setne %cl
+  ; GISEL-X86-NEXT:    setp %al
+  ; GISEL-X86-NEXT:    orb %cl, %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp une float %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_double_oeq(double %x, double %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_double_oeq:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fxch %st(1)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    sete %cl
+  ; GISEL-X86-NEXT:    setnp %al
+  ; GISEL-X86-NEXT:    andb %cl, %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp oeq double %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_double_ogt(double %x, double %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_double_ogt:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fxch %st(1)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    seta %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp ogt double %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_double_oge(double %x, double %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_double_oge:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fxch %st(1)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    setae %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp oge double %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_double_olt(double %x, double %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_double_olt:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    seta %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp olt double %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_double_ole(double %x, double %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_double_ole:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    setae %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp ole double %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_double_one(double %x, double %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_double_one:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fxch %st(1)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    setne %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp one double %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_double_ord(double %x, double %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_double_ord:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fxch %st(1)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    setnp %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp ord double %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_double_uno(double %x, double %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_double_uno:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fxch %st(1)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    setp %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp uno double %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_double_ueq(double %x, double %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_double_ueq:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fxch %st(1)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    sete %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp ueq double %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_double_ugt(double %x, double %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_double_ugt:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    setb %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp ugt double %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_double_uge(double %x, double %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_double_uge:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    setbe %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp uge double %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_double_ult(double %x, double %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_double_ult:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fxch %st(1)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    setb %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp ult double %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_double_ule(double %x, double %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_double_ule:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fxch %st(1)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    setbe %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp ule double %x, %y
+    ret i1 %1
+  }
+
+  ; Function Attrs: nounwind
+  define i1 @fcmp_double_une(double %x, double %y) #0 {
+  ; GISEL-X86-LABEL: fcmp_double_une:
+  ; GISEL-X86:       # %bb.0:
+  ; GISEL-X86-NEXT:    subl $12, %esp
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+  ; GISEL-X86-NEXT:    fxch %st(1)
+  ; GISEL-X86-NEXT:    fucompi %st(1), %st
+  ; GISEL-X86-NEXT:    fstp %st(0)
+  ; GISEL-X86-NEXT:    setne %cl
+  ; GISEL-X86-NEXT:    setp %al
+  ; GISEL-X86-NEXT:    orb %cl, %al
+  ; GISEL-X86-NEXT:    addl $12, %esp
+  ; GISEL-X86-NEXT:    retl
+    %1 = fcmp une double %x, %y
+    ret i1 %1
+  }
+
+  attributes #0 = { nounwind "target-features"="+x87,-sse,-sse2" }
+
+...
+---
+name:            fcmp_float_oeq
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
+    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
+    %6:_(s8) = G_FCMP floatpred(oeq), %0(s32), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_float_ogt
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
+    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
+    %6:_(s8) = G_FCMP floatpred(ogt), %0(s32), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_float_oge
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
+    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
+    %6:_(s8) = G_FCMP floatpred(oge), %0(s32), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_float_olt
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
+    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
+    %6:_(s8) = G_FCMP floatpred(olt), %0(s32), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_float_ole
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
+    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
+    %6:_(s8) = G_FCMP floatpred(ole), %0(s32), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_float_one
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
+    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
+    %6:_(s8) = G_FCMP floatpred(one), %0(s32), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_float_ord
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
+    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
+    %6:_(s8) = G_FCMP floatpred(ord), %0(s32), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_float_uno
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
+    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
+    %6:_(s8) = G_FCMP floatpred(uno), %0(s32), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_float_ueq
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
+    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
+    %6:_(s8) = G_FCMP floatpred(ueq), %0(s32), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_float_ugt
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
+    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
+    %6:_(s8) = G_FCMP floatpred(ugt), %0(s32), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_float_uge
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
+    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
+    %6:_(s8) = G_FCMP floatpred(uge), %0(s32), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_float_ult
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
+    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
+    %6:_(s8) = G_FCMP floatpred(ult), %0(s32), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_float_ule
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
+    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
+    %6:_(s8) = G_FCMP floatpred(ule), %0(s32), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_float_une
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
+    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
+    %6:_(s8) = G_FCMP floatpred(une), %0(s32), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_double_oeq
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+  - { id: 7, class: _, preferred-register: '', flags: [  ] }
+  - { id: 8, class: _, preferred-register: '', flags: [  ] }
+  - { id: 9, class: _, preferred-register: '', flags: [  ] }
+  - { id: 10, class: _, preferred-register: '', flags: [  ] }
+  - { id: 11, class: _, preferred-register: '', flags: [  ] }
+  - { id: 12, class: _, preferred-register: '', flags: [  ] }
+  - { id: 13, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
+    %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
+    %6:_(s8) = G_FCMP floatpred(oeq), %2(s64), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_double_ogt
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+  - { id: 7, class: _, preferred-register: '', flags: [  ] }
+  - { id: 8, class: _, preferred-register: '', flags: [  ] }
+  - { id: 9, class: _, preferred-register: '', flags: [  ] }
+  - { id: 10, class: _, preferred-register: '', flags: [  ] }
+  - { id: 11, class: _, preferred-register: '', flags: [  ] }
+  - { id: 12, class: _, preferred-register: '', flags: [  ] }
+  - { id: 13, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
+    %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
+    %6:_(s8) = G_FCMP floatpred(ogt), %2(s64), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_double_oge
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+  - { id: 7, class: _, preferred-register: '', flags: [  ] }
+  - { id: 8, class: _, preferred-register: '', flags: [  ] }
+  - { id: 9, class: _, preferred-register: '', flags: [  ] }
+  - { id: 10, class: _, preferred-register: '', flags: [  ] }
+  - { id: 11, class: _, preferred-register: '', flags: [  ] }
+  - { id: 12, class: _, preferred-register: '', flags: [  ] }
+  - { id: 13, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
+    %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
+    %6:_(s8) = G_FCMP floatpred(oge), %2(s64), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_double_olt
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+  - { id: 7, class: _, preferred-register: '', flags: [  ] }
+  - { id: 8, class: _, preferred-register: '', flags: [  ] }
+  - { id: 9, class: _, preferred-register: '', flags: [  ] }
+  - { id: 10, class: _, preferred-register: '', flags: [  ] }
+  - { id: 11, class: _, preferred-register: '', flags: [  ] }
+  - { id: 12, class: _, preferred-register: '', flags: [  ] }
+  - { id: 13, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
+    %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
+    %6:_(s8) = G_FCMP floatpred(olt), %2(s64), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_double_ole
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+  - { id: 7, class: _, preferred-register: '', flags: [  ] }
+  - { id: 8, class: _, preferred-register: '', flags: [  ] }
+  - { id: 9, class: _, preferred-register: '', flags: [  ] }
+  - { id: 10, class: _, preferred-register: '', flags: [  ] }
+  - { id: 11, class: _, preferred-register: '', flags: [  ] }
+  - { id: 12, class: _, preferred-register: '', flags: [  ] }
+  - { id: 13, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
+    %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
+    %6:_(s8) = G_FCMP floatpred(ole), %2(s64), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_double_one
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+  - { id: 7, class: _, preferred-register: '', flags: [  ] }
+  - { id: 8, class: _, preferred-register: '', flags: [  ] }
+  - { id: 9, class: _, preferred-register: '', flags: [  ] }
+  - { id: 10, class: _, preferred-register: '', flags: [  ] }
+  - { id: 11, class: _, preferred-register: '', flags: [  ] }
+  - { id: 12, class: _, preferred-register: '', flags: [  ] }
+  - { id: 13, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
+    %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
+    %6:_(s8) = G_FCMP floatpred(one), %2(s64), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_double_ord
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+  - { id: 7, class: _, preferred-register: '', flags: [  ] }
+  - { id: 8, class: _, preferred-register: '', flags: [  ] }
+  - { id: 9, class: _, preferred-register: '', flags: [  ] }
+  - { id: 10, class: _, preferred-register: '', flags: [  ] }
+  - { id: 11, class: _, preferred-register: '', flags: [  ] }
+  - { id: 12, class: _, preferred-register: '', flags: [  ] }
+  - { id: 13, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
+    %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
+    %6:_(s8) = G_FCMP floatpred(ord), %2(s64), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_double_uno
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+  - { id: 7, class: _, preferred-register: '', flags: [  ] }
+  - { id: 8, class: _, preferred-register: '', flags: [  ] }
+  - { id: 9, class: _, preferred-register: '', flags: [  ] }
+  - { id: 10, class: _, preferred-register: '', flags: [  ] }
+  - { id: 11, class: _, preferred-register: '', flags: [  ] }
+  - { id: 12, class: _, preferred-register: '', flags: [  ] }
+  - { id: 13, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
+    %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
+    %6:_(s8) = G_FCMP floatpred(uno), %2(s64), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_double_ueq
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+  - { id: 7, class: _, preferred-register: '', flags: [  ] }
+  - { id: 8, class: _, preferred-register: '', flags: [  ] }
+  - { id: 9, class: _, preferred-register: '', flags: [  ] }
+  - { id: 10, class: _, preferred-register: '', flags: [  ] }
+  - { id: 11, class: _, preferred-register: '', flags: [  ] }
+  - { id: 12, class: _, preferred-register: '', flags: [  ] }
+  - { id: 13, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
+    %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
+    %6:_(s8) = G_FCMP floatpred(ueq), %2(s64), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_double_ugt
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+  - { id: 7, class: _, preferred-register: '', flags: [  ] }
+  - { id: 8, class: _, preferred-register: '', flags: [  ] }
+  - { id: 9, class: _, preferred-register: '', flags: [  ] }
+  - { id: 10, class: _, preferred-register: '', flags: [  ] }
+  - { id: 11, class: _, preferred-register: '', flags: [  ] }
+  - { id: 12, class: _, preferred-register: '', flags: [  ] }
+  - { id: 13, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
+    %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
+    %6:_(s8) = G_FCMP floatpred(ugt), %2(s64), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_double_uge
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+  - { id: 7, class: _, preferred-register: '', flags: [  ] }
+  - { id: 8, class: _, preferred-register: '', flags: [  ] }
+  - { id: 9, class: _, preferred-register: '', flags: [  ] }
+  - { id: 10, class: _, preferred-register: '', flags: [  ] }
+  - { id: 11, class: _, preferred-register: '', flags: [  ] }
+  - { id: 12, class: _, preferred-register: '', flags: [  ] }
+  - { id: 13, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
+    %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
+    %6:_(s8) = G_FCMP floatpred(uge), %2(s64), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_double_ult
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+  - { id: 7, class: _, preferred-register: '', flags: [  ] }
+  - { id: 8, class: _, preferred-register: '', flags: [  ] }
+  - { id: 9, class: _, preferred-register: '', flags: [  ] }
+  - { id: 10, class: _, preferred-register: '', flags: [  ] }
+  - { id: 11, class: _, preferred-register: '', flags: [  ] }
+  - { id: 12, class: _, preferred-register: '', flags: [  ] }
+  - { id: 13, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
+    %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
+    %6:_(s8) = G_FCMP floatpred(ult), %2(s64), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_double_ule
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+  - { id: 7, class: _, preferred-register: '', flags: [  ] }
+  - { id: 8, class: _, preferred-register: '', flags: [  ] }
+  - { id: 9, class: _, preferred-register: '', flags: [  ] }
+  - { id: 10, class: _, preferred-register: '', flags: [  ] }
+  - { id: 11, class: _, preferred-register: '', flags: [  ] }
+  - { id: 12, class: _, preferred-register: '', flags: [  ] }
+  - { id: 13, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
+    %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
+    %6:_(s8) = G_FCMP floatpred(ule), %2(s64), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+
+...
+---
+name:            fcmp_double_une
+alignment:       16
+exposesReturnsTwice: false
+legalized:       true
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          false
+isSSA:           true
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHCatchret:   false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: _, preferred-register: '', flags: [  ] }
+  - { id: 1, class: _, preferred-register: '', flags: [  ] }
+  - { id: 2, class: _, preferred-register: '', flags: [  ] }
+  - { id: 3, class: _, preferred-register: '', flags: [  ] }
+  - { id: 4, class: _, preferred-register: '', flags: [  ] }
+  - { id: 5, class: _, preferred-register: '', flags: [  ] }
+  - { id: 6, class: _, preferred-register: '', flags: [  ] }
+  - { id: 7, class: _, preferred-register: '', flags: [  ] }
+  - { id: 8, class: _, preferred-register: '', flags: [  ] }
+  - { id: 9, class: _, preferred-register: '', flags: [  ] }
+  - { id: 10, class: _, preferred-register: '', flags: [  ] }
+  - { id: 11, class: _, preferred-register: '', flags: [  ] }
+  - { id: 12, class: _, preferred-register: '', flags: [  ] }
+  - { id: 13, class: _, preferred-register: '', flags: [  ] }
+liveins:         []
+frameInfo:
+  isFrameAddressTaken: false
+  isReturnAddressTaken: false
+  hasStackMap:     false
+  hasPatchPoint:   false
+  stackSize:       0
+  offsetAdjustment: 0
+  maxAlignment:    4
+  adjustsStack:    false
+  hasCalls:        false
+  stackProtector:  ''
+  functionContext: ''
+  maxCallFrameSize: 4294967295
+  cvBytesOfCalleeSavedRegisters: 0
+  hasOpaqueSPAdjustment: false
+  hasVAStart:      false
+  hasMustTailInVarArgFunc: false
+  hasTailCall:     false
+  isCalleeSavedInfoValid: false
+  localFrameSize:  0
+  savePoint:       ''
+  restorePoint:    ''
+fixedStack:
+  - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
+      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+stack:           []
+entry_values:    []
+callSites:       []
+debugValueSubstitutions: []
+constants:       []
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.1 (%ir-block.0):
+    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
+    %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
+    %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
+    %6:_(s8) = G_FCMP floatpred(une), %2(s64), %1
+    $al = COPY %6(s8)
+    RET 0, implicit $al
+...
diff --git a/llvm/test/CodeGen/X86/isel-fcmp.ll b/llvm/test/CodeGen/X86/isel-fcmp.ll
index fba00d5db660e7..8c609f6ef5fb10 100644
--- a/llvm/test/CodeGen/X86/isel-fcmp.ll
+++ b/llvm/test/CodeGen/X86/isel-fcmp.ll
@@ -3,10 +3,10 @@
 ; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=+sse,+sse2,-x87 -verify-machineinstrs | FileCheck %s --check-prefix=FAST-X64
 ; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=+sse,+sse2,-x87 -verify-machineinstrs | FileCheck %s --check-prefixes=GISEL-X64
 ; i686 with 64 bit store is issue.
-; COM: RUN: llc < %s                               -mtriple=i686-apple-darwin10 -mattr=-sse,-sse2,+x87 -verify-machineinstrs | FileCheck %s --check-prefixes=SDAG-X86
+; RUN: llc < %s                               -mtriple=i686-apple-darwin10 -mattr=-sse,-sse2,+x87 -verify-machineinstrs | FileCheck %s --check-prefixes=SDAG-X86
 ; Allow fast-isel to fallback to selection dag on x86
-; COM: RUN: llc < %s -fast-isel -mtriple=i686-apple-darwin10 -mattr=+sse,+sse2,+x87 -verify-machineinstrs | FileCheck %s --check-prefixes=FAST-X86
-; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=i686-apple-darwin10 -mattr=+x87 -verify-machineinstrs | FileCheck %s --check-prefixes=GISEL-X86
+; RUN: llc < %s -fast-isel -mtriple=i686-apple-darwin10 -mattr=-sse,-sse2,+x87 -verify-machineinstrs | FileCheck %s --check-prefixes=FAST-X86
+; llc < %s -global-isel -global-isel-abort=1 -mtriple=i686-apple-darwin10 -mattr=-sse,-sse2,+x87 -verify-machineinstrs | FileCheck %s --check-prefixes=GISEL-X86
 
   define i1 @fcmp_float_oeq(float %x, float %y) nounwind {
 ; SDAG-X64-LABEL: fcmp_float_oeq:
@@ -32,6 +32,32 @@
 ; GISEL-X64-NEXT:    setnp %al
 ; GISEL-X64-NEXT:    andb %cl, %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_float_oeq:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setnp %cl
+; SDAG-X86-NEXT:    sete %al
+; SDAG-X86-NEXT:    andb %cl, %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_float_oeq:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setnp %cl
+; FAST-X86-NEXT:    sete %al
+; FAST-X86-NEXT:    andb %cl, %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp oeq float %x, %y
     ret i1 %1
   }
@@ -54,6 +80,28 @@
 ; GISEL-X64-NEXT:    ucomiss %xmm1, %xmm0
 ; GISEL-X64-NEXT:    seta %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_float_ogt:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    seta %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_float_ogt:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    seta %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp ogt float %x, %y
     ret i1 %1
   }
@@ -76,6 +124,28 @@
 ; GISEL-X64-NEXT:    ucomiss %xmm1, %xmm0
 ; GISEL-X64-NEXT:    setae %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_float_oge:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setae %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_float_oge:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setae %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp oge float %x, %y
     ret i1 %1
   }
@@ -98,6 +168,29 @@
 ; GISEL-X64-NEXT:    ucomiss %xmm0, %xmm1
 ; GISEL-X64-NEXT:    seta %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_float_olt:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    seta %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_float_olt:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fxch %st(1)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    seta %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp olt float %x, %y
     ret i1 %1
   }
@@ -120,6 +213,29 @@
 ; GISEL-X64-NEXT:    ucomiss %xmm0, %xmm1
 ; GISEL-X64-NEXT:    setae %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_float_ole:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setae %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_float_ole:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fxch %st(1)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setae %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp ole float %x, %y
     ret i1 %1
   }
@@ -142,6 +258,28 @@
 ; GISEL-X64-NEXT:    ucomiss %xmm1, %xmm0
 ; GISEL-X64-NEXT:    setne %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_float_one:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setne %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_float_one:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setne %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp one float %x, %y
     ret i1 %1
   }
@@ -164,6 +302,28 @@
 ; GISEL-X64-NEXT:    ucomiss %xmm1, %xmm0
 ; GISEL-X64-NEXT:    setnp %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_float_ord:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setnp %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_float_ord:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setnp %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp ord float %x, %y
     ret i1 %1
   }
@@ -186,6 +346,28 @@
 ; GISEL-X64-NEXT:    ucomiss %xmm1, %xmm0
 ; GISEL-X64-NEXT:    setp %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_float_uno:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setp %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_float_uno:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setp %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp uno float %x, %y
     ret i1 %1
   }
@@ -208,6 +390,28 @@
 ; GISEL-X64-NEXT:    ucomiss %xmm1, %xmm0
 ; GISEL-X64-NEXT:    sete %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_float_ueq:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    sete %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_float_ueq:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    sete %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp ueq float %x, %y
     ret i1 %1
   }
@@ -230,6 +434,29 @@
 ; GISEL-X64-NEXT:    ucomiss %xmm0, %xmm1
 ; GISEL-X64-NEXT:    setb %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_float_ugt:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setb %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_float_ugt:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fxch %st(1)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setb %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp ugt float %x, %y
     ret i1 %1
   }
@@ -252,6 +479,29 @@
 ; GISEL-X64-NEXT:    ucomiss %xmm0, %xmm1
 ; GISEL-X64-NEXT:    setbe %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_float_uge:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setbe %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_float_uge:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fxch %st(1)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setbe %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp uge float %x, %y
     ret i1 %1
   }
@@ -274,6 +524,28 @@
 ; GISEL-X64-NEXT:    ucomiss %xmm1, %xmm0
 ; GISEL-X64-NEXT:    setb %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_float_ult:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setb %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_float_ult:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setb %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp ult float %x, %y
     ret i1 %1
   }
@@ -296,6 +568,28 @@
 ; GISEL-X64-NEXT:    ucomiss %xmm1, %xmm0
 ; GISEL-X64-NEXT:    setbe %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_float_ule:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setbe %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_float_ule:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setbe %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp ule float %x, %y
     ret i1 %1
   }
@@ -324,6 +618,32 @@
 ; GISEL-X64-NEXT:    setp %al
 ; GISEL-X64-NEXT:    orb %cl, %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_float_une:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setp %cl
+; SDAG-X86-NEXT:    setne %al
+; SDAG-X86-NEXT:    orb %cl, %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_float_une:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setp %cl
+; FAST-X86-NEXT:    setne %al
+; FAST-X86-NEXT:    orb %cl, %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp une float %x, %y
     ret i1 %1
   }
@@ -352,6 +672,32 @@
 ; GISEL-X64-NEXT:    setnp %al
 ; GISEL-X64-NEXT:    andb %cl, %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_double_oeq:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setnp %cl
+; SDAG-X86-NEXT:    sete %al
+; SDAG-X86-NEXT:    andb %cl, %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_double_oeq:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setnp %cl
+; FAST-X86-NEXT:    sete %al
+; FAST-X86-NEXT:    andb %cl, %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp oeq double %x, %y
     ret i1 %1
   }
@@ -374,6 +720,28 @@
 ; GISEL-X64-NEXT:    ucomisd %xmm1, %xmm0
 ; GISEL-X64-NEXT:    seta %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_double_ogt:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    seta %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_double_ogt:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    seta %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp ogt double %x, %y
     ret i1 %1
   }
@@ -396,6 +764,28 @@
 ; GISEL-X64-NEXT:    ucomisd %xmm1, %xmm0
 ; GISEL-X64-NEXT:    setae %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_double_oge:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setae %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_double_oge:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setae %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp oge double %x, %y
     ret i1 %1
   }
@@ -418,6 +808,29 @@
 ; GISEL-X64-NEXT:    ucomisd %xmm0, %xmm1
 ; GISEL-X64-NEXT:    seta %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_double_olt:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    seta %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_double_olt:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fxch %st(1)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    seta %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp olt double %x, %y
     ret i1 %1
   }
@@ -440,6 +853,29 @@
 ; GISEL-X64-NEXT:    ucomisd %xmm0, %xmm1
 ; GISEL-X64-NEXT:    setae %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_double_ole:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setae %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_double_ole:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fxch %st(1)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setae %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp ole double %x, %y
     ret i1 %1
   }
@@ -462,6 +898,28 @@
 ; GISEL-X64-NEXT:    ucomisd %xmm1, %xmm0
 ; GISEL-X64-NEXT:    setne %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_double_one:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setne %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_double_one:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setne %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp one double %x, %y
     ret i1 %1
   }
@@ -484,6 +942,28 @@
 ; GISEL-X64-NEXT:    ucomisd %xmm1, %xmm0
 ; GISEL-X64-NEXT:    setnp %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_double_ord:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setnp %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_double_ord:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setnp %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp ord double %x, %y
     ret i1 %1
   }
@@ -506,6 +986,28 @@
 ; GISEL-X64-NEXT:    ucomisd %xmm1, %xmm0
 ; GISEL-X64-NEXT:    setp %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_double_uno:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setp %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_double_uno:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setp %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp uno double %x, %y
     ret i1 %1
   }
@@ -528,6 +1030,28 @@
 ; GISEL-X64-NEXT:    ucomisd %xmm1, %xmm0
 ; GISEL-X64-NEXT:    sete %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_double_ueq:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    sete %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_double_ueq:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    sete %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp ueq double %x, %y
     ret i1 %1
   }
@@ -550,6 +1074,29 @@
 ; GISEL-X64-NEXT:    ucomisd %xmm0, %xmm1
 ; GISEL-X64-NEXT:    setb %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_double_ugt:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setb %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_double_ugt:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fxch %st(1)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setb %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp ugt double %x, %y
     ret i1 %1
   }
@@ -572,6 +1119,29 @@
 ; GISEL-X64-NEXT:    ucomisd %xmm0, %xmm1
 ; GISEL-X64-NEXT:    setbe %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_double_uge:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setbe %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_double_uge:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fxch %st(1)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setbe %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp uge double %x, %y
     ret i1 %1
   }
@@ -594,6 +1164,28 @@
 ; GISEL-X64-NEXT:    ucomisd %xmm1, %xmm0
 ; GISEL-X64-NEXT:    setb %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_double_ult:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setb %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_double_ult:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setb %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp ult double %x, %y
     ret i1 %1
   }
@@ -616,6 +1208,28 @@
 ; GISEL-X64-NEXT:    ucomisd %xmm1, %xmm0
 ; GISEL-X64-NEXT:    setbe %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_double_ule:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setbe %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_double_ule:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setbe %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp ule double %x, %y
     ret i1 %1
   }
@@ -644,6 +1258,32 @@
 ; GISEL-X64-NEXT:    setp %al
 ; GISEL-X64-NEXT:    orb %cl, %al
 ; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_double_une:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setp %cl
+; SDAG-X86-NEXT:    setne %al
+; SDAG-X86-NEXT:    orb %cl, %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_double_une:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setp %cl
+; FAST-X86-NEXT:    setne %al
+; FAST-X86-NEXT:    orb %cl, %al
+; FAST-X86-NEXT:    retl
     %1 = fcmp une double %x, %y
     ret i1 %1
   }

>From 9b967b9937bc815bf55230f32c9dcd7e3343393d Mon Sep 17 00:00:00 2001
From: mattarde <mattarde at intel.com>
Date: Thu, 30 Jan 2025 02:24:10 -0800
Subject: [PATCH 4/4] update review comments

---
 .../lib/Target/X86/GISel/X86LegalizerInfo.cpp |   10 +-
 .../CodeGen/X86/GlobalISel/isel-fcmp-i686.mir | 2587 +----------------
 llvm/test/CodeGen/X86/isel-fcmp-x87.ll        | 1320 ++++++---
 llvm/test/CodeGen/X86/isel-fcmp.ll            | 1127 +++----
 4 files changed, 1406 insertions(+), 3638 deletions(-)

diff --git a/llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp b/llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp
index bc0c03a84c45cd..6d35dea09b31db 100644
--- a/llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp
+++ b/llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp
@@ -448,13 +448,9 @@ X86LegalizerInfo::X86LegalizerInfo(const X86Subtarget &STI,
 
   // fp comparison
   getActionDefinitionsBuilder(G_FCMP)
-      .legalIf([=](const LegalityQuery &Query) {
-        return ((HasSSE1 || UseX87) &&
-                typePairInSet(0, 1, {{s8, s32}})(Query)) ||
-               ((HasSSE2 || UseX87) &&
-                typePairInSet(0, 1, {{s8, s64}})(Query)) ||
-               (UseX87 && typePairInSet(0, 1, {{s8, s80}})(Query));
-      })
+      .legalFor((HasSSE1 || UseX87), {s8, s32})
+      .legalFor((HasSSE2 || UseX87), {s8, s64})
+      .legalFor(UseX87, {s8, s80})
       .clampScalar(0, s8, s8)
       .clampScalar(1, s32, HasSSE2 ? s64 : s32)
       .widenScalarToNextPow2(1);
diff --git a/llvm/test/CodeGen/X86/GlobalISel/isel-fcmp-i686.mir b/llvm/test/CodeGen/X86/GlobalISel/isel-fcmp-i686.mir
index c47a70de24a8f4..4ef1544f275e76 100644
--- a/llvm/test/CodeGen/X86/GlobalISel/isel-fcmp-i686.mir
+++ b/llvm/test/CodeGen/X86/GlobalISel/isel-fcmp-i686.mir
@@ -1,1596 +1,79 @@
-# NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
 # NOTE: This MIR test is required because the support for 64 bit memory ops is missing in i686 mode, Due to distinction between float/int types, support is expected in near future and there is this RFC in place https://discourse.llvm.org/t/rfc-globalisel-adding-fp-type-information-to-llt/83349. Once this support is introduced this test must be dropped and integrated into the LLVM IR tests.
-# RUN: llc -O2 -mtriple=i686-linux-gnu -mattr=+x87,-sse,-sse2 -start-after=legalizer -disable-gisel-legality-check -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes GISEL-X86
+# RUN: llc -O2 -mtriple=i686-linux-gnu -mattr=+x87,-sse,-sse2 -run-pass=regbankselect,instruction-select -disable-gisel-legality-check -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes GISEL-X86
 
 --- |
-  ; ModuleID = 'c2.ll'
-  source_filename = "c2.ll"
-  target datalayout = "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:128-f64:32:64-f80:32-n8:16:32-S128"
-  target triple = "i686-unknown-linux-gnu"
-
-  ; Function Attrs: nounwind
-  define i1 @fcmp_float_oeq(float %x, float %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_float_oeq:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fxch %st(1)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    sete %cl
-  ; GISEL-X86-NEXT:    setnp %al
-  ; GISEL-X86-NEXT:    andb %cl, %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
-    %1 = fcmp oeq float %x, %y
-    ret i1 %1
-  }
-
-  ; Function Attrs: nounwind
-  define i1 @fcmp_float_ogt(float %x, float %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_float_ogt:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fxch %st(1)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    seta %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
-    %1 = fcmp ogt float %x, %y
-    ret i1 %1
-  }
-
-  ; Function Attrs: nounwind
-  define i1 @fcmp_float_oge(float %x, float %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_float_oge:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fxch %st(1)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    setae %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
-    %1 = fcmp oge float %x, %y
-    ret i1 %1
-  }
-
-  ; Function Attrs: nounwind
-  define i1 @fcmp_float_olt(float %x, float %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_float_olt:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    seta %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
-    %1 = fcmp olt float %x, %y
-    ret i1 %1
-  }
-
-  ; Function Attrs: nounwind
-  define i1 @fcmp_float_ole(float %x, float %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_float_ole:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    setae %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
-    %1 = fcmp ole float %x, %y
-    ret i1 %1
-  }
-
-  ; Function Attrs: nounwind
-  define i1 @fcmp_float_one(float %x, float %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_float_one:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fxch %st(1)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    setne %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
-    %1 = fcmp one float %x, %y
-    ret i1 %1
-  }
-
-  ; Function Attrs: nounwind
-  define i1 @fcmp_float_ord(float %x, float %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_float_ord:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fxch %st(1)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    setnp %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
-    %1 = fcmp ord float %x, %y
-    ret i1 %1
-  }
-
-  ; Function Attrs: nounwind
-  define i1 @fcmp_float_uno(float %x, float %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_float_uno:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fxch %st(1)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    setp %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
-    %1 = fcmp uno float %x, %y
-    ret i1 %1
-  }
-
-  ; Function Attrs: nounwind
-  define i1 @fcmp_float_ueq(float %x, float %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_float_ueq:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fxch %st(1)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    sete %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
-    %1 = fcmp ueq float %x, %y
-    ret i1 %1
-  }
-
-  ; Function Attrs: nounwind
-  define i1 @fcmp_float_ugt(float %x, float %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_float_ugt:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    setb %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
-    %1 = fcmp ugt float %x, %y
-    ret i1 %1
-  }
-
-  ; Function Attrs: nounwind
-  define i1 @fcmp_float_uge(float %x, float %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_float_uge:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    setbe %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
-    %1 = fcmp uge float %x, %y
-    ret i1 %1
-  }
-
-  ; Function Attrs: nounwind
-  define i1 @fcmp_float_ult(float %x, float %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_float_ult:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fxch %st(1)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    setb %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
-    %1 = fcmp ult float %x, %y
-    ret i1 %1
-  }
-
-  ; Function Attrs: nounwind
-  define i1 @fcmp_float_ule(float %x, float %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_float_ule:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fxch %st(1)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    setbe %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
-    %1 = fcmp ule float %x, %y
-    ret i1 %1
-  }
-
-  ; Function Attrs: nounwind
-  define i1 @fcmp_float_une(float %x, float %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_float_une:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fxch %st(1)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    setne %cl
-  ; GISEL-X86-NEXT:    setp %al
-  ; GISEL-X86-NEXT:    orb %cl, %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
-    %1 = fcmp une float %x, %y
-    ret i1 %1
-  }
-
-  ; Function Attrs: nounwind
   define i1 @fcmp_double_oeq(double %x, double %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_double_oeq:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fxch %st(1)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    sete %cl
-  ; GISEL-X86-NEXT:    setnp %al
-  ; GISEL-X86-NEXT:    andb %cl, %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
     %1 = fcmp oeq double %x, %y
     ret i1 %1
   }
 
-  ; Function Attrs: nounwind
   define i1 @fcmp_double_ogt(double %x, double %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_double_ogt:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fxch %st(1)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    seta %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
     %1 = fcmp ogt double %x, %y
     ret i1 %1
   }
 
-  ; Function Attrs: nounwind
   define i1 @fcmp_double_oge(double %x, double %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_double_oge:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fxch %st(1)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    setae %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
     %1 = fcmp oge double %x, %y
     ret i1 %1
   }
 
-  ; Function Attrs: nounwind
   define i1 @fcmp_double_olt(double %x, double %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_double_olt:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    seta %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
     %1 = fcmp olt double %x, %y
     ret i1 %1
   }
 
-  ; Function Attrs: nounwind
   define i1 @fcmp_double_ole(double %x, double %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_double_ole:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    setae %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
     %1 = fcmp ole double %x, %y
     ret i1 %1
   }
 
-  ; Function Attrs: nounwind
   define i1 @fcmp_double_one(double %x, double %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_double_one:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fxch %st(1)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    setne %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
     %1 = fcmp one double %x, %y
     ret i1 %1
   }
 
-  ; Function Attrs: nounwind
   define i1 @fcmp_double_ord(double %x, double %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_double_ord:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fxch %st(1)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    setnp %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
     %1 = fcmp ord double %x, %y
     ret i1 %1
   }
 
-  ; Function Attrs: nounwind
   define i1 @fcmp_double_uno(double %x, double %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_double_uno:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fxch %st(1)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    setp %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
     %1 = fcmp uno double %x, %y
     ret i1 %1
   }
 
-  ; Function Attrs: nounwind
   define i1 @fcmp_double_ueq(double %x, double %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_double_ueq:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fxch %st(1)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    sete %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
     %1 = fcmp ueq double %x, %y
     ret i1 %1
   }
 
-  ; Function Attrs: nounwind
   define i1 @fcmp_double_ugt(double %x, double %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_double_ugt:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    setb %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
     %1 = fcmp ugt double %x, %y
     ret i1 %1
   }
 
-  ; Function Attrs: nounwind
   define i1 @fcmp_double_uge(double %x, double %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_double_uge:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    setbe %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
     %1 = fcmp uge double %x, %y
     ret i1 %1
   }
 
-  ; Function Attrs: nounwind
   define i1 @fcmp_double_ult(double %x, double %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_double_ult:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fxch %st(1)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    setb %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
     %1 = fcmp ult double %x, %y
     ret i1 %1
   }
 
-  ; Function Attrs: nounwind
   define i1 @fcmp_double_ule(double %x, double %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_double_ule:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fxch %st(1)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    setbe %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
     %1 = fcmp ule double %x, %y
     ret i1 %1
   }
 
-  ; Function Attrs: nounwind
   define i1 @fcmp_double_une(double %x, double %y) #0 {
-  ; GISEL-X86-LABEL: fcmp_double_une:
-  ; GISEL-X86:       # %bb.0:
-  ; GISEL-X86-NEXT:    subl $12, %esp
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-  ; GISEL-X86-NEXT:    fxch %st(1)
-  ; GISEL-X86-NEXT:    fucompi %st(1), %st
-  ; GISEL-X86-NEXT:    fstp %st(0)
-  ; GISEL-X86-NEXT:    setne %cl
-  ; GISEL-X86-NEXT:    setp %al
-  ; GISEL-X86-NEXT:    orb %cl, %al
-  ; GISEL-X86-NEXT:    addl $12, %esp
-  ; GISEL-X86-NEXT:    retl
     %1 = fcmp une double %x, %y
     ret i1 %1
   }
 
-  attributes #0 = { nounwind "target-features"="+x87,-sse,-sse2" }
-
-...
----
-name:            fcmp_float_oeq
-alignment:       16
-exposesReturnsTwice: false
-legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
-tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
-fixedStack:
-  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
-body:             |
-  bb.1 (%ir-block.0):
-    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
-    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
-    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
-    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
-    %6:_(s8) = G_FCMP floatpred(oeq), %0(s32), %1
-    $al = COPY %6(s8)
-    RET 0, implicit $al
-
-...
----
-name:            fcmp_float_ogt
-alignment:       16
-exposesReturnsTwice: false
-legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
-tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
-fixedStack:
-  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
-body:             |
-  bb.1 (%ir-block.0):
-    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
-    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
-    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
-    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
-    %6:_(s8) = G_FCMP floatpred(ogt), %0(s32), %1
-    $al = COPY %6(s8)
-    RET 0, implicit $al
-
-...
----
-name:            fcmp_float_oge
-alignment:       16
-exposesReturnsTwice: false
-legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
-tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
-fixedStack:
-  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
-body:             |
-  bb.1 (%ir-block.0):
-    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
-    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
-    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
-    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
-    %6:_(s8) = G_FCMP floatpred(oge), %0(s32), %1
-    $al = COPY %6(s8)
-    RET 0, implicit $al
-
-...
----
-name:            fcmp_float_olt
-alignment:       16
-exposesReturnsTwice: false
-legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
-tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
-fixedStack:
-  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
-body:             |
-  bb.1 (%ir-block.0):
-    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
-    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
-    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
-    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
-    %6:_(s8) = G_FCMP floatpred(olt), %0(s32), %1
-    $al = COPY %6(s8)
-    RET 0, implicit $al
-
-...
----
-name:            fcmp_float_ole
-alignment:       16
-exposesReturnsTwice: false
-legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
-tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
-fixedStack:
-  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
-body:             |
-  bb.1 (%ir-block.0):
-    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
-    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
-    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
-    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
-    %6:_(s8) = G_FCMP floatpred(ole), %0(s32), %1
-    $al = COPY %6(s8)
-    RET 0, implicit $al
-
-...
----
-name:            fcmp_float_one
-alignment:       16
-exposesReturnsTwice: false
-legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
-tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
-fixedStack:
-  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
-body:             |
-  bb.1 (%ir-block.0):
-    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
-    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
-    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
-    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
-    %6:_(s8) = G_FCMP floatpred(one), %0(s32), %1
-    $al = COPY %6(s8)
-    RET 0, implicit $al
-
-...
----
-name:            fcmp_float_ord
-alignment:       16
-exposesReturnsTwice: false
-legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
-tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
-fixedStack:
-  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
-body:             |
-  bb.1 (%ir-block.0):
-    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
-    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
-    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
-    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
-    %6:_(s8) = G_FCMP floatpred(ord), %0(s32), %1
-    $al = COPY %6(s8)
-    RET 0, implicit $al
-
-...
----
-name:            fcmp_float_uno
-alignment:       16
-exposesReturnsTwice: false
-legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
-tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
-fixedStack:
-  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
-body:             |
-  bb.1 (%ir-block.0):
-    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
-    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
-    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
-    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
-    %6:_(s8) = G_FCMP floatpred(uno), %0(s32), %1
-    $al = COPY %6(s8)
-    RET 0, implicit $al
-
-...
----
-name:            fcmp_float_ueq
-alignment:       16
-exposesReturnsTwice: false
-legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
-tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
-fixedStack:
-  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
-body:             |
-  bb.1 (%ir-block.0):
-    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
-    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
-    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
-    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
-    %6:_(s8) = G_FCMP floatpred(ueq), %0(s32), %1
-    $al = COPY %6(s8)
-    RET 0, implicit $al
-
-...
----
-name:            fcmp_float_ugt
-alignment:       16
-exposesReturnsTwice: false
-legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
-tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
-fixedStack:
-  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
-body:             |
-  bb.1 (%ir-block.0):
-    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
-    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
-    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
-    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
-    %6:_(s8) = G_FCMP floatpred(ugt), %0(s32), %1
-    $al = COPY %6(s8)
-    RET 0, implicit $al
-
-...
----
-name:            fcmp_float_uge
-alignment:       16
-exposesReturnsTwice: false
-legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
-tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
-fixedStack:
-  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
-body:             |
-  bb.1 (%ir-block.0):
-    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
-    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
-    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
-    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
-    %6:_(s8) = G_FCMP floatpred(uge), %0(s32), %1
-    $al = COPY %6(s8)
-    RET 0, implicit $al
-
-...
----
-name:            fcmp_float_ult
-alignment:       16
-exposesReturnsTwice: false
-legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
-tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
-fixedStack:
-  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
-body:             |
-  bb.1 (%ir-block.0):
-    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
-    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
-    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
-    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
-    %6:_(s8) = G_FCMP floatpred(ult), %0(s32), %1
-    $al = COPY %6(s8)
-    RET 0, implicit $al
-
-...
----
-name:            fcmp_float_ule
-alignment:       16
-exposesReturnsTwice: false
-legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
-tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
-fixedStack:
-  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
-body:             |
-  bb.1 (%ir-block.0):
-    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
-    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
-    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
-    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
-    %6:_(s8) = G_FCMP floatpred(ule), %0(s32), %1
-    $al = COPY %6(s8)
-    RET 0, implicit $al
-
-...
----
-name:            fcmp_float_une
-alignment:       16
-exposesReturnsTwice: false
-legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
-tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
-fixedStack:
-  - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
-body:             |
-  bb.1 (%ir-block.0):
-    %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
-    %0:_(s32) = G_LOAD %2(p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
-    %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
-    %1:_(s32) = G_LOAD %3(p0) :: (invariant load (s32) from %fixed-stack.0)
-    %6:_(s8) = G_FCMP floatpred(une), %0(s32), %1
-    $al = COPY %6(s8)
-    RET 0, implicit $al
+  attributes #0 = { "target-features"="+x87,-sse,-sse2,+x87,-sse,-sse2" }
 
 ...
 ---
@@ -1598,168 +81,57 @@ name:            fcmp_double_oeq
 alignment:       16
 exposesReturnsTwice: false
 legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
 tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-  - { id: 7, class: _, preferred-register: '', flags: [  ] }
-  - { id: 8, class: _, preferred-register: '', flags: [  ] }
-  - { id: 9, class: _, preferred-register: '', flags: [  ] }
-  - { id: 10, class: _, preferred-register: '', flags: [  ] }
-  - { id: 11, class: _, preferred-register: '', flags: [  ] }
-  - { id: 12, class: _, preferred-register: '', flags: [  ] }
-  - { id: 13, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
 fixedStack:
   - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
       isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+
 stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
 body:             |
   bb.1 (%ir-block.0):
+    ; GISEL-X86-LABEL: name: fcmp_double_oeq
+    ; GISEL-X86: [[LD_Fp64m:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0)
+    ; GISEL-X86-NEXT: [[LD_Fp64m1:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0 + 8)
+    ; GISEL-X86-NEXT: UCOM_FpIr64 [[LD_Fp64m]], [[LD_Fp64m1]], implicit-def $eflags, implicit-def $fpsw, implicit $fpcw
+    ; GISEL-X86-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 4, implicit $eflags
+    ; GISEL-X86-NEXT: [[SETCCr1:%[0-9]+]]:gr8 = SETCCr 11, implicit $eflags
+    ; GISEL-X86-NEXT: [[AND8rr:%[0-9]+]]:gr8 = AND8rr [[SETCCr]], [[SETCCr1]], implicit-def $eflags
+    ; GISEL-X86-NEXT: $al = COPY [[AND8rr]]
+    ; GISEL-X86-NEXT: RET 0, implicit $al
     %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
     %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
     %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
-    %6:_(s8) = G_FCMP floatpred(oeq), %2(s64), %1
-    $al = COPY %6(s8)
+    %4:_(s8) = G_FCMP floatpred(oeq), %2(s64), %1
+    $al = COPY %4(s8)
     RET 0, implicit $al
 
 ...
 ---
 name:            fcmp_double_ogt
 alignment:       16
-exposesReturnsTwice: false
 legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
 tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-  - { id: 7, class: _, preferred-register: '', flags: [  ] }
-  - { id: 8, class: _, preferred-register: '', flags: [  ] }
-  - { id: 9, class: _, preferred-register: '', flags: [  ] }
-  - { id: 10, class: _, preferred-register: '', flags: [  ] }
-  - { id: 11, class: _, preferred-register: '', flags: [  ] }
-  - { id: 12, class: _, preferred-register: '', flags: [  ] }
-  - { id: 13, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
 fixedStack:
   - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
       isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+
 stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
 body:             |
   bb.1 (%ir-block.0):
+    ; GISEL-X86-LABEL: name: fcmp_double_ogt
+    ; GISEL-X86: [[LD_Fp64m:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0)
+    ; GISEL-X86-NEXT: [[LD_Fp64m1:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0 + 8)
+    ; GISEL-X86-NEXT: UCOM_FpIr64 [[LD_Fp64m]], [[LD_Fp64m1]], implicit-def $eflags, implicit-def $fpsw, implicit $fpcw
+    ; GISEL-X86-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 7, implicit $eflags
+    ; GISEL-X86-NEXT: $al = COPY [[SETCCr]]
+    ; GISEL-X86-NEXT: RET 0, implicit $al
     %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
     %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
     %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
-    %6:_(s8) = G_FCMP floatpred(ogt), %2(s64), %1
-    $al = COPY %6(s8)
+    %4:_(s8) = G_FCMP floatpred(ogt), %2(s64), %1
+    $al = COPY %4(s8)
     RET 0, implicit $al
 
 ...
@@ -1768,83 +140,26 @@ name:            fcmp_double_oge
 alignment:       16
 exposesReturnsTwice: false
 legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
 tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-  - { id: 7, class: _, preferred-register: '', flags: [  ] }
-  - { id: 8, class: _, preferred-register: '', flags: [  ] }
-  - { id: 9, class: _, preferred-register: '', flags: [  ] }
-  - { id: 10, class: _, preferred-register: '', flags: [  ] }
-  - { id: 11, class: _, preferred-register: '', flags: [  ] }
-  - { id: 12, class: _, preferred-register: '', flags: [  ] }
-  - { id: 13, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
 fixedStack:
   - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
       isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
 stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
 body:             |
   bb.1 (%ir-block.0):
+    ; GISEL-X86-LABEL: name: fcmp_double_oge
+    ; GISEL-X86: [[LD_Fp64m:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0)
+    ; GISEL-X86-NEXT: [[LD_Fp64m1:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0 + 8)
+    ; GISEL-X86-NEXT: UCOM_FpIr64 [[LD_Fp64m]], [[LD_Fp64m1]], implicit-def $eflags, implicit-def $fpsw, implicit $fpcw
+    ; GISEL-X86-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 3, implicit $eflags
+    ; GISEL-X86-NEXT: $al = COPY [[SETCCr]]
+    ; GISEL-X86-NEXT: RET 0, implicit $al
     %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
     %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
     %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
-    %6:_(s8) = G_FCMP floatpred(oge), %2(s64), %1
-    $al = COPY %6(s8)
+    %4:_(s8) = G_FCMP floatpred(oge), %2(s64), %1
+    $al = COPY %4(s8)
     RET 0, implicit $al
 
 ...
@@ -1853,83 +168,26 @@ name:            fcmp_double_olt
 alignment:       16
 exposesReturnsTwice: false
 legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
 tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-  - { id: 7, class: _, preferred-register: '', flags: [  ] }
-  - { id: 8, class: _, preferred-register: '', flags: [  ] }
-  - { id: 9, class: _, preferred-register: '', flags: [  ] }
-  - { id: 10, class: _, preferred-register: '', flags: [  ] }
-  - { id: 11, class: _, preferred-register: '', flags: [  ] }
-  - { id: 12, class: _, preferred-register: '', flags: [  ] }
-  - { id: 13, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
 fixedStack:
   - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
       isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
+
 body:             |
   bb.1 (%ir-block.0):
+    ; GISEL-X86-LABEL: name: fcmp_double_olt
+    ; GISEL-X86: [[LD_Fp64m:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0)
+    ; GISEL-X86-NEXT: [[LD_Fp64m1:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0 + 8)
+    ; GISEL-X86-NEXT: UCOM_FpIr64 [[LD_Fp64m1]], [[LD_Fp64m]], implicit-def $eflags, implicit-def $fpsw, implicit $fpcw
+    ; GISEL-X86-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 7, implicit $eflags
+    ; GISEL-X86-NEXT: $al = COPY [[SETCCr]]
+    ; GISEL-X86-NEXT: RET 0, implicit $al
     %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
     %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
     %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
-    %6:_(s8) = G_FCMP floatpred(olt), %2(s64), %1
-    $al = COPY %6(s8)
+    %4:_(s8) = G_FCMP floatpred(olt), %2(s64), %1
+    $al = COPY %4(s8)
     RET 0, implicit $al
 
 ...
@@ -1938,83 +196,26 @@ name:            fcmp_double_ole
 alignment:       16
 exposesReturnsTwice: false
 legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
 tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-  - { id: 7, class: _, preferred-register: '', flags: [  ] }
-  - { id: 8, class: _, preferred-register: '', flags: [  ] }
-  - { id: 9, class: _, preferred-register: '', flags: [  ] }
-  - { id: 10, class: _, preferred-register: '', flags: [  ] }
-  - { id: 11, class: _, preferred-register: '', flags: [  ] }
-  - { id: 12, class: _, preferred-register: '', flags: [  ] }
-  - { id: 13, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
 fixedStack:
   - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
       isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
 stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
 body:             |
   bb.1 (%ir-block.0):
+    ; GISEL-X86-LABEL: name: fcmp_double_ole
+    ; GISEL-X86: [[LD_Fp64m:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0)
+    ; GISEL-X86-NEXT: [[LD_Fp64m1:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0 + 8)
+    ; GISEL-X86-NEXT: UCOM_FpIr64 [[LD_Fp64m1]], [[LD_Fp64m]], implicit-def $eflags, implicit-def $fpsw, implicit $fpcw
+    ; GISEL-X86-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 3, implicit $eflags
+    ; GISEL-X86-NEXT: $al = COPY [[SETCCr]]
+    ; GISEL-X86-NEXT: RET 0, implicit $al
     %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
     %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
     %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
-    %6:_(s8) = G_FCMP floatpred(ole), %2(s64), %1
-    $al = COPY %6(s8)
+    %4:_(s8) = G_FCMP floatpred(ole), %2(s64), %1
+    $al = COPY %4(s8)
     RET 0, implicit $al
 
 ...
@@ -2023,83 +224,25 @@ name:            fcmp_double_one
 alignment:       16
 exposesReturnsTwice: false
 legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
 tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-  - { id: 7, class: _, preferred-register: '', flags: [  ] }
-  - { id: 8, class: _, preferred-register: '', flags: [  ] }
-  - { id: 9, class: _, preferred-register: '', flags: [  ] }
-  - { id: 10, class: _, preferred-register: '', flags: [  ] }
-  - { id: 11, class: _, preferred-register: '', flags: [  ] }
-  - { id: 12, class: _, preferred-register: '', flags: [  ] }
-  - { id: 13, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
 fixedStack:
   - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
       isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
 body:             |
   bb.1 (%ir-block.0):
+    ; GISEL-X86-LABEL: name: fcmp_double_one
+    ; GISEL-X86: [[LD_Fp64m:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0)
+    ; GISEL-X86-NEXT: [[LD_Fp64m1:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0 + 8)
+    ; GISEL-X86-NEXT: UCOM_FpIr64 [[LD_Fp64m]], [[LD_Fp64m1]], implicit-def $eflags, implicit-def $fpsw, implicit $fpcw
+    ; GISEL-X86-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 5, implicit $eflags
+    ; GISEL-X86-NEXT: $al = COPY [[SETCCr]]
+    ; GISEL-X86-NEXT: RET 0, implicit $al
     %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
     %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
     %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
-    %6:_(s8) = G_FCMP floatpred(one), %2(s64), %1
-    $al = COPY %6(s8)
+    %4:_(s8) = G_FCMP floatpred(one), %2(s64), %1
+    $al = COPY %4(s8)
     RET 0, implicit $al
 
 ...
@@ -2108,83 +251,26 @@ name:            fcmp_double_ord
 alignment:       16
 exposesReturnsTwice: false
 legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
 tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-  - { id: 7, class: _, preferred-register: '', flags: [  ] }
-  - { id: 8, class: _, preferred-register: '', flags: [  ] }
-  - { id: 9, class: _, preferred-register: '', flags: [  ] }
-  - { id: 10, class: _, preferred-register: '', flags: [  ] }
-  - { id: 11, class: _, preferred-register: '', flags: [  ] }
-  - { id: 12, class: _, preferred-register: '', flags: [  ] }
-  - { id: 13, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
 fixedStack:
   - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
       isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
 stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
 body:             |
   bb.1 (%ir-block.0):
+    ; GISEL-X86-LABEL: name: fcmp_double_ord
+    ; GISEL-X86: [[LD_Fp64m:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0)
+    ; GISEL-X86-NEXT: [[LD_Fp64m1:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0 + 8)
+    ; GISEL-X86-NEXT: UCOM_FpIr64 [[LD_Fp64m]], [[LD_Fp64m1]], implicit-def $eflags, implicit-def $fpsw, implicit $fpcw
+    ; GISEL-X86-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 11, implicit $eflags
+    ; GISEL-X86-NEXT: $al = COPY [[SETCCr]]
+    ; GISEL-X86-NEXT: RET 0, implicit $al
     %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
     %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
     %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
-    %6:_(s8) = G_FCMP floatpred(ord), %2(s64), %1
-    $al = COPY %6(s8)
+    %4:_(s8) = G_FCMP floatpred(ord), %2(s64), %1
+    $al = COPY %4(s8)
     RET 0, implicit $al
 
 ...
@@ -2193,83 +279,25 @@ name:            fcmp_double_uno
 alignment:       16
 exposesReturnsTwice: false
 legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
-tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-  - { id: 7, class: _, preferred-register: '', flags: [  ] }
-  - { id: 8, class: _, preferred-register: '', flags: [  ] }
-  - { id: 9, class: _, preferred-register: '', flags: [  ] }
-  - { id: 10, class: _, preferred-register: '', flags: [  ] }
-  - { id: 11, class: _, preferred-register: '', flags: [  ] }
-  - { id: 12, class: _, preferred-register: '', flags: [  ] }
-  - { id: 13, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
 fixedStack:
   - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
       isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
 stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
 body:             |
   bb.1 (%ir-block.0):
+    ; GISEL-X86-LABEL: name: fcmp_double_uno
+    ; GISEL-X86: [[LD_Fp64m:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0)
+    ; GISEL-X86-NEXT: [[LD_Fp64m1:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0 + 8)
+    ; GISEL-X86-NEXT: UCOM_FpIr64 [[LD_Fp64m]], [[LD_Fp64m1]], implicit-def $eflags, implicit-def $fpsw, implicit $fpcw
+    ; GISEL-X86-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 10, implicit $eflags
+    ; GISEL-X86-NEXT: $al = COPY [[SETCCr]]
+    ; GISEL-X86-NEXT: RET 0, implicit $al
     %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
     %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
     %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
-    %6:_(s8) = G_FCMP floatpred(uno), %2(s64), %1
-    $al = COPY %6(s8)
+    %4:_(s8) = G_FCMP floatpred(uno), %2(s64), %1
+    $al = COPY %4(s8)
     RET 0, implicit $al
 
 ...
@@ -2278,83 +306,26 @@ name:            fcmp_double_ueq
 alignment:       16
 exposesReturnsTwice: false
 legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
 tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-  - { id: 7, class: _, preferred-register: '', flags: [  ] }
-  - { id: 8, class: _, preferred-register: '', flags: [  ] }
-  - { id: 9, class: _, preferred-register: '', flags: [  ] }
-  - { id: 10, class: _, preferred-register: '', flags: [  ] }
-  - { id: 11, class: _, preferred-register: '', flags: [  ] }
-  - { id: 12, class: _, preferred-register: '', flags: [  ] }
-  - { id: 13, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
 fixedStack:
   - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
       isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
 stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
 body:             |
   bb.1 (%ir-block.0):
+    ; GISEL-X86-LABEL: name: fcmp_double_ueq
+    ; GISEL-X86: [[LD_Fp64m:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0)
+    ; GISEL-X86-NEXT: [[LD_Fp64m1:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0 + 8)
+    ; GISEL-X86-NEXT: UCOM_FpIr64 [[LD_Fp64m]], [[LD_Fp64m1]], implicit-def $eflags, implicit-def $fpsw, implicit $fpcw
+    ; GISEL-X86-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 4, implicit $eflags
+    ; GISEL-X86-NEXT: $al = COPY [[SETCCr]]
+    ; GISEL-X86-NEXT: RET 0, implicit $al
     %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
     %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
     %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
-    %6:_(s8) = G_FCMP floatpred(ueq), %2(s64), %1
-    $al = COPY %6(s8)
+    %4:_(s8) = G_FCMP floatpred(ueq), %2(s64), %1
+    $al = COPY %4(s8)
     RET 0, implicit $al
 
 ...
@@ -2363,83 +334,27 @@ name:            fcmp_double_ugt
 alignment:       16
 exposesReturnsTwice: false
 legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
 tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-  - { id: 7, class: _, preferred-register: '', flags: [  ] }
-  - { id: 8, class: _, preferred-register: '', flags: [  ] }
-  - { id: 9, class: _, preferred-register: '', flags: [  ] }
-  - { id: 10, class: _, preferred-register: '', flags: [  ] }
-  - { id: 11, class: _, preferred-register: '', flags: [  ] }
-  - { id: 12, class: _, preferred-register: '', flags: [  ] }
-  - { id: 13, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
 fixedStack:
   - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
       isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+
 stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
 body:             |
   bb.1 (%ir-block.0):
+    ; GISEL-X86-LABEL: name: fcmp_double_ugt
+    ; GISEL-X86: [[LD_Fp64m:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0)
+    ; GISEL-X86-NEXT: [[LD_Fp64m1:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0 + 8)
+    ; GISEL-X86-NEXT: UCOM_FpIr64 [[LD_Fp64m1]], [[LD_Fp64m]], implicit-def $eflags, implicit-def $fpsw, implicit $fpcw
+    ; GISEL-X86-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 2, implicit $eflags
+    ; GISEL-X86-NEXT: $al = COPY [[SETCCr]]
+    ; GISEL-X86-NEXT: RET 0, implicit $al
     %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
     %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
     %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
-    %6:_(s8) = G_FCMP floatpred(ugt), %2(s64), %1
-    $al = COPY %6(s8)
+    %4:_(s8) = G_FCMP floatpred(ugt), %2(s64), %1
+    $al = COPY %4(s8)
     RET 0, implicit $al
 
 ...
@@ -2448,83 +363,26 @@ name:            fcmp_double_uge
 alignment:       16
 exposesReturnsTwice: false
 legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
 tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-  - { id: 7, class: _, preferred-register: '', flags: [  ] }
-  - { id: 8, class: _, preferred-register: '', flags: [  ] }
-  - { id: 9, class: _, preferred-register: '', flags: [  ] }
-  - { id: 10, class: _, preferred-register: '', flags: [  ] }
-  - { id: 11, class: _, preferred-register: '', flags: [  ] }
-  - { id: 12, class: _, preferred-register: '', flags: [  ] }
-  - { id: 13, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
 fixedStack:
   - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
       isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
 stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
 body:             |
   bb.1 (%ir-block.0):
+    ; GISEL-X86-LABEL: name: fcmp_double_uge
+    ; GISEL-X86: [[LD_Fp64m:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0)
+    ; GISEL-X86-NEXT: [[LD_Fp64m1:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0 + 8)
+    ; GISEL-X86-NEXT: UCOM_FpIr64 [[LD_Fp64m1]], [[LD_Fp64m]], implicit-def $eflags, implicit-def $fpsw, implicit $fpcw
+    ; GISEL-X86-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 6, implicit $eflags
+    ; GISEL-X86-NEXT: $al = COPY [[SETCCr]]
+    ; GISEL-X86-NEXT: RET 0, implicit $al
     %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
     %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
     %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
-    %6:_(s8) = G_FCMP floatpred(uge), %2(s64), %1
-    $al = COPY %6(s8)
+    %4:_(s8) = G_FCMP floatpred(uge), %2(s64), %1
+    $al = COPY %4(s8)
     RET 0, implicit $al
 
 ...
@@ -2533,83 +391,27 @@ name:            fcmp_double_ult
 alignment:       16
 exposesReturnsTwice: false
 legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
 tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-  - { id: 7, class: _, preferred-register: '', flags: [  ] }
-  - { id: 8, class: _, preferred-register: '', flags: [  ] }
-  - { id: 9, class: _, preferred-register: '', flags: [  ] }
-  - { id: 10, class: _, preferred-register: '', flags: [  ] }
-  - { id: 11, class: _, preferred-register: '', flags: [  ] }
-  - { id: 12, class: _, preferred-register: '', flags: [  ] }
-  - { id: 13, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
+
 fixedStack:
   - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
       isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
 stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
 body:             |
   bb.1 (%ir-block.0):
+    ; GISEL-X86-LABEL: name: fcmp_double_ult
+    ; GISEL-X86: [[LD_Fp64m:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0)
+    ; GISEL-X86-NEXT: [[LD_Fp64m1:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0 + 8)
+    ; GISEL-X86-NEXT: UCOM_FpIr64 [[LD_Fp64m]], [[LD_Fp64m1]], implicit-def $eflags, implicit-def $fpsw, implicit $fpcw
+    ; GISEL-X86-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 2, implicit $eflags
+    ; GISEL-X86-NEXT: $al = COPY [[SETCCr]]
+    ; GISEL-X86-NEXT: RET 0, implicit $al
     %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
     %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
     %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
-    %6:_(s8) = G_FCMP floatpred(ult), %2(s64), %1
-    $al = COPY %6(s8)
+    %4:_(s8) = G_FCMP floatpred(ult), %2(s64), %1
+    $al = COPY %4(s8)
     RET 0, implicit $al
 
 ...
@@ -2618,83 +420,26 @@ name:            fcmp_double_ule
 alignment:       16
 exposesReturnsTwice: false
 legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
 tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-  - { id: 7, class: _, preferred-register: '', flags: [  ] }
-  - { id: 8, class: _, preferred-register: '', flags: [  ] }
-  - { id: 9, class: _, preferred-register: '', flags: [  ] }
-  - { id: 10, class: _, preferred-register: '', flags: [  ] }
-  - { id: 11, class: _, preferred-register: '', flags: [  ] }
-  - { id: 12, class: _, preferred-register: '', flags: [  ] }
-  - { id: 13, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
 fixedStack:
   - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
       isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
 stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
 body:             |
   bb.1 (%ir-block.0):
+    ; GISEL-X86-LABEL: name: fcmp_double_ule
+    ; GISEL-X86: [[LD_Fp64m:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0)
+    ; GISEL-X86-NEXT: [[LD_Fp64m1:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0 + 8)
+    ; GISEL-X86-NEXT: UCOM_FpIr64 [[LD_Fp64m]], [[LD_Fp64m1]], implicit-def $eflags, implicit-def $fpsw, implicit $fpcw
+    ; GISEL-X86-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 6, implicit $eflags
+    ; GISEL-X86-NEXT: $al = COPY [[SETCCr]]
+    ; GISEL-X86-NEXT: RET 0, implicit $al
     %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
     %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
     %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
-    %6:_(s8) = G_FCMP floatpred(ule), %2(s64), %1
-    $al = COPY %6(s8)
+    %4:_(s8) = G_FCMP floatpred(ule), %2(s64), %1
+    $al = COPY %4(s8)
     RET 0, implicit $al
 
 ...
@@ -2703,82 +448,26 @@ name:            fcmp_double_une
 alignment:       16
 exposesReturnsTwice: false
 legalized:       true
-regBankSelected: false
-selected:        false
-failedISel:      false
 tracksRegLiveness: true
-hasWinCFI:       false
-noPhis:          false
-isSSA:           true
-noVRegs:         false
-hasFakeUses:     false
-callsEHReturn:   false
-callsUnwindInit: false
-hasEHCatchret:   false
-hasEHScopes:     false
-hasEHFunclets:   false
-isOutlined:      false
-debugInstrRef:   false
-failsVerification: false
-tracksDebugUserValues: false
-registers:
-  - { id: 0, class: _, preferred-register: '', flags: [  ] }
-  - { id: 1, class: _, preferred-register: '', flags: [  ] }
-  - { id: 2, class: _, preferred-register: '', flags: [  ] }
-  - { id: 3, class: _, preferred-register: '', flags: [  ] }
-  - { id: 4, class: _, preferred-register: '', flags: [  ] }
-  - { id: 5, class: _, preferred-register: '', flags: [  ] }
-  - { id: 6, class: _, preferred-register: '', flags: [  ] }
-  - { id: 7, class: _, preferred-register: '', flags: [  ] }
-  - { id: 8, class: _, preferred-register: '', flags: [  ] }
-  - { id: 9, class: _, preferred-register: '', flags: [  ] }
-  - { id: 10, class: _, preferred-register: '', flags: [  ] }
-  - { id: 11, class: _, preferred-register: '', flags: [  ] }
-  - { id: 12, class: _, preferred-register: '', flags: [  ] }
-  - { id: 13, class: _, preferred-register: '', flags: [  ] }
-liveins:         []
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    4
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  functionContext: ''
-  maxCallFrameSize: 4294967295
-  cvBytesOfCalleeSavedRegisters: 0
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  hasTailCall:     false
-  isCalleeSavedInfoValid: false
-  localFrameSize:  0
-  savePoint:       ''
-  restorePoint:    ''
 fixedStack:
   - { id: 0, type: default, offset: 8, size: 8, alignment: 8, stack-id: default,
       isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-  - { id: 1, type: default, offset: 0, size: 8, alignment: 16, stack-id: default,
-      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
-      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-stack:           []
-entry_values:    []
-callSites:       []
-debugValueSubstitutions: []
-constants:       []
-machineFunctionInfo:
-  amxProgModel:    None
 body:             |
   bb.1 (%ir-block.0):
+    ; GISEL-X86-LABEL: name: fcmp_double_une
+    ; GISEL-X86: [[LD_Fp64m:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0)
+    ; GISEL-X86-NEXT: [[LD_Fp64m1:%[0-9]+]]:rfp64 = LD_Fp64m %fixed-stack.0, 1, $noreg, 0, $noreg, implicit-def $fpsw, implicit $fpcw :: (invariant load (s64) from %fixed-stack.0 + 8)
+    ; GISEL-X86-NEXT: UCOM_FpIr64 [[LD_Fp64m]], [[LD_Fp64m1]], implicit-def $eflags, implicit-def $fpsw, implicit $fpcw
+    ; GISEL-X86-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 5, implicit $eflags
+    ; GISEL-X86-NEXT: [[SETCCr1:%[0-9]+]]:gr8 = SETCCr 10, implicit $eflags
+    ; GISEL-X86-NEXT: [[OR8rr:%[0-9]+]]:gr8 = OR8rr [[SETCCr]], [[SETCCr1]], implicit-def $eflags
+    ; GISEL-X86-NEXT: $al = COPY [[OR8rr]]
+    ; GISEL-X86-NEXT: RET 0, implicit $al
     %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
     %2:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0, align 8)
     %1:_(s64) = G_LOAD %3(p0) :: (invariant load (s64) from %fixed-stack.0 + 8, basealign 8)
-    %6:_(s8) = G_FCMP floatpred(une), %2(s64), %1
-    $al = COPY %6(s8)
+    %4:_(s8) = G_FCMP floatpred(une), %2(s64), %1
+    $al = COPY %4(s8)
     RET 0, implicit $al
 ...
diff --git a/llvm/test/CodeGen/X86/isel-fcmp-x87.ll b/llvm/test/CodeGen/X86/isel-fcmp-x87.ll
index 5324f816db8a86..8c2a53082649a5 100644
--- a/llvm/test/CodeGen/X86/isel-fcmp-x87.ll
+++ b/llvm/test/CodeGen/X86/isel-fcmp-x87.ll
@@ -1,34 +1,23 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc < %s                               -mtriple=x86_64-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefix=SDAG-X64
-; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefix=FAST-X64
+; RUN: llc < %s                               -mtriple=x86_64-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefixes=X64,SDAG-X64
+; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefixes=X64,FAST-X64
 ; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefixes=GISEL-X64
-; RUN: llc < %s                               -mtriple=i686-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefixes=SDAG-X86
+; RUN: llc < %s                               -mtriple=i686-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefixes=X86,SDAG-X86
 ; Allow fast-isel to fallback to selection dag on x86
-; RUN: llc < %s -fast-isel -mtriple=i686-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefixes=FAST-X86
+; RUN: llc < %s -fast-isel -mtriple=i686-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefixes=X86,FAST-X86
 ; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=i686-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefixes=GISEL-X86
 
   define i1 @fcmp_x86_fp80_oeq(x86_fp80 %x, x86_fp80 %y) nounwind {
-; SDAG-X64-LABEL: fcmp_x86_fp80_oeq:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SDAG-X64-NEXT:    fucompi %st(1), %st
-; SDAG-X64-NEXT:    fstp %st(0)
-; SDAG-X64-NEXT:    setnp %cl
-; SDAG-X64-NEXT:    sete %al
-; SDAG-X64-NEXT:    andb %cl, %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_x86_fp80_oeq:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; FAST-X64-NEXT:    fucompi %st(1), %st
-; FAST-X64-NEXT:    fstp %st(0)
-; FAST-X64-NEXT:    setnp %cl
-; FAST-X64-NEXT:    sete %al
-; FAST-X64-NEXT:    andb %cl, %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_x86_fp80_oeq:
+; X64:       ## %bb.0:
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fucompi %st(1), %st
+; X64-NEXT:    fstp %st(0)
+; X64-NEXT:    setnp %cl
+; X64-NEXT:    sete %al
+; X64-NEXT:    andb %cl, %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_x86_fp80_oeq:
 ; GISEL-X64:       ## %bb.0:
@@ -42,35 +31,20 @@
 ; GISEL-X64-NEXT:    andb %cl, %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_x86_fp80_oeq:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setnp %cl
-; SDAG-X86-NEXT:    sete %al
-; SDAG-X86-NEXT:    andb %cl, %al
-; SDAG-X86-NEXT:    addl $12, %esp
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_x86_fp80_oeq:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setnp %cl
-; FAST-X86-NEXT:    sete %al
-; FAST-X86-NEXT:    andb %cl, %al
-; FAST-X86-NEXT:    addl $12, %esp
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_x86_fp80_oeq:
+; X86:       ## %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setnp %cl
+; X86-NEXT:    sete %al
+; X86-NEXT:    andb %cl, %al
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
 ;
 ; GISEL-X86-LABEL: fcmp_x86_fp80_oeq:
 ; GISEL-X86:       ## %bb.0:
@@ -90,23 +64,14 @@
   }
 
   define i1 @fcmp_x86_fp80_ogt(x86_fp80 %x, x86_fp80 %y) nounwind {
-; SDAG-X64-LABEL: fcmp_x86_fp80_ogt:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SDAG-X64-NEXT:    fucompi %st(1), %st
-; SDAG-X64-NEXT:    fstp %st(0)
-; SDAG-X64-NEXT:    seta %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_x86_fp80_ogt:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; FAST-X64-NEXT:    fucompi %st(1), %st
-; FAST-X64-NEXT:    fstp %st(0)
-; FAST-X64-NEXT:    seta %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_x86_fp80_ogt:
+; X64:       ## %bb.0:
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fucompi %st(1), %st
+; X64-NEXT:    fstp %st(0)
+; X64-NEXT:    seta %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_x86_fp80_ogt:
 ; GISEL-X64:       ## %bb.0:
@@ -118,31 +83,18 @@
 ; GISEL-X64-NEXT:    seta %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_x86_fp80_ogt:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    seta %al
-; SDAG-X86-NEXT:    addl $12, %esp
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_x86_fp80_ogt:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    seta %al
-; FAST-X86-NEXT:    addl $12, %esp
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_x86_fp80_ogt:
+; X86:       ## %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    seta %al
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
 ;
 ; GISEL-X86-LABEL: fcmp_x86_fp80_ogt:
 ; GISEL-X86:       ## %bb.0:
@@ -160,23 +112,14 @@
   }
 
   define i1 @fcmp_x86_fp80_oge(x86_fp80 %x, x86_fp80 %y) nounwind {
-; SDAG-X64-LABEL: fcmp_x86_fp80_oge:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SDAG-X64-NEXT:    fucompi %st(1), %st
-; SDAG-X64-NEXT:    fstp %st(0)
-; SDAG-X64-NEXT:    setae %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_x86_fp80_oge:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; FAST-X64-NEXT:    fucompi %st(1), %st
-; FAST-X64-NEXT:    fstp %st(0)
-; FAST-X64-NEXT:    setae %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_x86_fp80_oge:
+; X64:       ## %bb.0:
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fucompi %st(1), %st
+; X64-NEXT:    fstp %st(0)
+; X64-NEXT:    setae %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_x86_fp80_oge:
 ; GISEL-X64:       ## %bb.0:
@@ -188,31 +131,18 @@
 ; GISEL-X64-NEXT:    setae %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_x86_fp80_oge:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setae %al
-; SDAG-X86-NEXT:    addl $12, %esp
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_x86_fp80_oge:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setae %al
-; FAST-X86-NEXT:    addl $12, %esp
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_x86_fp80_oge:
+; X86:       ## %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setae %al
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
 ;
 ; GISEL-X86-LABEL: fcmp_x86_fp80_oge:
 ; GISEL-X86:       ## %bb.0:
@@ -370,23 +300,14 @@
   }
 
   define i1 @fcmp_x86_fp80_one(x86_fp80 %x, x86_fp80 %y) nounwind {
-; SDAG-X64-LABEL: fcmp_x86_fp80_one:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SDAG-X64-NEXT:    fucompi %st(1), %st
-; SDAG-X64-NEXT:    fstp %st(0)
-; SDAG-X64-NEXT:    setne %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_x86_fp80_one:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; FAST-X64-NEXT:    fucompi %st(1), %st
-; FAST-X64-NEXT:    fstp %st(0)
-; FAST-X64-NEXT:    setne %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_x86_fp80_one:
+; X64:       ## %bb.0:
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fucompi %st(1), %st
+; X64-NEXT:    fstp %st(0)
+; X64-NEXT:    setne %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_x86_fp80_one:
 ; GISEL-X64:       ## %bb.0:
@@ -398,31 +319,18 @@
 ; GISEL-X64-NEXT:    setne %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_x86_fp80_one:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setne %al
-; SDAG-X86-NEXT:    addl $12, %esp
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_x86_fp80_one:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setne %al
-; FAST-X86-NEXT:    addl $12, %esp
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_x86_fp80_one:
+; X86:       ## %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setne %al
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
 ;
 ; GISEL-X86-LABEL: fcmp_x86_fp80_one:
 ; GISEL-X86:       ## %bb.0:
@@ -440,23 +348,14 @@
   }
 
   define i1 @fcmp_x86_fp80_ord(x86_fp80 %x, x86_fp80 %y) nounwind {
-; SDAG-X64-LABEL: fcmp_x86_fp80_ord:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SDAG-X64-NEXT:    fucompi %st(1), %st
-; SDAG-X64-NEXT:    fstp %st(0)
-; SDAG-X64-NEXT:    setnp %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_x86_fp80_ord:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; FAST-X64-NEXT:    fucompi %st(1), %st
-; FAST-X64-NEXT:    fstp %st(0)
-; FAST-X64-NEXT:    setnp %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_x86_fp80_ord:
+; X64:       ## %bb.0:
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fucompi %st(1), %st
+; X64-NEXT:    fstp %st(0)
+; X64-NEXT:    setnp %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_x86_fp80_ord:
 ; GISEL-X64:       ## %bb.0:
@@ -468,31 +367,18 @@
 ; GISEL-X64-NEXT:    setnp %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_x86_fp80_ord:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setnp %al
-; SDAG-X86-NEXT:    addl $12, %esp
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_x86_fp80_ord:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setnp %al
-; FAST-X86-NEXT:    addl $12, %esp
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_x86_fp80_ord:
+; X86:       ## %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setnp %al
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
 ;
 ; GISEL-X86-LABEL: fcmp_x86_fp80_ord:
 ; GISEL-X86:       ## %bb.0:
@@ -510,23 +396,14 @@
   }
 
   define i1 @fcmp_x86_fp80_uno(x86_fp80 %x, x86_fp80 %y) nounwind {
-; SDAG-X64-LABEL: fcmp_x86_fp80_uno:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SDAG-X64-NEXT:    fucompi %st(1), %st
-; SDAG-X64-NEXT:    fstp %st(0)
-; SDAG-X64-NEXT:    setp %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_x86_fp80_uno:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; FAST-X64-NEXT:    fucompi %st(1), %st
-; FAST-X64-NEXT:    fstp %st(0)
-; FAST-X64-NEXT:    setp %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_x86_fp80_uno:
+; X64:       ## %bb.0:
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fucompi %st(1), %st
+; X64-NEXT:    fstp %st(0)
+; X64-NEXT:    setp %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_x86_fp80_uno:
 ; GISEL-X64:       ## %bb.0:
@@ -538,31 +415,18 @@
 ; GISEL-X64-NEXT:    setp %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_x86_fp80_uno:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setp %al
-; SDAG-X86-NEXT:    addl $12, %esp
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_x86_fp80_uno:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setp %al
-; FAST-X86-NEXT:    addl $12, %esp
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_x86_fp80_uno:
+; X86:       ## %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setp %al
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
 ;
 ; GISEL-X86-LABEL: fcmp_x86_fp80_uno:
 ; GISEL-X86:       ## %bb.0:
@@ -580,23 +444,14 @@
   }
 
   define i1 @fcmp_x86_fp80_ueq(x86_fp80 %x, x86_fp80 %y) nounwind {
-; SDAG-X64-LABEL: fcmp_x86_fp80_ueq:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SDAG-X64-NEXT:    fucompi %st(1), %st
-; SDAG-X64-NEXT:    fstp %st(0)
-; SDAG-X64-NEXT:    sete %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_x86_fp80_ueq:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; FAST-X64-NEXT:    fucompi %st(1), %st
-; FAST-X64-NEXT:    fstp %st(0)
-; FAST-X64-NEXT:    sete %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_x86_fp80_ueq:
+; X64:       ## %bb.0:
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fucompi %st(1), %st
+; X64-NEXT:    fstp %st(0)
+; X64-NEXT:    sete %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_x86_fp80_ueq:
 ; GISEL-X64:       ## %bb.0:
@@ -608,31 +463,18 @@
 ; GISEL-X64-NEXT:    sete %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_x86_fp80_ueq:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    sete %al
-; SDAG-X86-NEXT:    addl $12, %esp
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_x86_fp80_ueq:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    sete %al
-; FAST-X86-NEXT:    addl $12, %esp
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_x86_fp80_ueq:
+; X86:       ## %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    sete %al
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
 ;
 ; GISEL-X86-LABEL: fcmp_x86_fp80_ueq:
 ; GISEL-X86:       ## %bb.0:
@@ -790,23 +632,14 @@
   }
 
   define i1 @fcmp_x86_fp80_ult(x86_fp80 %x, x86_fp80 %y) nounwind {
-; SDAG-X64-LABEL: fcmp_x86_fp80_ult:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SDAG-X64-NEXT:    fucompi %st(1), %st
-; SDAG-X64-NEXT:    fstp %st(0)
-; SDAG-X64-NEXT:    setb %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_x86_fp80_ult:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; FAST-X64-NEXT:    fucompi %st(1), %st
-; FAST-X64-NEXT:    fstp %st(0)
-; FAST-X64-NEXT:    setb %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_x86_fp80_ult:
+; X64:       ## %bb.0:
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fucompi %st(1), %st
+; X64-NEXT:    fstp %st(0)
+; X64-NEXT:    setb %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_x86_fp80_ult:
 ; GISEL-X64:       ## %bb.0:
@@ -818,195 +651,846 @@
 ; GISEL-X64-NEXT:    setb %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_x86_fp80_ult:
+; X86-LABEL: fcmp_x86_fp80_ult:
+; X86:       ## %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setb %al
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_x86_fp80_ult:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setb %al
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp ult x86_fp80 %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_x86_fp80_ule(x86_fp80 %x, x86_fp80 %y) nounwind {
+; X64-LABEL: fcmp_x86_fp80_ule:
+; X64:       ## %bb.0:
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fucompi %st(1), %st
+; X64-NEXT:    fstp %st(0)
+; X64-NEXT:    setbe %al
+; X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_x86_fp80_ule:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    setbe %al
+; GISEL-X64-NEXT:    retq
+;
+; X86-LABEL: fcmp_x86_fp80_ule:
+; X86:       ## %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setbe %al
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_x86_fp80_ule:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setbe %al
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp ule x86_fp80 %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_x86_fp80_une(x86_fp80 %x, x86_fp80 %y) nounwind {
+; X64-LABEL: fcmp_x86_fp80_une:
+; X64:       ## %bb.0:
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fucompi %st(1), %st
+; X64-NEXT:    fstp %st(0)
+; X64-NEXT:    setp %cl
+; X64-NEXT:    setne %al
+; X64-NEXT:    orb %cl, %al
+; X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_x86_fp80_une:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    setne %cl
+; GISEL-X64-NEXT:    setp %al
+; GISEL-X64-NEXT:    orb %cl, %al
+; GISEL-X64-NEXT:    retq
+;
+; X86-LABEL: fcmp_x86_fp80_une:
+; X86:       ## %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setp %cl
+; X86-NEXT:    setne %al
+; X86-NEXT:    orb %cl, %al
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_x86_fp80_une:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setne %cl
+; GISEL-X86-NEXT:    setp %al
+; GISEL-X86-NEXT:    orb %cl, %al
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp une x86_fp80 %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_oeq(float %x, float %y) {
+; X64-LABEL: fcmp_float_oeq:
+; X64:       ## %bb.0:
+; X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; X64-NEXT:    fucompi %st(1), %st
+; X64-NEXT:    fstp %st(0)
+; X64-NEXT:    setnp %cl
+; X64-NEXT:    sete %al
+; X64-NEXT:    andb %cl, %al
+; X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_oeq:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    sete %cl
+; GISEL-X64-NEXT:    setnp %al
+; GISEL-X64-NEXT:    andb %cl, %al
+; GISEL-X64-NEXT:    retq
+;
+; X86-LABEL: fcmp_float_oeq:
+; X86:       ## %bb.0:
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setnp %cl
+; X86-NEXT:    sete %al
+; X86-NEXT:    andb %cl, %al
+; X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_float_oeq:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    sete %cl
+; GISEL-X86-NEXT:    setnp %al
+; GISEL-X86-NEXT:    andb %cl, %al
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp oeq float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_ogt(float %x, float %y) {
+; X64-LABEL: fcmp_float_ogt:
+; X64:       ## %bb.0:
+; X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; X64-NEXT:    fucompi %st(1), %st
+; X64-NEXT:    fstp %st(0)
+; X64-NEXT:    seta %al
+; X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_ogt:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    seta %al
+; GISEL-X64-NEXT:    retq
+;
+; X86-LABEL: fcmp_float_ogt:
+; X86:       ## %bb.0:
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    seta %al
+; X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_float_ogt:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    seta %al
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp ogt float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_oge(float %x, float %y) {
+; X64-LABEL: fcmp_float_oge:
+; X64:       ## %bb.0:
+; X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; X64-NEXT:    fucompi %st(1), %st
+; X64-NEXT:    fstp %st(0)
+; X64-NEXT:    setae %al
+; X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_oge:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    setae %al
+; GISEL-X64-NEXT:    retq
+;
+; X86-LABEL: fcmp_float_oge:
+; X86:       ## %bb.0:
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setae %al
+; X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_float_oge:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setae %al
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp oge float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_olt(float %x, float %y) {
+; SDAG-X64-LABEL: fcmp_float_olt:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fucompi %st(1), %st
+; SDAG-X64-NEXT:    fstp %st(0)
+; SDAG-X64-NEXT:    seta %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_float_olt:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fxch %st(1)
+; FAST-X64-NEXT:    fucompi %st(1), %st
+; FAST-X64-NEXT:    fstp %st(0)
+; FAST-X64-NEXT:    seta %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_olt:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    seta %al
+; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_float_olt:
 ; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fucompp
 ; SDAG-X86-NEXT:    fnstsw %ax
 ; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
 ; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setb %al
-; SDAG-X86-NEXT:    addl $12, %esp
+; SDAG-X86-NEXT:    seta %al
 ; SDAG-X86-NEXT:    retl
 ;
-; FAST-X86-LABEL: fcmp_x86_fp80_ult:
+; FAST-X86-LABEL: fcmp_float_olt:
 ; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fxch %st(1)
 ; FAST-X86-NEXT:    fucompp
 ; FAST-X86-NEXT:    fnstsw %ax
 ; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
 ; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setb %al
-; FAST-X86-NEXT:    addl $12, %esp
+; FAST-X86-NEXT:    seta %al
 ; FAST-X86-NEXT:    retl
 ;
-; GISEL-X86-LABEL: fcmp_x86_fp80_ult:
+; GISEL-X86-LABEL: fcmp_float_olt:
 ; GISEL-X86:       ## %bb.0:
-; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fucompi %st(1), %st
 ; GISEL-X86-NEXT:    fstp %st(0)
-; GISEL-X86-NEXT:    setb %al
-; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    seta %al
 ; GISEL-X86-NEXT:    retl
-    %1 = fcmp ult x86_fp80 %x, %y
+    %1 = fcmp olt float %x, %y
     ret i1 %1
   }
 
-  define i1 @fcmp_x86_fp80_ule(x86_fp80 %x, x86_fp80 %y) nounwind {
-; SDAG-X64-LABEL: fcmp_x86_fp80_ule:
+  define i1 @fcmp_float_ole(float %x, float %y) {
+; SDAG-X64-LABEL: fcmp_float_ole:
 ; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    flds {{[0-9]+}}(%rsp)
 ; SDAG-X64-NEXT:    fucompi %st(1), %st
 ; SDAG-X64-NEXT:    fstp %st(0)
-; SDAG-X64-NEXT:    setbe %al
+; SDAG-X64-NEXT:    setae %al
 ; SDAG-X64-NEXT:    retq
 ;
-; FAST-X64-LABEL: fcmp_x86_fp80_ule:
+; FAST-X64-LABEL: fcmp_float_ole:
 ; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fxch %st(1)
 ; FAST-X64-NEXT:    fucompi %st(1), %st
 ; FAST-X64-NEXT:    fstp %st(0)
-; FAST-X64-NEXT:    setbe %al
+; FAST-X64-NEXT:    setae %al
 ; FAST-X64-NEXT:    retq
 ;
-; GISEL-X64-LABEL: fcmp_x86_fp80_ule:
+; GISEL-X64-LABEL: fcmp_float_ole:
 ; GISEL-X64:       ## %bb.0:
-; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
 ; GISEL-X64-NEXT:    fucompi %st(1), %st
 ; GISEL-X64-NEXT:    fstp %st(0)
-; GISEL-X64-NEXT:    setbe %al
+; GISEL-X64-NEXT:    setae %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_x86_fp80_ule:
+; SDAG-X86-LABEL: fcmp_float_ole:
 ; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fucompp
 ; SDAG-X86-NEXT:    fnstsw %ax
 ; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
 ; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setbe %al
-; SDAG-X86-NEXT:    addl $12, %esp
+; SDAG-X86-NEXT:    setae %al
 ; SDAG-X86-NEXT:    retl
 ;
-; FAST-X86-LABEL: fcmp_x86_fp80_ule:
+; FAST-X86-LABEL: fcmp_float_ole:
 ; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fxch %st(1)
 ; FAST-X86-NEXT:    fucompp
 ; FAST-X86-NEXT:    fnstsw %ax
 ; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
 ; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setbe %al
-; FAST-X86-NEXT:    addl $12, %esp
+; FAST-X86-NEXT:    setae %al
 ; FAST-X86-NEXT:    retl
 ;
-; GISEL-X86-LABEL: fcmp_x86_fp80_ule:
+; GISEL-X86-LABEL: fcmp_float_ole:
 ; GISEL-X86:       ## %bb.0:
-; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setae %al
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp ole float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_one(float %x, float %y) {
+; X64-LABEL: fcmp_float_one:
+; X64:       ## %bb.0:
+; X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; X64-NEXT:    fucompi %st(1), %st
+; X64-NEXT:    fstp %st(0)
+; X64-NEXT:    setne %al
+; X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_one:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    setne %al
+; GISEL-X64-NEXT:    retq
+;
+; X86-LABEL: fcmp_float_one:
+; X86:       ## %bb.0:
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setne %al
+; X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_float_one:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fxch %st(1)
 ; GISEL-X86-NEXT:    fucompi %st(1), %st
 ; GISEL-X86-NEXT:    fstp %st(0)
-; GISEL-X86-NEXT:    setbe %al
-; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    setne %al
 ; GISEL-X86-NEXT:    retl
-    %1 = fcmp ule x86_fp80 %x, %y
+    %1 = fcmp one float %x, %y
     ret i1 %1
   }
 
-  define i1 @fcmp_x86_fp80_une(x86_fp80 %x, x86_fp80 %y) nounwind {
-; SDAG-X64-LABEL: fcmp_x86_fp80_une:
+  define i1 @fcmp_float_ord(float %x, float %y) {
+; X64-LABEL: fcmp_float_ord:
+; X64:       ## %bb.0:
+; X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; X64-NEXT:    fucompi %st(1), %st
+; X64-NEXT:    fstp %st(0)
+; X64-NEXT:    setnp %al
+; X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_ord:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    setnp %al
+; GISEL-X64-NEXT:    retq
+;
+; X86-LABEL: fcmp_float_ord:
+; X86:       ## %bb.0:
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setnp %al
+; X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_float_ord:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setnp %al
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp ord float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_uno(float %x, float %y) {
+; X64-LABEL: fcmp_float_uno:
+; X64:       ## %bb.0:
+; X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; X64-NEXT:    fucompi %st(1), %st
+; X64-NEXT:    fstp %st(0)
+; X64-NEXT:    setp %al
+; X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_uno:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    setp %al
+; GISEL-X64-NEXT:    retq
+;
+; X86-LABEL: fcmp_float_uno:
+; X86:       ## %bb.0:
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setp %al
+; X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_float_uno:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setp %al
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp uno float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_ueq(float %x, float %y) {
+; X64-LABEL: fcmp_float_ueq:
+; X64:       ## %bb.0:
+; X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; X64-NEXT:    fucompi %st(1), %st
+; X64-NEXT:    fstp %st(0)
+; X64-NEXT:    sete %al
+; X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_ueq:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    sete %al
+; GISEL-X64-NEXT:    retq
+;
+; X86-LABEL: fcmp_float_ueq:
+; X86:       ## %bb.0:
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    sete %al
+; X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_float_ueq:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    sete %al
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp ueq float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_ugt(float %x, float %y) {
+; SDAG-X64-LABEL: fcmp_float_ugt:
 ; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SDAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    flds {{[0-9]+}}(%rsp)
 ; SDAG-X64-NEXT:    fucompi %st(1), %st
 ; SDAG-X64-NEXT:    fstp %st(0)
-; SDAG-X64-NEXT:    setp %cl
-; SDAG-X64-NEXT:    setne %al
-; SDAG-X64-NEXT:    orb %cl, %al
+; SDAG-X64-NEXT:    setb %al
 ; SDAG-X64-NEXT:    retq
 ;
-; FAST-X64-LABEL: fcmp_x86_fp80_une:
+; FAST-X64-LABEL: fcmp_float_ugt:
 ; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; FAST-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fxch %st(1)
 ; FAST-X64-NEXT:    fucompi %st(1), %st
 ; FAST-X64-NEXT:    fstp %st(0)
-; FAST-X64-NEXT:    setp %cl
-; FAST-X64-NEXT:    setne %al
-; FAST-X64-NEXT:    orb %cl, %al
+; FAST-X64-NEXT:    setb %al
 ; FAST-X64-NEXT:    retq
 ;
-; GISEL-X64-LABEL: fcmp_x86_fp80_une:
+; GISEL-X64-LABEL: fcmp_float_ugt:
 ; GISEL-X64:       ## %bb.0:
-; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
-; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
 ; GISEL-X64-NEXT:    fucompi %st(1), %st
 ; GISEL-X64-NEXT:    fstp %st(0)
-; GISEL-X64-NEXT:    setne %cl
-; GISEL-X64-NEXT:    setp %al
-; GISEL-X64-NEXT:    orb %cl, %al
+; GISEL-X64-NEXT:    setb %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_x86_fp80_une:
+; SDAG-X86-LABEL: fcmp_float_ugt:
 ; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    subl $12, %esp
-; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
 ; SDAG-X86-NEXT:    fucompp
 ; SDAG-X86-NEXT:    fnstsw %ax
 ; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
 ; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setp %cl
-; SDAG-X86-NEXT:    setne %al
-; SDAG-X86-NEXT:    orb %cl, %al
-; SDAG-X86-NEXT:    addl $12, %esp
+; SDAG-X86-NEXT:    setb %al
 ; SDAG-X86-NEXT:    retl
 ;
-; FAST-X86-LABEL: fcmp_x86_fp80_une:
+; FAST-X86-LABEL: fcmp_float_ugt:
 ; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    subl $12, %esp
-; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fxch %st(1)
 ; FAST-X86-NEXT:    fucompp
 ; FAST-X86-NEXT:    fnstsw %ax
 ; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
 ; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setp %cl
-; FAST-X86-NEXT:    setne %al
-; FAST-X86-NEXT:    orb %cl, %al
-; FAST-X86-NEXT:    addl $12, %esp
+; FAST-X86-NEXT:    setb %al
 ; FAST-X86-NEXT:    retl
 ;
-; GISEL-X86-LABEL: fcmp_x86_fp80_une:
+; GISEL-X86-LABEL: fcmp_float_ugt:
 ; GISEL-X86:       ## %bb.0:
-; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
-; GISEL-X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setb %al
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp ugt float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_uge(float %x, float %y) {
+; SDAG-X64-LABEL: fcmp_float_uge:
+; SDAG-X64:       ## %bb.0:
+; SDAG-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; SDAG-X64-NEXT:    fucompi %st(1), %st
+; SDAG-X64-NEXT:    fstp %st(0)
+; SDAG-X64-NEXT:    setbe %al
+; SDAG-X64-NEXT:    retq
+;
+; FAST-X64-LABEL: fcmp_float_uge:
+; FAST-X64:       ## %bb.0:
+; FAST-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; FAST-X64-NEXT:    fxch %st(1)
+; FAST-X64-NEXT:    fucompi %st(1), %st
+; FAST-X64-NEXT:    fstp %st(0)
+; FAST-X64-NEXT:    setbe %al
+; FAST-X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_uge:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    setbe %al
+; GISEL-X64-NEXT:    retq
+;
+; SDAG-X86-LABEL: fcmp_float_uge:
+; SDAG-X86:       ## %bb.0:
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fucompp
+; SDAG-X86-NEXT:    fnstsw %ax
+; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; SDAG-X86-NEXT:    sahf
+; SDAG-X86-NEXT:    setbe %al
+; SDAG-X86-NEXT:    retl
+;
+; FAST-X86-LABEL: fcmp_float_uge:
+; FAST-X86:       ## %bb.0:
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fxch %st(1)
+; FAST-X86-NEXT:    fucompp
+; FAST-X86-NEXT:    fnstsw %ax
+; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; FAST-X86-NEXT:    sahf
+; FAST-X86-NEXT:    setbe %al
+; FAST-X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_float_uge:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setbe %al
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp uge float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_ult(float %x, float %y) {
+; X64-LABEL: fcmp_float_ult:
+; X64:       ## %bb.0:
+; X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; X64-NEXT:    fucompi %st(1), %st
+; X64-NEXT:    fstp %st(0)
+; X64-NEXT:    setb %al
+; X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_ult:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    setb %al
+; GISEL-X64-NEXT:    retq
+;
+; X86-LABEL: fcmp_float_ult:
+; X86:       ## %bb.0:
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setb %al
+; X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_float_ult:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setb %al
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp ult float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_ule(float %x, float %y) {
+; X64-LABEL: fcmp_float_ule:
+; X64:       ## %bb.0:
+; X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; X64-NEXT:    fucompi %st(1), %st
+; X64-NEXT:    fstp %st(0)
+; X64-NEXT:    setbe %al
+; X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_ule:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    setbe %al
+; GISEL-X64-NEXT:    retq
+;
+; X86-LABEL: fcmp_float_ule:
+; X86:       ## %bb.0:
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setbe %al
+; X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_float_ule:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fxch %st(1)
+; GISEL-X86-NEXT:    fucompi %st(1), %st
+; GISEL-X86-NEXT:    fstp %st(0)
+; GISEL-X86-NEXT:    setbe %al
+; GISEL-X86-NEXT:    retl
+    %1 = fcmp ule float %x, %y
+    ret i1 %1
+  }
+
+  define i1 @fcmp_float_une(float %x, float %y) {
+; X64-LABEL: fcmp_float_une:
+; X64:       ## %bb.0:
+; X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; X64-NEXT:    fucompi %st(1), %st
+; X64-NEXT:    fstp %st(0)
+; X64-NEXT:    setp %cl
+; X64-NEXT:    setne %al
+; X64-NEXT:    orb %cl, %al
+; X64-NEXT:    retq
+;
+; GISEL-X64-LABEL: fcmp_float_une:
+; GISEL-X64:       ## %bb.0:
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    flds {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fxch %st(1)
+; GISEL-X64-NEXT:    fucompi %st(1), %st
+; GISEL-X64-NEXT:    fstp %st(0)
+; GISEL-X64-NEXT:    setne %cl
+; GISEL-X64-NEXT:    setp %al
+; GISEL-X64-NEXT:    orb %cl, %al
+; GISEL-X64-NEXT:    retq
+;
+; X86-LABEL: fcmp_float_une:
+; X86:       ## %bb.0:
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setp %cl
+; X86-NEXT:    setne %al
+; X86-NEXT:    orb %cl, %al
+; X86-NEXT:    retl
+;
+; GISEL-X86-LABEL: fcmp_float_une:
+; GISEL-X86:       ## %bb.0:
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
 ; GISEL-X86-NEXT:    fxch %st(1)
 ; GISEL-X86-NEXT:    fucompi %st(1), %st
 ; GISEL-X86-NEXT:    fstp %st(0)
 ; GISEL-X86-NEXT:    setne %cl
 ; GISEL-X86-NEXT:    setp %al
 ; GISEL-X86-NEXT:    orb %cl, %al
-; GISEL-X86-NEXT:    addl $12, %esp
 ; GISEL-X86-NEXT:    retl
-    %1 = fcmp une x86_fp80 %x, %y
+    %1 = fcmp une float %x, %y
     ret i1 %1
   }
diff --git a/llvm/test/CodeGen/X86/isel-fcmp.ll b/llvm/test/CodeGen/X86/isel-fcmp.ll
index 8c609f6ef5fb10..4a223aaa4149b0 100644
--- a/llvm/test/CodeGen/X86/isel-fcmp.ll
+++ b/llvm/test/CodeGen/X86/isel-fcmp.ll
@@ -1,29 +1,21 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc < %s                               -mtriple=x86_64-apple-darwin10 -mattr=+sse,+sse2,-x87 -verify-machineinstrs | FileCheck %s --check-prefix=SDAG-X64
-; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=+sse,+sse2,-x87 -verify-machineinstrs | FileCheck %s --check-prefix=FAST-X64
+; RUN: llc < %s                               -mtriple=x86_64-apple-darwin10 -mattr=+sse,+sse2,-x87 -verify-machineinstrs | FileCheck %s --check-prefixes=X64,SDAG-X64
+; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=+sse,+sse2,-x87 -verify-machineinstrs | FileCheck %s --check-prefixes=X64,FAST-X64
 ; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=+sse,+sse2,-x87 -verify-machineinstrs | FileCheck %s --check-prefixes=GISEL-X64
 ; i686 with 64 bit store is issue.
-; RUN: llc < %s                               -mtriple=i686-apple-darwin10 -mattr=-sse,-sse2,+x87 -verify-machineinstrs | FileCheck %s --check-prefixes=SDAG-X86
+; RUN: llc < %s                               -mtriple=i686-apple-darwin10 -mattr=-sse,-sse2,+x87 -verify-machineinstrs | FileCheck %s --check-prefixes=X86,SDAG-X86
 ; Allow fast-isel to fallback to selection dag on x86
-; RUN: llc < %s -fast-isel -mtriple=i686-apple-darwin10 -mattr=-sse,-sse2,+x87 -verify-machineinstrs | FileCheck %s --check-prefixes=FAST-X86
+; RUN: llc < %s -fast-isel -mtriple=i686-apple-darwin10 -mattr=-sse,-sse2,+x87 -verify-machineinstrs | FileCheck %s --check-prefixes=X86,FAST-X86
 ; llc < %s -global-isel -global-isel-abort=1 -mtriple=i686-apple-darwin10 -mattr=-sse,-sse2,+x87 -verify-machineinstrs | FileCheck %s --check-prefixes=GISEL-X86
 
   define i1 @fcmp_float_oeq(float %x, float %y) nounwind {
-; SDAG-X64-LABEL: fcmp_float_oeq:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    cmpeqss %xmm1, %xmm0
-; SDAG-X64-NEXT:    movd %xmm0, %eax
-; SDAG-X64-NEXT:    andl $1, %eax
-; SDAG-X64-NEXT:    ## kill: def $al killed $al killed $eax
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_float_oeq:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    cmpeqss %xmm1, %xmm0
-; FAST-X64-NEXT:    movd %xmm0, %eax
-; FAST-X64-NEXT:    andl $1, %eax
-; FAST-X64-NEXT:    ## kill: def $al killed $al killed $eax
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_float_oeq:
+; X64:       ## %bb.0:
+; X64-NEXT:    cmpeqss %xmm1, %xmm0
+; X64-NEXT:    movd %xmm0, %eax
+; X64-NEXT:    andl $1, %eax
+; X64-NEXT:    ## kill: def $al killed $al killed $eax
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_float_oeq:
 ; GISEL-X64:       ## %bb.0:
@@ -33,47 +25,28 @@
 ; GISEL-X64-NEXT:    andb %cl, %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_float_oeq:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setnp %cl
-; SDAG-X86-NEXT:    sete %al
-; SDAG-X86-NEXT:    andb %cl, %al
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_float_oeq:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setnp %cl
-; FAST-X86-NEXT:    sete %al
-; FAST-X86-NEXT:    andb %cl, %al
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_float_oeq:
+; X86:       ## %bb.0:
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setnp %cl
+; X86-NEXT:    sete %al
+; X86-NEXT:    andb %cl, %al
+; X86-NEXT:    retl
     %1 = fcmp oeq float %x, %y
     ret i1 %1
   }
 
   define i1 @fcmp_float_ogt(float %x, float %y) nounwind {
-; SDAG-X64-LABEL: fcmp_float_ogt:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomiss %xmm1, %xmm0
-; SDAG-X64-NEXT:    seta %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_float_ogt:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomiss %xmm1, %xmm0
-; FAST-X64-NEXT:    seta %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_float_ogt:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomiss %xmm1, %xmm0
+; X64-NEXT:    seta %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_float_ogt:
 ; GISEL-X64:       ## %bb.0:
@@ -81,43 +54,26 @@
 ; GISEL-X64-NEXT:    seta %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_float_ogt:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    seta %al
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_float_ogt:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    seta %al
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_float_ogt:
+; X86:       ## %bb.0:
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    seta %al
+; X86-NEXT:    retl
     %1 = fcmp ogt float %x, %y
     ret i1 %1
   }
 
   define i1 @fcmp_float_oge(float %x, float %y) nounwind {
-; SDAG-X64-LABEL: fcmp_float_oge:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomiss %xmm1, %xmm0
-; SDAG-X64-NEXT:    setae %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_float_oge:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomiss %xmm1, %xmm0
-; FAST-X64-NEXT:    setae %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_float_oge:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomiss %xmm1, %xmm0
+; X64-NEXT:    setae %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_float_oge:
 ; GISEL-X64:       ## %bb.0:
@@ -125,43 +81,26 @@
 ; GISEL-X64-NEXT:    setae %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_float_oge:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setae %al
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_float_oge:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setae %al
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_float_oge:
+; X86:       ## %bb.0:
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setae %al
+; X86-NEXT:    retl
     %1 = fcmp oge float %x, %y
     ret i1 %1
   }
 
   define i1 @fcmp_float_olt(float %x, float %y) nounwind {
-; SDAG-X64-LABEL: fcmp_float_olt:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomiss %xmm0, %xmm1
-; SDAG-X64-NEXT:    seta %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_float_olt:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomiss %xmm0, %xmm1
-; FAST-X64-NEXT:    seta %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_float_olt:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomiss %xmm0, %xmm1
+; X64-NEXT:    seta %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_float_olt:
 ; GISEL-X64:       ## %bb.0:
@@ -196,17 +135,11 @@
   }
 
   define i1 @fcmp_float_ole(float %x, float %y) nounwind {
-; SDAG-X64-LABEL: fcmp_float_ole:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomiss %xmm0, %xmm1
-; SDAG-X64-NEXT:    setae %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_float_ole:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomiss %xmm0, %xmm1
-; FAST-X64-NEXT:    setae %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_float_ole:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomiss %xmm0, %xmm1
+; X64-NEXT:    setae %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_float_ole:
 ; GISEL-X64:       ## %bb.0:
@@ -241,17 +174,11 @@
   }
 
   define i1 @fcmp_float_one(float %x, float %y) nounwind {
-; SDAG-X64-LABEL: fcmp_float_one:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomiss %xmm1, %xmm0
-; SDAG-X64-NEXT:    setne %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_float_one:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomiss %xmm1, %xmm0
-; FAST-X64-NEXT:    setne %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_float_one:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomiss %xmm1, %xmm0
+; X64-NEXT:    setne %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_float_one:
 ; GISEL-X64:       ## %bb.0:
@@ -259,43 +186,26 @@
 ; GISEL-X64-NEXT:    setne %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_float_one:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setne %al
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_float_one:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setne %al
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_float_one:
+; X86:       ## %bb.0:
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setne %al
+; X86-NEXT:    retl
     %1 = fcmp one float %x, %y
     ret i1 %1
   }
 
   define i1 @fcmp_float_ord(float %x, float %y) nounwind {
-; SDAG-X64-LABEL: fcmp_float_ord:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomiss %xmm1, %xmm0
-; SDAG-X64-NEXT:    setnp %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_float_ord:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomiss %xmm1, %xmm0
-; FAST-X64-NEXT:    setnp %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_float_ord:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomiss %xmm1, %xmm0
+; X64-NEXT:    setnp %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_float_ord:
 ; GISEL-X64:       ## %bb.0:
@@ -303,43 +213,26 @@
 ; GISEL-X64-NEXT:    setnp %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_float_ord:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setnp %al
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_float_ord:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setnp %al
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_float_ord:
+; X86:       ## %bb.0:
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setnp %al
+; X86-NEXT:    retl
     %1 = fcmp ord float %x, %y
     ret i1 %1
   }
 
   define i1 @fcmp_float_uno(float %x, float %y) nounwind {
-; SDAG-X64-LABEL: fcmp_float_uno:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomiss %xmm1, %xmm0
-; SDAG-X64-NEXT:    setp %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_float_uno:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomiss %xmm1, %xmm0
-; FAST-X64-NEXT:    setp %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_float_uno:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomiss %xmm1, %xmm0
+; X64-NEXT:    setp %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_float_uno:
 ; GISEL-X64:       ## %bb.0:
@@ -347,43 +240,26 @@
 ; GISEL-X64-NEXT:    setp %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_float_uno:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setp %al
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_float_uno:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setp %al
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_float_uno:
+; X86:       ## %bb.0:
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setp %al
+; X86-NEXT:    retl
     %1 = fcmp uno float %x, %y
     ret i1 %1
   }
 
   define i1 @fcmp_float_ueq(float %x, float %y) nounwind {
-; SDAG-X64-LABEL: fcmp_float_ueq:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomiss %xmm1, %xmm0
-; SDAG-X64-NEXT:    sete %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_float_ueq:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomiss %xmm1, %xmm0
-; FAST-X64-NEXT:    sete %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_float_ueq:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomiss %xmm1, %xmm0
+; X64-NEXT:    sete %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_float_ueq:
 ; GISEL-X64:       ## %bb.0:
@@ -391,43 +267,26 @@
 ; GISEL-X64-NEXT:    sete %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_float_ueq:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    sete %al
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_float_ueq:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    sete %al
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_float_ueq:
+; X86:       ## %bb.0:
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    sete %al
+; X86-NEXT:    retl
     %1 = fcmp ueq float %x, %y
     ret i1 %1
   }
 
   define i1 @fcmp_float_ugt(float %x, float %y) nounwind {
-; SDAG-X64-LABEL: fcmp_float_ugt:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomiss %xmm0, %xmm1
-; SDAG-X64-NEXT:    setb %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_float_ugt:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomiss %xmm0, %xmm1
-; FAST-X64-NEXT:    setb %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_float_ugt:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomiss %xmm0, %xmm1
+; X64-NEXT:    setb %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_float_ugt:
 ; GISEL-X64:       ## %bb.0:
@@ -462,17 +321,11 @@
   }
 
   define i1 @fcmp_float_uge(float %x, float %y) nounwind {
-; SDAG-X64-LABEL: fcmp_float_uge:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomiss %xmm0, %xmm1
-; SDAG-X64-NEXT:    setbe %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_float_uge:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomiss %xmm0, %xmm1
-; FAST-X64-NEXT:    setbe %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_float_uge:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomiss %xmm0, %xmm1
+; X64-NEXT:    setbe %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_float_uge:
 ; GISEL-X64:       ## %bb.0:
@@ -507,17 +360,11 @@
   }
 
   define i1 @fcmp_float_ult(float %x, float %y) nounwind {
-; SDAG-X64-LABEL: fcmp_float_ult:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomiss %xmm1, %xmm0
-; SDAG-X64-NEXT:    setb %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_float_ult:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomiss %xmm1, %xmm0
-; FAST-X64-NEXT:    setb %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_float_ult:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomiss %xmm1, %xmm0
+; X64-NEXT:    setb %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_float_ult:
 ; GISEL-X64:       ## %bb.0:
@@ -525,43 +372,26 @@
 ; GISEL-X64-NEXT:    setb %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_float_ult:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setb %al
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_float_ult:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setb %al
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_float_ult:
+; X86:       ## %bb.0:
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setb %al
+; X86-NEXT:    retl
     %1 = fcmp ult float %x, %y
     ret i1 %1
   }
 
   define i1 @fcmp_float_ule(float %x, float %y) nounwind {
-; SDAG-X64-LABEL: fcmp_float_ule:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomiss %xmm1, %xmm0
-; SDAG-X64-NEXT:    setbe %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_float_ule:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomiss %xmm1, %xmm0
-; FAST-X64-NEXT:    setbe %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_float_ule:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomiss %xmm1, %xmm0
+; X64-NEXT:    setbe %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_float_ule:
 ; GISEL-X64:       ## %bb.0:
@@ -569,47 +399,28 @@
 ; GISEL-X64-NEXT:    setbe %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_float_ule:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setbe %al
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_float_ule:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setbe %al
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_float_ule:
+; X86:       ## %bb.0:
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setbe %al
+; X86-NEXT:    retl
     %1 = fcmp ule float %x, %y
     ret i1 %1
   }
 
   define i1 @fcmp_float_une(float %x, float %y) nounwind {
-; SDAG-X64-LABEL: fcmp_float_une:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    cmpneqss %xmm1, %xmm0
-; SDAG-X64-NEXT:    movd %xmm0, %eax
-; SDAG-X64-NEXT:    andl $1, %eax
-; SDAG-X64-NEXT:    ## kill: def $al killed $al killed $eax
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_float_une:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    cmpneqss %xmm1, %xmm0
-; FAST-X64-NEXT:    movd %xmm0, %eax
-; FAST-X64-NEXT:    andl $1, %eax
-; FAST-X64-NEXT:    ## kill: def $al killed $al killed $eax
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_float_une:
+; X64:       ## %bb.0:
+; X64-NEXT:    cmpneqss %xmm1, %xmm0
+; X64-NEXT:    movd %xmm0, %eax
+; X64-NEXT:    andl $1, %eax
+; X64-NEXT:    ## kill: def $al killed $al killed $eax
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_float_une:
 ; GISEL-X64:       ## %bb.0:
@@ -619,51 +430,30 @@
 ; GISEL-X64-NEXT:    orb %cl, %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_float_une:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setp %cl
-; SDAG-X86-NEXT:    setne %al
-; SDAG-X86-NEXT:    orb %cl, %al
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_float_une:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setp %cl
-; FAST-X86-NEXT:    setne %al
-; FAST-X86-NEXT:    orb %cl, %al
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_float_une:
+; X86:       ## %bb.0:
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setp %cl
+; X86-NEXT:    setne %al
+; X86-NEXT:    orb %cl, %al
+; X86-NEXT:    retl
     %1 = fcmp une float %x, %y
     ret i1 %1
   }
 
   define i1 @fcmp_double_oeq(double %x, double %y) nounwind {
-; SDAG-X64-LABEL: fcmp_double_oeq:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    cmpeqsd %xmm1, %xmm0
-; SDAG-X64-NEXT:    movq %xmm0, %rax
-; SDAG-X64-NEXT:    andl $1, %eax
-; SDAG-X64-NEXT:    ## kill: def $al killed $al killed $rax
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_double_oeq:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    cmpeqsd %xmm1, %xmm0
-; FAST-X64-NEXT:    movq %xmm0, %rax
-; FAST-X64-NEXT:    andl $1, %eax
-; FAST-X64-NEXT:    ## kill: def $al killed $al killed $rax
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_double_oeq:
+; X64:       ## %bb.0:
+; X64-NEXT:    cmpeqsd %xmm1, %xmm0
+; X64-NEXT:    movq %xmm0, %rax
+; X64-NEXT:    andl $1, %eax
+; X64-NEXT:    ## kill: def $al killed $al killed $rax
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_double_oeq:
 ; GISEL-X64:       ## %bb.0:
@@ -673,47 +463,28 @@
 ; GISEL-X64-NEXT:    andb %cl, %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_double_oeq:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setnp %cl
-; SDAG-X86-NEXT:    sete %al
-; SDAG-X86-NEXT:    andb %cl, %al
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_double_oeq:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setnp %cl
-; FAST-X86-NEXT:    sete %al
-; FAST-X86-NEXT:    andb %cl, %al
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_double_oeq:
+; X86:       ## %bb.0:
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setnp %cl
+; X86-NEXT:    sete %al
+; X86-NEXT:    andb %cl, %al
+; X86-NEXT:    retl
     %1 = fcmp oeq double %x, %y
     ret i1 %1
   }
 
   define i1 @fcmp_double_ogt(double %x, double %y) nounwind {
-; SDAG-X64-LABEL: fcmp_double_ogt:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomisd %xmm1, %xmm0
-; SDAG-X64-NEXT:    seta %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_double_ogt:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomisd %xmm1, %xmm0
-; FAST-X64-NEXT:    seta %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_double_ogt:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomisd %xmm1, %xmm0
+; X64-NEXT:    seta %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_double_ogt:
 ; GISEL-X64:       ## %bb.0:
@@ -721,43 +492,26 @@
 ; GISEL-X64-NEXT:    seta %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_double_ogt:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    seta %al
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_double_ogt:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    seta %al
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_double_ogt:
+; X86:       ## %bb.0:
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    seta %al
+; X86-NEXT:    retl
     %1 = fcmp ogt double %x, %y
     ret i1 %1
   }
 
   define i1 @fcmp_double_oge(double %x, double %y) nounwind {
-; SDAG-X64-LABEL: fcmp_double_oge:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomisd %xmm1, %xmm0
-; SDAG-X64-NEXT:    setae %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_double_oge:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomisd %xmm1, %xmm0
-; FAST-X64-NEXT:    setae %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_double_oge:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomisd %xmm1, %xmm0
+; X64-NEXT:    setae %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_double_oge:
 ; GISEL-X64:       ## %bb.0:
@@ -765,43 +519,26 @@
 ; GISEL-X64-NEXT:    setae %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_double_oge:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setae %al
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_double_oge:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setae %al
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_double_oge:
+; X86:       ## %bb.0:
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setae %al
+; X86-NEXT:    retl
     %1 = fcmp oge double %x, %y
     ret i1 %1
   }
 
   define i1 @fcmp_double_olt(double %x, double %y) nounwind {
-; SDAG-X64-LABEL: fcmp_double_olt:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomisd %xmm0, %xmm1
-; SDAG-X64-NEXT:    seta %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_double_olt:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomisd %xmm0, %xmm1
-; FAST-X64-NEXT:    seta %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_double_olt:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomisd %xmm0, %xmm1
+; X64-NEXT:    seta %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_double_olt:
 ; GISEL-X64:       ## %bb.0:
@@ -836,17 +573,11 @@
   }
 
   define i1 @fcmp_double_ole(double %x, double %y) nounwind {
-; SDAG-X64-LABEL: fcmp_double_ole:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomisd %xmm0, %xmm1
-; SDAG-X64-NEXT:    setae %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_double_ole:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomisd %xmm0, %xmm1
-; FAST-X64-NEXT:    setae %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_double_ole:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomisd %xmm0, %xmm1
+; X64-NEXT:    setae %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_double_ole:
 ; GISEL-X64:       ## %bb.0:
@@ -881,17 +612,11 @@
   }
 
   define i1 @fcmp_double_one(double %x, double %y) nounwind {
-; SDAG-X64-LABEL: fcmp_double_one:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomisd %xmm1, %xmm0
-; SDAG-X64-NEXT:    setne %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_double_one:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomisd %xmm1, %xmm0
-; FAST-X64-NEXT:    setne %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_double_one:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomisd %xmm1, %xmm0
+; X64-NEXT:    setne %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_double_one:
 ; GISEL-X64:       ## %bb.0:
@@ -899,43 +624,26 @@
 ; GISEL-X64-NEXT:    setne %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_double_one:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setne %al
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_double_one:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setne %al
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_double_one:
+; X86:       ## %bb.0:
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setne %al
+; X86-NEXT:    retl
     %1 = fcmp one double %x, %y
     ret i1 %1
   }
 
   define i1 @fcmp_double_ord(double %x, double %y) nounwind {
-; SDAG-X64-LABEL: fcmp_double_ord:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomisd %xmm1, %xmm0
-; SDAG-X64-NEXT:    setnp %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_double_ord:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomisd %xmm1, %xmm0
-; FAST-X64-NEXT:    setnp %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_double_ord:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomisd %xmm1, %xmm0
+; X64-NEXT:    setnp %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_double_ord:
 ; GISEL-X64:       ## %bb.0:
@@ -943,43 +651,26 @@
 ; GISEL-X64-NEXT:    setnp %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_double_ord:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setnp %al
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_double_ord:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setnp %al
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_double_ord:
+; X86:       ## %bb.0:
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setnp %al
+; X86-NEXT:    retl
     %1 = fcmp ord double %x, %y
     ret i1 %1
   }
 
   define i1 @fcmp_double_uno(double %x, double %y) nounwind {
-; SDAG-X64-LABEL: fcmp_double_uno:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomisd %xmm1, %xmm0
-; SDAG-X64-NEXT:    setp %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_double_uno:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomisd %xmm1, %xmm0
-; FAST-X64-NEXT:    setp %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_double_uno:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomisd %xmm1, %xmm0
+; X64-NEXT:    setp %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_double_uno:
 ; GISEL-X64:       ## %bb.0:
@@ -987,43 +678,26 @@
 ; GISEL-X64-NEXT:    setp %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_double_uno:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setp %al
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_double_uno:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setp %al
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_double_uno:
+; X86:       ## %bb.0:
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setp %al
+; X86-NEXT:    retl
     %1 = fcmp uno double %x, %y
     ret i1 %1
   }
 
   define i1 @fcmp_double_ueq(double %x, double %y) nounwind {
-; SDAG-X64-LABEL: fcmp_double_ueq:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomisd %xmm1, %xmm0
-; SDAG-X64-NEXT:    sete %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_double_ueq:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomisd %xmm1, %xmm0
-; FAST-X64-NEXT:    sete %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_double_ueq:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomisd %xmm1, %xmm0
+; X64-NEXT:    sete %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_double_ueq:
 ; GISEL-X64:       ## %bb.0:
@@ -1031,43 +705,26 @@
 ; GISEL-X64-NEXT:    sete %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_double_ueq:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    sete %al
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_double_ueq:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    sete %al
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_double_ueq:
+; X86:       ## %bb.0:
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    sete %al
+; X86-NEXT:    retl
     %1 = fcmp ueq double %x, %y
     ret i1 %1
   }
 
   define i1 @fcmp_double_ugt(double %x, double %y) nounwind {
-; SDAG-X64-LABEL: fcmp_double_ugt:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomisd %xmm0, %xmm1
-; SDAG-X64-NEXT:    setb %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_double_ugt:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomisd %xmm0, %xmm1
-; FAST-X64-NEXT:    setb %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_double_ugt:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomisd %xmm0, %xmm1
+; X64-NEXT:    setb %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_double_ugt:
 ; GISEL-X64:       ## %bb.0:
@@ -1102,17 +759,11 @@
   }
 
   define i1 @fcmp_double_uge(double %x, double %y) nounwind {
-; SDAG-X64-LABEL: fcmp_double_uge:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomisd %xmm0, %xmm1
-; SDAG-X64-NEXT:    setbe %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_double_uge:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomisd %xmm0, %xmm1
-; FAST-X64-NEXT:    setbe %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_double_uge:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomisd %xmm0, %xmm1
+; X64-NEXT:    setbe %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_double_uge:
 ; GISEL-X64:       ## %bb.0:
@@ -1147,17 +798,11 @@
   }
 
   define i1 @fcmp_double_ult(double %x, double %y) nounwind {
-; SDAG-X64-LABEL: fcmp_double_ult:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomisd %xmm1, %xmm0
-; SDAG-X64-NEXT:    setb %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_double_ult:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomisd %xmm1, %xmm0
-; FAST-X64-NEXT:    setb %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_double_ult:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomisd %xmm1, %xmm0
+; X64-NEXT:    setb %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_double_ult:
 ; GISEL-X64:       ## %bb.0:
@@ -1165,43 +810,26 @@
 ; GISEL-X64-NEXT:    setb %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_double_ult:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setb %al
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_double_ult:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setb %al
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_double_ult:
+; X86:       ## %bb.0:
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setb %al
+; X86-NEXT:    retl
     %1 = fcmp ult double %x, %y
     ret i1 %1
   }
 
   define i1 @fcmp_double_ule(double %x, double %y) nounwind {
-; SDAG-X64-LABEL: fcmp_double_ule:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    ucomisd %xmm1, %xmm0
-; SDAG-X64-NEXT:    setbe %al
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_double_ule:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    ucomisd %xmm1, %xmm0
-; FAST-X64-NEXT:    setbe %al
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_double_ule:
+; X64:       ## %bb.0:
+; X64-NEXT:    ucomisd %xmm1, %xmm0
+; X64-NEXT:    setbe %al
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_double_ule:
 ; GISEL-X64:       ## %bb.0:
@@ -1209,47 +837,28 @@
 ; GISEL-X64-NEXT:    setbe %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_double_ule:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setbe %al
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_double_ule:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setbe %al
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_double_ule:
+; X86:       ## %bb.0:
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setbe %al
+; X86-NEXT:    retl
     %1 = fcmp ule double %x, %y
     ret i1 %1
   }
 
   define i1 @fcmp_double_une(double %x, double %y) nounwind {
-; SDAG-X64-LABEL: fcmp_double_une:
-; SDAG-X64:       ## %bb.0:
-; SDAG-X64-NEXT:    cmpneqsd %xmm1, %xmm0
-; SDAG-X64-NEXT:    movq %xmm0, %rax
-; SDAG-X64-NEXT:    andl $1, %eax
-; SDAG-X64-NEXT:    ## kill: def $al killed $al killed $rax
-; SDAG-X64-NEXT:    retq
-;
-; FAST-X64-LABEL: fcmp_double_une:
-; FAST-X64:       ## %bb.0:
-; FAST-X64-NEXT:    cmpneqsd %xmm1, %xmm0
-; FAST-X64-NEXT:    movq %xmm0, %rax
-; FAST-X64-NEXT:    andl $1, %eax
-; FAST-X64-NEXT:    ## kill: def $al killed $al killed $rax
-; FAST-X64-NEXT:    retq
+; X64-LABEL: fcmp_double_une:
+; X64:       ## %bb.0:
+; X64-NEXT:    cmpneqsd %xmm1, %xmm0
+; X64-NEXT:    movq %xmm0, %rax
+; X64-NEXT:    andl $1, %eax
+; X64-NEXT:    ## kill: def $al killed $al killed $rax
+; X64-NEXT:    retq
 ;
 ; GISEL-X64-LABEL: fcmp_double_une:
 ; GISEL-X64:       ## %bb.0:
@@ -1259,31 +868,21 @@
 ; GISEL-X64-NEXT:    orb %cl, %al
 ; GISEL-X64-NEXT:    retq
 ;
-; SDAG-X86-LABEL: fcmp_double_une:
-; SDAG-X86:       ## %bb.0:
-; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; SDAG-X86-NEXT:    fucompp
-; SDAG-X86-NEXT:    fnstsw %ax
-; SDAG-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; SDAG-X86-NEXT:    sahf
-; SDAG-X86-NEXT:    setp %cl
-; SDAG-X86-NEXT:    setne %al
-; SDAG-X86-NEXT:    orb %cl, %al
-; SDAG-X86-NEXT:    retl
-;
-; FAST-X86-LABEL: fcmp_double_une:
-; FAST-X86:       ## %bb.0:
-; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; FAST-X86-NEXT:    fucompp
-; FAST-X86-NEXT:    fnstsw %ax
-; FAST-X86-NEXT:    ## kill: def $ah killed $ah killed $ax
-; FAST-X86-NEXT:    sahf
-; FAST-X86-NEXT:    setp %cl
-; FAST-X86-NEXT:    setne %al
-; FAST-X86-NEXT:    orb %cl, %al
-; FAST-X86-NEXT:    retl
+; X86-LABEL: fcmp_double_une:
+; X86:       ## %bb.0:
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fucompp
+; X86-NEXT:    fnstsw %ax
+; X86-NEXT:    ## kill: def $ah killed $ah killed $ax
+; X86-NEXT:    sahf
+; X86-NEXT:    setp %cl
+; X86-NEXT:    setne %al
+; X86-NEXT:    orb %cl, %al
+; X86-NEXT:    retl
     %1 = fcmp une double %x, %y
     ret i1 %1
   }
+;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
+; FAST-X64: {{.*}}
+; SDAG-X64: {{.*}}



More information about the llvm-commits mailing list