Files
clang-p2996/llvm/test/CodeGen/ARM/inlineasm-fp-half.ll
Archibald Elliott 7d15212b8c [ARM] Support fp16/bf16 using w constraint
fp16 and bf16 values can be used in GCC's inline assembly using the "w"
constraint, which means "VFP floating-point registers d0-d31" - fp16 and
bf16 values are stored in S registers (which alias the D registers).

This change ensures that LLVM is compatible with GCC for programs that
use fp16 and the 'w' constraint.

Differential Revision: https://reviews.llvm.org/D135662
2022-10-13 10:32:06 +01:00

61 lines
1.7 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=arm -mattr=+armv8.2-a,+fp-armv8,+fullfp16,+bf16,-neon %s -o - | FileCheck %s
; RUN: llc -mtriple=thumb -mattr=+armv8.2-a,+fp-armv8,+fullfp16,+bf16,-neon %s -o - | FileCheck %s
define arm_aapcscc half @f_t(half %x) nounwind {
; CHECK-LABEL: f_t:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vmov.f16 s0, r0
; CHECK-NEXT: @APP
; CHECK-NEXT: vsqrt.f16 s0, s0
; CHECK-NEXT: @NO_APP
; CHECK-NEXT: vmov r0, s0
; CHECK-NEXT: bx lr
entry:
%0 = tail call half asm "vsqrt.f16 $0, $1", "=t,t"(half %x)
ret half %0
}
define arm_aapcscc half @f_w(half %x) nounwind {
; CHECK-LABEL: f_w:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vmov.f16 s0, r0
; CHECK-NEXT: @APP
; CHECK-NEXT: vsqrt.f16 s0, s0
; CHECK-NEXT: @NO_APP
; CHECK-NEXT: vmov r0, s0
; CHECK-NEXT: bx lr
entry:
%0 = tail call half asm "vsqrt.f16 $0, $1", "=w,w"(half %x)
ret half %0
}
define arm_aapcscc bfloat @h_t(bfloat %x) nounwind {
; CHECK-LABEL: h_t:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vmov.f16 s0, r0
; CHECK-NEXT: @APP
; CHECK-NEXT: vmov.f32 s0, s0
; CHECK-NEXT: @NO_APP
; CHECK-NEXT: vmov.f16 r0, s0
; CHECK-NEXT: bx lr
entry:
%0 = tail call bfloat asm "vmov.f32 $0, $1", "=t,t"(bfloat %x)
ret bfloat %0
}
define arm_aapcscc bfloat @h_w(bfloat %x) nounwind {
; CHECK-LABEL: h_w:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vmov.f16 s0, r0
; CHECK-NEXT: @APP
; CHECK-NEXT: vmov.f32 s0, s0
; CHECK-NEXT: @NO_APP
; CHECK-NEXT: vmov.f16 r0, s0
; CHECK-NEXT: bx lr
entry:
%0 = tail call bfloat asm "vmov.f32 $0, $1", "=w,w"(bfloat %x)
ret bfloat %0
}