1 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2 -asm-verbose=0 < %s | FileCheck %s
7 define <vscale x 16 x i8> @saba_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b, <vscale x 16 x i8> %c) {
8 ; CHECK-LABEL: saba_i8:
9 ; CHECK: saba z0.b, z1.b, z2.b
11 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.saba.nxv16i8(<vscale x 16 x i8> %a,
12 <vscale x 16 x i8> %b,
13 <vscale x 16 x i8> %c)
14 ret <vscale x 16 x i8> %out
17 define <vscale x 8 x i16> @saba_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, <vscale x 8 x i16> %c) {
18 ; CHECK-LABEL: saba_i16:
19 ; CHECK: saba z0.h, z1.h, z2.h
21 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.saba.nxv8i16(<vscale x 8 x i16> %a,
22 <vscale x 8 x i16> %b,
23 <vscale x 8 x i16> %c)
24 ret <vscale x 8 x i16> %out
27 define <vscale x 4 x i32> @saba_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, <vscale x 4 x i32> %c) {
28 ; CHECK-LABEL: saba_i32:
29 ; CHECK: saba z0.s, z1.s, z2.s
31 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.saba.nxv4i32(<vscale x 4 x i32> %a,
32 <vscale x 4 x i32> %b,
33 <vscale x 4 x i32> %c)
34 ret <vscale x 4 x i32> %out
37 define <vscale x 2 x i64> @saba_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, <vscale x 2 x i64> %c) {
38 ; CHECK-LABEL: saba_i64:
39 ; CHECK: saba z0.d, z1.d, z2.d
41 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.saba.nxv2i64(<vscale x 2 x i64> %a,
42 <vscale x 2 x i64> %b,
43 <vscale x 2 x i64> %c)
44 ret <vscale x 2 x i64> %out
51 define <vscale x 16 x i8> @shadd_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
52 ; CHECK-LABEL: shadd_i8:
53 ; CHECK: shadd z0.b, p0/m, z0.b, z1.b
55 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.shadd.nxv16i8(<vscale x 16 x i1> %pg,
56 <vscale x 16 x i8> %a,
57 <vscale x 16 x i8> %b)
58 ret <vscale x 16 x i8> %out
61 define <vscale x 8 x i16> @shadd_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
62 ; CHECK-LABEL: shadd_i16:
63 ; CHECK: shadd z0.h, p0/m, z0.h, z1.h
65 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.shadd.nxv8i16(<vscale x 8 x i1> %pg,
66 <vscale x 8 x i16> %a,
67 <vscale x 8 x i16> %b)
68 ret <vscale x 8 x i16> %out
71 define <vscale x 4 x i32> @shadd_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
72 ; CHECK-LABEL: shadd_i32:
73 ; CHECK: shadd z0.s, p0/m, z0.s, z1.s
75 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.shadd.nxv4i32(<vscale x 4 x i1> %pg,
76 <vscale x 4 x i32> %a,
77 <vscale x 4 x i32> %b)
78 ret <vscale x 4 x i32> %out
81 define <vscale x 2 x i64> @shadd_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
82 ; CHECK-LABEL: shadd_i64:
83 ; CHECK: shadd z0.d, p0/m, z0.d, z1.d
85 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.shadd.nxv2i64(<vscale x 2 x i1> %pg,
86 <vscale x 2 x i64> %a,
87 <vscale x 2 x i64> %b)
88 ret <vscale x 2 x i64> %out
95 define <vscale x 16 x i8> @shsub_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
96 ; CHECK-LABEL: shsub_i8:
97 ; CHECK: shsub z0.b, p0/m, z0.b, z1.b
99 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.shsub.nxv16i8(<vscale x 16 x i1> %pg,
100 <vscale x 16 x i8> %a,
101 <vscale x 16 x i8> %b)
102 ret <vscale x 16 x i8> %out
105 define <vscale x 8 x i16> @shsub_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
106 ; CHECK-LABEL: shsub_i16:
107 ; CHECK: shsub z0.h, p0/m, z0.h, z1.h
109 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.shsub.nxv8i16(<vscale x 8 x i1> %pg,
110 <vscale x 8 x i16> %a,
111 <vscale x 8 x i16> %b)
112 ret <vscale x 8 x i16> %out
115 define <vscale x 4 x i32> @shsub_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
116 ; CHECK-LABEL: shsub_i32:
117 ; CHECK: shsub z0.s, p0/m, z0.s, z1.s
119 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.shsub.nxv4i32(<vscale x 4 x i1> %pg,
120 <vscale x 4 x i32> %a,
121 <vscale x 4 x i32> %b)
122 ret <vscale x 4 x i32> %out
125 define <vscale x 2 x i64> @shsub_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
126 ; CHECK-LABEL: shsub_i64:
127 ; CHECK: shsub z0.d, p0/m, z0.d, z1.d
129 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.shsub.nxv2i64(<vscale x 2 x i1> %pg,
130 <vscale x 2 x i64> %a,
131 <vscale x 2 x i64> %b)
132 ret <vscale x 2 x i64> %out
139 define <vscale x 16 x i8> @shsubr_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
140 ; CHECK-LABEL: shsubr_i8:
141 ; CHECK: shsubr z0.b, p0/m, z0.b, z1.b
143 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.shsubr.nxv16i8(<vscale x 16 x i1> %pg,
144 <vscale x 16 x i8> %a,
145 <vscale x 16 x i8> %b)
146 ret <vscale x 16 x i8> %out
149 define <vscale x 8 x i16> @shsubr_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
150 ; CHECK-LABEL: shsubr_i16:
151 ; CHECK: shsubr z0.h, p0/m, z0.h, z1.h
153 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.shsubr.nxv8i16(<vscale x 8 x i1> %pg,
154 <vscale x 8 x i16> %a,
155 <vscale x 8 x i16> %b)
156 ret <vscale x 8 x i16> %out
159 define <vscale x 4 x i32> @shsubr_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
160 ; CHECK-LABEL: shsubr_i32:
161 ; CHECK: shsubr z0.s, p0/m, z0.s, z1.s
163 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.shsubr.nxv4i32(<vscale x 4 x i1> %pg,
164 <vscale x 4 x i32> %a,
165 <vscale x 4 x i32> %b)
166 ret <vscale x 4 x i32> %out
169 define <vscale x 2 x i64> @shsubr_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
170 ; CHECK-LABEL: shsubr_i64:
171 ; CHECK: shsubr z0.d, p0/m, z0.d, z1.d
173 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.shsubr.nxv2i64(<vscale x 2 x i1> %pg,
174 <vscale x 2 x i64> %a,
175 <vscale x 2 x i64> %b)
176 ret <vscale x 2 x i64> %out
183 define <vscale x 16 x i8> @sli_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
184 ; CHECK-LABEL: sli_i8:
185 ; CHECK: sli z0.b, z1.b, #0
187 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.sli.nxv16i8(<vscale x 16 x i8> %a,
188 <vscale x 16 x i8> %b,
190 ret <vscale x 16 x i8> %out
193 define <vscale x 8 x i16> @sli_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
194 ; CHECK-LABEL: sli_i16:
195 ; CHECK: sli z0.h, z1.h, #1
197 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sli.nxv8i16(<vscale x 8 x i16> %a,
198 <vscale x 8 x i16> %b,
200 ret <vscale x 8 x i16> %out
203 define <vscale x 4 x i32> @sli_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
204 ; CHECK-LABEL: sli_i32:
205 ; CHECK: sli z0.s, z1.s, #30
207 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sli.nxv4i32(<vscale x 4 x i32> %a,
208 <vscale x 4 x i32> %b,
210 ret <vscale x 4 x i32> %out
213 define <vscale x 2 x i64> @sli_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
214 ; CHECK-LABEL: sli_i64:
215 ; CHECK: sli z0.d, z1.d, #63
217 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sli.nxv2i64(<vscale x 2 x i64> %a,
218 <vscale x 2 x i64> %b,
220 ret <vscale x 2 x i64> %out
227 define <vscale x 16 x i8> @sqabs_i8(<vscale x 16 x i8> %a, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %b) {
228 ; CHECK-LABEL: sqabs_i8:
229 ; CHECK: sqabs z0.b, p0/m, z1.b
231 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.sqabs.nxv16i8(<vscale x 16 x i8> %a,
232 <vscale x 16 x i1> %pg,
233 <vscale x 16 x i8> %b)
234 ret <vscale x 16 x i8> %out
237 define <vscale x 8 x i16> @sqabs_i16(<vscale x 8 x i16> %a, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %b) {
238 ; CHECK-LABEL: sqabs_i16:
239 ; CHECK: sqabs z0.h, p0/m, z1.h
241 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sqabs.nxv8i16(<vscale x 8 x i16> %a,
242 <vscale x 8 x i1> %pg,
243 <vscale x 8 x i16> %b)
244 ret <vscale x 8 x i16> %out
247 define <vscale x 4 x i32> @sqabs_i32(<vscale x 4 x i32> %a, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %b) {
248 ; CHECK-LABEL: sqabs_i32:
249 ; CHECK: sqabs z0.s, p0/m, z1.s
251 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sqabs.nxv4i32(<vscale x 4 x i32> %a,
252 <vscale x 4 x i1> %pg,
253 <vscale x 4 x i32> %b)
254 ret <vscale x 4 x i32> %out
257 define <vscale x 2 x i64> @sqabs_i64(<vscale x 2 x i64> %a, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %b) {
258 ; CHECK-LABEL: sqabs_i64:
259 ; CHECK: sqabs z0.d, p0/m, z1.d
261 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqabs.nxv2i64(<vscale x 2 x i64> %a,
262 <vscale x 2 x i1> %pg,
263 <vscale x 2 x i64> %b)
264 ret <vscale x 2 x i64> %out
271 define <vscale x 16 x i8> @sqadd_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
272 ; CHECK-LABEL: sqadd_i8:
273 ; CHECK: sqadd z0.b, p0/m, z0.b, z1.b
275 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.sqadd.nxv16i8(<vscale x 16 x i1> %pg,
276 <vscale x 16 x i8> %a,
277 <vscale x 16 x i8> %b)
278 ret <vscale x 16 x i8> %out
281 define <vscale x 8 x i16> @sqadd_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
282 ; CHECK-LABEL: sqadd_i16:
283 ; CHECK: sqadd z0.h, p0/m, z0.h, z1.h
285 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sqadd.nxv8i16(<vscale x 8 x i1> %pg,
286 <vscale x 8 x i16> %a,
287 <vscale x 8 x i16> %b)
288 ret <vscale x 8 x i16> %out
291 define <vscale x 4 x i32> @sqadd_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
292 ; CHECK-LABEL: sqadd_i32:
293 ; CHECK: sqadd z0.s, p0/m, z0.s, z1.s
295 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sqadd.nxv4i32(<vscale x 4 x i1> %pg,
296 <vscale x 4 x i32> %a,
297 <vscale x 4 x i32> %b)
298 ret <vscale x 4 x i32> %out
301 define <vscale x 2 x i64> @sqadd_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
302 ; CHECK-LABEL: sqadd_i64:
303 ; CHECK: sqadd z0.d, p0/m, z0.d, z1.d
305 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqadd.nxv2i64(<vscale x 2 x i1> %pg,
306 <vscale x 2 x i64> %a,
307 <vscale x 2 x i64> %b)
308 ret <vscale x 2 x i64> %out
315 define <vscale x 16 x i8> @sqdmulh_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
316 ; CHECK-LABEL: sqdmulh_i8:
317 ; CHECK: sqdmulh z0.b, z0.b, z1.b
319 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.sqdmulh.nxv16i8(<vscale x 16 x i8> %a,
320 <vscale x 16 x i8> %b)
321 ret <vscale x 16 x i8> %out
324 define <vscale x 8 x i16> @sqdmulh_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
325 ; CHECK-LABEL: sqdmulh_i16:
326 ; CHECK: sqdmulh z0.h, z0.h, z1.h
328 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sqdmulh.nxv8i16(<vscale x 8 x i16> %a,
329 <vscale x 8 x i16> %b)
330 ret <vscale x 8 x i16> %out
333 define <vscale x 4 x i32> @sqdmulh_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
334 ; CHECK-LABEL: sqdmulh_i32:
335 ; CHECK: sqdmulh z0.s, z0.s, z1.s
337 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sqdmulh.nxv4i32(<vscale x 4 x i32> %a,
338 <vscale x 4 x i32> %b)
339 ret <vscale x 4 x i32> %out
342 define <vscale x 2 x i64> @sqdmulh_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
343 ; CHECK-LABEL: sqdmulh_i64:
344 ; CHECK: sqdmulh z0.d, z0.d, z1.d
346 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqdmulh.nxv2i64(<vscale x 2 x i64> %a,
347 <vscale x 2 x i64> %b)
348 ret <vscale x 2 x i64> %out
355 define <vscale x 8 x i16> @sqdmulh_lane_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
356 ; CHECK-LABEL: sqdmulh_lane_i16:
357 ; CHECK: sqdmulh z0.h, z0.h, z1.h[7]
359 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sqdmulh.lane.nxv8i16(<vscale x 8 x i16> %a,
360 <vscale x 8 x i16> %b,
362 ret <vscale x 8 x i16> %out
365 define <vscale x 4 x i32> @sqdmulh_lane_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
366 ; CHECK-LABEL: sqdmulh_lane_i32:
367 ; CHECK: sqdmulh z0.s, z0.s, z1.s[3]
369 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sqdmulh.lane.nxv4i32(<vscale x 4 x i32> %a,
370 <vscale x 4 x i32> %b,
372 ret <vscale x 4 x i32> %out
375 define <vscale x 2 x i64> @sqdmulh_lane_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
376 ; CHECK-LABEL: sqdmulh_lane_i64:
377 ; CHECK: sqdmulh z0.d, z0.d, z1.d[1]
379 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqdmulh.lane.nxv2i64(<vscale x 2 x i64> %a,
380 <vscale x 2 x i64> %b,
382 ret <vscale x 2 x i64> %out
389 define <vscale x 16 x i8> @sqneg_i8(<vscale x 16 x i8> %a, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %b) {
390 ; CHECK-LABEL: sqneg_i8:
391 ; CHECK: sqneg z0.b, p0/m, z1.b
393 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.sqneg.nxv16i8(<vscale x 16 x i8> %a,
394 <vscale x 16 x i1> %pg,
395 <vscale x 16 x i8> %b)
396 ret <vscale x 16 x i8> %out
399 define <vscale x 8 x i16> @sqneg_i16(<vscale x 8 x i16> %a, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %b) {
400 ; CHECK-LABEL: sqneg_i16:
401 ; CHECK: sqneg z0.h, p0/m, z1.h
403 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sqneg.nxv8i16(<vscale x 8 x i16> %a,
404 <vscale x 8 x i1> %pg,
405 <vscale x 8 x i16> %b)
406 ret <vscale x 8 x i16> %out
409 define <vscale x 4 x i32> @sqneg_i32(<vscale x 4 x i32> %a, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %b) {
410 ; CHECK-LABEL: sqneg_i32:
411 ; CHECK: sqneg z0.s, p0/m, z1.s
413 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sqneg.nxv4i32(<vscale x 4 x i32> %a,
414 <vscale x 4 x i1> %pg,
415 <vscale x 4 x i32> %b)
416 ret <vscale x 4 x i32> %out
419 define <vscale x 2 x i64> @sqneg_i64(<vscale x 2 x i64> %a, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %b) {
420 ; CHECK-LABEL: sqneg_i64:
421 ; CHECK: sqneg z0.d, p0/m, z1.d
423 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqneg.nxv2i64(<vscale x 2 x i64> %a,
424 <vscale x 2 x i1> %pg,
425 <vscale x 2 x i64> %b)
426 ret <vscale x 2 x i64> %out
433 define <vscale x 16 x i8> @sqrdmlah_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b, <vscale x 16 x i8> %c) {
434 ; CHECK-LABEL: sqrdmlah_i8:
435 ; CHECK: sqrdmlah z0.b, z1.b, z2.b
437 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.sqrdmlah.nxv16i8(<vscale x 16 x i8> %a,
438 <vscale x 16 x i8> %b,
439 <vscale x 16 x i8> %c)
440 ret <vscale x 16 x i8> %out
443 define <vscale x 8 x i16> @sqrdmlah_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, <vscale x 8 x i16> %c) {
444 ; CHECK-LABEL: sqrdmlah_i16:
445 ; CHECK: sqrdmlah z0.h, z1.h, z2.h
447 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sqrdmlah.nxv8i16(<vscale x 8 x i16> %a,
448 <vscale x 8 x i16> %b,
449 <vscale x 8 x i16> %c)
450 ret <vscale x 8 x i16> %out
453 define <vscale x 4 x i32> @sqrdmlah_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, <vscale x 4 x i32> %c) {
454 ; CHECK-LABEL: sqrdmlah_i32:
455 ; CHECK: sqrdmlah z0.s, z1.s, z2.s
457 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sqrdmlah.nxv4i32(<vscale x 4 x i32> %a,
458 <vscale x 4 x i32> %b,
459 <vscale x 4 x i32> %c)
460 ret <vscale x 4 x i32> %out
463 define <vscale x 2 x i64> @sqrdmlah_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, <vscale x 2 x i64> %c) {
464 ; CHECK-LABEL: sqrdmlah_i64:
465 ; CHECK: sqrdmlah z0.d, z1.d, z2.d
467 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqrdmlah.nxv2i64(<vscale x 2 x i64> %a,
468 <vscale x 2 x i64> %b,
469 <vscale x 2 x i64> %c)
470 ret <vscale x 2 x i64> %out
477 define <vscale x 8 x i16> @sqrdmlah_lane_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, <vscale x 8 x i16> %c) {
478 ; CHECK-LABEL: sqrdmlah_lane_i16:
479 ; CHECK: sqrdmlah z0.h, z1.h, z2.h[5]
481 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sqrdmlah.lane.nxv8i16(<vscale x 8 x i16> %a,
482 <vscale x 8 x i16> %b,
483 <vscale x 8 x i16> %c,
485 ret <vscale x 8 x i16> %out
488 define <vscale x 4 x i32> @sqrdmlah_lane_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, <vscale x 4 x i32> %c) {
489 ; CHECK-LABEL: sqrdmlah_lane_i32:
490 ; CHECK: sqrdmlah z0.s, z1.s, z2.s[1]
492 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sqrdmlah.lane.nxv4i32(<vscale x 4 x i32> %a,
493 <vscale x 4 x i32> %b,
494 <vscale x 4 x i32> %c,
496 ret <vscale x 4 x i32> %out
499 define <vscale x 2 x i64> @sqrdmlah_lane_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, <vscale x 2 x i64> %c) {
500 ; CHECK-LABEL: sqrdmlah_lane_i64:
501 ; CHECK: sqrdmlah z0.d, z1.d, z2.d[1]
503 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqrdmlah.lane.nxv2i64(<vscale x 2 x i64> %a,
504 <vscale x 2 x i64> %b,
505 <vscale x 2 x i64> %c,
507 ret <vscale x 2 x i64> %out
514 define <vscale x 16 x i8> @sqrdmlsh_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b, <vscale x 16 x i8> %c) {
515 ; CHECK-LABEL: sqrdmlsh_i8:
516 ; CHECK: sqrdmlsh z0.b, z1.b, z2.b
518 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.sqrdmlsh.nxv16i8(<vscale x 16 x i8> %a,
519 <vscale x 16 x i8> %b,
520 <vscale x 16 x i8> %c)
521 ret <vscale x 16 x i8> %out
524 define <vscale x 8 x i16> @sqrdmlsh_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, <vscale x 8 x i16> %c) {
525 ; CHECK-LABEL: sqrdmlsh_i16:
526 ; CHECK: sqrdmlsh z0.h, z1.h, z2.h
528 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sqrdmlsh.nxv8i16(<vscale x 8 x i16> %a,
529 <vscale x 8 x i16> %b,
530 <vscale x 8 x i16> %c)
531 ret <vscale x 8 x i16> %out
534 define <vscale x 4 x i32> @sqrdmlsh_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, <vscale x 4 x i32> %c) {
535 ; CHECK-LABEL: sqrdmlsh_i32:
536 ; CHECK: sqrdmlsh z0.s, z1.s, z2.s
538 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sqrdmlsh.nxv4i32(<vscale x 4 x i32> %a,
539 <vscale x 4 x i32> %b,
540 <vscale x 4 x i32> %c)
541 ret <vscale x 4 x i32> %out
544 define <vscale x 2 x i64> @sqrdmlsh_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, <vscale x 2 x i64> %c) {
545 ; CHECK-LABEL: sqrdmlsh_i64:
546 ; CHECK: sqrdmlsh z0.d, z1.d, z2.d
548 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqrdmlsh.nxv2i64(<vscale x 2 x i64> %a,
549 <vscale x 2 x i64> %b,
550 <vscale x 2 x i64> %c)
551 ret <vscale x 2 x i64> %out
558 define <vscale x 8 x i16> @sqrdmlsh_lane_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, <vscale x 8 x i16> %c) {
559 ; CHECK-LABEL: sqrdmlsh_lane_i16:
560 ; CHECK: sqrdmlsh z0.h, z1.h, z2.h[4]
562 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sqrdmlsh.lane.nxv8i16(<vscale x 8 x i16> %a,
563 <vscale x 8 x i16> %b,
564 <vscale x 8 x i16> %c,
566 ret <vscale x 8 x i16> %out
569 define <vscale x 4 x i32> @sqrdmlsh_lane_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, <vscale x 4 x i32> %c) {
570 ; CHECK-LABEL: sqrdmlsh_lane_i32:
571 ; CHECK: sqrdmlsh z0.s, z1.s, z2.s[0]
573 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sqrdmlsh.lane.nxv4i32(<vscale x 4 x i32> %a,
574 <vscale x 4 x i32> %b,
575 <vscale x 4 x i32> %c,
577 ret <vscale x 4 x i32> %out
580 define <vscale x 2 x i64> @sqrdmlsh_lane_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, <vscale x 2 x i64> %c) {
581 ; CHECK-LABEL: sqrdmlsh_lane_i64:
582 ; CHECK: sqrdmlsh z0.d, z1.d, z2.d[1]
584 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqrdmlsh.lane.nxv2i64(<vscale x 2 x i64> %a,
585 <vscale x 2 x i64> %b,
586 <vscale x 2 x i64> %c,
588 ret <vscale x 2 x i64> %out
595 define <vscale x 16 x i8> @sqrdmulh_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
596 ; CHECK-LABEL: sqrdmulh_i8:
597 ; CHECK: sqrdmulh z0.b, z0.b, z1.b
599 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.sqrdmulh.nxv16i8(<vscale x 16 x i8> %a,
600 <vscale x 16 x i8> %b)
601 ret <vscale x 16 x i8> %out
604 define <vscale x 8 x i16> @sqrdmulh_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
605 ; CHECK-LABEL: sqrdmulh_i16:
606 ; CHECK: sqrdmulh z0.h, z0.h, z1.h
608 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sqrdmulh.nxv8i16(<vscale x 8 x i16> %a,
609 <vscale x 8 x i16> %b)
610 ret <vscale x 8 x i16> %out
613 define <vscale x 4 x i32> @sqrdmulh_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
614 ; CHECK-LABEL: sqrdmulh_i32:
615 ; CHECK: sqrdmulh z0.s, z0.s, z1.s
617 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sqrdmulh.nxv4i32(<vscale x 4 x i32> %a,
618 <vscale x 4 x i32> %b)
619 ret <vscale x 4 x i32> %out
622 define <vscale x 2 x i64> @sqrdmulh_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
623 ; CHECK-LABEL: sqrdmulh_i64:
624 ; CHECK: sqrdmulh z0.d, z0.d, z1.d
626 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqrdmulh.nxv2i64(<vscale x 2 x i64> %a,
627 <vscale x 2 x i64> %b)
628 ret <vscale x 2 x i64> %out
635 define <vscale x 8 x i16> @sqrdmulh_lane_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
636 ; CHECK-LABEL: sqrdmulh_lane_i16:
637 ; CHECK: sqrdmulh z0.h, z0.h, z1.h[6]
639 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sqrdmulh.lane.nxv8i16(<vscale x 8 x i16> %a,
640 <vscale x 8 x i16> %b,
642 ret <vscale x 8 x i16> %out
645 define <vscale x 4 x i32> @sqrdmulh_lane_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
646 ; CHECK-LABEL: sqrdmulh_lane_i32:
647 ; CHECK: sqrdmulh z0.s, z0.s, z1.s[2]
649 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sqrdmulh.lane.nxv4i32(<vscale x 4 x i32> %a,
650 <vscale x 4 x i32> %b,
652 ret <vscale x 4 x i32> %out
655 define <vscale x 2 x i64> @sqrdmulh_lane_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
656 ; CHECK-LABEL: sqrdmulh_lane_i64:
657 ; CHECK: sqrdmulh z0.d, z0.d, z1.d[1]
659 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqrdmulh.lane.nxv2i64(<vscale x 2 x i64> %a,
660 <vscale x 2 x i64> %b,
662 ret <vscale x 2 x i64> %out
669 define <vscale x 16 x i8> @sqrshl_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
670 ; CHECK-LABEL: sqrshl_i8:
671 ; CHECK: sqrshl z0.b, p0/m, z0.b, z1.b
673 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.sqrshl.nxv16i8(<vscale x 16 x i1> %pg,
674 <vscale x 16 x i8> %a,
675 <vscale x 16 x i8> %b)
676 ret <vscale x 16 x i8> %out
679 define <vscale x 8 x i16> @sqrshl_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
680 ; CHECK-LABEL: sqrshl_i16:
681 ; CHECK: sqrshl z0.h, p0/m, z0.h, z1.h
683 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sqrshl.nxv8i16(<vscale x 8 x i1> %pg,
684 <vscale x 8 x i16> %a,
685 <vscale x 8 x i16> %b)
686 ret <vscale x 8 x i16> %out
689 define <vscale x 4 x i32> @sqrshl_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
690 ; CHECK-LABEL: sqrshl_i32:
691 ; CHECK: sqrshl z0.s, p0/m, z0.s, z1.s
693 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sqrshl.nxv4i32(<vscale x 4 x i1> %pg,
694 <vscale x 4 x i32> %a,
695 <vscale x 4 x i32> %b)
696 ret <vscale x 4 x i32> %out
699 define <vscale x 2 x i64> @sqrshl_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
700 ; CHECK-LABEL: sqrshl_i64:
701 ; CHECK: sqrshl z0.d, p0/m, z0.d, z1.d
703 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqrshl.nxv2i64(<vscale x 2 x i1> %pg,
704 <vscale x 2 x i64> %a,
705 <vscale x 2 x i64> %b)
706 ret <vscale x 2 x i64> %out
713 define <vscale x 16 x i8> @sqrshlr_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
714 ; CHECK-LABEL: sqrshlr_i8:
716 ; CHECK-NEXT: sqrshlr z0.b, p0/m, z0.b, z1.b
718 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)
719 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.sqrshl.nxv16i8(<vscale x 16 x i1> %pg,
720 <vscale x 16 x i8> %b,
721 <vscale x 16 x i8> %a)
722 ret <vscale x 16 x i8> %out
725 define <vscale x 8 x i16> @sqrshlr_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
726 ; CHECK-LABEL: sqrshlr_i16:
728 ; CHECK-NEXT: sqrshlr z0.h, p0/m, z0.h, z1.h
730 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
731 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sqrshl.nxv8i16(<vscale x 8 x i1> %pg,
732 <vscale x 8 x i16> %b,
733 <vscale x 8 x i16> %a)
734 ret <vscale x 8 x i16> %out
737 define <vscale x 4 x i32> @sqrshlr_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
738 ; CHECK-LABEL: sqrshlr_i32:
740 ; CHECK-NEXT: sqrshlr z0.s, p0/m, z0.s, z1.s
742 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
743 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sqrshl.nxv4i32(<vscale x 4 x i1> %pg,
744 <vscale x 4 x i32> %b,
745 <vscale x 4 x i32> %a)
746 ret <vscale x 4 x i32> %out
749 define <vscale x 2 x i64> @sqrshlr_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
750 ; CHECK-LABEL: sqrshlr_i64:
752 ; CHECK-NEXT: sqrshlr z0.d, p0/m, z0.d, z1.d
754 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
755 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqrshl.nxv2i64(<vscale x 2 x i1> %pg,
756 <vscale x 2 x i64> %b,
757 <vscale x 2 x i64> %a)
758 ret <vscale x 2 x i64> %out
761 define <vscale x 2 x i64> @sqrshlr_i64_noptrue(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
762 ; CHECK-LABEL: sqrshlr_i64_noptrue:
763 ; CHECK: sqrshl z1.d, p0/m, z1.d, z0.d
764 ; CHECK-NEXT: mov z0.d, z1.d
766 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqrshl.nxv2i64(<vscale x 2 x i1> %pg,
767 <vscale x 2 x i64> %b,
768 <vscale x 2 x i64> %a)
769 ret <vscale x 2 x i64> %out
776 define <vscale x 16 x i8> @sqshl_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
777 ; CHECK-LABEL: sqshl_i8:
778 ; CHECK: sqshl z0.b, p0/m, z0.b, z1.b
780 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.sqshl.nxv16i8(<vscale x 16 x i1> %pg,
781 <vscale x 16 x i8> %a,
782 <vscale x 16 x i8> %b)
783 ret <vscale x 16 x i8> %out
786 define <vscale x 8 x i16> @sqshl_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
787 ; CHECK-LABEL: sqshl_i16:
788 ; CHECK: sqshl z0.h, p0/m, z0.h, z1.h
790 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sqshl.nxv8i16(<vscale x 8 x i1> %pg,
791 <vscale x 8 x i16> %a,
792 <vscale x 8 x i16> %b)
793 ret <vscale x 8 x i16> %out
796 define <vscale x 4 x i32> @sqshl_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
797 ; CHECK-LABEL: sqshl_i32:
798 ; CHECK: sqshl z0.s, p0/m, z0.s, z1.s
800 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sqshl.nxv4i32(<vscale x 4 x i1> %pg,
801 <vscale x 4 x i32> %a,
802 <vscale x 4 x i32> %b)
803 ret <vscale x 4 x i32> %out
806 define <vscale x 2 x i64> @sqshl_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
807 ; CHECK-LABEL: sqshl_i64:
808 ; CHECK: sqshl z0.d, p0/m, z0.d, z1.d
810 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqshl.nxv2i64(<vscale x 2 x i1> %pg,
811 <vscale x 2 x i64> %a,
812 <vscale x 2 x i64> %b)
813 ret <vscale x 2 x i64> %out
820 define <vscale x 16 x i8> @sqshlr_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
821 ; CHECK-LABEL: sqshlr_i8:
823 ; CHECK-NEXT: sqshlr z0.b, p0/m, z0.b, z1.b
825 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)
826 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.sqshl.nxv16i8(<vscale x 16 x i1> %pg,
827 <vscale x 16 x i8> %b,
828 <vscale x 16 x i8> %a)
829 ret <vscale x 16 x i8> %out
832 define <vscale x 8 x i16> @sqshlr_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
833 ; CHECK-LABEL: sqshlr_i16:
835 ; CHECK-NEXT: sqshlr z0.h, p0/m, z0.h, z1.h
837 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
838 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sqshl.nxv8i16(<vscale x 8 x i1> %pg,
839 <vscale x 8 x i16> %b,
840 <vscale x 8 x i16> %a)
841 ret <vscale x 8 x i16> %out
844 define <vscale x 4 x i32> @sqshlr_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
845 ; CHECK-LABEL: sqshlr_i32:
847 ; CHECK-NEXT: sqshlr z0.s, p0/m, z0.s, z1.s
849 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
850 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sqshl.nxv4i32(<vscale x 4 x i1> %pg,
851 <vscale x 4 x i32> %b,
852 <vscale x 4 x i32> %a)
853 ret <vscale x 4 x i32> %out
856 define <vscale x 2 x i64> @sqshlr_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
857 ; CHECK-LABEL: sqshlr_i64:
859 ; CHECK-NEXT: sqshlr z0.d, p0/m, z0.d, z1.d
861 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
862 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqshl.nxv2i64(<vscale x 2 x i1> %pg,
863 <vscale x 2 x i64> %b,
864 <vscale x 2 x i64> %a)
865 ret <vscale x 2 x i64> %out
868 define <vscale x 2 x i64> @sqshlr_i64_noptrue(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
869 ; CHECK-LABEL: sqshlr_i64_noptrue:
870 ; CHECK: sqshl z1.d, p0/m, z1.d, z0.d
871 ; CHECK-NEXT: mov z0.d, z1.d
873 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqshl.nxv2i64(<vscale x 2 x i1> %pg,
874 <vscale x 2 x i64> %b,
875 <vscale x 2 x i64> %a)
876 ret <vscale x 2 x i64> %out
883 define <vscale x 16 x i8> @sqshl_n_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a) {
884 ; CHECK-LABEL: sqshl_n_i8:
885 ; CHECK: sqshl z0.b, p0/m, z0.b, #7
887 %dup = call <vscale x 16 x i8> @llvm.aarch64.sve.dup.x.nxv16i8(i8 7)
888 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.sqshl.nxv16i8(<vscale x 16 x i1> %pg,
889 <vscale x 16 x i8> %a,
890 <vscale x 16 x i8> %dup)
891 ret <vscale x 16 x i8> %out
894 define <vscale x 8 x i16> @sqshl_n_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a) {
895 ; CHECK-LABEL: sqshl_n_i16:
896 ; CHECK: sqshl z0.h, p0/m, z0.h, #15
898 %dup = call <vscale x 8 x i16> @llvm.aarch64.sve.dup.x.nxv8i16(i16 15)
899 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sqshl.nxv8i16(<vscale x 8 x i1> %pg,
900 <vscale x 8 x i16> %a,
901 <vscale x 8 x i16> %dup)
902 ret <vscale x 8 x i16> %out
905 define <vscale x 4 x i32> @sqshl_n_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a) {
906 ; CHECK-LABEL: sqshl_n_i32:
907 ; CHECK: sqshl z0.s, p0/m, z0.s, #31
909 %dup = call <vscale x 4 x i32> @llvm.aarch64.sve.dup.x.nxv4i32(i32 31)
910 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sqshl.nxv4i32(<vscale x 4 x i1> %pg,
911 <vscale x 4 x i32> %a,
912 <vscale x 4 x i32> %dup)
913 ret <vscale x 4 x i32> %out
916 define <vscale x 2 x i64> @sqshl_n_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a) {
917 ; CHECK-LABEL: sqshl_n_i64:
918 ; CHECK: sqshl z0.d, p0/m, z0.d, #63
920 %dup = call <vscale x 2 x i64> @llvm.aarch64.sve.dup.x.nxv2i64(i64 63)
921 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqshl.nxv2i64(<vscale x 2 x i1> %pg,
922 <vscale x 2 x i64> %a,
923 <vscale x 2 x i64> %dup)
924 ret <vscale x 2 x i64> %out
927 define <vscale x 16 x i8> @sqshl_n_i8_range(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a) {
928 ; CHECK-LABEL: sqshl_n_i8_range:
929 ; CHECK: mov z1.b, #8
930 ; CHECK: sqshl z0.b, p0/m, z0.b, z1.b
932 %dup = call <vscale x 16 x i8> @llvm.aarch64.sve.dup.x.nxv16i8(i8 8)
933 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.sqshl.nxv16i8(<vscale x 16 x i1> %pg,
934 <vscale x 16 x i8> %a,
935 <vscale x 16 x i8> %dup)
936 ret <vscale x 16 x i8> %out
939 define <vscale x 8 x i16> @sqshl_n_i16_range(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a) {
940 ; CHECK-LABEL: sqshl_n_i16_range:
941 ; CHECK: mov z1.h, #16
942 ; CHECK: sqshl z0.h, p0/m, z0.h, z1.h
944 %dup = call <vscale x 8 x i16> @llvm.aarch64.sve.dup.x.nxv8i16(i16 16)
945 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sqshl.nxv8i16(<vscale x 8 x i1> %pg,
946 <vscale x 8 x i16> %a,
947 <vscale x 8 x i16> %dup)
948 ret <vscale x 8 x i16> %out
951 define <vscale x 4 x i32> @sqshl_n_i32_range(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a) {
952 ; CHECK-LABEL: sqshl_n_i32_range:
953 ; CHECK: mov z1.s, #32
954 ; CHECK: sqshl z0.s, p0/m, z0.s, z1.s
956 %dup = call <vscale x 4 x i32> @llvm.aarch64.sve.dup.x.nxv4i32(i32 32)
957 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sqshl.nxv4i32(<vscale x 4 x i1> %pg,
958 <vscale x 4 x i32> %a,
959 <vscale x 4 x i32> %dup)
960 ret <vscale x 4 x i32> %out
963 define <vscale x 2 x i64> @sqshl_n_i64_range(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a) {
964 ; CHECK-LABEL: sqshl_n_i64_range:
965 ; CHECK: mov z1.d, #64
966 ; CHECK: sqshl z0.d, p0/m, z0.d, z1.d
968 %dup = call <vscale x 2 x i64> @llvm.aarch64.sve.dup.x.nxv2i64(i64 64)
969 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqshl.nxv2i64(<vscale x 2 x i1> %pg,
970 <vscale x 2 x i64> %a,
971 <vscale x 2 x i64> %dup)
972 ret <vscale x 2 x i64> %out
979 define <vscale x 16 x i8> @sqshlu_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a) {
980 ; CHECK-LABEL: sqshlu_i8:
981 ; CHECK: sqshlu z0.b, p0/m, z0.b, #2
983 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.sqshlu.nxv16i8(<vscale x 16 x i1> %pg,
984 <vscale x 16 x i8> %a,
986 ret <vscale x 16 x i8> %out
989 define <vscale x 8 x i16> @sqshlu_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a) {
990 ; CHECK-LABEL: sqshlu_i16:
991 ; CHECK: sqshlu z0.h, p0/m, z0.h, #3
993 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sqshlu.nxv8i16(<vscale x 8 x i1> %pg,
994 <vscale x 8 x i16> %a,
996 ret <vscale x 8 x i16> %out
999 define <vscale x 4 x i32> @sqshlu_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a) {
1000 ; CHECK-LABEL: sqshlu_i32:
1001 ; CHECK: sqshlu z0.s, p0/m, z0.s, #29
1003 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sqshlu.nxv4i32(<vscale x 4 x i1> %pg,
1004 <vscale x 4 x i32> %a,
1006 ret <vscale x 4 x i32> %out
1009 define <vscale x 2 x i64> @sqshlu_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a) {
1010 ; CHECK-LABEL: sqshlu_i64:
1011 ; CHECK: sqshlu z0.d, p0/m, z0.d, #62
1013 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqshlu.nxv2i64(<vscale x 2 x i1> %pg,
1014 <vscale x 2 x i64> %a,
1016 ret <vscale x 2 x i64> %out
1023 define <vscale x 16 x i8> @sqsub_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
1024 ; CHECK-LABEL: sqsub_i8:
1025 ; CHECK: sqsub z0.b, p0/m, z0.b, z1.b
1027 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.sqsub.nxv16i8(<vscale x 16 x i1> %pg,
1028 <vscale x 16 x i8> %a,
1029 <vscale x 16 x i8> %b)
1030 ret <vscale x 16 x i8> %out
1033 define <vscale x 8 x i16> @sqsub_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
1034 ; CHECK-LABEL: sqsub_i16:
1035 ; CHECK: sqsub z0.h, p0/m, z0.h, z1.h
1037 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sqsub.nxv8i16(<vscale x 8 x i1> %pg,
1038 <vscale x 8 x i16> %a,
1039 <vscale x 8 x i16> %b)
1040 ret <vscale x 8 x i16> %out
1043 define <vscale x 4 x i32> @sqsub_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
1044 ; CHECK-LABEL: sqsub_i32:
1045 ; CHECK: sqsub z0.s, p0/m, z0.s, z1.s
1047 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sqsub.nxv4i32(<vscale x 4 x i1> %pg,
1048 <vscale x 4 x i32> %a,
1049 <vscale x 4 x i32> %b)
1050 ret <vscale x 4 x i32> %out
1053 define <vscale x 2 x i64> @sqsub_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1054 ; CHECK-LABEL: sqsub_i64:
1055 ; CHECK: sqsub z0.d, p0/m, z0.d, z1.d
1057 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqsub.nxv2i64(<vscale x 2 x i1> %pg,
1058 <vscale x 2 x i64> %a,
1059 <vscale x 2 x i64> %b)
1060 ret <vscale x 2 x i64> %out
1067 define <vscale x 16 x i8> @sqsubr_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
1068 ; CHECK-LABEL: sqsubr_i8:
1069 ; CHECK: sqsubr z0.b, p0/m, z0.b, z1.b
1071 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.sqsubr.nxv16i8(<vscale x 16 x i1> %pg,
1072 <vscale x 16 x i8> %a,
1073 <vscale x 16 x i8> %b)
1074 ret <vscale x 16 x i8> %out
1077 define <vscale x 8 x i16> @sqsubr_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
1078 ; CHECK-LABEL: sqsubr_i16:
1079 ; CHECK: sqsubr z0.h, p0/m, z0.h, z1.h
1081 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sqsubr.nxv8i16(<vscale x 8 x i1> %pg,
1082 <vscale x 8 x i16> %a,
1083 <vscale x 8 x i16> %b)
1084 ret <vscale x 8 x i16> %out
1087 define <vscale x 4 x i32> @sqsubr_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
1088 ; CHECK-LABEL: sqsubr_i32:
1089 ; CHECK: sqsubr z0.s, p0/m, z0.s, z1.s
1091 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sqsubr.nxv4i32(<vscale x 4 x i1> %pg,
1092 <vscale x 4 x i32> %a,
1093 <vscale x 4 x i32> %b)
1094 ret <vscale x 4 x i32> %out
1097 define <vscale x 2 x i64> @sqsubr_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1098 ; CHECK-LABEL: sqsubr_i64:
1099 ; CHECK: sqsubr z0.d, p0/m, z0.d, z1.d
1101 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sqsubr.nxv2i64(<vscale x 2 x i1> %pg,
1102 <vscale x 2 x i64> %a,
1103 <vscale x 2 x i64> %b)
1104 ret <vscale x 2 x i64> %out
1111 define <vscale x 16 x i8> @srhadd_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
1112 ; CHECK-LABEL: srhadd_i8:
1113 ; CHECK: srhadd z0.b, p0/m, z0.b, z1.b
1115 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.srhadd.nxv16i8(<vscale x 16 x i1> %pg,
1116 <vscale x 16 x i8> %a,
1117 <vscale x 16 x i8> %b)
1118 ret <vscale x 16 x i8> %out
1121 define <vscale x 8 x i16> @srhadd_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
1122 ; CHECK-LABEL: srhadd_i16:
1123 ; CHECK: srhadd z0.h, p0/m, z0.h, z1.h
1125 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.srhadd.nxv8i16(<vscale x 8 x i1> %pg,
1126 <vscale x 8 x i16> %a,
1127 <vscale x 8 x i16> %b)
1128 ret <vscale x 8 x i16> %out
1131 define <vscale x 4 x i32> @srhadd_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
1132 ; CHECK-LABEL: srhadd_i32:
1133 ; CHECK: srhadd z0.s, p0/m, z0.s, z1.s
1135 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.srhadd.nxv4i32(<vscale x 4 x i1> %pg,
1136 <vscale x 4 x i32> %a,
1137 <vscale x 4 x i32> %b)
1138 ret <vscale x 4 x i32> %out
1141 define <vscale x 2 x i64> @srhadd_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1142 ; CHECK-LABEL: srhadd_i64:
1143 ; CHECK: srhadd z0.d, p0/m, z0.d, z1.d
1145 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.srhadd.nxv2i64(<vscale x 2 x i1> %pg,
1146 <vscale x 2 x i64> %a,
1147 <vscale x 2 x i64> %b)
1148 ret <vscale x 2 x i64> %out
1155 define <vscale x 16 x i8> @sri_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
1156 ; CHECK-LABEL: sri_i8:
1157 ; CHECK: sri z0.b, z1.b, #1
1159 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.sri.nxv16i8(<vscale x 16 x i8> %a,
1160 <vscale x 16 x i8> %b,
1162 ret <vscale x 16 x i8> %out
1165 define <vscale x 8 x i16> @sri_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
1166 ; CHECK-LABEL: sri_i16:
1167 ; CHECK: sri z0.h, z1.h, #16
1169 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.sri.nxv8i16(<vscale x 8 x i16> %a,
1170 <vscale x 8 x i16> %b,
1172 ret <vscale x 8 x i16> %out
1175 define <vscale x 4 x i32> @sri_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
1176 ; CHECK-LABEL: sri_i32:
1177 ; CHECK: sri z0.s, z1.s, #32
1179 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.sri.nxv4i32(<vscale x 4 x i32> %a,
1180 <vscale x 4 x i32> %b,
1182 ret <vscale x 4 x i32> %out
1185 define <vscale x 2 x i64> @sri_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1186 ; CHECK-LABEL: sri_i64:
1187 ; CHECK: sri z0.d, z1.d, #64
1189 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.sri.nxv2i64(<vscale x 2 x i64> %a,
1190 <vscale x 2 x i64> %b,
1192 ret <vscale x 2 x i64> %out
1199 define <vscale x 16 x i8> @srshl_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
1200 ; CHECK-LABEL: srshl_i8:
1201 ; CHECK: srshl z0.b, p0/m, z0.b, z1.b
1203 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.srshl.nxv16i8(<vscale x 16 x i1> %pg,
1204 <vscale x 16 x i8> %a,
1205 <vscale x 16 x i8> %b)
1206 ret <vscale x 16 x i8> %out
1209 define <vscale x 8 x i16> @srshl_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
1210 ; CHECK-LABEL: srshl_i16:
1211 ; CHECK: srshl z0.h, p0/m, z0.h, z1.h
1213 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.srshl.nxv8i16(<vscale x 8 x i1> %pg,
1214 <vscale x 8 x i16> %a,
1215 <vscale x 8 x i16> %b)
1216 ret <vscale x 8 x i16> %out
1219 define <vscale x 4 x i32> @srshl_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
1220 ; CHECK-LABEL: srshl_i32:
1221 ; CHECK: srshl z0.s, p0/m, z0.s, z1.s
1223 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.srshl.nxv4i32(<vscale x 4 x i1> %pg,
1224 <vscale x 4 x i32> %a,
1225 <vscale x 4 x i32> %b)
1226 ret <vscale x 4 x i32> %out
1229 define <vscale x 2 x i64> @srshl_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1230 ; CHECK-LABEL: srshl_i64:
1231 ; CHECK: srshl z0.d, p0/m, z0.d, z1.d
1233 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.srshl.nxv2i64(<vscale x 2 x i1> %pg,
1234 <vscale x 2 x i64> %a,
1235 <vscale x 2 x i64> %b)
1236 ret <vscale x 2 x i64> %out
1243 define <vscale x 16 x i8> @srshlr_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
1244 ; CHECK-LABEL: srshlr_i8:
1246 ; CHECK-NEXT: srshlr z0.b, p0/m, z0.b, z1.b
1248 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)
1249 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.srshl.nxv16i8(<vscale x 16 x i1> %pg,
1250 <vscale x 16 x i8> %b,
1251 <vscale x 16 x i8> %a)
1252 ret <vscale x 16 x i8> %out
1255 define <vscale x 8 x i16> @srshlr_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
1256 ; CHECK-LABEL: srshlr_i16:
1258 ; CHECK-NEXT: srshlr z0.h, p0/m, z0.h, z1.h
1260 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
1261 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.srshl.nxv8i16(<vscale x 8 x i1> %pg,
1262 <vscale x 8 x i16> %b,
1263 <vscale x 8 x i16> %a)
1264 ret <vscale x 8 x i16> %out
1267 define <vscale x 4 x i32> @srshlr_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
1268 ; CHECK-LABEL: srshlr_i32:
1270 ; CHECK-NEXT: srshlr z0.s, p0/m, z0.s, z1.s
1272 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
1273 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.srshl.nxv4i32(<vscale x 4 x i1> %pg,
1274 <vscale x 4 x i32> %b,
1275 <vscale x 4 x i32> %a)
1276 ret <vscale x 4 x i32> %out
1279 define <vscale x 2 x i64> @srshlr_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1280 ; CHECK-LABEL: srshlr_i64:
1282 ; CHECK-NEXT: srshlr z0.d, p0/m, z0.d, z1.d
1284 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
1285 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.srshl.nxv2i64(<vscale x 2 x i1> %pg,
1286 <vscale x 2 x i64> %b,
1287 <vscale x 2 x i64> %a)
1288 ret <vscale x 2 x i64> %out
1291 define <vscale x 2 x i64> @srshlr_i64_noptrue(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1292 ; CHECK-LABEL: srshlr_i64_noptrue:
1293 ; CHECK: srshl z1.d, p0/m, z1.d, z0.d
1294 ; CHECK-NEXT: mov z0.d, z1.d
1296 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.srshl.nxv2i64(<vscale x 2 x i1> %pg,
1297 <vscale x 2 x i64> %b,
1298 <vscale x 2 x i64> %a)
1299 ret <vscale x 2 x i64> %out
1306 define <vscale x 16 x i8> @srshr_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a) {
1307 ; CHECK-LABEL: srshr_i8:
1308 ; CHECK: srshr z0.b, p0/m, z0.b, #8
1310 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.srshr.nxv16i8(<vscale x 16 x i1> %pg,
1311 <vscale x 16 x i8> %a,
1313 ret <vscale x 16 x i8> %out
1316 define <vscale x 8 x i16> @srshr_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a) {
1317 ; CHECK-LABEL: srshr_i16:
1318 ; CHECK: srshr z0.h, p0/m, z0.h, #1
1320 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.srshr.nxv8i16(<vscale x 8 x i1> %pg,
1321 <vscale x 8 x i16> %a,
1323 ret <vscale x 8 x i16> %out
1326 define <vscale x 4 x i32> @srshr_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a) {
1327 ; CHECK-LABEL: srshr_i32:
1328 ; CHECK: srshr z0.s, p0/m, z0.s, #22
1330 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.srshr.nxv4i32(<vscale x 4 x i1> %pg,
1331 <vscale x 4 x i32> %a,
1333 ret <vscale x 4 x i32> %out
1336 define <vscale x 2 x i64> @srshr_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a) {
1337 ; CHECK-LABEL: srshr_i64:
1338 ; CHECK: srshr z0.d, p0/m, z0.d, #54
1340 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.srshr.nxv2i64(<vscale x 2 x i1> %pg,
1341 <vscale x 2 x i64> %a,
1343 ret <vscale x 2 x i64> %out
1350 define <vscale x 16 x i8> @srsra_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
1351 ; CHECK-LABEL: srsra_i8:
1352 ; CHECK: srsra z0.b, z1.b, #2
1354 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.srsra.nxv16i8(<vscale x 16 x i8> %a,
1355 <vscale x 16 x i8> %b,
1357 ret <vscale x 16 x i8> %out
1360 define <vscale x 8 x i16> @srsra_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
1361 ; CHECK-LABEL: srsra_i16:
1362 ; CHECK: srsra z0.h, z1.h, #15
1364 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.srsra.nxv8i16(<vscale x 8 x i16> %a,
1365 <vscale x 8 x i16> %b,
1367 ret <vscale x 8 x i16> %out
1370 define <vscale x 4 x i32> @srsra_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
1371 ; CHECK-LABEL: srsra_i32:
1372 ; CHECK: srsra z0.s, z1.s, #12
1374 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.srsra.nxv4i32(<vscale x 4 x i32> %a,
1375 <vscale x 4 x i32> %b,
1377 ret <vscale x 4 x i32> %out
1380 define <vscale x 2 x i64> @srsra_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1381 ; CHECK-LABEL: srsra_i64:
1382 ; CHECK: srsra z0.d, z1.d, #44
1384 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.srsra.nxv2i64(<vscale x 2 x i64> %a,
1385 <vscale x 2 x i64> %b,
1387 ret <vscale x 2 x i64> %out
1394 define <vscale x 16 x i8> @ssra_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
1395 ; CHECK-LABEL: ssra_i8:
1396 ; CHECK: ssra z0.b, z1.b, #3
1398 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.ssra.nxv16i8(<vscale x 16 x i8> %a,
1399 <vscale x 16 x i8> %b,
1401 ret <vscale x 16 x i8> %out
1404 define <vscale x 8 x i16> @ssra_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
1405 ; CHECK-LABEL: ssra_i16:
1406 ; CHECK: ssra z0.h, z1.h, #14
1408 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.ssra.nxv8i16(<vscale x 8 x i16> %a,
1409 <vscale x 8 x i16> %b,
1411 ret <vscale x 8 x i16> %out
1414 define <vscale x 4 x i32> @ssra_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
1415 ; CHECK-LABEL: ssra_i32:
1416 ; CHECK: ssra z0.s, z1.s, #2
1418 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.ssra.nxv4i32(<vscale x 4 x i32> %a,
1419 <vscale x 4 x i32> %b,
1421 ret <vscale x 4 x i32> %out
1424 define <vscale x 2 x i64> @ssra_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1425 ; CHECK-LABEL: ssra_i64:
1426 ; CHECK: ssra z0.d, z1.d, #34
1428 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.ssra.nxv2i64(<vscale x 2 x i64> %a,
1429 <vscale x 2 x i64> %b,
1431 ret <vscale x 2 x i64> %out
1438 define <vscale x 16 x i8> @suqadd_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
1439 ; CHECK-LABEL: suqadd_i8:
1440 ; CHECK: suqadd z0.b, p0/m, z0.b, z1.b
1442 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.suqadd.nxv16i8(<vscale x 16 x i1> %pg,
1443 <vscale x 16 x i8> %a,
1444 <vscale x 16 x i8> %b)
1445 ret <vscale x 16 x i8> %out
1448 define <vscale x 8 x i16> @suqadd_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
1449 ; CHECK-LABEL: suqadd_i16:
1450 ; CHECK: suqadd z0.h, p0/m, z0.h, z1.h
1452 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.suqadd.nxv8i16(<vscale x 8 x i1> %pg,
1453 <vscale x 8 x i16> %a,
1454 <vscale x 8 x i16> %b)
1455 ret <vscale x 8 x i16> %out
1458 define <vscale x 4 x i32> @suqadd_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
1459 ; CHECK-LABEL: suqadd_i32:
1460 ; CHECK: suqadd z0.s, p0/m, z0.s, z1.s
1462 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.suqadd.nxv4i32(<vscale x 4 x i1> %pg,
1463 <vscale x 4 x i32> %a,
1464 <vscale x 4 x i32> %b)
1465 ret <vscale x 4 x i32> %out
1468 define <vscale x 2 x i64> @suqadd_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1469 ; CHECK-LABEL: suqadd_i64:
1470 ; CHECK: suqadd z0.d, p0/m, z0.d, z1.d
1472 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.suqadd.nxv2i64(<vscale x 2 x i1> %pg,
1473 <vscale x 2 x i64> %a,
1474 <vscale x 2 x i64> %b)
1475 ret <vscale x 2 x i64> %out
1482 define <vscale x 16 x i8> @uaba_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b, <vscale x 16 x i8> %c) {
1483 ; CHECK-LABEL: uaba_i8:
1484 ; CHECK: uaba z0.b, z1.b, z2.b
1486 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.uaba.nxv16i8(<vscale x 16 x i8> %a,
1487 <vscale x 16 x i8> %b,
1488 <vscale x 16 x i8> %c)
1489 ret <vscale x 16 x i8> %out
1492 define <vscale x 8 x i16> @uaba_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, <vscale x 8 x i16> %c) {
1493 ; CHECK-LABEL: uaba_i16:
1494 ; CHECK: uaba z0.h, z1.h, z2.h
1496 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.uaba.nxv8i16(<vscale x 8 x i16> %a,
1497 <vscale x 8 x i16> %b,
1498 <vscale x 8 x i16> %c)
1499 ret <vscale x 8 x i16> %out
1502 define <vscale x 4 x i32> @uaba_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, <vscale x 4 x i32> %c) {
1503 ; CHECK-LABEL: uaba_i32:
1504 ; CHECK: uaba z0.s, z1.s, z2.s
1506 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.uaba.nxv4i32(<vscale x 4 x i32> %a,
1507 <vscale x 4 x i32> %b,
1508 <vscale x 4 x i32> %c)
1509 ret <vscale x 4 x i32> %out
1512 define <vscale x 2 x i64> @uaba_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, <vscale x 2 x i64> %c) {
1513 ; CHECK-LABEL: uaba_i64:
1514 ; CHECK: uaba z0.d, z1.d, z2.d
1516 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.uaba.nxv2i64(<vscale x 2 x i64> %a,
1517 <vscale x 2 x i64> %b,
1518 <vscale x 2 x i64> %c)
1519 ret <vscale x 2 x i64> %out
1526 define <vscale x 16 x i8> @uhadd_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
1527 ; CHECK-LABEL: uhadd_i8:
1528 ; CHECK: uhadd z0.b, p0/m, z0.b, z1.b
1530 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.uhadd.nxv16i8(<vscale x 16 x i1> %pg,
1531 <vscale x 16 x i8> %a,
1532 <vscale x 16 x i8> %b)
1533 ret <vscale x 16 x i8> %out
1536 define <vscale x 8 x i16> @uhadd_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
1537 ; CHECK-LABEL: uhadd_i16:
1538 ; CHECK: uhadd z0.h, p0/m, z0.h, z1.h
1540 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.uhadd.nxv8i16(<vscale x 8 x i1> %pg,
1541 <vscale x 8 x i16> %a,
1542 <vscale x 8 x i16> %b)
1543 ret <vscale x 8 x i16> %out
1546 define <vscale x 4 x i32> @uhadd_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
1547 ; CHECK-LABEL: uhadd_i32:
1548 ; CHECK: uhadd z0.s, p0/m, z0.s, z1.s
1550 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.uhadd.nxv4i32(<vscale x 4 x i1> %pg,
1551 <vscale x 4 x i32> %a,
1552 <vscale x 4 x i32> %b)
1553 ret <vscale x 4 x i32> %out
1556 define <vscale x 2 x i64> @uhadd_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1557 ; CHECK-LABEL: uhadd_i64:
1558 ; CHECK: uhadd z0.d, p0/m, z0.d, z1.d
1560 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.uhadd.nxv2i64(<vscale x 2 x i1> %pg,
1561 <vscale x 2 x i64> %a,
1562 <vscale x 2 x i64> %b)
1563 ret <vscale x 2 x i64> %out
1570 define <vscale x 16 x i8> @uhsub_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
1571 ; CHECK-LABEL: uhsub_i8:
1572 ; CHECK: uhsub z0.b, p0/m, z0.b, z1.b
1574 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.uhsub.nxv16i8(<vscale x 16 x i1> %pg,
1575 <vscale x 16 x i8> %a,
1576 <vscale x 16 x i8> %b)
1577 ret <vscale x 16 x i8> %out
1580 define <vscale x 8 x i16> @uhsub_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
1581 ; CHECK-LABEL: uhsub_i16:
1582 ; CHECK: uhsub z0.h, p0/m, z0.h, z1.h
1584 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.uhsub.nxv8i16(<vscale x 8 x i1> %pg,
1585 <vscale x 8 x i16> %a,
1586 <vscale x 8 x i16> %b)
1587 ret <vscale x 8 x i16> %out
1590 define <vscale x 4 x i32> @uhsub_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
1591 ; CHECK-LABEL: uhsub_i32:
1592 ; CHECK: uhsub z0.s, p0/m, z0.s, z1.s
1594 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.uhsub.nxv4i32(<vscale x 4 x i1> %pg,
1595 <vscale x 4 x i32> %a,
1596 <vscale x 4 x i32> %b)
1597 ret <vscale x 4 x i32> %out
1600 define <vscale x 2 x i64> @uhsub_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1601 ; CHECK-LABEL: uhsub_i64:
1602 ; CHECK: uhsub z0.d, p0/m, z0.d, z1.d
1604 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.uhsub.nxv2i64(<vscale x 2 x i1> %pg,
1605 <vscale x 2 x i64> %a,
1606 <vscale x 2 x i64> %b)
1607 ret <vscale x 2 x i64> %out
1614 define <vscale x 16 x i8> @uhsubr_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
1615 ; CHECK-LABEL: uhsubr_i8:
1616 ; CHECK: uhsubr z0.b, p0/m, z0.b, z1.b
1618 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.uhsubr.nxv16i8(<vscale x 16 x i1> %pg,
1619 <vscale x 16 x i8> %a,
1620 <vscale x 16 x i8> %b)
1621 ret <vscale x 16 x i8> %out
1624 define <vscale x 8 x i16> @uhsubr_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
1625 ; CHECK-LABEL: uhsubr_i16:
1626 ; CHECK: uhsubr z0.h, p0/m, z0.h, z1.h
1628 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.uhsubr.nxv8i16(<vscale x 8 x i1> %pg,
1629 <vscale x 8 x i16> %a,
1630 <vscale x 8 x i16> %b)
1631 ret <vscale x 8 x i16> %out
1634 define <vscale x 4 x i32> @uhsubr_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
1635 ; CHECK-LABEL: uhsubr_i32:
1636 ; CHECK: uhsubr z0.s, p0/m, z0.s, z1.s
1638 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.uhsubr.nxv4i32(<vscale x 4 x i1> %pg,
1639 <vscale x 4 x i32> %a,
1640 <vscale x 4 x i32> %b)
1641 ret <vscale x 4 x i32> %out
1644 define <vscale x 2 x i64> @uhsubr_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1645 ; CHECK-LABEL: uhsubr_i64:
1646 ; CHECK: uhsubr z0.d, p0/m, z0.d, z1.d
1648 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.uhsubr.nxv2i64(<vscale x 2 x i1> %pg,
1649 <vscale x 2 x i64> %a,
1650 <vscale x 2 x i64> %b)
1651 ret <vscale x 2 x i64> %out
1658 define <vscale x 16 x i8> @uqadd_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
1659 ; CHECK-LABEL: uqadd_i8:
1660 ; CHECK: uqadd z0.b, p0/m, z0.b, z1.b
1662 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.uqadd.nxv16i8(<vscale x 16 x i1> %pg,
1663 <vscale x 16 x i8> %a,
1664 <vscale x 16 x i8> %b)
1665 ret <vscale x 16 x i8> %out
1668 define <vscale x 8 x i16> @uqadd_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
1669 ; CHECK-LABEL: uqadd_i16:
1670 ; CHECK: uqadd z0.h, p0/m, z0.h, z1.h
1672 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.uqadd.nxv8i16(<vscale x 8 x i1> %pg,
1673 <vscale x 8 x i16> %a,
1674 <vscale x 8 x i16> %b)
1675 ret <vscale x 8 x i16> %out
1678 define <vscale x 4 x i32> @uqadd_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
1679 ; CHECK-LABEL: uqadd_i32:
1680 ; CHECK: uqadd z0.s, p0/m, z0.s, z1.s
1682 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.uqadd.nxv4i32(<vscale x 4 x i1> %pg,
1683 <vscale x 4 x i32> %a,
1684 <vscale x 4 x i32> %b)
1685 ret <vscale x 4 x i32> %out
1688 define <vscale x 2 x i64> @uqadd_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1689 ; CHECK-LABEL: uqadd_i64:
1690 ; CHECK: uqadd z0.d, p0/m, z0.d, z1.d
1692 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.uqadd.nxv2i64(<vscale x 2 x i1> %pg,
1693 <vscale x 2 x i64> %a,
1694 <vscale x 2 x i64> %b)
1695 ret <vscale x 2 x i64> %out
1702 define <vscale x 16 x i8> @uqrshl_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
1703 ; CHECK-LABEL: uqrshl_i8:
1704 ; CHECK: uqrshl z0.b, p0/m, z0.b, z1.b
1706 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.uqrshl.nxv16i8(<vscale x 16 x i1> %pg,
1707 <vscale x 16 x i8> %a,
1708 <vscale x 16 x i8> %b)
1709 ret <vscale x 16 x i8> %out
1712 define <vscale x 8 x i16> @uqrshl_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
1713 ; CHECK-LABEL: uqrshl_i16:
1714 ; CHECK: uqrshl z0.h, p0/m, z0.h, z1.h
1716 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.uqrshl.nxv8i16(<vscale x 8 x i1> %pg,
1717 <vscale x 8 x i16> %a,
1718 <vscale x 8 x i16> %b)
1719 ret <vscale x 8 x i16> %out
1722 define <vscale x 4 x i32> @uqrshl_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
1723 ; CHECK-LABEL: uqrshl_i32:
1724 ; CHECK: uqrshl z0.s, p0/m, z0.s, z1.s
1726 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.uqrshl.nxv4i32(<vscale x 4 x i1> %pg,
1727 <vscale x 4 x i32> %a,
1728 <vscale x 4 x i32> %b)
1729 ret <vscale x 4 x i32> %out
1732 define <vscale x 2 x i64> @uqrshl_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1733 ; CHECK-LABEL: uqrshl_i64:
1734 ; CHECK: uqrshl z0.d, p0/m, z0.d, z1.d
1736 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.uqrshl.nxv2i64(<vscale x 2 x i1> %pg,
1737 <vscale x 2 x i64> %a,
1738 <vscale x 2 x i64> %b)
1739 ret <vscale x 2 x i64> %out
1746 define <vscale x 16 x i8> @uqrshlr_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
1747 ; CHECK-LABEL: uqrshlr_i8:
1749 ; CHECK-NEXT: uqrshlr z0.b, p0/m, z0.b, z1.b
1751 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)
1752 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.uqrshl.nxv16i8(<vscale x 16 x i1> %pg,
1753 <vscale x 16 x i8> %b,
1754 <vscale x 16 x i8> %a)
1755 ret <vscale x 16 x i8> %out
1758 define <vscale x 8 x i16> @uqrshlr_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
1759 ; CHECK-LABEL: uqrshlr_i16:
1761 ; CHECK-NEXT: uqrshlr z0.h, p0/m, z0.h, z1.h
1763 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
1764 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.uqrshl.nxv8i16(<vscale x 8 x i1> %pg,
1765 <vscale x 8 x i16> %b,
1766 <vscale x 8 x i16> %a)
1767 ret <vscale x 8 x i16> %out
1770 define <vscale x 4 x i32> @uqrshlr_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
1771 ; CHECK-LABEL: uqrshlr_i32:
1773 ; CHECK-NEXT: uqrshlr z0.s, p0/m, z0.s, z1.s
1775 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
1776 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.uqrshl.nxv4i32(<vscale x 4 x i1> %pg,
1777 <vscale x 4 x i32> %b,
1778 <vscale x 4 x i32> %a)
1779 ret <vscale x 4 x i32> %out
1782 define <vscale x 2 x i64> @uqrshlr_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1783 ; CHECK-LABEL: uqrshlr_i64:
1785 ; CHECK-NEXT: uqrshlr z0.d, p0/m, z0.d, z1.d
1787 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
1788 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.uqrshl.nxv2i64(<vscale x 2 x i1> %pg,
1789 <vscale x 2 x i64> %b,
1790 <vscale x 2 x i64> %a)
1791 ret <vscale x 2 x i64> %out
1794 define <vscale x 2 x i64> @uqrshlr_i64_noptrue(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1795 ; CHECK-LABEL: uqrshlr_i64_noptrue:
1796 ; CHECK: uqrshl z1.d, p0/m, z1.d, z0.d
1797 ; CHECK-NEXT: mov z0.d, z1.d
1799 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.uqrshl.nxv2i64(<vscale x 2 x i1> %pg,
1800 <vscale x 2 x i64> %b,
1801 <vscale x 2 x i64> %a)
1802 ret <vscale x 2 x i64> %out
1809 define <vscale x 16 x i8> @uqshl_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
1810 ; CHECK-LABEL: uqshl_i8:
1811 ; CHECK: uqshl z0.b, p0/m, z0.b, z1.b
1813 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.uqshl.nxv16i8(<vscale x 16 x i1> %pg,
1814 <vscale x 16 x i8> %a,
1815 <vscale x 16 x i8> %b)
1816 ret <vscale x 16 x i8> %out
1819 define <vscale x 8 x i16> @uqshl_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
1820 ; CHECK-LABEL: uqshl_i16:
1821 ; CHECK: uqshl z0.h, p0/m, z0.h, z1.h
1823 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.uqshl.nxv8i16(<vscale x 8 x i1> %pg,
1824 <vscale x 8 x i16> %a,
1825 <vscale x 8 x i16> %b)
1826 ret <vscale x 8 x i16> %out
1829 define <vscale x 4 x i32> @uqshl_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
1830 ; CHECK-LABEL: uqshl_i32:
1831 ; CHECK: uqshl z0.s, p0/m, z0.s, z1.s
1833 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.uqshl.nxv4i32(<vscale x 4 x i1> %pg,
1834 <vscale x 4 x i32> %a,
1835 <vscale x 4 x i32> %b)
1836 ret <vscale x 4 x i32> %out
1839 define <vscale x 2 x i64> @uqshl_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1840 ; CHECK-LABEL: uqshl_i64:
1841 ; CHECK: uqshl z0.d, p0/m, z0.d, z1.d
1843 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.uqshl.nxv2i64(<vscale x 2 x i1> %pg,
1844 <vscale x 2 x i64> %a,
1845 <vscale x 2 x i64> %b)
1846 ret <vscale x 2 x i64> %out
1853 define <vscale x 16 x i8> @uqshlr_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
1854 ; CHECK-LABEL: uqshlr_i8:
1856 ; CHECK-NEXT: uqshlr z0.b, p0/m, z0.b, z1.b
1858 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)
1859 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.uqshl.nxv16i8(<vscale x 16 x i1> %pg,
1860 <vscale x 16 x i8> %b,
1861 <vscale x 16 x i8> %a)
1862 ret <vscale x 16 x i8> %out
1865 define <vscale x 8 x i16> @uqshlr_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
1866 ; CHECK-LABEL: uqshlr_i16:
1868 ; CHECK-NEXT: uqshlr z0.h, p0/m, z0.h, z1.h
1870 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
1871 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.uqshl.nxv8i16(<vscale x 8 x i1> %pg,
1872 <vscale x 8 x i16> %b,
1873 <vscale x 8 x i16> %a)
1874 ret <vscale x 8 x i16> %out
1877 define <vscale x 4 x i32> @uqshlr_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
1878 ; CHECK-LABEL: uqshlr_i32:
1880 ; CHECK-NEXT: uqshlr z0.s, p0/m, z0.s, z1.s
1882 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
1883 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.uqshl.nxv4i32(<vscale x 4 x i1> %pg,
1884 <vscale x 4 x i32> %b,
1885 <vscale x 4 x i32> %a)
1886 ret <vscale x 4 x i32> %out
1889 define <vscale x 2 x i64> @uqshlr_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1890 ; CHECK-LABEL: uqshlr_i64:
1892 ; CHECK-NEXT: uqshlr z0.d, p0/m, z0.d, z1.d
1894 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
1895 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.uqshl.nxv2i64(<vscale x 2 x i1> %pg,
1896 <vscale x 2 x i64> %b,
1897 <vscale x 2 x i64> %a)
1898 ret <vscale x 2 x i64> %out
1901 define <vscale x 2 x i64> @uqshlr_i64_noptrue(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1902 ; CHECK-LABEL: uqshlr_i64_noptrue:
1903 ; CHECK: uqshl z1.d, p0/m, z1.d, z0.d
1904 ; CHECK-NEXT: mov z0.d, z1.d
1906 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.uqshl.nxv2i64(<vscale x 2 x i1> %pg,
1907 <vscale x 2 x i64> %b,
1908 <vscale x 2 x i64> %a)
1909 ret <vscale x 2 x i64> %out
1916 define <vscale x 16 x i8> @uqshl_n_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a) {
1917 ; CHECK-LABEL: uqshl_n_i8:
1918 ; CHECK: uqshl z0.b, p0/m, z0.b, #7
1920 %dup = call <vscale x 16 x i8> @llvm.aarch64.sve.dup.x.nxv16i8(i8 7)
1921 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.uqshl.nxv16i8(<vscale x 16 x i1> %pg,
1922 <vscale x 16 x i8> %a,
1923 <vscale x 16 x i8> %dup)
1924 ret <vscale x 16 x i8> %out
1927 define <vscale x 8 x i16> @uqshl_n_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a) {
1928 ; CHECK-LABEL: uqshl_n_i16:
1929 ; CHECK: uqshl z0.h, p0/m, z0.h, #15
1931 %dup = call <vscale x 8 x i16> @llvm.aarch64.sve.dup.x.nxv8i16(i16 15)
1932 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.uqshl.nxv8i16(<vscale x 8 x i1> %pg,
1933 <vscale x 8 x i16> %a,
1934 <vscale x 8 x i16> %dup)
1935 ret <vscale x 8 x i16> %out
1938 define <vscale x 4 x i32> @uqshl_n_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a) {
1939 ; CHECK-LABEL: uqshl_n_i32:
1940 ; CHECK: uqshl z0.s, p0/m, z0.s, #31
1942 %dup = call <vscale x 4 x i32> @llvm.aarch64.sve.dup.x.nxv4i32(i32 31)
1943 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.uqshl.nxv4i32(<vscale x 4 x i1> %pg,
1944 <vscale x 4 x i32> %a,
1945 <vscale x 4 x i32> %dup)
1946 ret <vscale x 4 x i32> %out
1949 define <vscale x 2 x i64> @uqshl_n_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a) {
1950 ; CHECK-LABEL: uqshl_n_i64:
1951 ; CHECK: uqshl z0.d, p0/m, z0.d, #63
1953 %dup = call <vscale x 2 x i64> @llvm.aarch64.sve.dup.x.nxv2i64(i64 63)
1954 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.uqshl.nxv2i64(<vscale x 2 x i1> %pg,
1955 <vscale x 2 x i64> %a,
1956 <vscale x 2 x i64> %dup)
1957 ret <vscale x 2 x i64> %out
1960 define <vscale x 16 x i8> @uqshl_n_i8_range(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a) {
1961 ; CHECK-LABEL: uqshl_n_i8_range:
1962 ; CHECK: mov z1.b, #8
1963 ; CHECK: uqshl z0.b, p0/m, z0.b, z1.b
1965 %dup = call <vscale x 16 x i8> @llvm.aarch64.sve.dup.x.nxv16i8(i8 8)
1966 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.uqshl.nxv16i8(<vscale x 16 x i1> %pg,
1967 <vscale x 16 x i8> %a,
1968 <vscale x 16 x i8> %dup)
1969 ret <vscale x 16 x i8> %out
1972 define <vscale x 8 x i16> @uqshl_n_i16_range(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a) {
1973 ; CHECK-LABEL: uqshl_n_i16_range:
1974 ; CHECK: mov z1.h, #16
1975 ; CHECK: uqshl z0.h, p0/m, z0.h, z1.h
1977 %dup = call <vscale x 8 x i16> @llvm.aarch64.sve.dup.x.nxv8i16(i16 16)
1978 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.uqshl.nxv8i16(<vscale x 8 x i1> %pg,
1979 <vscale x 8 x i16> %a,
1980 <vscale x 8 x i16> %dup)
1981 ret <vscale x 8 x i16> %out
1984 define <vscale x 4 x i32> @uqshl_n_i32_range(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a) {
1985 ; CHECK-LABEL: uqshl_n_i32_range:
1986 ; CHECK: mov z1.s, #32
1987 ; CHECK: uqshl z0.s, p0/m, z0.s, z1.s
1989 %dup = call <vscale x 4 x i32> @llvm.aarch64.sve.dup.x.nxv4i32(i32 32)
1990 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.uqshl.nxv4i32(<vscale x 4 x i1> %pg,
1991 <vscale x 4 x i32> %a,
1992 <vscale x 4 x i32> %dup)
1993 ret <vscale x 4 x i32> %out
1996 define <vscale x 2 x i64> @uqshl_n_i64_range(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a) {
1997 ; CHECK-LABEL: uqshl_n_i64_range:
1998 ; CHECK: mov z1.d, #64
1999 ; CHECK: uqshl z0.d, p0/m, z0.d, z1.d
2001 %dup = call <vscale x 2 x i64> @llvm.aarch64.sve.dup.x.nxv2i64(i64 64)
2002 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.uqshl.nxv2i64(<vscale x 2 x i1> %pg,
2003 <vscale x 2 x i64> %a,
2004 <vscale x 2 x i64> %dup)
2005 ret <vscale x 2 x i64> %out
2012 define <vscale x 16 x i8> @uqsub_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
2013 ; CHECK-LABEL: uqsub_i8:
2014 ; CHECK: uqsub z0.b, p0/m, z0.b, z1.b
2016 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.uqsub.nxv16i8(<vscale x 16 x i1> %pg,
2017 <vscale x 16 x i8> %a,
2018 <vscale x 16 x i8> %b)
2019 ret <vscale x 16 x i8> %out
2022 define <vscale x 8 x i16> @uqsub_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
2023 ; CHECK-LABEL: uqsub_i16:
2024 ; CHECK: uqsub z0.h, p0/m, z0.h, z1.h
2026 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.uqsub.nxv8i16(<vscale x 8 x i1> %pg,
2027 <vscale x 8 x i16> %a,
2028 <vscale x 8 x i16> %b)
2029 ret <vscale x 8 x i16> %out
2032 define <vscale x 4 x i32> @uqsub_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
2033 ; CHECK-LABEL: uqsub_i32:
2034 ; CHECK: uqsub z0.s, p0/m, z0.s, z1.s
2036 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.uqsub.nxv4i32(<vscale x 4 x i1> %pg,
2037 <vscale x 4 x i32> %a,
2038 <vscale x 4 x i32> %b)
2039 ret <vscale x 4 x i32> %out
2042 define <vscale x 2 x i64> @uqsub_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
2043 ; CHECK-LABEL: uqsub_i64:
2044 ; CHECK: uqsub z0.d, p0/m, z0.d, z1.d
2046 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.uqsub.nxv2i64(<vscale x 2 x i1> %pg,
2047 <vscale x 2 x i64> %a,
2048 <vscale x 2 x i64> %b)
2049 ret <vscale x 2 x i64> %out
2056 define <vscale x 16 x i8> @uqsubr_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
2057 ; CHECK-LABEL: uqsubr_i8:
2058 ; CHECK: uqsubr z0.b, p0/m, z0.b, z1.b
2060 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.uqsubr.nxv16i8(<vscale x 16 x i1> %pg,
2061 <vscale x 16 x i8> %a,
2062 <vscale x 16 x i8> %b)
2063 ret <vscale x 16 x i8> %out
2066 define <vscale x 8 x i16> @uqsubr_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
2067 ; CHECK-LABEL: uqsubr_i16:
2068 ; CHECK: uqsubr z0.h, p0/m, z0.h, z1.h
2070 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.uqsubr.nxv8i16(<vscale x 8 x i1> %pg,
2071 <vscale x 8 x i16> %a,
2072 <vscale x 8 x i16> %b)
2073 ret <vscale x 8 x i16> %out
2076 define <vscale x 4 x i32> @uqsubr_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
2077 ; CHECK-LABEL: uqsubr_i32:
2078 ; CHECK: uqsubr z0.s, p0/m, z0.s, z1.s
2080 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.uqsubr.nxv4i32(<vscale x 4 x i1> %pg,
2081 <vscale x 4 x i32> %a,
2082 <vscale x 4 x i32> %b)
2083 ret <vscale x 4 x i32> %out
2086 define <vscale x 2 x i64> @uqsubr_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
2087 ; CHECK-LABEL: uqsubr_i64:
2088 ; CHECK: uqsubr z0.d, p0/m, z0.d, z1.d
2090 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.uqsubr.nxv2i64(<vscale x 2 x i1> %pg,
2091 <vscale x 2 x i64> %a,
2092 <vscale x 2 x i64> %b)
2093 ret <vscale x 2 x i64> %out
2100 define <vscale x 4 x i32> @urecpe_i32(<vscale x 4 x i32> %a, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %b) {
2101 ; CHECK-LABEL: urecpe_i32:
2102 ; CHECK: urecpe z0.s, p0/m, z1.s
2104 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.urecpe.nxv4i32(<vscale x 4 x i32> %a,
2105 <vscale x 4 x i1> %pg,
2106 <vscale x 4 x i32> %b)
2107 ret <vscale x 4 x i32> %out
2114 define <vscale x 16 x i8> @urhadd_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
2115 ; CHECK-LABEL: urhadd_i8:
2116 ; CHECK: urhadd z0.b, p0/m, z0.b, z1.b
2118 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.urhadd.nxv16i8(<vscale x 16 x i1> %pg,
2119 <vscale x 16 x i8> %a,
2120 <vscale x 16 x i8> %b)
2121 ret <vscale x 16 x i8> %out
2124 define <vscale x 8 x i16> @urhadd_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
2125 ; CHECK-LABEL: urhadd_i16:
2126 ; CHECK: urhadd z0.h, p0/m, z0.h, z1.h
2128 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.urhadd.nxv8i16(<vscale x 8 x i1> %pg,
2129 <vscale x 8 x i16> %a,
2130 <vscale x 8 x i16> %b)
2131 ret <vscale x 8 x i16> %out
2134 define <vscale x 4 x i32> @urhadd_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
2135 ; CHECK-LABEL: urhadd_i32:
2136 ; CHECK: urhadd z0.s, p0/m, z0.s, z1.s
2138 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.urhadd.nxv4i32(<vscale x 4 x i1> %pg,
2139 <vscale x 4 x i32> %a,
2140 <vscale x 4 x i32> %b)
2141 ret <vscale x 4 x i32> %out
2144 define <vscale x 2 x i64> @urhadd_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
2145 ; CHECK-LABEL: urhadd_i64:
2146 ; CHECK: urhadd z0.d, p0/m, z0.d, z1.d
2148 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.urhadd.nxv2i64(<vscale x 2 x i1> %pg,
2149 <vscale x 2 x i64> %a,
2150 <vscale x 2 x i64> %b)
2151 ret <vscale x 2 x i64> %out
2158 define <vscale x 16 x i8> @urshl_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
2159 ; CHECK-LABEL: urshl_i8:
2160 ; CHECK: urshl z0.b, p0/m, z0.b, z1.b
2162 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.urshl.nxv16i8(<vscale x 16 x i1> %pg,
2163 <vscale x 16 x i8> %a,
2164 <vscale x 16 x i8> %b)
2165 ret <vscale x 16 x i8> %out
2168 define <vscale x 8 x i16> @urshl_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
2169 ; CHECK-LABEL: urshl_i16:
2170 ; CHECK: urshl z0.h, p0/m, z0.h, z1.h
2172 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.urshl.nxv8i16(<vscale x 8 x i1> %pg,
2173 <vscale x 8 x i16> %a,
2174 <vscale x 8 x i16> %b)
2175 ret <vscale x 8 x i16> %out
2178 define <vscale x 4 x i32> @urshl_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
2179 ; CHECK-LABEL: urshl_i32:
2180 ; CHECK: urshl z0.s, p0/m, z0.s, z1.s
2182 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.urshl.nxv4i32(<vscale x 4 x i1> %pg,
2183 <vscale x 4 x i32> %a,
2184 <vscale x 4 x i32> %b)
2185 ret <vscale x 4 x i32> %out
2188 define <vscale x 2 x i64> @urshl_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
2189 ; CHECK-LABEL: urshl_i64:
2190 ; CHECK: urshl z0.d, p0/m, z0.d, z1.d
2192 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.urshl.nxv2i64(<vscale x 2 x i1> %pg,
2193 <vscale x 2 x i64> %a,
2194 <vscale x 2 x i64> %b)
2195 ret <vscale x 2 x i64> %out
2202 define <vscale x 16 x i8> @urshlr_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
2203 ; CHECK-LABEL: urshlr_i8:
2205 ; CHECK-NEXT: urshlr z0.b, p0/m, z0.b, z1.b
2207 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)
2208 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.urshl.nxv16i8(<vscale x 16 x i1> %pg,
2209 <vscale x 16 x i8> %b,
2210 <vscale x 16 x i8> %a)
2211 ret <vscale x 16 x i8> %out
2214 define <vscale x 8 x i16> @urshlr_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
2215 ; CHECK-LABEL: urshlr_i16:
2217 ; CHECK-NEXT: urshlr z0.h, p0/m, z0.h, z1.h
2219 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
2220 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.urshl.nxv8i16(<vscale x 8 x i1> %pg,
2221 <vscale x 8 x i16> %b,
2222 <vscale x 8 x i16> %a)
2223 ret <vscale x 8 x i16> %out
2226 define <vscale x 4 x i32> @urshlr_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
2227 ; CHECK-LABEL: urshlr_i32:
2229 ; CHECK-NEXT: urshlr z0.s, p0/m, z0.s, z1.s
2231 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
2232 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.urshl.nxv4i32(<vscale x 4 x i1> %pg,
2233 <vscale x 4 x i32> %b,
2234 <vscale x 4 x i32> %a)
2235 ret <vscale x 4 x i32> %out
2238 define <vscale x 2 x i64> @urshlr_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
2239 ; CHECK-LABEL: urshlr_i64:
2241 ; CHECK-NEXT: urshlr z0.d, p0/m, z0.d, z1.d
2243 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
2244 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.urshl.nxv2i64(<vscale x 2 x i1> %pg,
2245 <vscale x 2 x i64> %b,
2246 <vscale x 2 x i64> %a)
2247 ret <vscale x 2 x i64> %out
2250 define <vscale x 2 x i64> @urshlr_i64_noptrue(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
2251 ; CHECK-LABEL: urshlr_i64_noptrue:
2252 ; CHECK: urshl z1.d, p0/m, z1.d, z0.d
2253 ; CHECK-NEXT: mov z0.d, z1.d
2255 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.urshl.nxv2i64(<vscale x 2 x i1> %pg,
2256 <vscale x 2 x i64> %b,
2257 <vscale x 2 x i64> %a)
2258 ret <vscale x 2 x i64> %out
2265 define <vscale x 16 x i8> @urshr_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a) {
2266 ; CHECK-LABEL: urshr_i8:
2267 ; CHECK: urshr z0.b, p0/m, z0.b, #4
2269 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.urshr.nxv16i8(<vscale x 16 x i1> %pg,
2270 <vscale x 16 x i8> %a,
2272 ret <vscale x 16 x i8> %out
2275 define <vscale x 8 x i16> @urshr_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a) {
2276 ; CHECK-LABEL: urshr_i16:
2277 ; CHECK: urshr z0.h, p0/m, z0.h, #13
2279 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.urshr.nxv8i16(<vscale x 8 x i1> %pg,
2280 <vscale x 8 x i16> %a,
2282 ret <vscale x 8 x i16> %out
2285 define <vscale x 4 x i32> @urshr_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a) {
2286 ; CHECK-LABEL: urshr_i32:
2287 ; CHECK: urshr z0.s, p0/m, z0.s, #1
2289 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.urshr.nxv4i32(<vscale x 4 x i1> %pg,
2290 <vscale x 4 x i32> %a,
2292 ret <vscale x 4 x i32> %out
2295 define <vscale x 2 x i64> @urshr_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a) {
2296 ; CHECK-LABEL: urshr_i64:
2297 ; CHECK: urshr z0.d, p0/m, z0.d, #24
2299 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.urshr.nxv2i64(<vscale x 2 x i1> %pg,
2300 <vscale x 2 x i64> %a,
2302 ret <vscale x 2 x i64> %out
2309 define <vscale x 4 x i32> @ursqrte_i32(<vscale x 4 x i32> %a, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %b) {
2310 ; CHECK-LABEL: ursqrte_i32:
2311 ; CHECK: ursqrte z0.s, p0/m, z1.s
2313 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.ursqrte.nxv4i32(<vscale x 4 x i32> %a,
2314 <vscale x 4 x i1> %pg,
2315 <vscale x 4 x i32> %b)
2316 ret <vscale x 4 x i32> %out
2323 define <vscale x 16 x i8> @ursra_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
2324 ; CHECK-LABEL: ursra_i8:
2325 ; CHECK: ursra z0.b, z1.b, #5
2327 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.ursra.nxv16i8(<vscale x 16 x i8> %a,
2328 <vscale x 16 x i8> %b,
2330 ret <vscale x 16 x i8> %out
2333 define <vscale x 8 x i16> @ursra_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
2334 ; CHECK-LABEL: ursra_i16:
2335 ; CHECK: ursra z0.h, z1.h, #12
2337 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.ursra.nxv8i16(<vscale x 8 x i16> %a,
2338 <vscale x 8 x i16> %b,
2340 ret <vscale x 8 x i16> %out
2343 define <vscale x 4 x i32> @ursra_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
2344 ; CHECK-LABEL: ursra_i32:
2345 ; CHECK: ursra z0.s, z1.s, #31
2347 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.ursra.nxv4i32(<vscale x 4 x i32> %a,
2348 <vscale x 4 x i32> %b,
2350 ret <vscale x 4 x i32> %out
2353 define <vscale x 2 x i64> @ursra_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
2354 ; CHECK-LABEL: ursra_i64:
2355 ; CHECK: ursra z0.d, z1.d, #14
2357 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.ursra.nxv2i64(<vscale x 2 x i64> %a,
2358 <vscale x 2 x i64> %b,
2360 ret <vscale x 2 x i64> %out
2367 define <vscale x 16 x i8> @usqadd_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
2368 ; CHECK-LABEL: usqadd_i8:
2369 ; CHECK: usqadd z0.b, p0/m, z0.b, z1.b
2371 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.usqadd.nxv16i8(<vscale x 16 x i1> %pg,
2372 <vscale x 16 x i8> %a,
2373 <vscale x 16 x i8> %b)
2374 ret <vscale x 16 x i8> %out
2377 define <vscale x 8 x i16> @usqadd_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
2378 ; CHECK-LABEL: usqadd_i16:
2379 ; CHECK: usqadd z0.h, p0/m, z0.h, z1.h
2381 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.usqadd.nxv8i16(<vscale x 8 x i1> %pg,
2382 <vscale x 8 x i16> %a,
2383 <vscale x 8 x i16> %b)
2384 ret <vscale x 8 x i16> %out
2387 define <vscale x 4 x i32> @usqadd_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
2388 ; CHECK-LABEL: usqadd_i32:
2389 ; CHECK: usqadd z0.s, p0/m, z0.s, z1.s
2391 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.usqadd.nxv4i32(<vscale x 4 x i1> %pg,
2392 <vscale x 4 x i32> %a,
2393 <vscale x 4 x i32> %b)
2394 ret <vscale x 4 x i32> %out
2397 define <vscale x 2 x i64> @usqadd_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
2398 ; CHECK-LABEL: usqadd_i64:
2399 ; CHECK: usqadd z0.d, p0/m, z0.d, z1.d
2401 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.usqadd.nxv2i64(<vscale x 2 x i1> %pg,
2402 <vscale x 2 x i64> %a,
2403 <vscale x 2 x i64> %b)
2404 ret <vscale x 2 x i64> %out
2411 define <vscale x 16 x i8> @usra_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
2412 ; CHECK-LABEL: usra_i8:
2413 ; CHECK: usra z0.b, z1.b, #6
2415 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.usra.nxv16i8(<vscale x 16 x i8> %a,
2416 <vscale x 16 x i8> %b,
2418 ret <vscale x 16 x i8> %out
2421 define <vscale x 8 x i16> @usra_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
2422 ; CHECK-LABEL: usra_i16:
2423 ; CHECK: usra z0.h, z1.h, #11
2425 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.usra.nxv8i16(<vscale x 8 x i16> %a,
2426 <vscale x 8 x i16> %b,
2428 ret <vscale x 8 x i16> %out
2431 define <vscale x 4 x i32> @usra_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
2432 ; CHECK-LABEL: usra_i32:
2433 ; CHECK: usra z0.s, z1.s, #21
2435 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.usra.nxv4i32(<vscale x 4 x i32> %a,
2436 <vscale x 4 x i32> %b,
2438 ret <vscale x 4 x i32> %out
2441 define <vscale x 2 x i64> @usra_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
2442 ; CHECK-LABEL: usra_i64:
2443 ; CHECK: usra z0.d, z1.d, #4
2445 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.usra.nxv2i64(<vscale x 2 x i64> %a,
2446 <vscale x 2 x i64> %b,
2448 ret <vscale x 2 x i64> %out
2451 declare <vscale x 16 x i8> @llvm.aarch64.sve.dup.x.nxv16i8(i8)
2452 declare <vscale x 8 x i16> @llvm.aarch64.sve.dup.x.nxv8i16(i16)
2453 declare <vscale x 4 x i32> @llvm.aarch64.sve.dup.x.nxv4i32(i32)
2454 declare <vscale x 2 x i64> @llvm.aarch64.sve.dup.x.nxv2i64(i64)
2456 declare <vscale x 16 x i8> @llvm.aarch64.sve.saba.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2457 declare <vscale x 8 x i16> @llvm.aarch64.sve.saba.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2458 declare <vscale x 4 x i32> @llvm.aarch64.sve.saba.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2459 declare <vscale x 2 x i64> @llvm.aarch64.sve.saba.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2461 declare <vscale x 16 x i8> @llvm.aarch64.sve.shadd.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2462 declare <vscale x 8 x i16> @llvm.aarch64.sve.shadd.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2463 declare <vscale x 4 x i32> @llvm.aarch64.sve.shadd.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2464 declare <vscale x 2 x i64> @llvm.aarch64.sve.shadd.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2466 declare <vscale x 16 x i8> @llvm.aarch64.sve.shsub.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2467 declare <vscale x 8 x i16> @llvm.aarch64.sve.shsub.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2468 declare <vscale x 4 x i32> @llvm.aarch64.sve.shsub.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2469 declare <vscale x 2 x i64> @llvm.aarch64.sve.shsub.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2471 declare <vscale x 16 x i8> @llvm.aarch64.sve.shsubr.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2472 declare <vscale x 8 x i16> @llvm.aarch64.sve.shsubr.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2473 declare <vscale x 4 x i32> @llvm.aarch64.sve.shsubr.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2474 declare <vscale x 2 x i64> @llvm.aarch64.sve.shsubr.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2476 declare <vscale x 16 x i8> @llvm.aarch64.sve.sli.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, i32)
2477 declare <vscale x 8 x i16> @llvm.aarch64.sve.sli.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, i32)
2478 declare <vscale x 4 x i32> @llvm.aarch64.sve.sli.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, i32)
2479 declare <vscale x 2 x i64> @llvm.aarch64.sve.sli.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, i32)
2481 declare <vscale x 16 x i8> @llvm.aarch64.sve.sqabs.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i1>, <vscale x 16 x i8>)
2482 declare <vscale x 8 x i16> @llvm.aarch64.sve.sqabs.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i1>, <vscale x 8 x i16>)
2483 declare <vscale x 4 x i32> @llvm.aarch64.sve.sqabs.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i1>, <vscale x 4 x i32>)
2484 declare <vscale x 2 x i64> @llvm.aarch64.sve.sqabs.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i1>, <vscale x 2 x i64>)
2486 declare <vscale x 16 x i8> @llvm.aarch64.sve.sqadd.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2487 declare <vscale x 8 x i16> @llvm.aarch64.sve.sqadd.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2488 declare <vscale x 4 x i32> @llvm.aarch64.sve.sqadd.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2489 declare <vscale x 2 x i64> @llvm.aarch64.sve.sqadd.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2491 declare <vscale x 16 x i8> @llvm.aarch64.sve.sqdmulh.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
2492 declare <vscale x 8 x i16> @llvm.aarch64.sve.sqdmulh.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
2493 declare <vscale x 4 x i32> @llvm.aarch64.sve.sqdmulh.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
2494 declare <vscale x 2 x i64> @llvm.aarch64.sve.sqdmulh.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
2496 declare <vscale x 8 x i16> @llvm.aarch64.sve.sqdmulh.lane.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, i32)
2497 declare <vscale x 4 x i32> @llvm.aarch64.sve.sqdmulh.lane.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, i32)
2498 declare <vscale x 2 x i64> @llvm.aarch64.sve.sqdmulh.lane.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, i32)
2500 declare <vscale x 16 x i8> @llvm.aarch64.sve.sqneg.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i1>, <vscale x 16 x i8>)
2501 declare <vscale x 8 x i16> @llvm.aarch64.sve.sqneg.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i1>, <vscale x 8 x i16>)
2502 declare <vscale x 4 x i32> @llvm.aarch64.sve.sqneg.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i1>, <vscale x 4 x i32>)
2503 declare <vscale x 2 x i64> @llvm.aarch64.sve.sqneg.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i1>, <vscale x 2 x i64>)
2505 declare <vscale x 16 x i8> @llvm.aarch64.sve.sqrdmlah.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2506 declare <vscale x 8 x i16> @llvm.aarch64.sve.sqrdmlah.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2507 declare <vscale x 4 x i32> @llvm.aarch64.sve.sqrdmlah.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2508 declare <vscale x 2 x i64> @llvm.aarch64.sve.sqrdmlah.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2510 declare <vscale x 8 x i16> @llvm.aarch64.sve.sqrdmlah.lane.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, i32)
2511 declare <vscale x 4 x i32> @llvm.aarch64.sve.sqrdmlah.lane.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, i32)
2512 declare <vscale x 2 x i64> @llvm.aarch64.sve.sqrdmlah.lane.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, i32)
2514 declare <vscale x 16 x i8> @llvm.aarch64.sve.sqrdmlsh.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2515 declare <vscale x 8 x i16> @llvm.aarch64.sve.sqrdmlsh.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2516 declare <vscale x 4 x i32> @llvm.aarch64.sve.sqrdmlsh.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2517 declare <vscale x 2 x i64> @llvm.aarch64.sve.sqrdmlsh.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2519 declare <vscale x 8 x i16> @llvm.aarch64.sve.sqrdmlsh.lane.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, i32)
2520 declare <vscale x 4 x i32> @llvm.aarch64.sve.sqrdmlsh.lane.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, i32)
2521 declare <vscale x 2 x i64> @llvm.aarch64.sve.sqrdmlsh.lane.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, i32)
2523 declare <vscale x 16 x i8> @llvm.aarch64.sve.sqrdmulh.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
2524 declare <vscale x 8 x i16> @llvm.aarch64.sve.sqrdmulh.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
2525 declare <vscale x 4 x i32> @llvm.aarch64.sve.sqrdmulh.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
2526 declare <vscale x 2 x i64> @llvm.aarch64.sve.sqrdmulh.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
2528 declare <vscale x 8 x i16> @llvm.aarch64.sve.sqrdmulh.lane.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, i32)
2529 declare <vscale x 4 x i32> @llvm.aarch64.sve.sqrdmulh.lane.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, i32)
2530 declare <vscale x 2 x i64> @llvm.aarch64.sve.sqrdmulh.lane.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, i32)
2532 declare <vscale x 16 x i8> @llvm.aarch64.sve.sqrshl.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2533 declare <vscale x 8 x i16> @llvm.aarch64.sve.sqrshl.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2534 declare <vscale x 4 x i32> @llvm.aarch64.sve.sqrshl.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2535 declare <vscale x 2 x i64> @llvm.aarch64.sve.sqrshl.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2537 declare <vscale x 16 x i8> @llvm.aarch64.sve.sqshl.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2538 declare <vscale x 8 x i16> @llvm.aarch64.sve.sqshl.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2539 declare <vscale x 4 x i32> @llvm.aarch64.sve.sqshl.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2540 declare <vscale x 2 x i64> @llvm.aarch64.sve.sqshl.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2542 declare <vscale x 16 x i8> @llvm.aarch64.sve.sqshlu.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, i32)
2543 declare <vscale x 8 x i16> @llvm.aarch64.sve.sqshlu.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, i32)
2544 declare <vscale x 4 x i32> @llvm.aarch64.sve.sqshlu.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, i32)
2545 declare <vscale x 2 x i64> @llvm.aarch64.sve.sqshlu.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, i32)
2547 declare <vscale x 16 x i8> @llvm.aarch64.sve.sqsub.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2548 declare <vscale x 8 x i16> @llvm.aarch64.sve.sqsub.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2549 declare <vscale x 4 x i32> @llvm.aarch64.sve.sqsub.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2550 declare <vscale x 2 x i64> @llvm.aarch64.sve.sqsub.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2552 declare <vscale x 16 x i8> @llvm.aarch64.sve.sqsubr.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2553 declare <vscale x 8 x i16> @llvm.aarch64.sve.sqsubr.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2554 declare <vscale x 4 x i32> @llvm.aarch64.sve.sqsubr.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2555 declare <vscale x 2 x i64> @llvm.aarch64.sve.sqsubr.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2557 declare <vscale x 16 x i8> @llvm.aarch64.sve.srhadd.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2558 declare <vscale x 8 x i16> @llvm.aarch64.sve.srhadd.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2559 declare <vscale x 4 x i32> @llvm.aarch64.sve.srhadd.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2560 declare <vscale x 2 x i64> @llvm.aarch64.sve.srhadd.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2562 declare <vscale x 16 x i8> @llvm.aarch64.sve.sri.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, i32)
2563 declare <vscale x 8 x i16> @llvm.aarch64.sve.sri.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, i32)
2564 declare <vscale x 4 x i32> @llvm.aarch64.sve.sri.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, i32)
2565 declare <vscale x 2 x i64> @llvm.aarch64.sve.sri.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, i32)
2567 declare <vscale x 16 x i8> @llvm.aarch64.sve.srshl.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2568 declare <vscale x 8 x i16> @llvm.aarch64.sve.srshl.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2569 declare <vscale x 4 x i32> @llvm.aarch64.sve.srshl.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2570 declare <vscale x 2 x i64> @llvm.aarch64.sve.srshl.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2572 declare <vscale x 16 x i8> @llvm.aarch64.sve.srshr.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, i32)
2573 declare <vscale x 8 x i16> @llvm.aarch64.sve.srshr.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, i32)
2574 declare <vscale x 4 x i32> @llvm.aarch64.sve.srshr.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, i32)
2575 declare <vscale x 2 x i64> @llvm.aarch64.sve.srshr.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, i32)
2577 declare <vscale x 16 x i8> @llvm.aarch64.sve.srsra.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, i32)
2578 declare <vscale x 8 x i16> @llvm.aarch64.sve.srsra.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, i32)
2579 declare <vscale x 4 x i32> @llvm.aarch64.sve.srsra.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, i32)
2580 declare <vscale x 2 x i64> @llvm.aarch64.sve.srsra.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, i32)
2582 declare <vscale x 16 x i8> @llvm.aarch64.sve.ssra.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, i32)
2583 declare <vscale x 8 x i16> @llvm.aarch64.sve.ssra.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, i32)
2584 declare <vscale x 4 x i32> @llvm.aarch64.sve.ssra.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, i32)
2585 declare <vscale x 2 x i64> @llvm.aarch64.sve.ssra.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, i32)
2587 declare <vscale x 16 x i8> @llvm.aarch64.sve.suqadd.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2588 declare <vscale x 8 x i16> @llvm.aarch64.sve.suqadd.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2589 declare <vscale x 4 x i32> @llvm.aarch64.sve.suqadd.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2590 declare <vscale x 2 x i64> @llvm.aarch64.sve.suqadd.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2592 declare <vscale x 16 x i8> @llvm.aarch64.sve.uaba.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2593 declare <vscale x 8 x i16> @llvm.aarch64.sve.uaba.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2594 declare <vscale x 4 x i32> @llvm.aarch64.sve.uaba.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2595 declare <vscale x 2 x i64> @llvm.aarch64.sve.uaba.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2597 declare <vscale x 16 x i8> @llvm.aarch64.sve.uhadd.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2598 declare <vscale x 8 x i16> @llvm.aarch64.sve.uhadd.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2599 declare <vscale x 4 x i32> @llvm.aarch64.sve.uhadd.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2600 declare <vscale x 2 x i64> @llvm.aarch64.sve.uhadd.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2602 declare <vscale x 16 x i8> @llvm.aarch64.sve.uhsub.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2603 declare <vscale x 8 x i16> @llvm.aarch64.sve.uhsub.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2604 declare <vscale x 4 x i32> @llvm.aarch64.sve.uhsub.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2605 declare <vscale x 2 x i64> @llvm.aarch64.sve.uhsub.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2607 declare <vscale x 16 x i8> @llvm.aarch64.sve.uhsubr.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2608 declare <vscale x 8 x i16> @llvm.aarch64.sve.uhsubr.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2609 declare <vscale x 4 x i32> @llvm.aarch64.sve.uhsubr.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2610 declare <vscale x 2 x i64> @llvm.aarch64.sve.uhsubr.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2612 declare <vscale x 16 x i8> @llvm.aarch64.sve.uqadd.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2613 declare <vscale x 8 x i16> @llvm.aarch64.sve.uqadd.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2614 declare <vscale x 4 x i32> @llvm.aarch64.sve.uqadd.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2615 declare <vscale x 2 x i64> @llvm.aarch64.sve.uqadd.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2617 declare <vscale x 16 x i8> @llvm.aarch64.sve.uqrshl.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2618 declare <vscale x 8 x i16> @llvm.aarch64.sve.uqrshl.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2619 declare <vscale x 4 x i32> @llvm.aarch64.sve.uqrshl.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2620 declare <vscale x 2 x i64> @llvm.aarch64.sve.uqrshl.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2622 declare <vscale x 16 x i8> @llvm.aarch64.sve.uqshl.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2623 declare <vscale x 8 x i16> @llvm.aarch64.sve.uqshl.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2624 declare <vscale x 4 x i32> @llvm.aarch64.sve.uqshl.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2625 declare <vscale x 2 x i64> @llvm.aarch64.sve.uqshl.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2627 declare <vscale x 16 x i8> @llvm.aarch64.sve.uqsub.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2628 declare <vscale x 8 x i16> @llvm.aarch64.sve.uqsub.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2629 declare <vscale x 4 x i32> @llvm.aarch64.sve.uqsub.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2630 declare <vscale x 2 x i64> @llvm.aarch64.sve.uqsub.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2632 declare <vscale x 16 x i8> @llvm.aarch64.sve.uqsubr.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2633 declare <vscale x 8 x i16> @llvm.aarch64.sve.uqsubr.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2634 declare <vscale x 4 x i32> @llvm.aarch64.sve.uqsubr.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2635 declare <vscale x 2 x i64> @llvm.aarch64.sve.uqsubr.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2637 declare <vscale x 4 x i32> @llvm.aarch64.sve.urecpe.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i1>, <vscale x 4 x i32>)
2639 declare <vscale x 16 x i8> @llvm.aarch64.sve.urhadd.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2640 declare <vscale x 8 x i16> @llvm.aarch64.sve.urhadd.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2641 declare <vscale x 4 x i32> @llvm.aarch64.sve.urhadd.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2642 declare <vscale x 2 x i64> @llvm.aarch64.sve.urhadd.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2644 declare <vscale x 16 x i8> @llvm.aarch64.sve.urshl.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2645 declare <vscale x 8 x i16> @llvm.aarch64.sve.urshl.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2646 declare <vscale x 4 x i32> @llvm.aarch64.sve.urshl.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2647 declare <vscale x 2 x i64> @llvm.aarch64.sve.urshl.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2649 declare <vscale x 16 x i8> @llvm.aarch64.sve.urshr.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, i32)
2650 declare <vscale x 8 x i16> @llvm.aarch64.sve.urshr.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, i32)
2651 declare <vscale x 4 x i32> @llvm.aarch64.sve.urshr.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, i32)
2652 declare <vscale x 2 x i64> @llvm.aarch64.sve.urshr.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, i32)
2654 declare <vscale x 4 x i32> @llvm.aarch64.sve.ursqrte.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i1>, <vscale x 4 x i32>)
2656 declare <vscale x 16 x i8> @llvm.aarch64.sve.ursra.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, i32)
2657 declare <vscale x 8 x i16> @llvm.aarch64.sve.ursra.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, i32)
2658 declare <vscale x 4 x i32> @llvm.aarch64.sve.ursra.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, i32)
2659 declare <vscale x 2 x i64> @llvm.aarch64.sve.ursra.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, i32)
2661 declare <vscale x 16 x i8> @llvm.aarch64.sve.usqadd.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
2662 declare <vscale x 8 x i16> @llvm.aarch64.sve.usqadd.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>)
2663 declare <vscale x 4 x i32> @llvm.aarch64.sve.usqadd.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>)
2664 declare <vscale x 2 x i64> @llvm.aarch64.sve.usqadd.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>)
2666 declare <vscale x 16 x i8> @llvm.aarch64.sve.usra.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, i32)
2667 declare <vscale x 8 x i16> @llvm.aarch64.sve.usra.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, i32)
2668 declare <vscale x 4 x i32> @llvm.aarch64.sve.usra.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, i32)
2669 declare <vscale x 2 x i64> @llvm.aarch64.sve.usra.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, i32)
2671 declare <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32)
2672 declare <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32)
2673 declare <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32)
2674 declare <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32)