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
361 lines
12 KiB
LLVM
361 lines
12 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
|
|
; RUN: llc -mtriple=armv8m.main-none-eabi < %s -frame-pointer=none -mattr=+fp-armv8d16 | FileCheck %s --check-prefix=LE
|
|
; RUN: llc -mtriple=armebv8m.main-none-eabi < %s -frame-pointer=none -mattr=+fp-armv8d16 | FileCheck %s --check-prefix=BE
|
|
; RUN: llc -mtriple=armv8m.main-none-eabi < %s -frame-pointer=none -mattr=+fp-armv8d16,+fullfp16 | FileCheck %s --check-prefix=LE-FP16
|
|
; RUN: llc -mtriple=armebv8m.main-none-eabi < %s -frame-pointer=none -mattr=+fp-armv8d16,+fullfp16 | FileCheck %s --check-prefix=BE-FP16
|
|
|
|
;; Global ISel successfully generates code for some functions for little-endian
|
|
;; without +fullfp16, and falls back to SelectionDAG in all others.
|
|
; RUN: llc -mtriple=armv8m.main-none-eabi < %s -frame-pointer=none -mattr=+fp-armv8d16 -global-isel=1 -global-isel-abort=2 | FileCheck %s --check-prefix=LE-GISEL
|
|
; RUN: llc -mtriple=armebv8m.main-none-eabi < %s -frame-pointer=none -mattr=+fp-armv8d16 -global-isel=1 -global-isel-abort=2 | FileCheck %s --check-prefix=BE
|
|
; RUN: llc -mtriple=armv8m.main-none-eabi < %s -frame-pointer=none -mattr=+fp-armv8d16,+fullfp16 -global-isel=1 -global-isel-abort=2 | FileCheck %s --check-prefix=LE-FP16
|
|
; RUN: llc -mtriple=armebv8m.main-none-eabi < %s -frame-pointer=none -mattr=+fp-armv8d16,+fullfp16 -global-isel=1 -global-isel-abort=2 | FileCheck %s --check-prefix=BE-FP16
|
|
|
|
define arm_aapcscc half @callee_soft_half_in_reg(half %f) {
|
|
; LE-LABEL: callee_soft_half_in_reg:
|
|
; LE: @ %bb.0: @ %entry
|
|
; LE-NEXT: bx lr
|
|
;
|
|
; BE-LABEL: callee_soft_half_in_reg:
|
|
; BE: @ %bb.0: @ %entry
|
|
; BE-NEXT: bx lr
|
|
;
|
|
; LE-FP16-LABEL: callee_soft_half_in_reg:
|
|
; LE-FP16: @ %bb.0: @ %entry
|
|
; LE-FP16-NEXT: vmov.f16 s0, r0
|
|
; LE-FP16-NEXT: vmov r0, s0
|
|
; LE-FP16-NEXT: bx lr
|
|
;
|
|
; BE-FP16-LABEL: callee_soft_half_in_reg:
|
|
; BE-FP16: @ %bb.0: @ %entry
|
|
; BE-FP16-NEXT: vmov.f16 s0, r0
|
|
; BE-FP16-NEXT: vmov r0, s0
|
|
; BE-FP16-NEXT: bx lr
|
|
;
|
|
; LE-GISEL-LABEL: callee_soft_half_in_reg:
|
|
; LE-GISEL: @ %bb.0: @ %entry
|
|
; LE-GISEL-NEXT: bx lr
|
|
entry:
|
|
ret half %f
|
|
}
|
|
|
|
define void @caller_soft_half_in_reg() {
|
|
; LE-LABEL: caller_soft_half_in_reg:
|
|
; LE: @ %bb.0: @ %entry
|
|
; LE-NEXT: .save {r7, lr}
|
|
; LE-NEXT: push {r7, lr}
|
|
; LE-NEXT: mov.w r0, #15360
|
|
; LE-NEXT: bl callee_soft_half_in_reg
|
|
; LE-NEXT: pop {r7, pc}
|
|
;
|
|
; BE-LABEL: caller_soft_half_in_reg:
|
|
; BE: @ %bb.0: @ %entry
|
|
; BE-NEXT: .save {r7, lr}
|
|
; BE-NEXT: push {r7, lr}
|
|
; BE-NEXT: mov.w r0, #15360
|
|
; BE-NEXT: bl callee_soft_half_in_reg
|
|
; BE-NEXT: pop {r7, pc}
|
|
;
|
|
; LE-FP16-LABEL: caller_soft_half_in_reg:
|
|
; LE-FP16: @ %bb.0: @ %entry
|
|
; LE-FP16-NEXT: .save {r7, lr}
|
|
; LE-FP16-NEXT: push {r7, lr}
|
|
; LE-FP16-NEXT: mov.w r0, #15360
|
|
; LE-FP16-NEXT: bl callee_soft_half_in_reg
|
|
; LE-FP16-NEXT: pop {r7, pc}
|
|
;
|
|
; BE-FP16-LABEL: caller_soft_half_in_reg:
|
|
; BE-FP16: @ %bb.0: @ %entry
|
|
; BE-FP16-NEXT: .save {r7, lr}
|
|
; BE-FP16-NEXT: push {r7, lr}
|
|
; BE-FP16-NEXT: mov.w r0, #15360
|
|
; BE-FP16-NEXT: bl callee_soft_half_in_reg
|
|
; BE-FP16-NEXT: pop {r7, pc}
|
|
;
|
|
; LE-GISEL-LABEL: caller_soft_half_in_reg:
|
|
; LE-GISEL: @ %bb.0: @ %entry
|
|
; LE-GISEL-NEXT: .save {r7, lr}
|
|
; LE-GISEL-NEXT: push {r7, lr}
|
|
; LE-GISEL-NEXT: mov.w r0, #15360
|
|
; LE-GISEL-NEXT: bl callee_soft_half_in_reg
|
|
; LE-GISEL-NEXT: pop {r7, pc}
|
|
entry:
|
|
%ret = call arm_aapcscc half @callee_soft_half_in_reg(half 1.0)
|
|
ret void
|
|
}
|
|
|
|
define arm_aapcscc half @callee_soft_half_on_stack(float %r0, float %r1, float %r2, float %r3, half %f) {
|
|
; LE-LABEL: callee_soft_half_on_stack:
|
|
; LE: @ %bb.0: @ %entry
|
|
; LE-NEXT: ldr r0, [sp]
|
|
; LE-NEXT: bx lr
|
|
;
|
|
; BE-LABEL: callee_soft_half_on_stack:
|
|
; BE: @ %bb.0: @ %entry
|
|
; BE-NEXT: ldr r0, [sp]
|
|
; BE-NEXT: bx lr
|
|
;
|
|
; LE-FP16-LABEL: callee_soft_half_on_stack:
|
|
; LE-FP16: @ %bb.0: @ %entry
|
|
; LE-FP16-NEXT: vldr.16 s0, [sp]
|
|
; LE-FP16-NEXT: vmov r0, s0
|
|
; LE-FP16-NEXT: bx lr
|
|
;
|
|
; BE-FP16-LABEL: callee_soft_half_on_stack:
|
|
; BE-FP16: @ %bb.0: @ %entry
|
|
; BE-FP16-NEXT: vldr.16 s0, [sp, #2]
|
|
; BE-FP16-NEXT: vmov r0, s0
|
|
; BE-FP16-NEXT: bx lr
|
|
;
|
|
; LE-GISEL-LABEL: callee_soft_half_on_stack:
|
|
; LE-GISEL: @ %bb.0: @ %entry
|
|
; LE-GISEL-NEXT: mov r0, sp
|
|
; LE-GISEL-NEXT: ldr r0, [r0]
|
|
; LE-GISEL-NEXT: bx lr
|
|
entry:
|
|
ret half %f
|
|
}
|
|
|
|
define void @caller_soft_half_on_stack() {
|
|
; LE-LABEL: caller_soft_half_on_stack:
|
|
; LE: @ %bb.0: @ %entry
|
|
; LE-NEXT: .save {r7, lr}
|
|
; LE-NEXT: push {r7, lr}
|
|
; LE-NEXT: .pad #8
|
|
; LE-NEXT: sub sp, #8
|
|
; LE-NEXT: mov.w r0, #15360
|
|
; LE-NEXT: str r0, [sp]
|
|
; LE-NEXT: bl callee_soft_half_on_stack
|
|
; LE-NEXT: add sp, #8
|
|
; LE-NEXT: pop {r7, pc}
|
|
;
|
|
; BE-LABEL: caller_soft_half_on_stack:
|
|
; BE: @ %bb.0: @ %entry
|
|
; BE-NEXT: .save {r7, lr}
|
|
; BE-NEXT: push {r7, lr}
|
|
; BE-NEXT: .pad #8
|
|
; BE-NEXT: sub sp, #8
|
|
; BE-NEXT: mov.w r0, #15360
|
|
; BE-NEXT: str r0, [sp]
|
|
; BE-NEXT: bl callee_soft_half_on_stack
|
|
; BE-NEXT: add sp, #8
|
|
; BE-NEXT: pop {r7, pc}
|
|
;
|
|
; LE-FP16-LABEL: caller_soft_half_on_stack:
|
|
; LE-FP16: @ %bb.0: @ %entry
|
|
; LE-FP16-NEXT: .save {r7, lr}
|
|
; LE-FP16-NEXT: push {r7, lr}
|
|
; LE-FP16-NEXT: .pad #8
|
|
; LE-FP16-NEXT: sub sp, #8
|
|
; LE-FP16-NEXT: mov.w r0, #15360
|
|
; LE-FP16-NEXT: str r0, [sp]
|
|
; LE-FP16-NEXT: bl callee_soft_half_on_stack
|
|
; LE-FP16-NEXT: add sp, #8
|
|
; LE-FP16-NEXT: pop {r7, pc}
|
|
;
|
|
; BE-FP16-LABEL: caller_soft_half_on_stack:
|
|
; BE-FP16: @ %bb.0: @ %entry
|
|
; BE-FP16-NEXT: .save {r7, lr}
|
|
; BE-FP16-NEXT: push {r7, lr}
|
|
; BE-FP16-NEXT: .pad #8
|
|
; BE-FP16-NEXT: sub sp, #8
|
|
; BE-FP16-NEXT: mov.w r0, #15360
|
|
; BE-FP16-NEXT: str r0, [sp]
|
|
; BE-FP16-NEXT: bl callee_soft_half_on_stack
|
|
; BE-FP16-NEXT: add sp, #8
|
|
; BE-FP16-NEXT: pop {r7, pc}
|
|
;
|
|
; LE-GISEL-LABEL: caller_soft_half_on_stack:
|
|
; LE-GISEL: @ %bb.0: @ %entry
|
|
; LE-GISEL-NEXT: .save {r7, lr}
|
|
; LE-GISEL-NEXT: push {r7, lr}
|
|
; LE-GISEL-NEXT: .pad #8
|
|
; LE-GISEL-NEXT: sub sp, #8
|
|
; LE-GISEL-NEXT: mov.w r0, #15360
|
|
; LE-GISEL-NEXT: str r0, [sp]
|
|
; LE-GISEL-NEXT: bl callee_soft_half_on_stack
|
|
; LE-GISEL-NEXT: add sp, #8
|
|
; LE-GISEL-NEXT: pop {r7, pc}
|
|
entry:
|
|
%ret = call arm_aapcscc half @callee_soft_half_on_stack(float poison, float poison, float poison, float poison, half 1.0)
|
|
ret void
|
|
}
|
|
|
|
define arm_aapcs_vfpcc half @callee_hard_half_in_reg(half %f) {
|
|
; LE-LABEL: callee_hard_half_in_reg:
|
|
; LE: @ %bb.0: @ %entry
|
|
; LE-NEXT: bx lr
|
|
;
|
|
; BE-LABEL: callee_hard_half_in_reg:
|
|
; BE: @ %bb.0: @ %entry
|
|
; BE-NEXT: bx lr
|
|
;
|
|
; LE-FP16-LABEL: callee_hard_half_in_reg:
|
|
; LE-FP16: @ %bb.0: @ %entry
|
|
; LE-FP16-NEXT: bx lr
|
|
;
|
|
; BE-FP16-LABEL: callee_hard_half_in_reg:
|
|
; BE-FP16: @ %bb.0: @ %entry
|
|
; BE-FP16-NEXT: bx lr
|
|
;
|
|
; LE-GISEL-LABEL: callee_hard_half_in_reg:
|
|
; LE-GISEL: @ %bb.0: @ %entry
|
|
; LE-GISEL-NEXT: bx lr
|
|
entry:
|
|
ret half %f
|
|
}
|
|
|
|
define void @caller_hard_half_in_reg() {
|
|
; LE-LABEL: caller_hard_half_in_reg:
|
|
; LE: @ %bb.0: @ %entry
|
|
; LE-NEXT: .save {r7, lr}
|
|
; LE-NEXT: push {r7, lr}
|
|
; LE-NEXT: vldr s0, .LCPI5_0
|
|
; LE-NEXT: bl callee_hard_half_in_reg
|
|
; LE-NEXT: pop {r7, pc}
|
|
; LE-NEXT: .p2align 2
|
|
; LE-NEXT: @ %bb.1:
|
|
; LE-NEXT: .LCPI5_0:
|
|
; LE-NEXT: .long 0x00003c00 @ float 2.15239444E-41
|
|
;
|
|
; BE-LABEL: caller_hard_half_in_reg:
|
|
; BE: @ %bb.0: @ %entry
|
|
; BE-NEXT: .save {r7, lr}
|
|
; BE-NEXT: push {r7, lr}
|
|
; BE-NEXT: vldr s0, .LCPI5_0
|
|
; BE-NEXT: bl callee_hard_half_in_reg
|
|
; BE-NEXT: pop {r7, pc}
|
|
; BE-NEXT: .p2align 2
|
|
; BE-NEXT: @ %bb.1:
|
|
; BE-NEXT: .LCPI5_0:
|
|
; BE-NEXT: .long 0x00003c00 @ float 2.15239444E-41
|
|
;
|
|
; LE-FP16-LABEL: caller_hard_half_in_reg:
|
|
; LE-FP16: @ %bb.0: @ %entry
|
|
; LE-FP16-NEXT: .save {r7, lr}
|
|
; LE-FP16-NEXT: push {r7, lr}
|
|
; LE-FP16-NEXT: vmov.f16 s0, #1.000000e+00
|
|
; LE-FP16-NEXT: bl callee_hard_half_in_reg
|
|
; LE-FP16-NEXT: pop {r7, pc}
|
|
;
|
|
; BE-FP16-LABEL: caller_hard_half_in_reg:
|
|
; BE-FP16: @ %bb.0: @ %entry
|
|
; BE-FP16-NEXT: .save {r7, lr}
|
|
; BE-FP16-NEXT: push {r7, lr}
|
|
; BE-FP16-NEXT: vmov.f16 s0, #1.000000e+00
|
|
; BE-FP16-NEXT: bl callee_hard_half_in_reg
|
|
; BE-FP16-NEXT: pop {r7, pc}
|
|
;
|
|
; LE-GISEL-LABEL: caller_hard_half_in_reg:
|
|
; LE-GISEL: @ %bb.0: @ %entry
|
|
; LE-GISEL-NEXT: .save {r7, lr}
|
|
; LE-GISEL-NEXT: push {r7, lr}
|
|
; LE-GISEL-NEXT: vldr s0, .LCPI5_0
|
|
; LE-GISEL-NEXT: bl callee_hard_half_in_reg
|
|
; LE-GISEL-NEXT: pop {r7, pc}
|
|
; LE-GISEL-NEXT: .p2align 2
|
|
; LE-GISEL-NEXT: @ %bb.1:
|
|
; LE-GISEL-NEXT: .LCPI5_0:
|
|
; LE-GISEL-NEXT: .long 0x00003c00 @ float 2.15239444E-41
|
|
entry:
|
|
%ret = call arm_aapcs_vfpcc half @callee_hard_half_in_reg(half 1.0)
|
|
ret void
|
|
}
|
|
|
|
define arm_aapcs_vfpcc half @callee_hard_half_on_stack(float %s0, float %s1, float %s2, float %s3, float %s4, float %s5, float %s6, float %s7,float %s8, float %s9, float %s10, float %s11, float %s12, float %s13, float %s14, float %s15, half %f) {
|
|
; LE-LABEL: callee_hard_half_on_stack:
|
|
; LE: @ %bb.0: @ %entry
|
|
; LE-NEXT: vldr s0, [sp]
|
|
; LE-NEXT: bx lr
|
|
;
|
|
; BE-LABEL: callee_hard_half_on_stack:
|
|
; BE: @ %bb.0: @ %entry
|
|
; BE-NEXT: vldr s0, [sp]
|
|
; BE-NEXT: bx lr
|
|
;
|
|
; LE-FP16-LABEL: callee_hard_half_on_stack:
|
|
; LE-FP16: @ %bb.0: @ %entry
|
|
; LE-FP16-NEXT: vldr.16 s0, [sp]
|
|
; LE-FP16-NEXT: bx lr
|
|
;
|
|
; BE-FP16-LABEL: callee_hard_half_on_stack:
|
|
; BE-FP16: @ %bb.0: @ %entry
|
|
; BE-FP16-NEXT: vldr.16 s0, [sp, #2]
|
|
; BE-FP16-NEXT: bx lr
|
|
;
|
|
; LE-GISEL-LABEL: callee_hard_half_on_stack:
|
|
; LE-GISEL: @ %bb.0: @ %entry
|
|
; LE-GISEL-NEXT: mov r0, sp
|
|
; LE-GISEL-NEXT: ldr r0, [r0]
|
|
; LE-GISEL-NEXT: vmov s0, r0
|
|
; LE-GISEL-NEXT: bx lr
|
|
entry:
|
|
ret half %f
|
|
}
|
|
|
|
|
|
define void @caller_hard_half_on_stack() {
|
|
; LE-LABEL: caller_hard_half_on_stack:
|
|
; LE: @ %bb.0: @ %entry
|
|
; LE-NEXT: .save {r7, lr}
|
|
; LE-NEXT: push {r7, lr}
|
|
; LE-NEXT: .pad #8
|
|
; LE-NEXT: sub sp, #8
|
|
; LE-NEXT: mov.w r0, #15360
|
|
; LE-NEXT: str r0, [sp]
|
|
; LE-NEXT: bl callee_hard_half_on_stack
|
|
; LE-NEXT: add sp, #8
|
|
; LE-NEXT: pop {r7, pc}
|
|
;
|
|
; BE-LABEL: caller_hard_half_on_stack:
|
|
; BE: @ %bb.0: @ %entry
|
|
; BE-NEXT: .save {r7, lr}
|
|
; BE-NEXT: push {r7, lr}
|
|
; BE-NEXT: .pad #8
|
|
; BE-NEXT: sub sp, #8
|
|
; BE-NEXT: mov.w r0, #15360
|
|
; BE-NEXT: str r0, [sp]
|
|
; BE-NEXT: bl callee_hard_half_on_stack
|
|
; BE-NEXT: add sp, #8
|
|
; BE-NEXT: pop {r7, pc}
|
|
;
|
|
; LE-FP16-LABEL: caller_hard_half_on_stack:
|
|
; LE-FP16: @ %bb.0: @ %entry
|
|
; LE-FP16-NEXT: .save {r7, lr}
|
|
; LE-FP16-NEXT: push {r7, lr}
|
|
; LE-FP16-NEXT: .pad #8
|
|
; LE-FP16-NEXT: sub sp, #8
|
|
; LE-FP16-NEXT: mov.w r0, #15360
|
|
; LE-FP16-NEXT: str r0, [sp]
|
|
; LE-FP16-NEXT: bl callee_hard_half_on_stack
|
|
; LE-FP16-NEXT: add sp, #8
|
|
; LE-FP16-NEXT: pop {r7, pc}
|
|
;
|
|
; BE-FP16-LABEL: caller_hard_half_on_stack:
|
|
; BE-FP16: @ %bb.0: @ %entry
|
|
; BE-FP16-NEXT: .save {r7, lr}
|
|
; BE-FP16-NEXT: push {r7, lr}
|
|
; BE-FP16-NEXT: .pad #8
|
|
; BE-FP16-NEXT: sub sp, #8
|
|
; BE-FP16-NEXT: mov.w r0, #15360
|
|
; BE-FP16-NEXT: str r0, [sp]
|
|
; BE-FP16-NEXT: bl callee_hard_half_on_stack
|
|
; BE-FP16-NEXT: add sp, #8
|
|
; BE-FP16-NEXT: pop {r7, pc}
|
|
;
|
|
; LE-GISEL-LABEL: caller_hard_half_on_stack:
|
|
; LE-GISEL: @ %bb.0: @ %entry
|
|
; LE-GISEL-NEXT: .save {r7, lr}
|
|
; LE-GISEL-NEXT: push {r7, lr}
|
|
; LE-GISEL-NEXT: .pad #8
|
|
; LE-GISEL-NEXT: sub sp, #8
|
|
; LE-GISEL-NEXT: mov.w r0, #15360
|
|
; LE-GISEL-NEXT: str r0, [sp]
|
|
; LE-GISEL-NEXT: bl callee_hard_half_on_stack
|
|
; LE-GISEL-NEXT: add sp, #8
|
|
; LE-GISEL-NEXT: pop {r7, pc}
|
|
entry:
|
|
%ret = call arm_aapcs_vfpcc half @callee_hard_half_on_stack(float poison, float poison, float poison, float poison, float poison, float poison, float poison, float poison, float poison, float poison, float poison, float poison, float poison, float poison, float poison, float poison, half 1.0)
|
|
ret void
|
|
}
|