blob: 1f8a136fb9f2614e4a0ae727c48d5357ba52859c [file] [log] [blame]
Danilo Carvalho Grael44a4f5f2020-01-30 17:21:39 -05001; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2 < %s | FileCheck %s
2
3;
4; SMLALB
5;
6define <vscale x 8 x i16> @smlalb_i16(<vscale x 8 x i16> %a,
7 <vscale x 16 x i8> %b,
8 <vscale x 16 x i8> %c) {
9; CHECK-LABEL: smlalb_i16
10; CHECK: smlalb z0.h, z1.b, z2.b
11; CHECK-NEXT: ret
12 %res = call <vscale x 8 x i16> @llvm.aarch64.sve.smlalb.nxv8i16(<vscale x 8 x i16> %a,
13 <vscale x 16 x i8> %b,
14 <vscale x 16 x i8> %c)
15 ret <vscale x 8 x i16> %res
16}
17
18define <vscale x 4 x i32> @smlalb_i32(<vscale x 4 x i32> %a,
19 <vscale x 8 x i16> %b,
20 <vscale x 8 x i16> %c) {
21; CHECK-LABEL: smlalb_i32
22; CHECK: smlalb z0.s, z1.h, z2.h
23; CHECK-NEXT: ret
24 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.smlalb.nxv4i32(<vscale x 4 x i32> %a,
25 <vscale x 8 x i16> %b,
26 <vscale x 8 x i16> %c)
27 ret <vscale x 4 x i32> %res
28}
29
30define <vscale x 2 x i64> @smlalb_i64(<vscale x 2 x i64> %a,
31 <vscale x 4 x i32> %b,
32 <vscale x 4 x i32> %c) {
33; CHECK-LABEL: smlalb_i64
34; CHECK: smlalb z0.d, z1.s, z2.s
35; CHECK-NEXT: ret
36 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.smlalb.nxv2i64(<vscale x 2 x i64> %a,
37 <vscale x 4 x i32> %b,
38 <vscale x 4 x i32> %c)
39 ret <vscale x 2 x i64> %res
40}
41
42;
43; SMLALT
44;
45define <vscale x 8 x i16> @smlalt_i16(<vscale x 8 x i16> %a,
46 <vscale x 16 x i8> %b,
47 <vscale x 16 x i8> %c) {
48; CHECK-LABEL: smlalt_i16
49; CHECK: smlalt z0.h, z1.b, z2.b
50; CHECK-NEXT: ret
51 %res = call <vscale x 8 x i16> @llvm.aarch64.sve.smlalt.nxv8i16(<vscale x 8 x i16> %a,
52 <vscale x 16 x i8> %b,
53 <vscale x 16 x i8> %c)
54 ret <vscale x 8 x i16> %res
55}
56
57define <vscale x 4 x i32> @smlalt_i32(<vscale x 4 x i32> %a,
58 <vscale x 8 x i16> %b,
59 <vscale x 8 x i16> %c) {
60; CHECK-LABEL: smlalt_i32
61; CHECK: smlalt z0.s, z1.h, z2.h
62; CHECK-NEXT: ret
63 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.smlalt.nxv4i32(<vscale x 4 x i32> %a,
64 <vscale x 8 x i16> %b,
65 <vscale x 8 x i16> %c)
66 ret <vscale x 4 x i32> %res
67}
68
69define <vscale x 2 x i64> @smlalt_i64(<vscale x 2 x i64> %a,
70 <vscale x 4 x i32> %b,
71 <vscale x 4 x i32> %c) {
72; CHECK-LABEL: smlalt_i64
73; CHECK: smlalt z0.d, z1.s, z2.s
74; CHECK-NEXT: ret
75 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.smlalt.nxv2i64(<vscale x 2 x i64> %a,
76 <vscale x 4 x i32> %b,
77 <vscale x 4 x i32> %c)
78 ret <vscale x 2 x i64> %res
79}
80
81;
82; UMLALB
83;
84define <vscale x 8 x i16> @umlalb_i16(<vscale x 8 x i16> %a,
85 <vscale x 16 x i8> %b,
86 <vscale x 16 x i8> %c) {
87; CHECK-LABEL: umlalb_i16
88; CHECK: umlalb z0.h, z1.b, z2.b
89; CHECK-NEXT: ret
90 %res = call <vscale x 8 x i16> @llvm.aarch64.sve.umlalb.nxv8i16(<vscale x 8 x i16> %a,
91 <vscale x 16 x i8> %b,
92 <vscale x 16 x i8> %c)
93 ret <vscale x 8 x i16> %res
94}
95
96define <vscale x 4 x i32> @umlalb_i32(<vscale x 4 x i32> %a,
97 <vscale x 8 x i16> %b,
98 <vscale x 8 x i16> %c) {
99; CHECK-LABEL: umlalb_i32
100; CHECK: umlalb z0.s, z1.h, z2.h
101; CHECK-NEXT: ret
102 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.umlalb.nxv4i32(<vscale x 4 x i32> %a,
103 <vscale x 8 x i16> %b,
104 <vscale x 8 x i16> %c)
105 ret <vscale x 4 x i32> %res
106}
107
108define <vscale x 2 x i64> @umlalb_i64(<vscale x 2 x i64> %a,
109 <vscale x 4 x i32> %b,
110 <vscale x 4 x i32> %c) {
111; CHECK-LABEL: umlalb_i64
112; CHECK: umlalb z0.d, z1.s, z2.s
113; CHECK-NEXT: ret
114 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.umlalb.nxv2i64(<vscale x 2 x i64> %a,
115 <vscale x 4 x i32> %b,
116 <vscale x 4 x i32> %c)
117 ret <vscale x 2 x i64> %res
118}
119
120;
121; UMLALT
122;
123define <vscale x 8 x i16> @umlalt_i16(<vscale x 8 x i16> %a,
124 <vscale x 16 x i8> %b,
125 <vscale x 16 x i8> %c) {
126; CHECK-LABEL: umlalt_i16
127; CHECK: umlalt z0.h, z1.b, z2.b
128; CHECK-NEXT: ret
129 %res = call <vscale x 8 x i16> @llvm.aarch64.sve.umlalt.nxv8i16(<vscale x 8 x i16> %a,
130 <vscale x 16 x i8> %b,
131 <vscale x 16 x i8> %c)
132 ret <vscale x 8 x i16> %res
133}
134
135define <vscale x 4 x i32> @umlalt_i32(<vscale x 4 x i32> %a,
136 <vscale x 8 x i16> %b,
137 <vscale x 8 x i16> %c) {
138; CHECK-LABEL: umlalt_i32
139; CHECK: umlalt z0.s, z1.h, z2.h
140; CHECK-NEXT: ret
141 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.umlalt.nxv4i32(<vscale x 4 x i32> %a,
142 <vscale x 8 x i16> %b,
143 <vscale x 8 x i16> %c)
144 ret <vscale x 4 x i32> %res
145}
146
147define <vscale x 2 x i64> @umlalt_i64(<vscale x 2 x i64> %a,
148 <vscale x 4 x i32> %b,
149 <vscale x 4 x i32> %c) {
150; CHECK-LABEL: umlalt_i64
151; CHECK: umlalt z0.d, z1.s, z2.s
152; CHECK-NEXT: ret
153 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.umlalt.nxv2i64(<vscale x 2 x i64> %a,
154 <vscale x 4 x i32> %b,
155 <vscale x 4 x i32> %c)
156 ret <vscale x 2 x i64> %res
157}
158
159;
160; SMLSLB
161;
162define <vscale x 8 x i16> @smlslb_i16(<vscale x 8 x i16> %a,
163 <vscale x 16 x i8> %b,
164 <vscale x 16 x i8> %c) {
165; CHECK-LABEL: smlslb_i16
166; CHECK: smlslb z0.h, z1.b, z2.b
167; CHECK-NEXT: ret
168 %res = call <vscale x 8 x i16> @llvm.aarch64.sve.smlslb.nxv8i16(<vscale x 8 x i16> %a,
169 <vscale x 16 x i8> %b,
170 <vscale x 16 x i8> %c)
171 ret <vscale x 8 x i16> %res
172}
173
174define <vscale x 4 x i32> @smlslb_i32(<vscale x 4 x i32> %a,
175 <vscale x 8 x i16> %b,
176 <vscale x 8 x i16> %c) {
177; CHECK-LABEL: smlslb_i32
178; CHECK: smlslb z0.s, z1.h, z2.h
179; CHECK-NEXT: ret
180 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.smlslb.nxv4i32(<vscale x 4 x i32> %a,
181 <vscale x 8 x i16> %b,
182 <vscale x 8 x i16> %c)
183 ret <vscale x 4 x i32> %res
184}
185
186define <vscale x 2 x i64> @smlslb_i64(<vscale x 2 x i64> %a,
187 <vscale x 4 x i32> %b,
188 <vscale x 4 x i32> %c) {
189; CHECK-LABEL: smlslb_i64
190; CHECK: smlslb z0.d, z1.s, z2.s
191; CHECK-NEXT: ret
192 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.smlslb.nxv2i64(<vscale x 2 x i64> %a,
193 <vscale x 4 x i32> %b,
194 <vscale x 4 x i32> %c)
195 ret <vscale x 2 x i64> %res
196}
197
198;
199; SMLSLT
200;
201define <vscale x 8 x i16> @smlslt_i16(<vscale x 8 x i16> %a,
202 <vscale x 16 x i8> %b,
203 <vscale x 16 x i8> %c) {
204; CHECK-LABEL: smlslt_i16
205; CHECK: smlslt z0.h, z1.b, z2.b
206; CHECK-NEXT: ret
207 %res = call <vscale x 8 x i16> @llvm.aarch64.sve.smlslt.nxv8i16(<vscale x 8 x i16> %a,
208 <vscale x 16 x i8> %b,
209 <vscale x 16 x i8> %c)
210 ret <vscale x 8 x i16> %res
211}
212
213define <vscale x 4 x i32> @smlslt_i32(<vscale x 4 x i32> %a,
214 <vscale x 8 x i16> %b,
215 <vscale x 8 x i16> %c) {
216; CHECK-LABEL: smlslt_i32
217; CHECK: smlslt z0.s, z1.h, z2.h
218; CHECK-NEXT: ret
219 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.smlslt.nxv4i32(<vscale x 4 x i32> %a,
220 <vscale x 8 x i16> %b,
221 <vscale x 8 x i16> %c)
222 ret <vscale x 4 x i32> %res
223}
224
225define <vscale x 2 x i64> @smlslt_i64(<vscale x 2 x i64> %a,
226 <vscale x 4 x i32> %b,
227 <vscale x 4 x i32> %c) {
228; CHECK-LABEL: smlslt_i64
229; CHECK: smlslt z0.d, z1.s, z2.s
230; CHECK-NEXT: ret
231 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.smlslt.nxv2i64(<vscale x 2 x i64> %a,
232 <vscale x 4 x i32> %b,
233 <vscale x 4 x i32> %c)
234 ret <vscale x 2 x i64> %res
235}
236
237;
238; UMLSLB
239;
240define <vscale x 8 x i16> @umlslb_i16(<vscale x 8 x i16> %a,
241 <vscale x 16 x i8> %b,
242 <vscale x 16 x i8> %c) {
243; CHECK-LABEL: umlslb_i16
244; CHECK: umlslb z0.h, z1.b, z2.b
245; CHECK-NEXT: ret
246 %res = call <vscale x 8 x i16> @llvm.aarch64.sve.umlslb.nxv8i16(<vscale x 8 x i16> %a,
247 <vscale x 16 x i8> %b,
248 <vscale x 16 x i8> %c)
249 ret <vscale x 8 x i16> %res
250}
251
252define <vscale x 4 x i32> @umlslb_i32(<vscale x 4 x i32> %a,
253 <vscale x 8 x i16> %b,
254 <vscale x 8 x i16> %c) {
255; CHECK-LABEL: umlslb_i32
256; CHECK: umlslb z0.s, z1.h, z2.h
257; CHECK-NEXT: ret
258 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.umlslb.nxv4i32(<vscale x 4 x i32> %a,
259 <vscale x 8 x i16> %b,
260 <vscale x 8 x i16> %c)
261 ret <vscale x 4 x i32> %res
262}
263
264define <vscale x 2 x i64> @umlslb_i64(<vscale x 2 x i64> %a,
265 <vscale x 4 x i32> %b,
266 <vscale x 4 x i32> %c) {
267; CHECK-LABEL: umlslb_i64
268; CHECK: umlslb z0.d, z1.s, z2.s
269; CHECK-NEXT: ret
270 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.umlslb.nxv2i64(<vscale x 2 x i64> %a,
271 <vscale x 4 x i32> %b,
272 <vscale x 4 x i32> %c)
273 ret <vscale x 2 x i64> %res
274}
275
276;
277; UMLSLT
278;
279define <vscale x 8 x i16> @umlslt_i16(<vscale x 8 x i16> %a,
280 <vscale x 16 x i8> %b,
281 <vscale x 16 x i8> %c) {
282; CHECK-LABEL: umlslt_i16
283; CHECK: umlslt z0.h, z1.b, z2.b
284; CHECK-NEXT: ret
285 %res = call <vscale x 8 x i16> @llvm.aarch64.sve.umlslt.nxv8i16(<vscale x 8 x i16> %a,
286 <vscale x 16 x i8> %b,
287 <vscale x 16 x i8> %c)
288 ret <vscale x 8 x i16> %res
289}
290
291define <vscale x 4 x i32> @umlslt_i32(<vscale x 4 x i32> %a,
292 <vscale x 8 x i16> %b,
293 <vscale x 8 x i16> %c) {
294; CHECK-LABEL: umlslt_i32
295; CHECK: umlslt z0.s, z1.h, z2.h
296; CHECK-NEXT: ret
297 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.umlslt.nxv4i32(<vscale x 4 x i32> %a,
298 <vscale x 8 x i16> %b,
299 <vscale x 8 x i16> %c)
300 ret <vscale x 4 x i32> %res
301}
302
303define <vscale x 2 x i64> @umlslt_i64(<vscale x 2 x i64> %a,
304 <vscale x 4 x i32> %b,
305 <vscale x 4 x i32> %c) {
306; CHECK-LABEL: umlslt_i64
307; CHECK: umlslt z0.d, z1.s, z2.s
308; CHECK-NEXT: ret
309 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.umlslt.nxv2i64(<vscale x 2 x i64> %a,
310 <vscale x 4 x i32> %b,
311 <vscale x 4 x i32> %c)
312 ret <vscale x 2 x i64> %res
313}
314
315;
316; SQDMLALB
317;
318define <vscale x 8 x i16> @sqdmlalb_i16(<vscale x 8 x i16> %a,
319 <vscale x 16 x i8> %b,
320 <vscale x 16 x i8> %c) {
321; CHECK-LABEL: sqdmlalb_i16
322; CHECK: sqdmlalb z0.h, z1.b, z2.b
323; CHECK-NEXT: ret
324 %res = call <vscale x 8 x i16> @llvm.aarch64.sve.sqdmlalb.nxv8i16(<vscale x 8 x i16> %a,
325 <vscale x 16 x i8> %b,
326 <vscale x 16 x i8> %c)
327 ret <vscale x 8 x i16> %res
328}
329
330define <vscale x 4 x i32> @sqdmlalb_i32(<vscale x 4 x i32> %a,
331 <vscale x 8 x i16> %b,
332 <vscale x 8 x i16> %c) {
333; CHECK-LABEL: sqdmlalb_i32
334; CHECK: sqdmlalb z0.s, z1.h, z2.h
335; CHECK-NEXT: ret
336 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlalb.nxv4i32(<vscale x 4 x i32> %a,
337 <vscale x 8 x i16> %b,
338 <vscale x 8 x i16> %c)
339 ret <vscale x 4 x i32> %res
340}
341
342define <vscale x 2 x i64> @sqdmlalb_i64(<vscale x 2 x i64> %a,
343 <vscale x 4 x i32> %b,
344 <vscale x 4 x i32> %c) {
345; CHECK-LABEL: sqdmlalb_i64
346; CHECK: sqdmlalb z0.d, z1.s, z2.s
347; CHECK-NEXT: ret
348 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlalb.nxv2i64(<vscale x 2 x i64> %a,
349 <vscale x 4 x i32> %b,
350 <vscale x 4 x i32> %c)
351 ret <vscale x 2 x i64> %res
352}
353
354;
355; SQDMLALT
356;
357define <vscale x 8 x i16> @sqdmlalt_i16(<vscale x 8 x i16> %a,
358 <vscale x 16 x i8> %b,
359 <vscale x 16 x i8> %c) {
360; CHECK-LABEL: sqdmlalt_i16
361; CHECK: sqdmlalt z0.h, z1.b, z2.b
362; CHECK-NEXT: ret
363 %res = call <vscale x 8 x i16> @llvm.aarch64.sve.sqdmlalt.nxv8i16(<vscale x 8 x i16> %a,
364 <vscale x 16 x i8> %b,
365 <vscale x 16 x i8> %c)
366 ret <vscale x 8 x i16> %res
367}
368
369define <vscale x 4 x i32> @sqdmlalt_i32(<vscale x 4 x i32> %a,
370 <vscale x 8 x i16> %b,
371 <vscale x 8 x i16> %c) {
372; CHECK-LABEL: sqdmlalt_i32
373; CHECK: sqdmlalt z0.s, z1.h, z2.h
374; CHECK-NEXT: ret
375 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlalt.nxv4i32(<vscale x 4 x i32> %a,
376 <vscale x 8 x i16> %b,
377 <vscale x 8 x i16> %c)
378 ret <vscale x 4 x i32> %res
379}
380
381define <vscale x 2 x i64> @sqdmlalt_i64(<vscale x 2 x i64> %a,
382 <vscale x 4 x i32> %b,
383 <vscale x 4 x i32> %c) {
384; CHECK-LABEL: sqdmlalt_i64
385; CHECK: sqdmlalt z0.d, z1.s, z2.s
386; CHECK-NEXT: ret
387 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlalt.nxv2i64(<vscale x 2 x i64> %a,
388 <vscale x 4 x i32> %b,
389 <vscale x 4 x i32> %c)
390 ret <vscale x 2 x i64> %res
391}
392
393;
394; SQDMLSLB
395;
396define <vscale x 8 x i16> @sqdmlslb_i16(<vscale x 8 x i16> %a,
397 <vscale x 16 x i8> %b,
398 <vscale x 16 x i8> %c) {
399; CHECK-LABEL: sqdmlslb_i16
400; CHECK: sqdmlslb z0.h, z1.b, z2.b
401; CHECK-NEXT: ret
402 %res = call <vscale x 8 x i16> @llvm.aarch64.sve.sqdmlslb.nxv8i16(<vscale x 8 x i16> %a,
403 <vscale x 16 x i8> %b,
404 <vscale x 16 x i8> %c)
405 ret <vscale x 8 x i16> %res
406}
407
408define <vscale x 4 x i32> @sqdmlslb_i32(<vscale x 4 x i32> %a,
409 <vscale x 8 x i16> %b,
410 <vscale x 8 x i16> %c) {
411; CHECK-LABEL: sqdmlslb_i32
412; CHECK: sqdmlslb z0.s, z1.h, z2.h
413; CHECK-NEXT: ret
414 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlslb.nxv4i32(<vscale x 4 x i32> %a,
415 <vscale x 8 x i16> %b,
416 <vscale x 8 x i16> %c)
417 ret <vscale x 4 x i32> %res
418}
419
420define <vscale x 2 x i64> @sqdmlslb_i64(<vscale x 2 x i64> %a,
421 <vscale x 4 x i32> %b,
422 <vscale x 4 x i32> %c) {
423; CHECK-LABEL: sqdmlslb_i64
424; CHECK: sqdmlslb z0.d, z1.s, z2.s
425; CHECK-NEXT: ret
426 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlslb.nxv2i64(<vscale x 2 x i64> %a,
427 <vscale x 4 x i32> %b,
428 <vscale x 4 x i32> %c)
429 ret <vscale x 2 x i64> %res
430}
431
432;
433; SQDMLSLT
434;
435define <vscale x 8 x i16> @sqdmlslt_i16(<vscale x 8 x i16> %a,
436 <vscale x 16 x i8> %b,
437 <vscale x 16 x i8> %c) {
438; CHECK-LABEL: sqdmlslt_i16
439; CHECK: sqdmlslt z0.h, z1.b, z2.b
440; CHECK-NEXT: ret
441 %res = call <vscale x 8 x i16> @llvm.aarch64.sve.sqdmlslt.nxv8i16(<vscale x 8 x i16> %a,
442 <vscale x 16 x i8> %b,
443 <vscale x 16 x i8> %c)
444 ret <vscale x 8 x i16> %res
445}
446
447define <vscale x 4 x i32> @sqdmlslt_i32(<vscale x 4 x i32> %a,
448 <vscale x 8 x i16> %b,
449 <vscale x 8 x i16> %c) {
450; CHECK-LABEL: sqdmlslt_i32
451; CHECK: sqdmlslt z0.s, z1.h, z2.h
452; CHECK-NEXT: ret
453 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlslt.nxv4i32(<vscale x 4 x i32> %a,
454 <vscale x 8 x i16> %b,
455 <vscale x 8 x i16> %c)
456 ret <vscale x 4 x i32> %res
457}
458
459define <vscale x 2 x i64> @sqdmlslt_i64(<vscale x 2 x i64> %a,
460 <vscale x 4 x i32> %b,
461 <vscale x 4 x i32> %c) {
462; CHECK-LABEL: sqdmlslt_i64
463; CHECK: sqdmlslt z0.d, z1.s, z2.s
464; CHECK-NEXT: ret
465 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlslt.nxv2i64(<vscale x 2 x i64> %a,
466 <vscale x 4 x i32> %b,
467 <vscale x 4 x i32> %c)
468 ret <vscale x 2 x i64> %res
469}
470
471;
472; SQDMLALBT
473;
474define <vscale x 8 x i16> @sqdmlalbt_i16(<vscale x 8 x i16> %a,
475 <vscale x 16 x i8> %b,
476 <vscale x 16 x i8> %c) {
477; CHECK-LABEL: sqdmlalbt_i16
478; CHECK: sqdmlalbt z0.h, z1.b, z2.b
479; CHECK-NEXT: ret
480 %res = call <vscale x 8 x i16> @llvm.aarch64.sve.sqdmlalbt.nxv8i16(<vscale x 8 x i16> %a,
481 <vscale x 16 x i8> %b,
482 <vscale x 16 x i8> %c)
483 ret <vscale x 8 x i16> %res
484}
485
486define <vscale x 4 x i32> @sqdmlalbt_i32(<vscale x 4 x i32> %a,
487 <vscale x 8 x i16> %b,
488 <vscale x 8 x i16> %c) {
489; CHECK-LABEL: sqdmlalbt_i32
490; CHECK: sqdmlalbt z0.s, z1.h, z2.h
491; CHECK-NEXT: ret
492 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlalbt.nxv4i32(<vscale x 4 x i32> %a,
493 <vscale x 8 x i16> %b,
494 <vscale x 8 x i16> %c)
495 ret <vscale x 4 x i32> %res
496}
497
498define <vscale x 2 x i64> @sqdmlalbt_i64(<vscale x 2 x i64> %a,
499 <vscale x 4 x i32> %b,
500 <vscale x 4 x i32> %c) {
501; CHECK-LABEL: sqdmlalbt_i64
502; CHECK: sqdmlalbt z0.d, z1.s, z2.s
503; CHECK-NEXT: ret
504 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlalbt.nxv2i64(<vscale x 2 x i64> %a,
505 <vscale x 4 x i32> %b,
506 <vscale x 4 x i32> %c)
507 ret <vscale x 2 x i64> %res
508}
509
510;
511; SQDMLSLBT
512;
513define <vscale x 8 x i16> @sqdmlslbt_i16(<vscale x 8 x i16> %a,
514 <vscale x 16 x i8> %b,
515 <vscale x 16 x i8> %c) {
516; CHECK-LABEL: sqdmlslbt_i16
517; CHECK: sqdmlslbt z0.h, z1.b, z2.b
518; CHECK-NEXT: ret
519 %res = call <vscale x 8 x i16> @llvm.aarch64.sve.sqdmlslbt.nxv8i16(<vscale x 8 x i16> %a,
520 <vscale x 16 x i8> %b,
521 <vscale x 16 x i8> %c)
522 ret <vscale x 8 x i16> %res
523}
524
525define <vscale x 4 x i32> @sqdmlslbt_i32(<vscale x 4 x i32> %a,
526 <vscale x 8 x i16> %b,
527 <vscale x 8 x i16> %c) {
528; CHECK-LABEL: sqdmlslbt_i32
529; CHECK: sqdmlslbt z0.s, z1.h, z2.h
530; CHECK-NEXT: ret
531 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlslbt.nxv4i32(<vscale x 4 x i32> %a,
532 <vscale x 8 x i16> %b,
533 <vscale x 8 x i16> %c)
534 ret <vscale x 4 x i32> %res
535}
536
537define <vscale x 2 x i64> @sqdmlslbt_i64(<vscale x 2 x i64> %a,
538 <vscale x 4 x i32> %b,
539 <vscale x 4 x i32> %c) {
540; CHECK-LABEL: sqdmlslbt_i64
541; CHECK: sqdmlslbt z0.d, z1.s, z2.s
542; CHECK-NEXT: ret
543 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlslbt.nxv2i64(<vscale x 2 x i64> %a,
544 <vscale x 4 x i32> %b,
545 <vscale x 4 x i32> %c)
546 ret <vscale x 2 x i64> %res
547}
548
549declare <vscale x 8 x i16> @llvm.aarch64.sve.smlalb.nxv8i16(<vscale x 8 x i16>, <vscale x 16 x i8>, <vscale x 16 x i8>)
550declare <vscale x 4 x i32> @llvm.aarch64.sve.smlalb.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>)
551declare <vscale x 2 x i64> @llvm.aarch64.sve.smlalb.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>)
552declare <vscale x 8 x i16> @llvm.aarch64.sve.smlalt.nxv8i16(<vscale x 8 x i16>, <vscale x 16 x i8>, <vscale x 16 x i8>)
553declare <vscale x 4 x i32> @llvm.aarch64.sve.smlalt.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>)
554declare <vscale x 2 x i64> @llvm.aarch64.sve.smlalt.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>)
555declare <vscale x 8 x i16> @llvm.aarch64.sve.umlalb.nxv8i16(<vscale x 8 x i16>, <vscale x 16 x i8>, <vscale x 16 x i8>)
556declare <vscale x 4 x i32> @llvm.aarch64.sve.umlalb.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>)
557declare <vscale x 2 x i64> @llvm.aarch64.sve.umlalb.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>)
558declare <vscale x 8 x i16> @llvm.aarch64.sve.umlalt.nxv8i16(<vscale x 8 x i16>, <vscale x 16 x i8>, <vscale x 16 x i8>)
559declare <vscale x 4 x i32> @llvm.aarch64.sve.umlalt.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>)
560declare <vscale x 2 x i64> @llvm.aarch64.sve.umlalt.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>)
561declare <vscale x 8 x i16> @llvm.aarch64.sve.smlslb.nxv8i16(<vscale x 8 x i16>, <vscale x 16 x i8>, <vscale x 16 x i8>)
562declare <vscale x 4 x i32> @llvm.aarch64.sve.smlslb.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>)
563declare <vscale x 2 x i64> @llvm.aarch64.sve.smlslb.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>)
564declare <vscale x 8 x i16> @llvm.aarch64.sve.smlslt.nxv8i16(<vscale x 8 x i16>, <vscale x 16 x i8>, <vscale x 16 x i8>)
565declare <vscale x 4 x i32> @llvm.aarch64.sve.smlslt.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>)
566declare <vscale x 2 x i64> @llvm.aarch64.sve.smlslt.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>)
567declare <vscale x 8 x i16> @llvm.aarch64.sve.umlslb.nxv8i16(<vscale x 8 x i16>, <vscale x 16 x i8>, <vscale x 16 x i8>)
568declare <vscale x 4 x i32> @llvm.aarch64.sve.umlslb.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>)
569declare <vscale x 2 x i64> @llvm.aarch64.sve.umlslb.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>)
570declare <vscale x 8 x i16> @llvm.aarch64.sve.umlslt.nxv8i16(<vscale x 8 x i16>, <vscale x 16 x i8>, <vscale x 16 x i8>)
571declare <vscale x 4 x i32> @llvm.aarch64.sve.umlslt.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>)
572declare <vscale x 2 x i64> @llvm.aarch64.sve.umlslt.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>)
573declare <vscale x 8 x i16> @llvm.aarch64.sve.sqdmlalb.nxv8i16(<vscale x 8 x i16>, <vscale x 16 x i8>, <vscale x 16 x i8>)
574declare <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlalb.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>)
575declare <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlalb.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>)
576declare <vscale x 8 x i16> @llvm.aarch64.sve.sqdmlalt.nxv8i16(<vscale x 8 x i16>, <vscale x 16 x i8>, <vscale x 16 x i8>)
577declare <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlalt.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>)
578declare <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlalt.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>)
579declare <vscale x 8 x i16> @llvm.aarch64.sve.sqdmlslb.nxv8i16(<vscale x 8 x i16>, <vscale x 16 x i8>, <vscale x 16 x i8>)
580declare <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlslb.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>)
581declare <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlslb.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>)
582declare <vscale x 8 x i16> @llvm.aarch64.sve.sqdmlslt.nxv8i16(<vscale x 8 x i16>, <vscale x 16 x i8>, <vscale x 16 x i8>)
583declare <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlslt.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>)
584declare <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlslt.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>)
585declare <vscale x 8 x i16> @llvm.aarch64.sve.sqdmlalbt.nxv8i16(<vscale x 8 x i16>, <vscale x 16 x i8>, <vscale x 16 x i8>)
586declare <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlalbt.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>)
587declare <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlalbt.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>)
588declare <vscale x 8 x i16> @llvm.aarch64.sve.sqdmlslbt.nxv8i16(<vscale x 8 x i16>, <vscale x 16 x i8>, <vscale x 16 x i8>)
589declare <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlslbt.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>)
590declare <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlslbt.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>)