From c974d712fd6d7e412a89b6d911474bfb425d037e Mon Sep 17 00:00:00 2001 From: mattarde Date: Mon, 20 Jan 2025 04:00:11 -0800 Subject: [PATCH 1/5] 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 Date: Thu, 23 Jan 2025 12:11:31 -0800 Subject: [PATCH 2/5] 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 Date: Fri, 24 Jan 2025 03:09:21 -0800 Subject: [PATCH 3/5] 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 Date: Thu, 30 Jan 2025 02:24:10 -0800 Subject: [PATCH 4/5] 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: {{.*}} From e3759e051dbbdfb3f51930b5894f5400ea962f62 Mon Sep 17 00:00:00 2001 From: mattarde Date: Thu, 30 Jan 2025 11:56:56 -0800 Subject: [PATCH 5/5] update style --- llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp b/llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp index 6d35dea09b31db..c7fa3d65ac0351 100644 --- a/llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp +++ b/llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp @@ -448,8 +448,8 @@ X86LegalizerInfo::X86LegalizerInfo(const X86Subtarget &STI, // fp comparison getActionDefinitionsBuilder(G_FCMP) - .legalFor((HasSSE1 || UseX87), {s8, s32}) - .legalFor((HasSSE2 || UseX87), {s8, s64}) + .legalFor(HasSSE1 || UseX87, {s8, s32}) + .legalFor(HasSSE2 || UseX87, {s8, s64}) .legalFor(UseX87, {s8, s80}) .clampScalar(0, s8, s8) .clampScalar(1, s32, HasSSE2 ? s64 : s32)