CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
561 lines
21 KiB
LLVM
561 lines
21 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
|
|
; RUN: llc -mtriple=aarch64 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD
|
|
; RUN: llc -mtriple=aarch64 -global-isel -global-isel-abort=1 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI
|
|
|
|
; Checks generated libcalls for fp128 types
|
|
|
|
define double @oeq(fp128 %a, fp128 %b, double %d, double %e) {
|
|
; CHECK-SD-LABEL: oeq:
|
|
; CHECK-SD: // %bb.0: // %entry
|
|
; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-SD-NEXT: .cfi_offset w30, -16
|
|
; CHECK-SD-NEXT: .cfi_offset b8, -24
|
|
; CHECK-SD-NEXT: .cfi_offset b9, -32
|
|
; CHECK-SD-NEXT: fmov d8, d3
|
|
; CHECK-SD-NEXT: fmov d9, d2
|
|
; CHECK-SD-NEXT: bl __eqtf2
|
|
; CHECK-SD-NEXT: cmp w0, #0
|
|
; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-SD-NEXT: fcsel d0, d9, d8, eq
|
|
; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-SD-NEXT: ret
|
|
;
|
|
; CHECK-GI-LABEL: oeq:
|
|
; CHECK-GI: // %bb.0: // %entry
|
|
; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-GI-NEXT: .cfi_offset w30, -16
|
|
; CHECK-GI-NEXT: .cfi_offset b8, -24
|
|
; CHECK-GI-NEXT: .cfi_offset b9, -32
|
|
; CHECK-GI-NEXT: fmov d8, d2
|
|
; CHECK-GI-NEXT: fmov d9, d3
|
|
; CHECK-GI-NEXT: bl __eqtf2
|
|
; CHECK-GI-NEXT: cmp w0, #0
|
|
; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-GI-NEXT: fcsel d0, d8, d9, eq
|
|
; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-GI-NEXT: ret
|
|
entry:
|
|
%c = fcmp oeq fp128 %a, %b
|
|
%s = select i1 %c, double %d, double %e
|
|
ret double %s
|
|
}
|
|
|
|
define double @ogt(fp128 %a, fp128 %b, double %d, double %e) {
|
|
; CHECK-SD-LABEL: ogt:
|
|
; CHECK-SD: // %bb.0: // %entry
|
|
; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-SD-NEXT: .cfi_offset w30, -16
|
|
; CHECK-SD-NEXT: .cfi_offset b8, -24
|
|
; CHECK-SD-NEXT: .cfi_offset b9, -32
|
|
; CHECK-SD-NEXT: fmov d8, d3
|
|
; CHECK-SD-NEXT: fmov d9, d2
|
|
; CHECK-SD-NEXT: bl __gttf2
|
|
; CHECK-SD-NEXT: cmp w0, #0
|
|
; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-SD-NEXT: fcsel d0, d9, d8, gt
|
|
; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-SD-NEXT: ret
|
|
;
|
|
; CHECK-GI-LABEL: ogt:
|
|
; CHECK-GI: // %bb.0: // %entry
|
|
; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-GI-NEXT: .cfi_offset w30, -16
|
|
; CHECK-GI-NEXT: .cfi_offset b8, -24
|
|
; CHECK-GI-NEXT: .cfi_offset b9, -32
|
|
; CHECK-GI-NEXT: fmov d8, d2
|
|
; CHECK-GI-NEXT: fmov d9, d3
|
|
; CHECK-GI-NEXT: bl __gttf2
|
|
; CHECK-GI-NEXT: cmp w0, #0
|
|
; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-GI-NEXT: fcsel d0, d8, d9, gt
|
|
; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-GI-NEXT: ret
|
|
entry:
|
|
%c = fcmp ogt fp128 %a, %b
|
|
%s = select i1 %c, double %d, double %e
|
|
ret double %s
|
|
}
|
|
|
|
define double @olt(fp128 %a, fp128 %b, double %d, double %e) {
|
|
; CHECK-SD-LABEL: olt:
|
|
; CHECK-SD: // %bb.0: // %entry
|
|
; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-SD-NEXT: .cfi_offset w30, -16
|
|
; CHECK-SD-NEXT: .cfi_offset b8, -24
|
|
; CHECK-SD-NEXT: .cfi_offset b9, -32
|
|
; CHECK-SD-NEXT: fmov d8, d3
|
|
; CHECK-SD-NEXT: fmov d9, d2
|
|
; CHECK-SD-NEXT: bl __lttf2
|
|
; CHECK-SD-NEXT: cmp w0, #0
|
|
; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-SD-NEXT: fcsel d0, d9, d8, mi
|
|
; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-SD-NEXT: ret
|
|
;
|
|
; CHECK-GI-LABEL: olt:
|
|
; CHECK-GI: // %bb.0: // %entry
|
|
; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-GI-NEXT: .cfi_offset w30, -16
|
|
; CHECK-GI-NEXT: .cfi_offset b8, -24
|
|
; CHECK-GI-NEXT: .cfi_offset b9, -32
|
|
; CHECK-GI-NEXT: fmov d8, d2
|
|
; CHECK-GI-NEXT: fmov d9, d3
|
|
; CHECK-GI-NEXT: bl __lttf2
|
|
; CHECK-GI-NEXT: cmp w0, #0
|
|
; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-GI-NEXT: fcsel d0, d8, d9, mi
|
|
; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-GI-NEXT: ret
|
|
entry:
|
|
%c = fcmp olt fp128 %a, %b
|
|
%s = select i1 %c, double %d, double %e
|
|
ret double %s
|
|
}
|
|
|
|
define double @ole(fp128 %a, fp128 %b, double %d, double %e) {
|
|
; CHECK-SD-LABEL: ole:
|
|
; CHECK-SD: // %bb.0: // %entry
|
|
; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-SD-NEXT: .cfi_offset w30, -16
|
|
; CHECK-SD-NEXT: .cfi_offset b8, -24
|
|
; CHECK-SD-NEXT: .cfi_offset b9, -32
|
|
; CHECK-SD-NEXT: fmov d8, d3
|
|
; CHECK-SD-NEXT: fmov d9, d2
|
|
; CHECK-SD-NEXT: bl __letf2
|
|
; CHECK-SD-NEXT: cmp w0, #0
|
|
; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-SD-NEXT: fcsel d0, d9, d8, le
|
|
; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-SD-NEXT: ret
|
|
;
|
|
; CHECK-GI-LABEL: ole:
|
|
; CHECK-GI: // %bb.0: // %entry
|
|
; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-GI-NEXT: .cfi_offset w30, -16
|
|
; CHECK-GI-NEXT: .cfi_offset b8, -24
|
|
; CHECK-GI-NEXT: .cfi_offset b9, -32
|
|
; CHECK-GI-NEXT: fmov d8, d2
|
|
; CHECK-GI-NEXT: fmov d9, d3
|
|
; CHECK-GI-NEXT: bl __letf2
|
|
; CHECK-GI-NEXT: cmp w0, #0
|
|
; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-GI-NEXT: fcsel d0, d8, d9, le
|
|
; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-GI-NEXT: ret
|
|
entry:
|
|
%c = fcmp ole fp128 %a, %b
|
|
%s = select i1 %c, double %d, double %e
|
|
ret double %s
|
|
}
|
|
|
|
define double @one(fp128 %a, fp128 %b, double %d, double %e) {
|
|
; CHECK-SD-LABEL: one:
|
|
; CHECK-SD: // %bb.0: // %entry
|
|
; CHECK-SD-NEXT: sub sp, sp, #64
|
|
; CHECK-SD-NEXT: stp d9, d8, [sp, #32] // 16-byte Folded Spill
|
|
; CHECK-SD-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill
|
|
; CHECK-SD-NEXT: .cfi_def_cfa_offset 64
|
|
; CHECK-SD-NEXT: .cfi_offset w19, -8
|
|
; CHECK-SD-NEXT: .cfi_offset w30, -16
|
|
; CHECK-SD-NEXT: .cfi_offset b8, -24
|
|
; CHECK-SD-NEXT: .cfi_offset b9, -32
|
|
; CHECK-SD-NEXT: fmov d8, d3
|
|
; CHECK-SD-NEXT: fmov d9, d2
|
|
; CHECK-SD-NEXT: stp q0, q1, [sp] // 32-byte Folded Spill
|
|
; CHECK-SD-NEXT: bl __eqtf2
|
|
; CHECK-SD-NEXT: ldp q0, q1, [sp] // 32-byte Folded Reload
|
|
; CHECK-SD-NEXT: mov w19, w0
|
|
; CHECK-SD-NEXT: bl __unordtf2
|
|
; CHECK-SD-NEXT: cmp w0, #0
|
|
; CHECK-SD-NEXT: ccmp w19, #0, #4, eq
|
|
; CHECK-SD-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload
|
|
; CHECK-SD-NEXT: fcsel d0, d9, d8, ne
|
|
; CHECK-SD-NEXT: ldp d9, d8, [sp, #32] // 16-byte Folded Reload
|
|
; CHECK-SD-NEXT: add sp, sp, #64
|
|
; CHECK-SD-NEXT: ret
|
|
;
|
|
; CHECK-GI-LABEL: one:
|
|
; CHECK-GI: // %bb.0: // %entry
|
|
; CHECK-GI-NEXT: sub sp, sp, #64
|
|
; CHECK-GI-NEXT: stp d9, d8, [sp, #32] // 16-byte Folded Spill
|
|
; CHECK-GI-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill
|
|
; CHECK-GI-NEXT: .cfi_def_cfa_offset 64
|
|
; CHECK-GI-NEXT: .cfi_offset w19, -8
|
|
; CHECK-GI-NEXT: .cfi_offset w30, -16
|
|
; CHECK-GI-NEXT: .cfi_offset b8, -24
|
|
; CHECK-GI-NEXT: .cfi_offset b9, -32
|
|
; CHECK-GI-NEXT: stp q1, q0, [sp] // 32-byte Folded Spill
|
|
; CHECK-GI-NEXT: fmov d8, d2
|
|
; CHECK-GI-NEXT: fmov d9, d3
|
|
; CHECK-GI-NEXT: bl __eqtf2
|
|
; CHECK-GI-NEXT: ldp q1, q0, [sp] // 32-byte Folded Reload
|
|
; CHECK-GI-NEXT: mov w19, w0
|
|
; CHECK-GI-NEXT: bl __unordtf2
|
|
; CHECK-GI-NEXT: cmp w0, #0
|
|
; CHECK-GI-NEXT: ccmp w19, #0, #4, eq
|
|
; CHECK-GI-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload
|
|
; CHECK-GI-NEXT: fcsel d0, d8, d9, ne
|
|
; CHECK-GI-NEXT: ldp d9, d8, [sp, #32] // 16-byte Folded Reload
|
|
; CHECK-GI-NEXT: add sp, sp, #64
|
|
; CHECK-GI-NEXT: ret
|
|
entry:
|
|
%c = fcmp one fp128 %a, %b
|
|
%s = select i1 %c, double %d, double %e
|
|
ret double %s
|
|
}
|
|
|
|
define double @ord(fp128 %a, fp128 %b, double %d, double %e) {
|
|
; CHECK-SD-LABEL: ord:
|
|
; CHECK-SD: // %bb.0: // %entry
|
|
; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-SD-NEXT: .cfi_offset w30, -16
|
|
; CHECK-SD-NEXT: .cfi_offset b8, -24
|
|
; CHECK-SD-NEXT: .cfi_offset b9, -32
|
|
; CHECK-SD-NEXT: fmov d8, d3
|
|
; CHECK-SD-NEXT: fmov d9, d2
|
|
; CHECK-SD-NEXT: bl __unordtf2
|
|
; CHECK-SD-NEXT: cmp w0, #0
|
|
; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-SD-NEXT: fcsel d0, d9, d8, eq
|
|
; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-SD-NEXT: ret
|
|
;
|
|
; CHECK-GI-LABEL: ord:
|
|
; CHECK-GI: // %bb.0: // %entry
|
|
; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-GI-NEXT: .cfi_offset w30, -16
|
|
; CHECK-GI-NEXT: .cfi_offset b8, -24
|
|
; CHECK-GI-NEXT: .cfi_offset b9, -32
|
|
; CHECK-GI-NEXT: fmov d8, d2
|
|
; CHECK-GI-NEXT: fmov d9, d3
|
|
; CHECK-GI-NEXT: bl __unordtf2
|
|
; CHECK-GI-NEXT: cmp w0, #0
|
|
; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-GI-NEXT: fcsel d0, d8, d9, eq
|
|
; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-GI-NEXT: ret
|
|
entry:
|
|
%c = fcmp ord fp128 %a, %b
|
|
%s = select i1 %c, double %d, double %e
|
|
ret double %s
|
|
}
|
|
|
|
define double @uno(fp128 %a, fp128 %b, double %d, double %e) {
|
|
; CHECK-SD-LABEL: uno:
|
|
; CHECK-SD: // %bb.0: // %entry
|
|
; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-SD-NEXT: .cfi_offset w30, -16
|
|
; CHECK-SD-NEXT: .cfi_offset b8, -24
|
|
; CHECK-SD-NEXT: .cfi_offset b9, -32
|
|
; CHECK-SD-NEXT: fmov d8, d3
|
|
; CHECK-SD-NEXT: fmov d9, d2
|
|
; CHECK-SD-NEXT: bl __unordtf2
|
|
; CHECK-SD-NEXT: cmp w0, #0
|
|
; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-SD-NEXT: fcsel d0, d9, d8, ne
|
|
; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-SD-NEXT: ret
|
|
;
|
|
; CHECK-GI-LABEL: uno:
|
|
; CHECK-GI: // %bb.0: // %entry
|
|
; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-GI-NEXT: .cfi_offset w30, -16
|
|
; CHECK-GI-NEXT: .cfi_offset b8, -24
|
|
; CHECK-GI-NEXT: .cfi_offset b9, -32
|
|
; CHECK-GI-NEXT: fmov d8, d2
|
|
; CHECK-GI-NEXT: fmov d9, d3
|
|
; CHECK-GI-NEXT: bl __unordtf2
|
|
; CHECK-GI-NEXT: cmp w0, #0
|
|
; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-GI-NEXT: fcsel d0, d8, d9, ne
|
|
; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-GI-NEXT: ret
|
|
entry:
|
|
%c = fcmp uno fp128 %a, %b
|
|
%s = select i1 %c, double %d, double %e
|
|
ret double %s
|
|
}
|
|
|
|
define double @ueq(fp128 %a, fp128 %b, double %d, double %e) {
|
|
; CHECK-SD-LABEL: ueq:
|
|
; CHECK-SD: // %bb.0: // %entry
|
|
; CHECK-SD-NEXT: sub sp, sp, #64
|
|
; CHECK-SD-NEXT: stp d9, d8, [sp, #32] // 16-byte Folded Spill
|
|
; CHECK-SD-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill
|
|
; CHECK-SD-NEXT: .cfi_def_cfa_offset 64
|
|
; CHECK-SD-NEXT: .cfi_offset w19, -8
|
|
; CHECK-SD-NEXT: .cfi_offset w30, -16
|
|
; CHECK-SD-NEXT: .cfi_offset b8, -24
|
|
; CHECK-SD-NEXT: .cfi_offset b9, -32
|
|
; CHECK-SD-NEXT: fmov d8, d3
|
|
; CHECK-SD-NEXT: fmov d9, d2
|
|
; CHECK-SD-NEXT: stp q0, q1, [sp] // 32-byte Folded Spill
|
|
; CHECK-SD-NEXT: bl __eqtf2
|
|
; CHECK-SD-NEXT: ldp q0, q1, [sp] // 32-byte Folded Reload
|
|
; CHECK-SD-NEXT: mov w19, w0
|
|
; CHECK-SD-NEXT: bl __unordtf2
|
|
; CHECK-SD-NEXT: cmp w0, #0
|
|
; CHECK-SD-NEXT: ccmp w19, #0, #4, eq
|
|
; CHECK-SD-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload
|
|
; CHECK-SD-NEXT: fcsel d0, d9, d8, eq
|
|
; CHECK-SD-NEXT: ldp d9, d8, [sp, #32] // 16-byte Folded Reload
|
|
; CHECK-SD-NEXT: add sp, sp, #64
|
|
; CHECK-SD-NEXT: ret
|
|
;
|
|
; CHECK-GI-LABEL: ueq:
|
|
; CHECK-GI: // %bb.0: // %entry
|
|
; CHECK-GI-NEXT: sub sp, sp, #64
|
|
; CHECK-GI-NEXT: stp d9, d8, [sp, #32] // 16-byte Folded Spill
|
|
; CHECK-GI-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill
|
|
; CHECK-GI-NEXT: .cfi_def_cfa_offset 64
|
|
; CHECK-GI-NEXT: .cfi_offset w19, -8
|
|
; CHECK-GI-NEXT: .cfi_offset w30, -16
|
|
; CHECK-GI-NEXT: .cfi_offset b8, -24
|
|
; CHECK-GI-NEXT: .cfi_offset b9, -32
|
|
; CHECK-GI-NEXT: stp q1, q0, [sp] // 32-byte Folded Spill
|
|
; CHECK-GI-NEXT: fmov d8, d2
|
|
; CHECK-GI-NEXT: fmov d9, d3
|
|
; CHECK-GI-NEXT: bl __eqtf2
|
|
; CHECK-GI-NEXT: ldp q1, q0, [sp] // 32-byte Folded Reload
|
|
; CHECK-GI-NEXT: mov w19, w0
|
|
; CHECK-GI-NEXT: bl __unordtf2
|
|
; CHECK-GI-NEXT: cmp w0, #0
|
|
; CHECK-GI-NEXT: ccmp w19, #0, #4, eq
|
|
; CHECK-GI-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload
|
|
; CHECK-GI-NEXT: fcsel d0, d8, d9, eq
|
|
; CHECK-GI-NEXT: ldp d9, d8, [sp, #32] // 16-byte Folded Reload
|
|
; CHECK-GI-NEXT: add sp, sp, #64
|
|
; CHECK-GI-NEXT: ret
|
|
entry:
|
|
%c = fcmp ueq fp128 %a, %b
|
|
%s = select i1 %c, double %d, double %e
|
|
ret double %s
|
|
}
|
|
|
|
define double @ugt(fp128 %a, fp128 %b, double %d, double %e) {
|
|
; CHECK-SD-LABEL: ugt:
|
|
; CHECK-SD: // %bb.0: // %entry
|
|
; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-SD-NEXT: .cfi_offset w30, -16
|
|
; CHECK-SD-NEXT: .cfi_offset b8, -24
|
|
; CHECK-SD-NEXT: .cfi_offset b9, -32
|
|
; CHECK-SD-NEXT: fmov d8, d3
|
|
; CHECK-SD-NEXT: fmov d9, d2
|
|
; CHECK-SD-NEXT: bl __letf2
|
|
; CHECK-SD-NEXT: cmp w0, #0
|
|
; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-SD-NEXT: fcsel d0, d9, d8, gt
|
|
; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-SD-NEXT: ret
|
|
;
|
|
; CHECK-GI-LABEL: ugt:
|
|
; CHECK-GI: // %bb.0: // %entry
|
|
; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-GI-NEXT: .cfi_offset w30, -16
|
|
; CHECK-GI-NEXT: .cfi_offset b8, -24
|
|
; CHECK-GI-NEXT: .cfi_offset b9, -32
|
|
; CHECK-GI-NEXT: fmov d8, d2
|
|
; CHECK-GI-NEXT: fmov d9, d3
|
|
; CHECK-GI-NEXT: bl __letf2
|
|
; CHECK-GI-NEXT: cmp w0, #0
|
|
; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-GI-NEXT: fcsel d0, d8, d9, gt
|
|
; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-GI-NEXT: ret
|
|
entry:
|
|
%c = fcmp ugt fp128 %a, %b
|
|
%s = select i1 %c, double %d, double %e
|
|
ret double %s
|
|
}
|
|
|
|
define double @uge(fp128 %a, fp128 %b, double %d, double %e) {
|
|
; CHECK-SD-LABEL: uge:
|
|
; CHECK-SD: // %bb.0: // %entry
|
|
; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-SD-NEXT: .cfi_offset w30, -16
|
|
; CHECK-SD-NEXT: .cfi_offset b8, -24
|
|
; CHECK-SD-NEXT: .cfi_offset b9, -32
|
|
; CHECK-SD-NEXT: fmov d8, d3
|
|
; CHECK-SD-NEXT: fmov d9, d2
|
|
; CHECK-SD-NEXT: bl __lttf2
|
|
; CHECK-SD-NEXT: cmp w0, #0
|
|
; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-SD-NEXT: fcsel d0, d9, d8, pl
|
|
; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-SD-NEXT: ret
|
|
;
|
|
; CHECK-GI-LABEL: uge:
|
|
; CHECK-GI: // %bb.0: // %entry
|
|
; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-GI-NEXT: .cfi_offset w30, -16
|
|
; CHECK-GI-NEXT: .cfi_offset b8, -24
|
|
; CHECK-GI-NEXT: .cfi_offset b9, -32
|
|
; CHECK-GI-NEXT: fmov d8, d2
|
|
; CHECK-GI-NEXT: fmov d9, d3
|
|
; CHECK-GI-NEXT: bl __lttf2
|
|
; CHECK-GI-NEXT: cmp w0, #0
|
|
; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-GI-NEXT: fcsel d0, d8, d9, pl
|
|
; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-GI-NEXT: ret
|
|
entry:
|
|
%c = fcmp uge fp128 %a, %b
|
|
%s = select i1 %c, double %d, double %e
|
|
ret double %s
|
|
}
|
|
|
|
define double @ult(fp128 %a, fp128 %b, double %d, double %e) {
|
|
; CHECK-SD-LABEL: ult:
|
|
; CHECK-SD: // %bb.0: // %entry
|
|
; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-SD-NEXT: .cfi_offset w30, -16
|
|
; CHECK-SD-NEXT: .cfi_offset b8, -24
|
|
; CHECK-SD-NEXT: .cfi_offset b9, -32
|
|
; CHECK-SD-NEXT: fmov d8, d3
|
|
; CHECK-SD-NEXT: fmov d9, d2
|
|
; CHECK-SD-NEXT: bl __getf2
|
|
; CHECK-SD-NEXT: cmp w0, #0
|
|
; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-SD-NEXT: fcsel d0, d9, d8, mi
|
|
; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-SD-NEXT: ret
|
|
;
|
|
; CHECK-GI-LABEL: ult:
|
|
; CHECK-GI: // %bb.0: // %entry
|
|
; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-GI-NEXT: .cfi_offset w30, -16
|
|
; CHECK-GI-NEXT: .cfi_offset b8, -24
|
|
; CHECK-GI-NEXT: .cfi_offset b9, -32
|
|
; CHECK-GI-NEXT: fmov d8, d2
|
|
; CHECK-GI-NEXT: fmov d9, d3
|
|
; CHECK-GI-NEXT: bl __getf2
|
|
; CHECK-GI-NEXT: cmp w0, #0
|
|
; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-GI-NEXT: fcsel d0, d8, d9, mi
|
|
; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-GI-NEXT: ret
|
|
entry:
|
|
%c = fcmp ult fp128 %a, %b
|
|
%s = select i1 %c, double %d, double %e
|
|
ret double %s
|
|
}
|
|
|
|
define double @ule(fp128 %a, fp128 %b, double %d, double %e) {
|
|
; CHECK-SD-LABEL: ule:
|
|
; CHECK-SD: // %bb.0: // %entry
|
|
; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-SD-NEXT: .cfi_offset w30, -16
|
|
; CHECK-SD-NEXT: .cfi_offset b8, -24
|
|
; CHECK-SD-NEXT: .cfi_offset b9, -32
|
|
; CHECK-SD-NEXT: fmov d8, d3
|
|
; CHECK-SD-NEXT: fmov d9, d2
|
|
; CHECK-SD-NEXT: bl __gttf2
|
|
; CHECK-SD-NEXT: cmp w0, #0
|
|
; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-SD-NEXT: fcsel d0, d9, d8, le
|
|
; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-SD-NEXT: ret
|
|
;
|
|
; CHECK-GI-LABEL: ule:
|
|
; CHECK-GI: // %bb.0: // %entry
|
|
; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-GI-NEXT: .cfi_offset w30, -16
|
|
; CHECK-GI-NEXT: .cfi_offset b8, -24
|
|
; CHECK-GI-NEXT: .cfi_offset b9, -32
|
|
; CHECK-GI-NEXT: fmov d8, d2
|
|
; CHECK-GI-NEXT: fmov d9, d3
|
|
; CHECK-GI-NEXT: bl __gttf2
|
|
; CHECK-GI-NEXT: cmp w0, #0
|
|
; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-GI-NEXT: fcsel d0, d8, d9, le
|
|
; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-GI-NEXT: ret
|
|
entry:
|
|
%c = fcmp ule fp128 %a, %b
|
|
%s = select i1 %c, double %d, double %e
|
|
ret double %s
|
|
}
|
|
|
|
define double @une(fp128 %a, fp128 %b, double %d, double %e) {
|
|
; CHECK-SD-LABEL: une:
|
|
; CHECK-SD: // %bb.0: // %entry
|
|
; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-SD-NEXT: .cfi_offset w30, -16
|
|
; CHECK-SD-NEXT: .cfi_offset b8, -24
|
|
; CHECK-SD-NEXT: .cfi_offset b9, -32
|
|
; CHECK-SD-NEXT: fmov d8, d3
|
|
; CHECK-SD-NEXT: fmov d9, d2
|
|
; CHECK-SD-NEXT: bl __netf2
|
|
; CHECK-SD-NEXT: cmp w0, #0
|
|
; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-SD-NEXT: fcsel d0, d9, d8, ne
|
|
; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-SD-NEXT: ret
|
|
;
|
|
; CHECK-GI-LABEL: une:
|
|
; CHECK-GI: // %bb.0: // %entry
|
|
; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
|
|
; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill
|
|
; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-GI-NEXT: .cfi_offset w30, -16
|
|
; CHECK-GI-NEXT: .cfi_offset b8, -24
|
|
; CHECK-GI-NEXT: .cfi_offset b9, -32
|
|
; CHECK-GI-NEXT: fmov d8, d2
|
|
; CHECK-GI-NEXT: fmov d9, d3
|
|
; CHECK-GI-NEXT: bl __netf2
|
|
; CHECK-GI-NEXT: cmp w0, #0
|
|
; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload
|
|
; CHECK-GI-NEXT: fcsel d0, d8, d9, ne
|
|
; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
|
|
; CHECK-GI-NEXT: ret
|
|
entry:
|
|
%c = fcmp une fp128 %a, %b
|
|
%s = select i1 %c, double %d, double %e
|
|
ret double %s
|
|
}
|
|
|
|
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
|
|
; CHECK: {{.*}}
|