1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --filter-out "// kill:.*$" --version 4
2 ; RUN: llc -force-streaming -verify-machineinstrs < %s | FileCheck %s
4 target triple = "aarch64-linux"
6 define void @test_fmla_f16_vg2_single(i32 %slice, <vscale x 8 x half> %a0, <vscale x 8 x half> %a1, <vscale x 8 x half> %b) #0 {
7 ; CHECK-LABEL: test_fmla_f16_vg2_single:
10 ; CHECK: fmla za.h[w8, 0, vgx2], { z0.h, z1.h }, z2.h
11 ; CHECK: fmla za.h[w8, 7, vgx2], { z0.h, z1.h }, z2.h
13 call void @llvm.aarch64.sme.fmla.single.vg1x2.nxv8f16(i32 %slice, <vscale x 8 x half> %a0, <vscale x 8 x half> %a1, <vscale x 8 x half> %b)
14 %slice.7 = add i32 %slice, 7
15 call void @llvm.aarch64.sme.fmla.single.vg1x2.nxv8f16(i32 %slice.7, <vscale x 8 x half> %a0, <vscale x 8 x half> %a1, <vscale x 8 x half> %b)
19 define void @test_fmla_f16_vg4_single(i32 %slice, <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
20 ; CHECK-LABEL: test_fmla_f16_vg4_single:
23 ; CHECK: fmla za.h[w8, 0, vgx4], { z0.h - z3.h }, z4.h
24 ; CHECK: fmla za.h[w8, 7, vgx4], { z0.h - z3.h }, z4.h
26 <vscale x 8 x half> %a2, <vscale x 8 x half> %a3, <vscale x 8 x half> %b) #0 {
27 call void @llvm.aarch64.sme.fmla.single.vg1x4.nxv8f16(i32 %slice, <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
28 <vscale x 8 x half> %a2, <vscale x 8 x half> %a3, <vscale x 8 x half> %b)
29 %slice.7 = add i32 %slice, 7
30 call void @llvm.aarch64.sme.fmla.single.vg1x4.nxv8f16(i32 %slice.7, <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
31 <vscale x 8 x half> %a2, <vscale x 8 x half> %a3, <vscale x 8 x half> %b)
35 define void @test_fmls_f16_vg2_single(i32 %slice, <vscale x 8 x half> %a0, <vscale x 8 x half> %a1, <vscale x 8 x half> %b) #0 {
36 ; CHECK-LABEL: test_fmls_f16_vg2_single:
39 ; CHECK: fmls za.h[w8, 0, vgx2], { z0.h, z1.h }, z2.h
40 ; CHECK: fmls za.h[w8, 7, vgx2], { z0.h, z1.h }, z2.h
42 call void @llvm.aarch64.sme.fmls.single.vg1x2.nxv8f16(i32 %slice, <vscale x 8 x half> %a0, <vscale x 8 x half> %a1, <vscale x 8 x half> %b)
43 %slice.7 = add i32 %slice, 7
44 call void @llvm.aarch64.sme.fmls.single.vg1x2.nxv8f16(i32 %slice.7, <vscale x 8 x half> %a0, <vscale x 8 x half> %a1, <vscale x 8 x half> %b)
48 define void @test_fmls_f16_vg4_single(i32 %slice, <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
49 ; CHECK-LABEL: test_fmls_f16_vg4_single:
52 ; CHECK: fmls za.h[w8, 0, vgx4], { z0.h - z3.h }, z4.h
53 ; CHECK: fmls za.h[w8, 7, vgx4], { z0.h - z3.h }, z4.h
55 <vscale x 8 x half> %a2, <vscale x 8 x half> %a3, <vscale x 8 x half> %b) #0 {
56 call void @llvm.aarch64.sme.fmls.single.vg1x4.nxv8f16(i32 %slice, <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
57 <vscale x 8 x half> %a2, <vscale x 8 x half> %a3, <vscale x 8 x half> %b)
58 %slice.7 = add i32 %slice, 7
59 call void @llvm.aarch64.sme.fmls.single.vg1x4.nxv8f16(i32 %slice.7, <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
60 <vscale x 8 x half> %a2, <vscale x 8 x half> %a3, <vscale x 8 x half> %b)
64 define void @test_fmla_f16_vg2_multi(i32 %slice,
65 ; CHECK-LABEL: test_fmla_f16_vg2_multi:
68 ; CHECK: fmla za.h[w8, 0, vgx2], { z0.h, z1.h }, { z2.h, z3.h }
69 ; CHECK: fmla za.h[w8, 7, vgx2], { z0.h, z1.h }, { z2.h, z3.h }
71 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
72 <vscale x 8 x half> %b0, <vscale x 8 x half> %b1) #0 {
73 call void @llvm.aarch64.sme.fmla.vg1x2.nxv8f16(i32 %slice,
74 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
75 <vscale x 8 x half> %b0, <vscale x 8 x half> %b1)
76 %slice.7 = add i32 %slice, 7
77 call void @llvm.aarch64.sme.fmla.vg1x2.nxv8f16(i32 %slice.7,
78 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
79 <vscale x 8 x half> %b0, <vscale x 8 x half> %b1)
83 define void @test_fmla_f16_vg4_multi(i32 %slice,
84 ; CHECK-LABEL: test_fmla_f16_vg4_multi:
87 ; CHECK: fmla za.h[w8, 0, vgx4], { z0.h - z3.h }, { z4.h - z7.h }
88 ; CHECK: fmla za.h[w8, 7, vgx4], { z0.h - z3.h }, { z4.h - z7.h }
90 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
91 <vscale x 8 x half> %a2, <vscale x 8 x half> %a3,
92 <vscale x 8 x half> %b0, <vscale x 8 x half> %b1,
93 <vscale x 8 x half> %b2, <vscale x 8 x half> %b3) #0 {
94 call void @llvm.aarch64.sme.fmla.vg1x4.nxv8f16(i32 %slice,
95 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
96 <vscale x 8 x half> %a2, <vscale x 8 x half> %a3,
97 <vscale x 8 x half> %b0, <vscale x 8 x half> %b1,
98 <vscale x 8 x half> %b2, <vscale x 8 x half> %b3)
99 %slice.7 = add i32 %slice, 7
100 call void @llvm.aarch64.sme.fmla.vg1x4.nxv8f16(i32 %slice.7,
101 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
102 <vscale x 8 x half> %a2, <vscale x 8 x half> %a3,
103 <vscale x 8 x half> %b0, <vscale x 8 x half> %b1,
104 <vscale x 8 x half> %b2, <vscale x 8 x half> %b3)
108 define void @test_fmls_f16_vg2_multi(i32 %slice,
109 ; CHECK-LABEL: test_fmls_f16_vg2_multi:
112 ; CHECK: fmls za.h[w8, 0, vgx2], { z0.h, z1.h }, { z2.h, z3.h }
113 ; CHECK: fmls za.h[w8, 7, vgx2], { z0.h, z1.h }, { z2.h, z3.h }
115 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
116 <vscale x 8 x half> %b0, <vscale x 8 x half> %b1) #0 {
117 call void @llvm.aarch64.sme.fmls.vg1x2.nxv8f16(i32 %slice,
118 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
119 <vscale x 8 x half> %b0, <vscale x 8 x half> %b1)
120 %slice.7 = add i32 %slice, 7
121 call void @llvm.aarch64.sme.fmls.vg1x2.nxv8f16(i32 %slice.7,
122 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
123 <vscale x 8 x half> %b0, <vscale x 8 x half> %b1)
127 define void @test_fmls_f16_vg4_multi(i32 %slice,
128 ; CHECK-LABEL: test_fmls_f16_vg4_multi:
131 ; CHECK: fmls za.h[w8, 0, vgx4], { z0.h - z3.h }, { z4.h - z7.h }
132 ; CHECK: fmls za.h[w8, 7, vgx4], { z0.h - z3.h }, { z4.h - z7.h }
134 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
135 <vscale x 8 x half> %a2, <vscale x 8 x half> %a3,
136 <vscale x 8 x half> %b0, <vscale x 8 x half> %b1,
137 <vscale x 8 x half> %b2, <vscale x 8 x half> %b3) #0 {
138 call void @llvm.aarch64.sme.fmls.vg1x4.nxv8f16(i32 %slice,
139 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
140 <vscale x 8 x half> %a2, <vscale x 8 x half> %a3,
141 <vscale x 8 x half> %b0, <vscale x 8 x half> %b1,
142 <vscale x 8 x half> %b2, <vscale x 8 x half> %b3)
143 %slice.7 = add i32 %slice, 7
144 call void @llvm.aarch64.sme.fmls.vg1x4.nxv8f16(i32 %slice.7,
145 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
146 <vscale x 8 x half> %a2, <vscale x 8 x half> %a3,
147 <vscale x 8 x half> %b0, <vscale x 8 x half> %b1,
148 <vscale x 8 x half> %b2, <vscale x 8 x half> %b3)
152 define void @test_fmla_f16_vg2_index(i32 %slice,
153 ; CHECK-LABEL: test_fmla_f16_vg2_index:
156 ; CHECK: fmla za.h[w8, 0, vgx2], { z0.h, z1.h }, z2.h[7]
157 ; CHECK: fmla za.h[w8, 7, vgx2], { z0.h, z1.h }, z2.h[7]
159 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
160 <vscale x 8 x half> %b) #0 {
161 call void @llvm.aarch64.sme.fmla.lane.vg1x2.nxv8f16(i32 %slice,
162 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
163 <vscale x 8 x half> %b, i32 7);
164 %slice.7 = add i32 %slice, 7
165 call void @llvm.aarch64.sme.fmla.lane.vg1x2.nxv8f16(i32 %slice.7,
166 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
167 <vscale x 8 x half> %b, i32 7);
171 define void @test_fmla_f16_vg4_index(i32 %slice,
172 ; CHECK-LABEL: test_fmla_f16_vg4_index:
175 ; CHECK: fmla za.h[w8, 0, vgx4], { z0.h - z3.h }, z4.h[7]
176 ; CHECK: fmla za.h[w8, 0, vgx4], { z0.h - z3.h }, z4.h[7]
178 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
179 <vscale x 8 x half> %a2, <vscale x 8 x half> %a3,
180 <vscale x 8 x half> %b) #0 {
181 call void @llvm.aarch64.sme.fmla.lane.vg1x4.nxv8f16(i32 %slice,
182 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
183 <vscale x 8 x half> %a2, <vscale x 8 x half> %a3,
184 <vscale x 8 x half> %b, i32 7);
185 %slice.7 = add i32 %slice, 7
186 call void @llvm.aarch64.sme.fmla.lane.vg1x4.nxv8f16(i32 %slice,
187 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
188 <vscale x 8 x half> %a2, <vscale x 8 x half> %a3,
189 <vscale x 8 x half> %b, i32 7);
193 define void @test_fmls_f16_vg2_index(i32 %slice,
194 ; CHECK-LABEL: test_fmls_f16_vg2_index:
197 ; CHECK: fmls za.h[w8, 0, vgx2], { z0.h, z1.h }, z2.h[7]
198 ; CHECK: fmls za.h[w8, 7, vgx2], { z0.h, z1.h }, z2.h[7]
200 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
201 <vscale x 8 x half> %b) #0 {
202 call void @llvm.aarch64.sme.fmls.lane.vg1x2.nxv8f16(i32 %slice,
203 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
204 <vscale x 8 x half> %b, i32 7);
205 %slice.7 = add i32 %slice, 7
206 call void @llvm.aarch64.sme.fmls.lane.vg1x2.nxv8f16(i32 %slice.7,
207 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
208 <vscale x 8 x half> %b, i32 7);
212 define void @test_fmls_f16_vg4_index(i32 %slice,
213 ; CHECK-LABEL: test_fmls_f16_vg4_index:
216 ; CHECK: fmls za.h[w8, 0, vgx4], { z0.h - z3.h }, z4.h[7]
217 ; CHECK: fmls za.h[w8, 0, vgx4], { z0.h - z3.h }, z4.h[7]
219 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
220 <vscale x 8 x half> %a2, <vscale x 8 x half> %a3,
221 <vscale x 8 x half> %b) #0 {
222 call void @llvm.aarch64.sme.fmls.lane.vg1x4.nxv8f16(i32 %slice,
223 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
224 <vscale x 8 x half> %a2, <vscale x 8 x half> %a3,
225 <vscale x 8 x half> %b, i32 7);
226 %slice.7 = add i32 %slice, 7
227 call void @llvm.aarch64.sme.fmls.lane.vg1x4.nxv8f16(i32 %slice,
228 <vscale x 8 x half> %a0, <vscale x 8 x half> %a1,
229 <vscale x 8 x half> %a2, <vscale x 8 x half> %a3,
230 <vscale x 8 x half> %b, i32 7);
234 define void @test_fmla_bf16_vg2_single(i32 %slice, <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1, <vscale x 8 x bfloat> %b) #0 {
235 ; CHECK-LABEL: test_fmla_bf16_vg2_single:
238 ; CHECK: bfmla za.h[w8, 0, vgx2], { z0.h, z1.h }, z2.h
239 ; CHECK: bfmla za.h[w8, 7, vgx2], { z0.h, z1.h }, z2.h
241 call void @llvm.aarch64.sme.fmla.single.vg1x2.nxv8bf16(i32 %slice, <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1, <vscale x 8 x bfloat> %b)
242 %slice.7 = add i32 %slice, 7
243 call void @llvm.aarch64.sme.fmla.single.vg1x2.nxv8bf16(i32 %slice.7, <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1, <vscale x 8 x bfloat> %b)
247 define void @test_fmla_bf16_vg4_single(i32 %slice, <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
248 ; CHECK-LABEL: test_fmla_bf16_vg4_single:
251 ; CHECK: bfmla za.h[w8, 0, vgx4], { z0.h - z3.h }, z4.h
252 ; CHECK: bfmla za.h[w8, 7, vgx4], { z0.h - z3.h }, z4.h
254 <vscale x 8 x bfloat> %a2, <vscale x 8 x bfloat> %a3, <vscale x 8 x bfloat> %b) #0 {
255 call void @llvm.aarch64.sme.fmla.single.vg1x4.nxv8bf16(i32 %slice, <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
256 <vscale x 8 x bfloat> %a2, <vscale x 8 x bfloat> %a3, <vscale x 8 x bfloat> %b)
257 %slice.7 = add i32 %slice, 7
258 call void @llvm.aarch64.sme.fmla.single.vg1x4.nxv8bf16(i32 %slice.7, <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
259 <vscale x 8 x bfloat> %a2, <vscale x 8 x bfloat> %a3, <vscale x 8 x bfloat> %b)
263 define void @test_fmls_bf16_vg2_single(i32 %slice, <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1, <vscale x 8 x bfloat> %b) #0 {
264 ; CHECK-LABEL: test_fmls_bf16_vg2_single:
267 ; CHECK: bfmls za.h[w8, 0, vgx2], { z0.h, z1.h }, z2.h
268 ; CHECK: bfmls za.h[w8, 7, vgx2], { z0.h, z1.h }, z2.h
270 call void @llvm.aarch64.sme.fmls.single.vg1x2.nxv8bf16(i32 %slice, <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1, <vscale x 8 x bfloat> %b)
271 %slice.7 = add i32 %slice, 7
272 call void @llvm.aarch64.sme.fmls.single.vg1x2.nxv8bf16(i32 %slice.7, <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1, <vscale x 8 x bfloat> %b)
276 define void @test_fmls_bf16_vg4_single(i32 %slice, <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
277 ; CHECK-LABEL: test_fmls_bf16_vg4_single:
280 ; CHECK: bfmls za.h[w8, 0, vgx4], { z0.h - z3.h }, z4.h
281 ; CHECK: bfmls za.h[w8, 7, vgx4], { z0.h - z3.h }, z4.h
283 <vscale x 8 x bfloat> %a2, <vscale x 8 x bfloat> %a3, <vscale x 8 x bfloat> %b) #0 {
284 call void @llvm.aarch64.sme.fmls.single.vg1x4.nxv8bf16(i32 %slice, <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
285 <vscale x 8 x bfloat> %a2, <vscale x 8 x bfloat> %a3, <vscale x 8 x bfloat> %b)
286 %slice.7 = add i32 %slice, 7
287 call void @llvm.aarch64.sme.fmls.single.vg1x4.nxv8bf16(i32 %slice.7, <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
288 <vscale x 8 x bfloat> %a2, <vscale x 8 x bfloat> %a3, <vscale x 8 x bfloat> %b)
292 define void @test_fmla_bf16_vg2_multi(i32 %slice,
293 ; CHECK-LABEL: test_fmla_bf16_vg2_multi:
296 ; CHECK: bfmla za.h[w8, 0, vgx2], { z0.h, z1.h }, { z2.h, z3.h }
297 ; CHECK: bfmla za.h[w8, 7, vgx2], { z0.h, z1.h }, { z2.h, z3.h }
299 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
300 <vscale x 8 x bfloat> %b0, <vscale x 8 x bfloat> %b1) #0 {
301 call void @llvm.aarch64.sme.fmla.vg1x2.nxv8bf16(i32 %slice,
302 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
303 <vscale x 8 x bfloat> %b0, <vscale x 8 x bfloat> %b1)
304 %slice.7 = add i32 %slice, 7
305 call void @llvm.aarch64.sme.fmla.vg1x2.nxv8bf16(i32 %slice.7,
306 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
307 <vscale x 8 x bfloat> %b0, <vscale x 8 x bfloat> %b1)
311 define void @test_fmla_bf16_vg4_multi(i32 %slice,
312 ; CHECK-LABEL: test_fmla_bf16_vg4_multi:
315 ; CHECK: bfmla za.h[w8, 0, vgx4], { z0.h - z3.h }, { z4.h - z7.h }
316 ; CHECK: bfmla za.h[w8, 7, vgx4], { z0.h - z3.h }, { z4.h - z7.h }
318 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
319 <vscale x 8 x bfloat> %a2, <vscale x 8 x bfloat> %a3,
320 <vscale x 8 x bfloat> %b0, <vscale x 8 x bfloat> %b1,
321 <vscale x 8 x bfloat> %b2, <vscale x 8 x bfloat> %b3) #0 {
322 call void @llvm.aarch64.sme.fmla.vg1x4.nxv8bf16(i32 %slice,
323 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
324 <vscale x 8 x bfloat> %a2, <vscale x 8 x bfloat> %a3,
325 <vscale x 8 x bfloat> %b0, <vscale x 8 x bfloat> %b1,
326 <vscale x 8 x bfloat> %b2, <vscale x 8 x bfloat> %b3)
327 %slice.7 = add i32 %slice, 7
328 call void @llvm.aarch64.sme.fmla.vg1x4.nxv8bf16(i32 %slice.7,
329 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
330 <vscale x 8 x bfloat> %a2, <vscale x 8 x bfloat> %a3,
331 <vscale x 8 x bfloat> %b0, <vscale x 8 x bfloat> %b1,
332 <vscale x 8 x bfloat> %b2, <vscale x 8 x bfloat> %b3)
336 define void @test_fmls_bf16_vg2_multi(i32 %slice,
337 ; CHECK-LABEL: test_fmls_bf16_vg2_multi:
340 ; CHECK: bfmls za.h[w8, 0, vgx2], { z0.h, z1.h }, { z2.h, z3.h }
341 ; CHECK: bfmls za.h[w8, 7, vgx2], { z0.h, z1.h }, { z2.h, z3.h }
343 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
344 <vscale x 8 x bfloat> %b0, <vscale x 8 x bfloat> %b1) #0 {
345 call void @llvm.aarch64.sme.fmls.vg1x2.nxv8bf16(i32 %slice,
346 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
347 <vscale x 8 x bfloat> %b0, <vscale x 8 x bfloat> %b1)
348 %slice.7 = add i32 %slice, 7
349 call void @llvm.aarch64.sme.fmls.vg1x2.nxv8bf16(i32 %slice.7,
350 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
351 <vscale x 8 x bfloat> %b0, <vscale x 8 x bfloat> %b1)
355 define void @test_fmls_bf16_vg4_multi(i32 %slice,
356 ; CHECK-LABEL: test_fmls_bf16_vg4_multi:
359 ; CHECK: bfmls za.h[w8, 0, vgx4], { z0.h - z3.h }, { z4.h - z7.h }
360 ; CHECK: bfmls za.h[w8, 7, vgx4], { z0.h - z3.h }, { z4.h - z7.h }
362 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
363 <vscale x 8 x bfloat> %a2, <vscale x 8 x bfloat> %a3,
364 <vscale x 8 x bfloat> %b0, <vscale x 8 x bfloat> %b1,
365 <vscale x 8 x bfloat> %b2, <vscale x 8 x bfloat> %b3) #0 {
366 call void @llvm.aarch64.sme.fmls.vg1x4.nxv8bf16(i32 %slice,
367 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
368 <vscale x 8 x bfloat> %a2, <vscale x 8 x bfloat> %a3,
369 <vscale x 8 x bfloat> %b0, <vscale x 8 x bfloat> %b1,
370 <vscale x 8 x bfloat> %b2, <vscale x 8 x bfloat> %b3)
371 %slice.7 = add i32 %slice, 7
372 call void @llvm.aarch64.sme.fmls.vg1x4.nxv8bf16(i32 %slice.7,
373 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
374 <vscale x 8 x bfloat> %a2, <vscale x 8 x bfloat> %a3,
375 <vscale x 8 x bfloat> %b0, <vscale x 8 x bfloat> %b1,
376 <vscale x 8 x bfloat> %b2, <vscale x 8 x bfloat> %b3)
380 define void @test_fmla_bf16_vg2_index(i32 %slice,
381 ; CHECK-LABEL: test_fmla_bf16_vg2_index:
384 ; CHECK: bfmla za.h[w8, 0, vgx2], { z0.h, z1.h }, z2.h[7]
385 ; CHECK: bfmla za.h[w8, 7, vgx2], { z0.h, z1.h }, z2.h[7]
387 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
388 <vscale x 8 x bfloat> %b) #0 {
389 call void @llvm.aarch64.sme.fmla.lane.vg1x2.nxv8bf16(i32 %slice,
390 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
391 <vscale x 8 x bfloat> %b, i32 7);
392 %slice.7 = add i32 %slice, 7
393 call void @llvm.aarch64.sme.fmla.lane.vg1x2.nxv8bf16(i32 %slice.7,
394 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
395 <vscale x 8 x bfloat> %b, i32 7);
399 define void @test_fmla_bf16_vg4_index(i32 %slice,
400 ; CHECK-LABEL: test_fmla_bf16_vg4_index:
403 ; CHECK: bfmla za.h[w8, 0, vgx4], { z0.h - z3.h }, z4.h[7]
404 ; CHECK: bfmla za.h[w8, 0, vgx4], { z0.h - z3.h }, z4.h[7]
406 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
407 <vscale x 8 x bfloat> %a2, <vscale x 8 x bfloat> %a3,
408 <vscale x 8 x bfloat> %b) #0 {
409 call void @llvm.aarch64.sme.fmla.lane.vg1x4.nxv8bf16(i32 %slice,
410 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
411 <vscale x 8 x bfloat> %a2, <vscale x 8 x bfloat> %a3,
412 <vscale x 8 x bfloat> %b, i32 7);
413 %slice.7 = add i32 %slice, 7
414 call void @llvm.aarch64.sme.fmla.lane.vg1x4.nxv8bf16(i32 %slice,
415 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
416 <vscale x 8 x bfloat> %a2, <vscale x 8 x bfloat> %a3,
417 <vscale x 8 x bfloat> %b, i32 7);
421 define void @test_fmls_bf16_vg2_index(i32 %slice,
422 ; CHECK-LABEL: test_fmls_bf16_vg2_index:
425 ; CHECK: bfmls za.h[w8, 0, vgx2], { z0.h, z1.h }, z2.h[7]
426 ; CHECK: bfmls za.h[w8, 7, vgx2], { z0.h, z1.h }, z2.h[7]
428 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
429 <vscale x 8 x bfloat> %b) #0 {
430 call void @llvm.aarch64.sme.fmls.lane.vg1x2.nxv8bf16(i32 %slice,
431 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
432 <vscale x 8 x bfloat> %b, i32 7);
433 %slice.7 = add i32 %slice, 7
434 call void @llvm.aarch64.sme.fmls.lane.vg1x2.nxv8bf16(i32 %slice.7,
435 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
436 <vscale x 8 x bfloat> %b, i32 7);
440 define void @test_fmls_bf16_vg4_index(i32 %slice,
441 ; CHECK-LABEL: test_fmls_bf16_vg4_index:
444 ; CHECK: bfmls za.h[w8, 0, vgx4], { z0.h - z3.h }, z4.h[7]
445 ; CHECK: bfmls za.h[w8, 0, vgx4], { z0.h - z3.h }, z4.h[7]
447 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
448 <vscale x 8 x bfloat> %a2, <vscale x 8 x bfloat> %a3,
449 <vscale x 8 x bfloat> %b) #0 {
450 call void @llvm.aarch64.sme.fmls.lane.vg1x4.nxv8bf16(i32 %slice,
451 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
452 <vscale x 8 x bfloat> %a2, <vscale x 8 x bfloat> %a3,
453 <vscale x 8 x bfloat> %b, i32 7);
454 %slice.7 = add i32 %slice, 7
455 call void @llvm.aarch64.sme.fmls.lane.vg1x4.nxv8bf16(i32 %slice,
456 <vscale x 8 x bfloat> %a0, <vscale x 8 x bfloat> %a1,
457 <vscale x 8 x bfloat> %a2, <vscale x 8 x bfloat> %a3,
458 <vscale x 8 x bfloat> %b, i32 7);
462 attributes #0 = { nounwind "target-features"="+sme2p1,+sme-f16f16,+b16b16" }