1 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+sve,+f64mm -asm-verbose=0 < %s -o - | FileCheck %s
7 define <vscale x 16 x i8> @trn1_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
8 ; CHECK-LABEL: trn1_i8:
9 ; CHECK-NEXT: trn1 z0.q, z0.q, z1.q
11 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.trn1q.nxv16i8(<vscale x 16 x i8> %a,
12 <vscale x 16 x i8> %b)
13 ret <vscale x 16 x i8> %out
16 define <vscale x 8 x i16> @trn1_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) nounwind {
17 ; CHECK-LABEL: trn1_i16:
18 ; CHECK-NEXT: trn1 z0.q, z0.q, z1.q
20 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.trn1q.nxv8i16(<vscale x 8 x i16> %a,
21 <vscale x 8 x i16> %b)
22 ret <vscale x 8 x i16> %out
25 define <vscale x 4 x i32> @trn1_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) nounwind {
26 ; CHECK-LABEL: trn1_i32:
27 ; CHECK-NEXT: trn1 z0.q, z0.q, z1.q
29 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.trn1q.nxv4i32(<vscale x 4 x i32> %a,
30 <vscale x 4 x i32> %b)
31 ret <vscale x 4 x i32> %out
34 define <vscale x 2 x i64> @trn1_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) nounwind {
35 ; CHECK-LABEL: trn1_i64:
36 ; CHECK-NEXT: trn1 z0.q, z0.q, z1.q
38 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.trn1q.nxv2i64(<vscale x 2 x i64> %a,
39 <vscale x 2 x i64> %b)
40 ret <vscale x 2 x i64> %out
43 define <vscale x 8 x half> @trn1_f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) nounwind {
44 ; CHECK-LABEL: trn1_f16:
45 ; CHECK-NEXT: trn1 z0.q, z0.q, z1.q
47 %out = call <vscale x 8 x half> @llvm.aarch64.sve.trn1q.nxv8f16(<vscale x 8 x half> %a,
48 <vscale x 8 x half> %b)
49 ret <vscale x 8 x half> %out
52 define <vscale x 8 x bfloat> @trn1_bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) nounwind #0 {
53 ; CHECK-LABEL: trn1_bf16:
54 ; CHECK-NEXT: trn1 z0.q, z0.q, z1.q
56 %out = call <vscale x 8 x bfloat> @llvm.aarch64.sve.trn1q.nxv8bf16(<vscale x 8 x bfloat> %a,
57 <vscale x 8 x bfloat> %b)
58 ret <vscale x 8 x bfloat> %out
61 define <vscale x 4 x float> @trn1_f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) nounwind {
62 ; CHECK-LABEL: trn1_f32:
63 ; CHECK-NEXT: trn1 z0.q, z0.q, z1.q
65 %out = call <vscale x 4 x float> @llvm.aarch64.sve.trn1q.nxv4f32(<vscale x 4 x float> %a,
66 <vscale x 4 x float> %b)
67 ret <vscale x 4 x float> %out
70 define <vscale x 2 x double> @trn1_f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) nounwind {
71 ; CHECK-LABEL: trn1_f64:
72 ; CHECK-NEXT: trn1 z0.q, z0.q, z1.q
74 %out = call <vscale x 2 x double> @llvm.aarch64.sve.trn1q.nxv2f64(<vscale x 2 x double> %a,
75 <vscale x 2 x double> %b)
76 ret <vscale x 2 x double> %out
83 define <vscale x 16 x i8> @trn2_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
84 ; CHECK-LABEL: trn2_i8:
85 ; CHECK-NEXT: trn2 z0.q, z0.q, z1.q
87 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.trn2q.nxv16i8(<vscale x 16 x i8> %a,
88 <vscale x 16 x i8> %b)
89 ret <vscale x 16 x i8> %out
92 define <vscale x 8 x i16> @trn2_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) nounwind {
93 ; CHECK-LABEL: trn2_i16:
94 ; CHECK-NEXT: trn2 z0.q, z0.q, z1.q
96 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.trn2q.nxv8i16(<vscale x 8 x i16> %a,
97 <vscale x 8 x i16> %b)
98 ret <vscale x 8 x i16> %out
101 define <vscale x 4 x i32> @trn2_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) nounwind {
102 ; CHECK-LABEL: trn2_i32:
103 ; CHECK-NEXT: trn2 z0.q, z0.q, z1.q
105 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.trn2q.nxv4i32(<vscale x 4 x i32> %a,
106 <vscale x 4 x i32> %b)
107 ret <vscale x 4 x i32> %out
110 define <vscale x 2 x i64> @trn2_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) nounwind {
111 ; CHECK-LABEL: trn2_i64:
112 ; CHECK-NEXT: trn2 z0.q, z0.q, z1.q
114 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.trn2q.nxv2i64(<vscale x 2 x i64> %a,
115 <vscale x 2 x i64> %b)
116 ret <vscale x 2 x i64> %out
119 define <vscale x 8 x half> @trn2_f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) nounwind {
120 ; CHECK-LABEL: trn2_f16:
121 ; CHECK-NEXT: trn2 z0.q, z0.q, z1.q
123 %out = call <vscale x 8 x half> @llvm.aarch64.sve.trn2q.nxv8f16(<vscale x 8 x half> %a,
124 <vscale x 8 x half> %b)
125 ret <vscale x 8 x half> %out
128 define <vscale x 8 x bfloat> @trn2_bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) nounwind #0 {
129 ; CHECK-LABEL: trn2_bf16:
130 ; CHECK-NEXT: trn2 z0.q, z0.q, z1.q
132 %out = call <vscale x 8 x bfloat> @llvm.aarch64.sve.trn2q.nxv8bf16(<vscale x 8 x bfloat> %a,
133 <vscale x 8 x bfloat> %b)
134 ret <vscale x 8 x bfloat> %out
137 define <vscale x 4 x float> @trn2_f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) nounwind {
138 ; CHECK-LABEL: trn2_f32:
139 ; CHECK-NEXT: trn2 z0.q, z0.q, z1.q
141 %out = call <vscale x 4 x float> @llvm.aarch64.sve.trn2q.nxv4f32(<vscale x 4 x float> %a,
142 <vscale x 4 x float> %b)
143 ret <vscale x 4 x float> %out
146 define <vscale x 2 x double> @trn2_f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) nounwind {
147 ; CHECK-LABEL: trn2_f64:
148 ; CHECK-NEXT: trn2 z0.q, z0.q, z1.q
150 %out = call <vscale x 2 x double> @llvm.aarch64.sve.trn2q.nxv2f64(<vscale x 2 x double> %a,
151 <vscale x 2 x double> %b)
152 ret <vscale x 2 x double> %out
159 define <vscale x 16 x i8> @uzp1_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
160 ; CHECK-LABEL: uzp1_i8:
161 ; CHECK-NEXT: uzp1 z0.q, z0.q, z1.q
163 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.uzp1q.nxv16i8(<vscale x 16 x i8> %a,
164 <vscale x 16 x i8> %b)
165 ret <vscale x 16 x i8> %out
168 define <vscale x 8 x i16> @uzp1_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) nounwind {
169 ; CHECK-LABEL: uzp1_i16:
170 ; CHECK-NEXT: uzp1 z0.q, z0.q, z1.q
172 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.uzp1q.nxv8i16(<vscale x 8 x i16> %a,
173 <vscale x 8 x i16> %b)
174 ret <vscale x 8 x i16> %out
177 define <vscale x 4 x i32> @uzp1_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) nounwind {
178 ; CHECK-LABEL: uzp1_i32:
179 ; CHECK-NEXT: uzp1 z0.q, z0.q, z1.q
181 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.uzp1q.nxv4i32(<vscale x 4 x i32> %a,
182 <vscale x 4 x i32> %b)
183 ret <vscale x 4 x i32> %out
186 define <vscale x 2 x i64> @uzp1_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) nounwind {
187 ; CHECK-LABEL: uzp1_i64:
188 ; CHECK-NEXT: uzp1 z0.q, z0.q, z1.q
190 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.uzp1q.nxv2i64(<vscale x 2 x i64> %a,
191 <vscale x 2 x i64> %b)
192 ret <vscale x 2 x i64> %out
195 define <vscale x 8 x half> @uzp1_f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) nounwind {
196 ; CHECK-LABEL: uzp1_f16:
197 ; CHECK-NEXT: uzp1 z0.q, z0.q, z1.q
199 %out = call <vscale x 8 x half> @llvm.aarch64.sve.uzp1q.nxv8f16(<vscale x 8 x half> %a,
200 <vscale x 8 x half> %b)
201 ret <vscale x 8 x half> %out
204 define <vscale x 8 x bfloat> @uzp1_bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) nounwind #0 {
205 ; CHECK-LABEL: uzp1_bf16:
206 ; CHECK-NEXT: uzp1 z0.q, z0.q, z1.q
208 %out = call <vscale x 8 x bfloat> @llvm.aarch64.sve.uzp1q.nxv8bf16(<vscale x 8 x bfloat> %a,
209 <vscale x 8 x bfloat> %b)
210 ret <vscale x 8 x bfloat> %out
213 define <vscale x 4 x float> @uzp1_f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) nounwind {
214 ; CHECK-LABEL: uzp1_f32:
215 ; CHECK-NEXT: uzp1 z0.q, z0.q, z1.q
217 %out = call <vscale x 4 x float> @llvm.aarch64.sve.uzp1q.nxv4f32(<vscale x 4 x float> %a,
218 <vscale x 4 x float> %b)
219 ret <vscale x 4 x float> %out
222 define <vscale x 2 x double> @uzp1_f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) nounwind {
223 ; CHECK-LABEL: uzp1_f64:
224 ; CHECK-NEXT: uzp1 z0.q, z0.q, z1.q
226 %out = call <vscale x 2 x double> @llvm.aarch64.sve.uzp1q.nxv2f64(<vscale x 2 x double> %a,
227 <vscale x 2 x double> %b)
228 ret <vscale x 2 x double> %out
235 define <vscale x 16 x i8> @uzp2_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
236 ; CHECK-LABEL: uzp2_i8:
237 ; CHECK-NEXT: uzp2 z0.q, z0.q, z1.q
239 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.uzp2q.nxv16i8(<vscale x 16 x i8> %a,
240 <vscale x 16 x i8> %b)
241 ret <vscale x 16 x i8> %out
244 define <vscale x 8 x i16> @uzp2_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) nounwind {
245 ; CHECK-LABEL: uzp2_i16:
246 ; CHECK-NEXT: uzp2 z0.q, z0.q, z1.q
248 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.uzp2q.nxv8i16(<vscale x 8 x i16> %a,
249 <vscale x 8 x i16> %b)
250 ret <vscale x 8 x i16> %out
253 define <vscale x 4 x i32> @uzp2_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) nounwind {
254 ; CHECK-LABEL: uzp2_i32:
255 ; CHECK-NEXT: uzp2 z0.q, z0.q, z1.q
257 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.uzp2q.nxv4i32(<vscale x 4 x i32> %a,
258 <vscale x 4 x i32> %b)
259 ret <vscale x 4 x i32> %out
262 define <vscale x 2 x i64> @uzp2_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) nounwind {
263 ; CHECK-LABEL: uzp2_i64:
264 ; CHECK-NEXT: uzp2 z0.q, z0.q, z1.q
266 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.uzp2q.nxv2i64(<vscale x 2 x i64> %a,
267 <vscale x 2 x i64> %b)
268 ret <vscale x 2 x i64> %out
271 define <vscale x 8 x half> @uzp2_f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) nounwind {
272 ; CHECK-LABEL: uzp2_f16:
273 ; CHECK-NEXT: uzp2 z0.q, z0.q, z1.q
275 %out = call <vscale x 8 x half> @llvm.aarch64.sve.uzp2q.nxv8f16(<vscale x 8 x half> %a,
276 <vscale x 8 x half> %b)
277 ret <vscale x 8 x half> %out
280 define <vscale x 8 x bfloat> @uzp2_bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) nounwind #0 {
281 ; CHECK-LABEL: uzp2_bf16:
282 ; CHECK-NEXT: uzp2 z0.q, z0.q, z1.q
284 %out = call <vscale x 8 x bfloat> @llvm.aarch64.sve.uzp2q.nxv8bf16(<vscale x 8 x bfloat> %a,
285 <vscale x 8 x bfloat> %b)
286 ret <vscale x 8 x bfloat> %out
289 define <vscale x 4 x float> @uzp2_f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) nounwind {
290 ; CHECK-LABEL: uzp2_f32:
291 ; CHECK-NEXT: uzp2 z0.q, z0.q, z1.q
293 %out = call <vscale x 4 x float> @llvm.aarch64.sve.uzp2q.nxv4f32(<vscale x 4 x float> %a,
294 <vscale x 4 x float> %b)
295 ret <vscale x 4 x float> %out
298 define <vscale x 2 x double> @uzp2_f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) nounwind {
299 ; CHECK-LABEL: uzp2_f64:
300 ; CHECK-NEXT: uzp2 z0.q, z0.q, z1.q
302 %out = call <vscale x 2 x double> @llvm.aarch64.sve.uzp2q.nxv2f64(<vscale x 2 x double> %a,
303 <vscale x 2 x double> %b)
304 ret <vscale x 2 x double> %out
311 define <vscale x 16 x i8> @zip1_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
312 ; CHECK-LABEL: zip1_i8:
313 ; CHECK-NEXT: zip1 z0.q, z0.q, z1.q
315 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.zip1q.nxv16i8(<vscale x 16 x i8> %a,
316 <vscale x 16 x i8> %b)
317 ret <vscale x 16 x i8> %out
320 define <vscale x 8 x i16> @zip1_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) nounwind {
321 ; CHECK-LABEL: zip1_i16:
322 ; CHECK-NEXT: zip1 z0.q, z0.q, z1.q
324 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.zip1q.nxv8i16(<vscale x 8 x i16> %a,
325 <vscale x 8 x i16> %b)
326 ret <vscale x 8 x i16> %out
329 define <vscale x 4 x i32> @zip1_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) nounwind {
330 ; CHECK-LABEL: zip1_i32:
331 ; CHECK-NEXT: zip1 z0.q, z0.q, z1.q
333 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.zip1q.nxv4i32(<vscale x 4 x i32> %a,
334 <vscale x 4 x i32> %b)
335 ret <vscale x 4 x i32> %out
338 define <vscale x 2 x i64> @zip1_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) nounwind {
339 ; CHECK-LABEL: zip1_i64:
340 ; CHECK-NEXT: zip1 z0.q, z0.q, z1.q
342 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.zip1q.nxv2i64(<vscale x 2 x i64> %a,
343 <vscale x 2 x i64> %b)
344 ret <vscale x 2 x i64> %out
347 define <vscale x 8 x half> @zip1_f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) nounwind {
348 ; CHECK-LABEL: zip1_f16:
349 ; CHECK-NEXT: zip1 z0.q, z0.q, z1.q
351 %out = call <vscale x 8 x half> @llvm.aarch64.sve.zip1q.nxv8f16(<vscale x 8 x half> %a,
352 <vscale x 8 x half> %b)
353 ret <vscale x 8 x half> %out
356 define <vscale x 8 x bfloat> @zip1_bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) nounwind #0 {
357 ; CHECK-LABEL: zip1_bf16:
358 ; CHECK-NEXT: zip1 z0.q, z0.q, z1.q
360 %out = call <vscale x 8 x bfloat> @llvm.aarch64.sve.zip1q.nxv8bf16(<vscale x 8 x bfloat> %a,
361 <vscale x 8 x bfloat> %b)
362 ret <vscale x 8 x bfloat> %out
365 define <vscale x 4 x float> @zip1_f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) nounwind {
366 ; CHECK-LABEL: zip1_f32:
367 ; CHECK-NEXT: zip1 z0.q, z0.q, z1.q
369 %out = call <vscale x 4 x float> @llvm.aarch64.sve.zip1q.nxv4f32(<vscale x 4 x float> %a,
370 <vscale x 4 x float> %b)
371 ret <vscale x 4 x float> %out
374 define <vscale x 2 x double> @zip1_f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) nounwind {
375 ; CHECK-LABEL: zip1_f64:
376 ; CHECK-NEXT: zip1 z0.q, z0.q, z1.q
378 %out = call <vscale x 2 x double> @llvm.aarch64.sve.zip1q.nxv2f64(<vscale x 2 x double> %a,
379 <vscale x 2 x double> %b)
380 ret <vscale x 2 x double> %out
387 define <vscale x 16 x i8> @zip2_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
388 ; CHECK-LABEL: zip2_i8:
389 ; CHECK-NEXT: zip2 z0.q, z0.q, z1.q
391 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.zip2q.nxv16i8(<vscale x 16 x i8> %a,
392 <vscale x 16 x i8> %b)
393 ret <vscale x 16 x i8> %out
396 define <vscale x 8 x i16> @zip2_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) nounwind {
397 ; CHECK-LABEL: zip2_i16:
398 ; CHECK-NEXT: zip2 z0.q, z0.q, z1.q
400 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.zip2q.nxv8i16(<vscale x 8 x i16> %a,
401 <vscale x 8 x i16> %b)
402 ret <vscale x 8 x i16> %out
405 define <vscale x 4 x i32> @zip2_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) nounwind {
406 ; CHECK-LABEL: zip2_i32:
407 ; CHECK-NEXT: zip2 z0.q, z0.q, z1.q
409 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.zip2q.nxv4i32(<vscale x 4 x i32> %a,
410 <vscale x 4 x i32> %b)
411 ret <vscale x 4 x i32> %out
414 define <vscale x 2 x i64> @zip2_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) nounwind {
415 ; CHECK-LABEL: zip2_i64:
416 ; CHECK-NEXT: zip2 z0.q, z0.q, z1.q
418 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.zip2q.nxv2i64(<vscale x 2 x i64> %a,
419 <vscale x 2 x i64> %b)
420 ret <vscale x 2 x i64> %out
423 define <vscale x 8 x half> @zip2_f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) nounwind {
424 ; CHECK-LABEL: zip2_f16:
425 ; CHECK-NEXT: zip2 z0.q, z0.q, z1.q
427 %out = call <vscale x 8 x half> @llvm.aarch64.sve.zip2q.nxv8f16(<vscale x 8 x half> %a,
428 <vscale x 8 x half> %b)
429 ret <vscale x 8 x half> %out
432 define <vscale x 8 x bfloat> @zip2_bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) nounwind #0 {
433 ; CHECK-LABEL: zip2_bf16:
434 ; CHECK-NEXT: zip2 z0.q, z0.q, z1.q
436 %out = call <vscale x 8 x bfloat> @llvm.aarch64.sve.zip2q.nxv8bf16(<vscale x 8 x bfloat> %a,
437 <vscale x 8 x bfloat> %b)
438 ret <vscale x 8 x bfloat> %out
441 define <vscale x 4 x float> @zip2_f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) nounwind {
442 ; CHECK-LABEL: zip2_f32:
443 ; CHECK-NEXT: zip2 z0.q, z0.q, z1.q
445 %out = call <vscale x 4 x float> @llvm.aarch64.sve.zip2q.nxv4f32(<vscale x 4 x float> %a,
446 <vscale x 4 x float> %b)
447 ret <vscale x 4 x float> %out
450 define <vscale x 2 x double> @zip2_f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) nounwind {
451 ; CHECK-LABEL: zip2_f64:
452 ; CHECK-NEXT: zip2 z0.q, z0.q, z1.q
454 %out = call <vscale x 2 x double> @llvm.aarch64.sve.zip2q.nxv2f64(<vscale x 2 x double> %a,
455 <vscale x 2 x double> %b)
456 ret <vscale x 2 x double> %out
460 declare <vscale x 2 x double> @llvm.aarch64.sve.trn1q.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
461 declare <vscale x 2 x i64> @llvm.aarch64.sve.trn1q.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
462 declare <vscale x 4 x float> @llvm.aarch64.sve.trn1q.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
463 declare <vscale x 4 x i32> @llvm.aarch64.sve.trn1q.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
464 declare <vscale x 8 x bfloat> @llvm.aarch64.sve.trn1q.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x bfloat>)
465 declare <vscale x 8 x half> @llvm.aarch64.sve.trn1q.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)
466 declare <vscale x 8 x i16> @llvm.aarch64.sve.trn1q.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
467 declare <vscale x 16 x i8> @llvm.aarch64.sve.trn1q.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
469 declare <vscale x 2 x double> @llvm.aarch64.sve.trn2q.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
470 declare <vscale x 2 x i64> @llvm.aarch64.sve.trn2q.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
471 declare <vscale x 4 x float> @llvm.aarch64.sve.trn2q.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
472 declare <vscale x 4 x i32> @llvm.aarch64.sve.trn2q.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
473 declare <vscale x 8 x bfloat> @llvm.aarch64.sve.trn2q.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x bfloat>)
474 declare <vscale x 8 x half> @llvm.aarch64.sve.trn2q.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)
475 declare <vscale x 8 x i16> @llvm.aarch64.sve.trn2q.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
476 declare <vscale x 16 x i8> @llvm.aarch64.sve.trn2q.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
478 declare <vscale x 2 x double> @llvm.aarch64.sve.uzp1q.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
479 declare <vscale x 2 x i64> @llvm.aarch64.sve.uzp1q.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
480 declare <vscale x 4 x float> @llvm.aarch64.sve.uzp1q.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
481 declare <vscale x 4 x i32> @llvm.aarch64.sve.uzp1q.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
482 declare <vscale x 8 x bfloat> @llvm.aarch64.sve.uzp1q.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x bfloat>)
483 declare <vscale x 8 x half> @llvm.aarch64.sve.uzp1q.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)
484 declare <vscale x 8 x i16> @llvm.aarch64.sve.uzp1q.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
485 declare <vscale x 16 x i8> @llvm.aarch64.sve.uzp1q.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
487 declare <vscale x 2 x double> @llvm.aarch64.sve.uzp2q.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
488 declare <vscale x 2 x i64> @llvm.aarch64.sve.uzp2q.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
489 declare <vscale x 4 x float> @llvm.aarch64.sve.uzp2q.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
490 declare <vscale x 4 x i32> @llvm.aarch64.sve.uzp2q.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
491 declare <vscale x 8 x bfloat> @llvm.aarch64.sve.uzp2q.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x bfloat>)
492 declare <vscale x 8 x half> @llvm.aarch64.sve.uzp2q.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)
493 declare <vscale x 8 x i16> @llvm.aarch64.sve.uzp2q.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
494 declare <vscale x 16 x i8> @llvm.aarch64.sve.uzp2q.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
496 declare <vscale x 2 x double> @llvm.aarch64.sve.zip1q.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
497 declare <vscale x 2 x i64> @llvm.aarch64.sve.zip1q.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
498 declare <vscale x 4 x float> @llvm.aarch64.sve.zip1q.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
499 declare <vscale x 4 x i32> @llvm.aarch64.sve.zip1q.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
500 declare <vscale x 8 x bfloat> @llvm.aarch64.sve.zip1q.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x bfloat>)
501 declare <vscale x 8 x half> @llvm.aarch64.sve.zip1q.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)
502 declare <vscale x 8 x i16> @llvm.aarch64.sve.zip1q.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
503 declare <vscale x 16 x i8> @llvm.aarch64.sve.zip1q.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
505 declare <vscale x 2 x double> @llvm.aarch64.sve.zip2q.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
506 declare <vscale x 2 x i64> @llvm.aarch64.sve.zip2q.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
507 declare <vscale x 4 x float> @llvm.aarch64.sve.zip2q.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
508 declare <vscale x 4 x i32> @llvm.aarch64.sve.zip2q.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
509 declare <vscale x 8 x bfloat> @llvm.aarch64.sve.zip2q.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x bfloat>)
510 declare <vscale x 8 x half> @llvm.aarch64.sve.zip2q.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)
511 declare <vscale x 8 x i16> @llvm.aarch64.sve.zip2q.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
512 declare <vscale x 16 x i8> @llvm.aarch64.sve.zip2q.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
514 ; +bf16 is required for the bfloat version.
515 attributes #0 = { "target-features"="+sve,+fp64mm,+bf16" }