1*ecdf48f1SAlexandros Lamprineas; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*ecdf48f1SAlexandros Lamprineas; RUN: llc -float-abi hard -mattr=+bf16,+fullfp16 < %s | FileCheck %s --check-prefix=HARD
3*ecdf48f1SAlexandros Lamprineas; RUN: llc -float-abi soft -mattr=+bf16,+fullfp16 < %s | FileCheck %s --check-prefix=SOFT
4*ecdf48f1SAlexandros Lamprineas
5*ecdf48f1SAlexandros Lamprineastarget datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
6*ecdf48f1SAlexandros Lamprineastarget triple = "armv8.6a-arm-none-eabi"
7*ecdf48f1SAlexandros Lamprineas
8*ecdf48f1SAlexandros Lamprineasdefine bfloat @load_scalar_bf(bfloat* %addr) {
9*ecdf48f1SAlexandros Lamprineas; HARD-LABEL: load_scalar_bf:
10*ecdf48f1SAlexandros Lamprineas; HARD:       @ %bb.0: @ %entry
11*ecdf48f1SAlexandros Lamprineas; HARD-NEXT:    vldr.16 s0, [r0]
12*ecdf48f1SAlexandros Lamprineas; HARD-NEXT:    bx lr
13*ecdf48f1SAlexandros Lamprineas;
14*ecdf48f1SAlexandros Lamprineas; SOFT-LABEL: load_scalar_bf:
15*ecdf48f1SAlexandros Lamprineas; SOFT:       @ %bb.0: @ %entry
16*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT:    vldr.16 s0, [r0]
17*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT:    vmov r0, s0
18*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT:    bx lr
19*ecdf48f1SAlexandros Lamprineasentry:
20*ecdf48f1SAlexandros Lamprineas  %0 = load bfloat, bfloat* %addr, align 2
21*ecdf48f1SAlexandros Lamprineas  ret bfloat %0
22*ecdf48f1SAlexandros Lamprineas}
23*ecdf48f1SAlexandros Lamprineas
24*ecdf48f1SAlexandros Lamprineasdefine void @store_scalar_bf(bfloat %v, bfloat* %addr) {
25*ecdf48f1SAlexandros Lamprineas; HARD-LABEL: store_scalar_bf:
26*ecdf48f1SAlexandros Lamprineas; HARD:       @ %bb.0: @ %entry
27*ecdf48f1SAlexandros Lamprineas; HARD-NEXT:    vstr.16 s0, [r0]
28*ecdf48f1SAlexandros Lamprineas; HARD-NEXT:    bx lr
29*ecdf48f1SAlexandros Lamprineas;
30*ecdf48f1SAlexandros Lamprineas; SOFT-LABEL: store_scalar_bf:
31*ecdf48f1SAlexandros Lamprineas; SOFT:       @ %bb.0: @ %entry
32*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT:    vmov.f16 s0, r0
33*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT:    vstr.16 s0, [r1]
34*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT:    bx lr
35*ecdf48f1SAlexandros Lamprineasentry:
36*ecdf48f1SAlexandros Lamprineas  store bfloat %v, bfloat* %addr, align 2
37*ecdf48f1SAlexandros Lamprineas  ret void
38*ecdf48f1SAlexandros Lamprineas}
39*ecdf48f1SAlexandros Lamprineas
40*ecdf48f1SAlexandros Lamprineasdefine <4 x bfloat> @load_vector4_bf(<4 x bfloat>* %addr) {
41*ecdf48f1SAlexandros Lamprineas; HARD-LABEL: load_vector4_bf:
42*ecdf48f1SAlexandros Lamprineas; HARD:       @ %bb.0: @ %entry
43*ecdf48f1SAlexandros Lamprineas; HARD-NEXT:    vldr d0, [r0]
44*ecdf48f1SAlexandros Lamprineas; HARD-NEXT:    bx lr
45*ecdf48f1SAlexandros Lamprineas;
46*ecdf48f1SAlexandros Lamprineas; SOFT-LABEL: load_vector4_bf:
47*ecdf48f1SAlexandros Lamprineas; SOFT:       @ %bb.0: @ %entry
48*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT:    vldr d16, [r0]
49*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT:    vmov r0, r1, d16
50*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT:    bx lr
51*ecdf48f1SAlexandros Lamprineasentry:
52*ecdf48f1SAlexandros Lamprineas  %0 = load <4 x bfloat>, <4 x bfloat>* %addr, align 8
53*ecdf48f1SAlexandros Lamprineas  ret <4 x bfloat> %0
54*ecdf48f1SAlexandros Lamprineas}
55*ecdf48f1SAlexandros Lamprineas
56*ecdf48f1SAlexandros Lamprineasdefine void @store_vector4_bf(<4 x bfloat> %v, <4 x bfloat>* %addr) {
57*ecdf48f1SAlexandros Lamprineas; HARD-LABEL: store_vector4_bf:
58*ecdf48f1SAlexandros Lamprineas; HARD:       @ %bb.0: @ %entry
59*ecdf48f1SAlexandros Lamprineas; HARD-NEXT:    vstr d0, [r0]
60*ecdf48f1SAlexandros Lamprineas; HARD-NEXT:    bx lr
61*ecdf48f1SAlexandros Lamprineas;
62*ecdf48f1SAlexandros Lamprineas; SOFT-LABEL: store_vector4_bf:
63*ecdf48f1SAlexandros Lamprineas; SOFT:       @ %bb.0: @ %entry
64*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT:    strd r0, r1, [r2]
65*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT:    bx lr
66*ecdf48f1SAlexandros Lamprineasentry:
67*ecdf48f1SAlexandros Lamprineas  store <4 x bfloat> %v, <4 x bfloat>* %addr, align 8
68*ecdf48f1SAlexandros Lamprineas  ret void
69*ecdf48f1SAlexandros Lamprineas}
70*ecdf48f1SAlexandros Lamprineas
71*ecdf48f1SAlexandros Lamprineasdefine <8 x bfloat> @load_vector8_bf(<8 x bfloat>* %addr) {
72*ecdf48f1SAlexandros Lamprineas; HARD-LABEL: load_vector8_bf:
73*ecdf48f1SAlexandros Lamprineas; HARD:       @ %bb.0: @ %entry
74*ecdf48f1SAlexandros Lamprineas; HARD-NEXT:    vld1.64 {d0, d1}, [r0]
75*ecdf48f1SAlexandros Lamprineas; HARD-NEXT:    bx lr
76*ecdf48f1SAlexandros Lamprineas;
77*ecdf48f1SAlexandros Lamprineas; SOFT-LABEL: load_vector8_bf:
78*ecdf48f1SAlexandros Lamprineas; SOFT:       @ %bb.0: @ %entry
79*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT:    vld1.64 {d16, d17}, [r0]
80*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT:    vmov r0, r1, d16
81*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT:    vmov r2, r3, d17
82*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT:    bx lr
83*ecdf48f1SAlexandros Lamprineasentry:
84*ecdf48f1SAlexandros Lamprineas  %0 = load <8 x bfloat>, <8 x bfloat>* %addr, align 8
85*ecdf48f1SAlexandros Lamprineas  ret <8 x bfloat> %0
86*ecdf48f1SAlexandros Lamprineas}
87*ecdf48f1SAlexandros Lamprineas
88*ecdf48f1SAlexandros Lamprineasdefine void @store_vector8_bf(<8 x bfloat> %v, <8 x bfloat>* %addr) {
89*ecdf48f1SAlexandros Lamprineas; HARD-LABEL: store_vector8_bf:
90*ecdf48f1SAlexandros Lamprineas; HARD:       @ %bb.0: @ %entry
91*ecdf48f1SAlexandros Lamprineas; HARD-NEXT:    vst1.64 {d0, d1}, [r0]
92*ecdf48f1SAlexandros Lamprineas; HARD-NEXT:    bx lr
93*ecdf48f1SAlexandros Lamprineas;
94*ecdf48f1SAlexandros Lamprineas; SOFT-LABEL: store_vector8_bf:
95*ecdf48f1SAlexandros Lamprineas; SOFT:       @ %bb.0: @ %entry
96*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT:    vmov d17, r2, r3
97*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT:    ldr r12, [sp]
98*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT:    vmov d16, r0, r1
99*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT:    vst1.64 {d16, d17}, [r12]
100*ecdf48f1SAlexandros Lamprineas; SOFT-NEXT:    bx lr
101*ecdf48f1SAlexandros Lamprineasentry:
102*ecdf48f1SAlexandros Lamprineas  store <8 x bfloat> %v, <8 x bfloat>* %addr, align 8
103*ecdf48f1SAlexandros Lamprineas  ret void
104*ecdf48f1SAlexandros Lamprineas}
105*ecdf48f1SAlexandros Lamprineas
106*ecdf48f1SAlexandros Lamprineas
107