1 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2 < %s | FileCheck %s
6 define <vscale x 4 x i32> @smlalb_i32(<vscale x 4 x i32> %a,
8 <vscale x 8 x i16> %c) {
9 ; CHECK-LABEL: smlalb_i32
10 ; CHECK: smlalb z0.s, z1.h, z2.h[1]
12 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.smlalb.lane.nxv4i32(<vscale x 4 x i32> %a,
13 <vscale x 8 x i16> %b,
14 <vscale x 8 x i16> %c,
16 ret <vscale x 4 x i32> %res
19 define <vscale x 4 x i32> @smlalb_i32_2(<vscale x 4 x i32> %a,
20 <vscale x 8 x i16> %b,
21 <vscale x 8 x i16> %c) {
22 ; CHECK-LABEL: smlalb_i32_2
23 ; CHECK: smlalb z0.s, z1.h, z2.h[7]
25 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.smlalb.lane.nxv4i32(<vscale x 4 x i32> %a,
26 <vscale x 8 x i16> %b,
27 <vscale x 8 x i16> %c,
29 ret <vscale x 4 x i32> %res
32 define <vscale x 2 x i64> @smlalb_i64(<vscale x 2 x i64> %a,
33 <vscale x 4 x i32> %b,
34 <vscale x 4 x i32> %c) {
35 ; CHECK-LABEL: smlalb_i64
36 ; CHECK: smlalb z0.d, z1.s, z2.s[0]
38 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.smlalb.lane.nxv2i64(<vscale x 2 x i64> %a,
39 <vscale x 4 x i32> %b,
40 <vscale x 4 x i32> %c,
42 ret <vscale x 2 x i64> %res
45 define <vscale x 2 x i64> @smlalb_i64_2(<vscale x 2 x i64> %a,
46 <vscale x 4 x i32> %b,
47 <vscale x 4 x i32> %c) {
48 ; CHECK-LABEL: smlalb_i64_2
49 ; CHECK: smlalb z0.d, z1.s, z2.s[3]
51 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.smlalb.lane.nxv2i64(<vscale x 2 x i64> %a,
52 <vscale x 4 x i32> %b,
53 <vscale x 4 x i32> %c,
55 ret <vscale x 2 x i64> %res
61 define <vscale x 4 x i32> @smlalt_i32(<vscale x 4 x i32> %a,
62 <vscale x 8 x i16> %b,
63 <vscale x 8 x i16> %c) {
64 ; CHECK-LABEL: smlalt_i32
65 ; CHECK: smlalt z0.s, z1.h, z2.h[1]
67 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.smlalt.lane.nxv4i32(<vscale x 4 x i32> %a,
68 <vscale x 8 x i16> %b,
69 <vscale x 8 x i16> %c,
71 ret <vscale x 4 x i32> %res
74 define <vscale x 4 x i32> @smlalt_i32_2(<vscale x 4 x i32> %a,
75 <vscale x 8 x i16> %b,
76 <vscale x 8 x i16> %c) {
77 ; CHECK-LABEL: smlalt_i32_2
78 ; CHECK: smlalt z0.s, z1.h, z2.h[7]
80 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.smlalt.lane.nxv4i32(<vscale x 4 x i32> %a,
81 <vscale x 8 x i16> %b,
82 <vscale x 8 x i16> %c,
84 ret <vscale x 4 x i32> %res
87 define <vscale x 2 x i64> @smlalt_i64(<vscale x 2 x i64> %a,
88 <vscale x 4 x i32> %b,
89 <vscale x 4 x i32> %c) {
90 ; CHECK-LABEL: smlalt_i64
91 ; CHECK: smlalt z0.d, z1.s, z2.s[0]
93 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.smlalt.lane.nxv2i64(<vscale x 2 x i64> %a,
94 <vscale x 4 x i32> %b,
95 <vscale x 4 x i32> %c,
97 ret <vscale x 2 x i64> %res
100 define <vscale x 2 x i64> @smlalt_i64_2(<vscale x 2 x i64> %a,
101 <vscale x 4 x i32> %b,
102 <vscale x 4 x i32> %c) {
103 ; CHECK-LABEL: smlalt_i64_2
104 ; CHECK: smlalt z0.d, z1.s, z2.s[3]
106 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.smlalt.lane.nxv2i64(<vscale x 2 x i64> %a,
107 <vscale x 4 x i32> %b,
108 <vscale x 4 x i32> %c,
110 ret <vscale x 2 x i64> %res
116 define <vscale x 4 x i32> @umlalb_i32(<vscale x 4 x i32> %a,
117 <vscale x 8 x i16> %b,
118 <vscale x 8 x i16> %c) {
119 ; CHECK-LABEL: umlalb_i32
120 ; CHECK: umlalb z0.s, z1.h, z2.h[1]
122 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.umlalb.lane.nxv4i32(<vscale x 4 x i32> %a,
123 <vscale x 8 x i16> %b,
124 <vscale x 8 x i16> %c,
126 ret <vscale x 4 x i32> %res
129 define <vscale x 4 x i32> @umlalb_i32_2(<vscale x 4 x i32> %a,
130 <vscale x 8 x i16> %b,
131 <vscale x 8 x i16> %c) {
132 ; CHECK-LABEL: umlalb_i32_2
133 ; CHECK: umlalb z0.s, z1.h, z2.h[7]
135 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.umlalb.lane.nxv4i32(<vscale x 4 x i32> %a,
136 <vscale x 8 x i16> %b,
137 <vscale x 8 x i16> %c,
139 ret <vscale x 4 x i32> %res
142 define <vscale x 2 x i64> @umlalb_i64(<vscale x 2 x i64> %a,
143 <vscale x 4 x i32> %b,
144 <vscale x 4 x i32> %c) {
145 ; CHECK-LABEL: umlalb_i64
146 ; CHECK: umlalb z0.d, z1.s, z2.s[0]
148 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.umlalb.lane.nxv2i64(<vscale x 2 x i64> %a,
149 <vscale x 4 x i32> %b,
150 <vscale x 4 x i32> %c,
152 ret <vscale x 2 x i64> %res
155 define <vscale x 2 x i64> @umlalb_i64_2(<vscale x 2 x i64> %a,
156 <vscale x 4 x i32> %b,
157 <vscale x 4 x i32> %c) {
158 ; CHECK-LABEL: umlalb_i64_2
159 ; CHECK: umlalb z0.d, z1.s, z2.s[3]
161 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.umlalb.lane.nxv2i64(<vscale x 2 x i64> %a,
162 <vscale x 4 x i32> %b,
163 <vscale x 4 x i32> %c,
165 ret <vscale x 2 x i64> %res
171 define <vscale x 4 x i32> @umlalt_i32(<vscale x 4 x i32> %a,
172 <vscale x 8 x i16> %b,
173 <vscale x 8 x i16> %c) {
174 ; CHECK-LABEL: umlalt_i32
175 ; CHECK: umlalt z0.s, z1.h, z2.h[1]
177 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.umlalt.lane.nxv4i32(<vscale x 4 x i32> %a,
178 <vscale x 8 x i16> %b,
179 <vscale x 8 x i16> %c,
181 ret <vscale x 4 x i32> %res
184 define <vscale x 4 x i32> @umlalt_i32_2(<vscale x 4 x i32> %a,
185 <vscale x 8 x i16> %b,
186 <vscale x 8 x i16> %c) {
187 ; CHECK-LABEL: umlalt_i32_2
188 ; CHECK: umlalt z0.s, z1.h, z2.h[7]
190 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.umlalt.lane.nxv4i32(<vscale x 4 x i32> %a,
191 <vscale x 8 x i16> %b,
192 <vscale x 8 x i16> %c,
194 ret <vscale x 4 x i32> %res
197 define <vscale x 2 x i64> @umlalt_i64(<vscale x 2 x i64> %a,
198 <vscale x 4 x i32> %b,
199 <vscale x 4 x i32> %c) {
200 ; CHECK-LABEL: umlalt_i64
201 ; CHECK: umlalt z0.d, z1.s, z2.s[0]
203 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.umlalt.lane.nxv2i64(<vscale x 2 x i64> %a,
204 <vscale x 4 x i32> %b,
205 <vscale x 4 x i32> %c,
207 ret <vscale x 2 x i64> %res
210 define <vscale x 2 x i64> @umlalt_i64_2(<vscale x 2 x i64> %a,
211 <vscale x 4 x i32> %b,
212 <vscale x 4 x i32> %c) {
213 ; CHECK-LABEL: umlalt_i64_2
214 ; CHECK: umlalt z0.d, z1.s, z2.s[3]
216 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.umlalt.lane.nxv2i64(<vscale x 2 x i64> %a,
217 <vscale x 4 x i32> %b,
218 <vscale x 4 x i32> %c,
220 ret <vscale x 2 x i64> %res
226 define <vscale x 4 x i32> @smlslb_i32(<vscale x 4 x i32> %a,
227 <vscale x 8 x i16> %b,
228 <vscale x 8 x i16> %c) {
229 ; CHECK-LABEL: smlslb_i32
230 ; CHECK: smlslb z0.s, z1.h, z2.h[1]
232 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.smlslb.lane.nxv4i32(<vscale x 4 x i32> %a,
233 <vscale x 8 x i16> %b,
234 <vscale x 8 x i16> %c,
236 ret <vscale x 4 x i32> %res
239 define <vscale x 4 x i32> @smlslb_i32_2(<vscale x 4 x i32> %a,
240 <vscale x 8 x i16> %b,
241 <vscale x 8 x i16> %c) {
242 ; CHECK-LABEL: smlslb_i32_2
243 ; CHECK: smlslb z0.s, z1.h, z2.h[7]
245 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.smlslb.lane.nxv4i32(<vscale x 4 x i32> %a,
246 <vscale x 8 x i16> %b,
247 <vscale x 8 x i16> %c,
249 ret <vscale x 4 x i32> %res
252 define <vscale x 2 x i64> @smlslb_i64(<vscale x 2 x i64> %a,
253 <vscale x 4 x i32> %b,
254 <vscale x 4 x i32> %c) {
255 ; CHECK-LABEL: smlslb_i64
256 ; CHECK: smlslb z0.d, z1.s, z2.s[0]
258 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.smlslb.lane.nxv2i64(<vscale x 2 x i64> %a,
259 <vscale x 4 x i32> %b,
260 <vscale x 4 x i32> %c,
262 ret <vscale x 2 x i64> %res
265 define <vscale x 2 x i64> @smlslb_i64_2(<vscale x 2 x i64> %a,
266 <vscale x 4 x i32> %b,
267 <vscale x 4 x i32> %c) {
268 ; CHECK-LABEL: smlslb_i64_2
269 ; CHECK: smlslb z0.d, z1.s, z2.s[3]
271 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.smlslb.lane.nxv2i64(<vscale x 2 x i64> %a,
272 <vscale x 4 x i32> %b,
273 <vscale x 4 x i32> %c,
275 ret <vscale x 2 x i64> %res
281 define <vscale x 4 x i32> @smlslt_i32(<vscale x 4 x i32> %a,
282 <vscale x 8 x i16> %b,
283 <vscale x 8 x i16> %c) {
284 ; CHECK-LABEL: smlslt_i32
285 ; CHECK: smlslt z0.s, z1.h, z2.h[1]
287 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.smlslt.lane.nxv4i32(<vscale x 4 x i32> %a,
288 <vscale x 8 x i16> %b,
289 <vscale x 8 x i16> %c,
291 ret <vscale x 4 x i32> %res
294 define <vscale x 4 x i32> @smlslt_i32_2(<vscale x 4 x i32> %a,
295 <vscale x 8 x i16> %b,
296 <vscale x 8 x i16> %c) {
297 ; CHECK-LABEL: smlslt_i32_2
298 ; CHECK: smlslt z0.s, z1.h, z2.h[7]
300 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.smlslt.lane.nxv4i32(<vscale x 4 x i32> %a,
301 <vscale x 8 x i16> %b,
302 <vscale x 8 x i16> %c,
304 ret <vscale x 4 x i32> %res
307 define <vscale x 2 x i64> @smlslt_i64(<vscale x 2 x i64> %a,
308 <vscale x 4 x i32> %b,
309 <vscale x 4 x i32> %c) {
310 ; CHECK-LABEL: smlslt_i64
311 ; CHECK: smlslt z0.d, z1.s, z2.s[0]
313 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.smlslt.lane.nxv2i64(<vscale x 2 x i64> %a,
314 <vscale x 4 x i32> %b,
315 <vscale x 4 x i32> %c,
317 ret <vscale x 2 x i64> %res
320 define <vscale x 2 x i64> @smlslt_i64_2(<vscale x 2 x i64> %a,
321 <vscale x 4 x i32> %b,
322 <vscale x 4 x i32> %c) {
323 ; CHECK-LABEL: smlslt_i64_2
324 ; CHECK: smlslt z0.d, z1.s, z2.s[3]
326 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.smlslt.lane.nxv2i64(<vscale x 2 x i64> %a,
327 <vscale x 4 x i32> %b,
328 <vscale x 4 x i32> %c,
330 ret <vscale x 2 x i64> %res
336 define <vscale x 4 x i32> @umlslb_i32(<vscale x 4 x i32> %a,
337 <vscale x 8 x i16> %b,
338 <vscale x 8 x i16> %c) {
339 ; CHECK-LABEL: umlslb_i32
340 ; CHECK: umlslb z0.s, z1.h, z2.h[1]
342 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.umlslb.lane.nxv4i32(<vscale x 4 x i32> %a,
343 <vscale x 8 x i16> %b,
344 <vscale x 8 x i16> %c,
346 ret <vscale x 4 x i32> %res
349 define <vscale x 4 x i32> @umlslb_i32_2(<vscale x 4 x i32> %a,
350 <vscale x 8 x i16> %b,
351 <vscale x 8 x i16> %c) {
352 ; CHECK-LABEL: umlslb_i32_2
353 ; CHECK: umlslb z0.s, z1.h, z2.h[7]
355 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.umlslb.lane.nxv4i32(<vscale x 4 x i32> %a,
356 <vscale x 8 x i16> %b,
357 <vscale x 8 x i16> %c,
359 ret <vscale x 4 x i32> %res
362 define <vscale x 2 x i64> @umlslb_i64(<vscale x 2 x i64> %a,
363 <vscale x 4 x i32> %b,
364 <vscale x 4 x i32> %c) {
365 ; CHECK-LABEL: umlslb_i64
366 ; CHECK: umlslb z0.d, z1.s, z2.s[0]
368 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.umlslb.lane.nxv2i64(<vscale x 2 x i64> %a,
369 <vscale x 4 x i32> %b,
370 <vscale x 4 x i32> %c,
372 ret <vscale x 2 x i64> %res
375 define <vscale x 2 x i64> @umlslb_i64_2(<vscale x 2 x i64> %a,
376 <vscale x 4 x i32> %b,
377 <vscale x 4 x i32> %c) {
378 ; CHECK-LABEL: umlslb_i64_2
379 ; CHECK: umlslb z0.d, z1.s, z2.s[3]
381 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.umlslb.lane.nxv2i64(<vscale x 2 x i64> %a,
382 <vscale x 4 x i32> %b,
383 <vscale x 4 x i32> %c,
385 ret <vscale x 2 x i64> %res
391 define <vscale x 4 x i32> @umlslt_i32(<vscale x 4 x i32> %a,
392 <vscale x 8 x i16> %b,
393 <vscale x 8 x i16> %c) {
394 ; CHECK-LABEL: umlslt_i32
395 ; CHECK: umlslt z0.s, z1.h, z2.h[1]
397 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.umlslt.lane.nxv4i32(<vscale x 4 x i32> %a,
398 <vscale x 8 x i16> %b,
399 <vscale x 8 x i16> %c,
401 ret <vscale x 4 x i32> %res
404 define <vscale x 4 x i32> @umlslt_i32_2(<vscale x 4 x i32> %a,
405 <vscale x 8 x i16> %b,
406 <vscale x 8 x i16> %c) {
407 ; CHECK-LABEL: umlslt_i32_2
408 ; CHECK: umlslt z0.s, z1.h, z2.h[7]
410 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.umlslt.lane.nxv4i32(<vscale x 4 x i32> %a,
411 <vscale x 8 x i16> %b,
412 <vscale x 8 x i16> %c,
414 ret <vscale x 4 x i32> %res
417 define <vscale x 2 x i64> @umlslt_i64(<vscale x 2 x i64> %a,
418 <vscale x 4 x i32> %b,
419 <vscale x 4 x i32> %c) {
420 ; CHECK-LABEL: umlslt_i64
421 ; CHECK: umlslt z0.d, z1.s, z2.s[0]
423 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.umlslt.lane.nxv2i64(<vscale x 2 x i64> %a,
424 <vscale x 4 x i32> %b,
425 <vscale x 4 x i32> %c,
427 ret <vscale x 2 x i64> %res
430 define <vscale x 2 x i64> @umlslt_i64_2(<vscale x 2 x i64> %a,
431 <vscale x 4 x i32> %b,
432 <vscale x 4 x i32> %c) {
433 ; CHECK-LABEL: umlslt_i64_2
434 ; CHECK: umlslt z0.d, z1.s, z2.s[3]
436 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.umlslt.lane.nxv2i64(<vscale x 2 x i64> %a,
437 <vscale x 4 x i32> %b,
438 <vscale x 4 x i32> %c,
440 ret <vscale x 2 x i64> %res
446 define <vscale x 4 x i32> @sqdmlalb_i32(<vscale x 4 x i32> %a,
447 <vscale x 8 x i16> %b,
448 <vscale x 8 x i16> %c) {
449 ; CHECK-LABEL: sqdmlalb_i32
450 ; CHECK: sqdmlalb z0.s, z1.h, z2.h[1]
452 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlalb.lane.nxv4i32(<vscale x 4 x i32> %a,
453 <vscale x 8 x i16> %b,
454 <vscale x 8 x i16> %c,
456 ret <vscale x 4 x i32> %res
459 define <vscale x 4 x i32> @sqdmlalb_i32_2(<vscale x 4 x i32> %a,
460 <vscale x 8 x i16> %b,
461 <vscale x 8 x i16> %c) {
462 ; CHECK-LABEL: sqdmlalb_i32_2
463 ; CHECK: sqdmlalb z0.s, z1.h, z2.h[7]
465 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlalb.lane.nxv4i32(<vscale x 4 x i32> %a,
466 <vscale x 8 x i16> %b,
467 <vscale x 8 x i16> %c,
469 ret <vscale x 4 x i32> %res
472 define <vscale x 2 x i64> @sqdmlalb_i64(<vscale x 2 x i64> %a,
473 <vscale x 4 x i32> %b,
474 <vscale x 4 x i32> %c) {
475 ; CHECK-LABEL: sqdmlalb_i64
476 ; CHECK: sqdmlalb z0.d, z1.s, z2.s[0]
478 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlalb.lane.nxv2i64(<vscale x 2 x i64> %a,
479 <vscale x 4 x i32> %b,
480 <vscale x 4 x i32> %c,
482 ret <vscale x 2 x i64> %res
485 define <vscale x 2 x i64> @sqdmlalb_i64_2(<vscale x 2 x i64> %a,
486 <vscale x 4 x i32> %b,
487 <vscale x 4 x i32> %c) {
488 ; CHECK-LABEL: sqdmlalb_i64_2
489 ; CHECK: sqdmlalb z0.d, z1.s, z2.s[3]
491 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlalb.lane.nxv2i64(<vscale x 2 x i64> %a,
492 <vscale x 4 x i32> %b,
493 <vscale x 4 x i32> %c,
495 ret <vscale x 2 x i64> %res
501 define <vscale x 4 x i32> @sqdmlalt_i32(<vscale x 4 x i32> %a,
502 <vscale x 8 x i16> %b,
503 <vscale x 8 x i16> %c) {
504 ; CHECK-LABEL: sqdmlalt_i32
505 ; CHECK: sqdmlalt z0.s, z1.h, z2.h[1]
507 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlalt.lane.nxv4i32(<vscale x 4 x i32> %a,
508 <vscale x 8 x i16> %b,
509 <vscale x 8 x i16> %c,
511 ret <vscale x 4 x i32> %res
514 define <vscale x 4 x i32> @sqdmlalt_i32_2(<vscale x 4 x i32> %a,
515 <vscale x 8 x i16> %b,
516 <vscale x 8 x i16> %c) {
517 ; CHECK-LABEL: sqdmlalt_i32_2
518 ; CHECK: sqdmlalt z0.s, z1.h, z2.h[7]
520 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlalt.lane.nxv4i32(<vscale x 4 x i32> %a,
521 <vscale x 8 x i16> %b,
522 <vscale x 8 x i16> %c,
524 ret <vscale x 4 x i32> %res
527 define <vscale x 2 x i64> @sqdmlalt_i64(<vscale x 2 x i64> %a,
528 <vscale x 4 x i32> %b,
529 <vscale x 4 x i32> %c) {
530 ; CHECK-LABEL: sqdmlalt_i64
531 ; CHECK: sqdmlalt z0.d, z1.s, z2.s[0]
533 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlalt.lane.nxv2i64(<vscale x 2 x i64> %a,
534 <vscale x 4 x i32> %b,
535 <vscale x 4 x i32> %c,
537 ret <vscale x 2 x i64> %res
540 define <vscale x 2 x i64> @sqdmlalt_i64_2(<vscale x 2 x i64> %a,
541 <vscale x 4 x i32> %b,
542 <vscale x 4 x i32> %c) {
543 ; CHECK-LABEL: sqdmlalt_i64_2
544 ; CHECK: sqdmlalt z0.d, z1.s, z2.s[3]
546 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlalt.lane.nxv2i64(<vscale x 2 x i64> %a,
547 <vscale x 4 x i32> %b,
548 <vscale x 4 x i32> %c,
550 ret <vscale x 2 x i64> %res
556 define <vscale x 4 x i32> @sqdmlslb_i32(<vscale x 4 x i32> %a,
557 <vscale x 8 x i16> %b,
558 <vscale x 8 x i16> %c) {
559 ; CHECK-LABEL: sqdmlslb_i32
560 ; CHECK: sqdmlslb z0.s, z1.h, z2.h[1]
562 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlslb.lane.nxv4i32(<vscale x 4 x i32> %a,
563 <vscale x 8 x i16> %b,
564 <vscale x 8 x i16> %c,
566 ret <vscale x 4 x i32> %res
569 define <vscale x 4 x i32> @sqdmlslb_i32_2(<vscale x 4 x i32> %a,
570 <vscale x 8 x i16> %b,
571 <vscale x 8 x i16> %c) {
572 ; CHECK-LABEL: sqdmlslb_i32_2
573 ; CHECK: sqdmlslb z0.s, z1.h, z2.h[7]
575 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlslb.lane.nxv4i32(<vscale x 4 x i32> %a,
576 <vscale x 8 x i16> %b,
577 <vscale x 8 x i16> %c,
579 ret <vscale x 4 x i32> %res
582 define <vscale x 2 x i64> @sqdmlslb_i64(<vscale x 2 x i64> %a,
583 <vscale x 4 x i32> %b,
584 <vscale x 4 x i32> %c) {
585 ; CHECK-LABEL: sqdmlslb_i64
586 ; CHECK: sqdmlslb z0.d, z1.s, z2.s[0]
588 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlslb.lane.nxv2i64(<vscale x 2 x i64> %a,
589 <vscale x 4 x i32> %b,
590 <vscale x 4 x i32> %c,
592 ret <vscale x 2 x i64> %res
595 define <vscale x 2 x i64> @sqdmlslb_i64_2(<vscale x 2 x i64> %a,
596 <vscale x 4 x i32> %b,
597 <vscale x 4 x i32> %c) {
598 ; CHECK-LABEL: sqdmlslb_i64_2
599 ; CHECK: sqdmlslb z0.d, z1.s, z2.s[3]
601 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlslb.lane.nxv2i64(<vscale x 2 x i64> %a,
602 <vscale x 4 x i32> %b,
603 <vscale x 4 x i32> %c,
605 ret <vscale x 2 x i64> %res
611 define <vscale x 4 x i32> @sqdmlslt_i32(<vscale x 4 x i32> %a,
612 <vscale x 8 x i16> %b,
613 <vscale x 8 x i16> %c) {
614 ; CHECK-LABEL: sqdmlslt_i32
615 ; CHECK: sqdmlslt z0.s, z1.h, z2.h[1]
617 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlslt.lane.nxv4i32(<vscale x 4 x i32> %a,
618 <vscale x 8 x i16> %b,
619 <vscale x 8 x i16> %c,
621 ret <vscale x 4 x i32> %res
624 define <vscale x 4 x i32> @sqdmlslt_i32_2(<vscale x 4 x i32> %a,
625 <vscale x 8 x i16> %b,
626 <vscale x 8 x i16> %c) {
627 ; CHECK-LABEL: sqdmlslt_i32_2
628 ; CHECK: sqdmlslt z0.s, z1.h, z2.h[7]
630 %res = call <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlslt.lane.nxv4i32(<vscale x 4 x i32> %a,
631 <vscale x 8 x i16> %b,
632 <vscale x 8 x i16> %c,
634 ret <vscale x 4 x i32> %res
637 define <vscale x 2 x i64> @sqdmlslt_i64(<vscale x 2 x i64> %a,
638 <vscale x 4 x i32> %b,
639 <vscale x 4 x i32> %c) {
640 ; CHECK-LABEL: sqdmlslt_i64
641 ; CHECK: sqdmlslt z0.d, z1.s, z2.s[0]
643 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlslt.lane.nxv2i64(<vscale x 2 x i64> %a,
644 <vscale x 4 x i32> %b,
645 <vscale x 4 x i32> %c,
647 ret <vscale x 2 x i64> %res
650 define <vscale x 2 x i64> @sqdmlslt_i64_2(<vscale x 2 x i64> %a,
651 <vscale x 4 x i32> %b,
652 <vscale x 4 x i32> %c) {
653 ; CHECK-LABEL: sqdmlslt_i64_2
654 ; CHECK: sqdmlslt z0.d, z1.s, z2.s[3]
656 %res = call <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlslt.lane.nxv2i64(<vscale x 2 x i64> %a,
657 <vscale x 4 x i32> %b,
658 <vscale x 4 x i32> %c,
660 ret <vscale x 2 x i64> %res
663 declare <vscale x 4 x i32> @llvm.aarch64.sve.smlalb.lane.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>, i32)
664 declare <vscale x 2 x i64> @llvm.aarch64.sve.smlalb.lane.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>, i32)
665 declare <vscale x 4 x i32> @llvm.aarch64.sve.smlalt.lane.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>, i32)
666 declare <vscale x 2 x i64> @llvm.aarch64.sve.smlalt.lane.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>, i32)
667 declare <vscale x 4 x i32> @llvm.aarch64.sve.umlalb.lane.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>, i32)
668 declare <vscale x 2 x i64> @llvm.aarch64.sve.umlalb.lane.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>, i32)
669 declare <vscale x 4 x i32> @llvm.aarch64.sve.umlalt.lane.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>, i32)
670 declare <vscale x 2 x i64> @llvm.aarch64.sve.umlalt.lane.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>, i32)
671 declare <vscale x 4 x i32> @llvm.aarch64.sve.smlslb.lane.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>, i32)
672 declare <vscale x 2 x i64> @llvm.aarch64.sve.smlslb.lane.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>, i32)
673 declare <vscale x 4 x i32> @llvm.aarch64.sve.smlslt.lane.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>, i32)
674 declare <vscale x 2 x i64> @llvm.aarch64.sve.smlslt.lane.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>, i32)
675 declare <vscale x 4 x i32> @llvm.aarch64.sve.umlslb.lane.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>, i32)
676 declare <vscale x 2 x i64> @llvm.aarch64.sve.umlslb.lane.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>, i32)
677 declare <vscale x 4 x i32> @llvm.aarch64.sve.umlslt.lane.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>, i32)
678 declare <vscale x 2 x i64> @llvm.aarch64.sve.umlslt.lane.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>, i32)
679 declare <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlalb.lane.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>, i32)
680 declare <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlalb.lane.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>, i32)
681 declare <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlalt.lane.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>, i32)
682 declare <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlalt.lane.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>, i32)
683 declare <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlslb.lane.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>, i32)
684 declare <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlslb.lane.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>, i32)
685 declare <vscale x 4 x i32> @llvm.aarch64.sve.sqdmlslt.lane.nxv4i32(<vscale x 4 x i32>, <vscale x 8 x i16>, <vscale x 8 x i16>, i32)
686 declare <vscale x 2 x i64> @llvm.aarch64.sve.sqdmlslt.lane.nxv2i64(<vscale x 2 x i64>, <vscale x 4 x i32>, <vscale x 4 x i32>, i32)