[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve2-mla-unpredicated.ll
blob1f8a136fb9f2614e4a0ae727c48d5357ba52859c
1 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2 < %s | FileCheck %s
4 ; SMLALB
6 define <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
18 define <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
30 define <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
43 ; SMLALT
45 define <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
57 define <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
69 define <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
82 ; UMLALB
84 define <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
96 define <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
108 define <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
121 ; UMLALT
123 define <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
135 define <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
147 define <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
160 ; SMLSLB
162 define <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
174 define <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
186 define <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
199 ; SMLSLT
201 define <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
213 define <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
225 define <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
238 ; UMLSLB
240 define <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
252 define <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
264 define <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
277 ; UMLSLT
279 define <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
291 define <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
303 define <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
316 ; SQDMLALB
318 define <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
330 define <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
342 define <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
355 ; SQDMLALT
357 define <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
369 define <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
381 define <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
394 ; SQDMLSLB
396 define <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
408 define <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
420 define <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
433 ; SQDMLSLT
435 define <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
447 define <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
459 define <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
472 ; SQDMLALBT
474 define <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
486 define <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
498 define <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
511 ; SQDMLSLBT
513 define <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
525 define <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
537 define <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
549 declare <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>)
550 declare <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>)
551 declare <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>)
552 declare <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>)
553 declare <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>)
554 declare <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>)
555 declare <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>)
556 declare <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>)
557 declare <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>)
558 declare <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>)
559 declare <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>)
560 declare <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>)
561 declare <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>)
562 declare <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>)
563 declare <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>)
564 declare <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>)
565 declare <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>)
566 declare <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>)
567 declare <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>)
568 declare <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>)
569 declare <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>)
570 declare <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>)
571 declare <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>)
572 declare <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>)
573 declare <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>)
574 declare <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>)
575 declare <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>)
576 declare <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>)
577 declare <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>)
578 declare <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>)
579 declare <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>)
580 declare <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>)
581 declare <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>)
582 declare <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>)
583 declare <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>)
584 declare <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>)
585 declare <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>)
586 declare <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>)
587 declare <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>)
588 declare <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>)
589 declare <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>)
590 declare <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>)