xref: /llvm-project/llvm/test/CodeGen/ARM/bf16-imm.ll (revision 3651635ecad1a5a62321bcd79dcbf20855ceb443)
1*3651635eSDavid Green; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*3651635eSDavid Green; RUN: llc -mtriple=armv8.6a-none-none-eabi < %s | FileCheck %s --check-prefixes=CHECK
3*3651635eSDavid Green; RUN: llc -mtriple=armv8.6a-none-none-eabi -mattr=+bf16,+neon < %s | FileCheck %s --check-prefixes=CHECK
4*3651635eSDavid Green; RUN: llc -mtriple=armv8.6a-none-none-eabi -mattr=+bf16,+neon,+fullfp16 < %s | FileCheck %s --check-prefix=CHECK-FP16
5*3651635eSDavid Green; RUN: llc -mtriple=armv8.6a-none-none-eabi -mattr=+bf16,+neon -float-abi=hard < %s | FileCheck %s --check-prefix=CHECK-HARD
6*3651635eSDavid Green
7*3651635eSDavid Greendefine bfloat @bitcast_zero() {
8*3651635eSDavid Green; CHECK-LABEL: bitcast_zero:
9*3651635eSDavid Green; CHECK:       @ %bb.0:
10*3651635eSDavid Green; CHECK-NEXT:    .pad #4
11*3651635eSDavid Green; CHECK-NEXT:    sub sp, sp, #4
12*3651635eSDavid Green; CHECK-NEXT:    mov r0, #0
13*3651635eSDavid Green; CHECK-NEXT:    strh r0, [sp, #2]
14*3651635eSDavid Green; CHECK-NEXT:    ldrh r0, [sp, #2]
15*3651635eSDavid Green; CHECK-NEXT:    add sp, sp, #4
16*3651635eSDavid Green; CHECK-NEXT:    bx lr
17*3651635eSDavid Green;
18*3651635eSDavid Green; CHECK-FP16-LABEL: bitcast_zero:
19*3651635eSDavid Green; CHECK-FP16:       @ %bb.0:
20*3651635eSDavid Green; CHECK-FP16-NEXT:    mov r0, #0
21*3651635eSDavid Green; CHECK-FP16-NEXT:    vmov.f16 s0, r0
22*3651635eSDavid Green; CHECK-FP16-NEXT:    vmov r0, s0
23*3651635eSDavid Green; CHECK-FP16-NEXT:    bx lr
24*3651635eSDavid Green;
25*3651635eSDavid Green; CHECK-HARD-LABEL: bitcast_zero:
26*3651635eSDavid Green; CHECK-HARD:       @ %bb.0:
27*3651635eSDavid Green; CHECK-HARD-NEXT:    .pad #4
28*3651635eSDavid Green; CHECK-HARD-NEXT:    sub sp, sp, #4
29*3651635eSDavid Green; CHECK-HARD-NEXT:    mov r0, #0
30*3651635eSDavid Green; CHECK-HARD-NEXT:    strh r0, [sp, #2]
31*3651635eSDavid Green; CHECK-HARD-NEXT:    ldrh r0, [sp, #2]
32*3651635eSDavid Green; CHECK-HARD-NEXT:    vmov s0, r0
33*3651635eSDavid Green; CHECK-HARD-NEXT:    add sp, sp, #4
34*3651635eSDavid Green; CHECK-HARD-NEXT:    bx lr
35*3651635eSDavid Green  %z = bitcast i16 0 to bfloat
36*3651635eSDavid Green  ret bfloat %z
37*3651635eSDavid Green}
38*3651635eSDavid Green
39*3651635eSDavid Greendefine bfloat @zero() {
40*3651635eSDavid Green; CHECK-LABEL: zero:
41*3651635eSDavid Green; CHECK:       @ %bb.0:
42*3651635eSDavid Green; CHECK-NEXT:    adr r0, .LCPI1_0
43*3651635eSDavid Green; CHECK-NEXT:    ldrh r0, [r0]
44*3651635eSDavid Green; CHECK-NEXT:    bx lr
45*3651635eSDavid Green; CHECK-NEXT:    .p2align 1
46*3651635eSDavid Green; CHECK-NEXT:  @ %bb.1:
47*3651635eSDavid Green; CHECK-NEXT:  .LCPI1_0:
48*3651635eSDavid Green; CHECK-NEXT:    .short 0x0000 @ bfloat 0
49*3651635eSDavid Green;
50*3651635eSDavid Green; CHECK-FP16-LABEL: zero:
51*3651635eSDavid Green; CHECK-FP16:       @ %bb.0:
52*3651635eSDavid Green; CHECK-FP16-NEXT:    vldr.16 s0, .LCPI1_0
53*3651635eSDavid Green; CHECK-FP16-NEXT:    vmov r0, s0
54*3651635eSDavid Green; CHECK-FP16-NEXT:    bx lr
55*3651635eSDavid Green; CHECK-FP16-NEXT:    .p2align 1
56*3651635eSDavid Green; CHECK-FP16-NEXT:  @ %bb.1:
57*3651635eSDavid Green; CHECK-FP16-NEXT:  .LCPI1_0:
58*3651635eSDavid Green; CHECK-FP16-NEXT:    .short 0x0000 @ bfloat 0
59*3651635eSDavid Green;
60*3651635eSDavid Green; CHECK-HARD-LABEL: zero:
61*3651635eSDavid Green; CHECK-HARD:       @ %bb.0:
62*3651635eSDavid Green; CHECK-HARD-NEXT:    adr r0, .LCPI1_0
63*3651635eSDavid Green; CHECK-HARD-NEXT:    ldrh r0, [r0]
64*3651635eSDavid Green; CHECK-HARD-NEXT:    vmov s0, r0
65*3651635eSDavid Green; CHECK-HARD-NEXT:    bx lr
66*3651635eSDavid Green; CHECK-HARD-NEXT:    .p2align 1
67*3651635eSDavid Green; CHECK-HARD-NEXT:  @ %bb.1:
68*3651635eSDavid Green; CHECK-HARD-NEXT:  .LCPI1_0:
69*3651635eSDavid Green; CHECK-HARD-NEXT:    .short 0x0000 @ bfloat 0
70*3651635eSDavid Green  ret bfloat 0xR0000
71*3651635eSDavid Green}
72*3651635eSDavid Green
73*3651635eSDavid Greendefine bfloat @bitcast_tenk() {
74*3651635eSDavid Green; CHECK-LABEL: bitcast_tenk:
75*3651635eSDavid Green; CHECK:       @ %bb.0:
76*3651635eSDavid Green; CHECK-NEXT:    .pad #4
77*3651635eSDavid Green; CHECK-NEXT:    sub sp, sp, #4
78*3651635eSDavid Green; CHECK-NEXT:    movw r0, #10000
79*3651635eSDavid Green; CHECK-NEXT:    strh r0, [sp, #2]
80*3651635eSDavid Green; CHECK-NEXT:    ldrh r0, [sp, #2]
81*3651635eSDavid Green; CHECK-NEXT:    add sp, sp, #4
82*3651635eSDavid Green; CHECK-NEXT:    bx lr
83*3651635eSDavid Green;
84*3651635eSDavid Green; CHECK-FP16-LABEL: bitcast_tenk:
85*3651635eSDavid Green; CHECK-FP16:       @ %bb.0:
86*3651635eSDavid Green; CHECK-FP16-NEXT:    movw r0, #10000
87*3651635eSDavid Green; CHECK-FP16-NEXT:    vmov.f16 s0, r0
88*3651635eSDavid Green; CHECK-FP16-NEXT:    vmov r0, s0
89*3651635eSDavid Green; CHECK-FP16-NEXT:    bx lr
90*3651635eSDavid Green;
91*3651635eSDavid Green; CHECK-HARD-LABEL: bitcast_tenk:
92*3651635eSDavid Green; CHECK-HARD:       @ %bb.0:
93*3651635eSDavid Green; CHECK-HARD-NEXT:    .pad #4
94*3651635eSDavid Green; CHECK-HARD-NEXT:    sub sp, sp, #4
95*3651635eSDavid Green; CHECK-HARD-NEXT:    movw r0, #10000
96*3651635eSDavid Green; CHECK-HARD-NEXT:    strh r0, [sp, #2]
97*3651635eSDavid Green; CHECK-HARD-NEXT:    ldrh r0, [sp, #2]
98*3651635eSDavid Green; CHECK-HARD-NEXT:    vmov s0, r0
99*3651635eSDavid Green; CHECK-HARD-NEXT:    add sp, sp, #4
100*3651635eSDavid Green; CHECK-HARD-NEXT:    bx lr
101*3651635eSDavid Green  %z = bitcast i16 10000 to bfloat
102*3651635eSDavid Green  ret bfloat %z
103*3651635eSDavid Green}
104*3651635eSDavid Green
105*3651635eSDavid Greendefine bfloat @minus0() {
106*3651635eSDavid Green; CHECK-LABEL: minus0:
107*3651635eSDavid Green; CHECK:       @ %bb.0:
108*3651635eSDavid Green; CHECK-NEXT:    adr r0, .LCPI3_0
109*3651635eSDavid Green; CHECK-NEXT:    ldrh r0, [r0]
110*3651635eSDavid Green; CHECK-NEXT:    bx lr
111*3651635eSDavid Green; CHECK-NEXT:    .p2align 1
112*3651635eSDavid Green; CHECK-NEXT:  @ %bb.1:
113*3651635eSDavid Green; CHECK-NEXT:  .LCPI3_0:
114*3651635eSDavid Green; CHECK-NEXT:    .short 0x8000 @ bfloat -0
115*3651635eSDavid Green;
116*3651635eSDavid Green; CHECK-FP16-LABEL: minus0:
117*3651635eSDavid Green; CHECK-FP16:       @ %bb.0:
118*3651635eSDavid Green; CHECK-FP16-NEXT:    vldr.16 s0, .LCPI3_0
119*3651635eSDavid Green; CHECK-FP16-NEXT:    vmov r0, s0
120*3651635eSDavid Green; CHECK-FP16-NEXT:    bx lr
121*3651635eSDavid Green; CHECK-FP16-NEXT:    .p2align 1
122*3651635eSDavid Green; CHECK-FP16-NEXT:  @ %bb.1:
123*3651635eSDavid Green; CHECK-FP16-NEXT:  .LCPI3_0:
124*3651635eSDavid Green; CHECK-FP16-NEXT:    .short 0x8000 @ bfloat -0
125*3651635eSDavid Green;
126*3651635eSDavid Green; CHECK-HARD-LABEL: minus0:
127*3651635eSDavid Green; CHECK-HARD:       @ %bb.0:
128*3651635eSDavid Green; CHECK-HARD-NEXT:    adr r0, .LCPI3_0
129*3651635eSDavid Green; CHECK-HARD-NEXT:    ldrh r0, [r0]
130*3651635eSDavid Green; CHECK-HARD-NEXT:    vmov s0, r0
131*3651635eSDavid Green; CHECK-HARD-NEXT:    bx lr
132*3651635eSDavid Green; CHECK-HARD-NEXT:    .p2align 1
133*3651635eSDavid Green; CHECK-HARD-NEXT:  @ %bb.1:
134*3651635eSDavid Green; CHECK-HARD-NEXT:  .LCPI3_0:
135*3651635eSDavid Green; CHECK-HARD-NEXT:    .short 0x8000 @ bfloat -0
136*3651635eSDavid Green  ret bfloat 0xR8000
137*3651635eSDavid Green}
138