1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+sve,+f64mm < %s | FileCheck %s
8 define <vscale x 16 x i8> @trn1_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
9 ; CHECK-LABEL: trn1_i8:
11 ; CHECK-NEXT: trn1 z0.q, z0.q, z1.q
13 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.trn1q.nxv16i8(<vscale x 16 x i8> %a,
14 <vscale x 16 x i8> %b)
15 ret <vscale x 16 x i8> %out
18 define <vscale x 8 x i16> @trn1_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) nounwind {
19 ; CHECK-LABEL: trn1_i16:
21 ; CHECK-NEXT: trn1 z0.q, z0.q, z1.q
23 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.trn1q.nxv8i16(<vscale x 8 x i16> %a,
24 <vscale x 8 x i16> %b)
25 ret <vscale x 8 x i16> %out
28 define <vscale x 4 x i32> @trn1_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) nounwind {
29 ; CHECK-LABEL: trn1_i32:
31 ; CHECK-NEXT: trn1 z0.q, z0.q, z1.q
33 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.trn1q.nxv4i32(<vscale x 4 x i32> %a,
34 <vscale x 4 x i32> %b)
35 ret <vscale x 4 x i32> %out
38 define <vscale x 2 x i64> @trn1_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) nounwind {
39 ; CHECK-LABEL: trn1_i64:
41 ; CHECK-NEXT: trn1 z0.q, z0.q, z1.q
43 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.trn1q.nxv2i64(<vscale x 2 x i64> %a,
44 <vscale x 2 x i64> %b)
45 ret <vscale x 2 x i64> %out
48 define <vscale x 8 x half> @trn1_f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) nounwind {
49 ; CHECK-LABEL: trn1_f16:
51 ; CHECK-NEXT: trn1 z0.q, z0.q, z1.q
53 %out = call <vscale x 8 x half> @llvm.aarch64.sve.trn1q.nxv8f16(<vscale x 8 x half> %a,
54 <vscale x 8 x half> %b)
55 ret <vscale x 8 x half> %out
58 define <vscale x 8 x bfloat> @trn1_bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) nounwind #0 {
59 ; CHECK-LABEL: trn1_bf16:
61 ; CHECK-NEXT: trn1 z0.q, z0.q, z1.q
63 %out = call <vscale x 8 x bfloat> @llvm.aarch64.sve.trn1q.nxv8bf16(<vscale x 8 x bfloat> %a,
64 <vscale x 8 x bfloat> %b)
65 ret <vscale x 8 x bfloat> %out
68 define <vscale x 4 x float> @trn1_f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) nounwind {
69 ; CHECK-LABEL: trn1_f32:
71 ; CHECK-NEXT: trn1 z0.q, z0.q, z1.q
73 %out = call <vscale x 4 x float> @llvm.aarch64.sve.trn1q.nxv4f32(<vscale x 4 x float> %a,
74 <vscale x 4 x float> %b)
75 ret <vscale x 4 x float> %out
78 define <vscale x 2 x double> @trn1_f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) nounwind {
79 ; CHECK-LABEL: trn1_f64:
81 ; CHECK-NEXT: trn1 z0.q, z0.q, z1.q
83 %out = call <vscale x 2 x double> @llvm.aarch64.sve.trn1q.nxv2f64(<vscale x 2 x double> %a,
84 <vscale x 2 x double> %b)
85 ret <vscale x 2 x double> %out
92 define <vscale x 16 x i8> @trn2_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
93 ; CHECK-LABEL: trn2_i8:
95 ; CHECK-NEXT: trn2 z0.q, z0.q, z1.q
97 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.trn2q.nxv16i8(<vscale x 16 x i8> %a,
98 <vscale x 16 x i8> %b)
99 ret <vscale x 16 x i8> %out
102 define <vscale x 8 x i16> @trn2_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) nounwind {
103 ; CHECK-LABEL: trn2_i16:
105 ; CHECK-NEXT: trn2 z0.q, z0.q, z1.q
107 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.trn2q.nxv8i16(<vscale x 8 x i16> %a,
108 <vscale x 8 x i16> %b)
109 ret <vscale x 8 x i16> %out
112 define <vscale x 4 x i32> @trn2_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) nounwind {
113 ; CHECK-LABEL: trn2_i32:
115 ; CHECK-NEXT: trn2 z0.q, z0.q, z1.q
117 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.trn2q.nxv4i32(<vscale x 4 x i32> %a,
118 <vscale x 4 x i32> %b)
119 ret <vscale x 4 x i32> %out
122 define <vscale x 2 x i64> @trn2_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) nounwind {
123 ; CHECK-LABEL: trn2_i64:
125 ; CHECK-NEXT: trn2 z0.q, z0.q, z1.q
127 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.trn2q.nxv2i64(<vscale x 2 x i64> %a,
128 <vscale x 2 x i64> %b)
129 ret <vscale x 2 x i64> %out
132 define <vscale x 8 x half> @trn2_f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) nounwind {
133 ; CHECK-LABEL: trn2_f16:
135 ; CHECK-NEXT: trn2 z0.q, z0.q, z1.q
137 %out = call <vscale x 8 x half> @llvm.aarch64.sve.trn2q.nxv8f16(<vscale x 8 x half> %a,
138 <vscale x 8 x half> %b)
139 ret <vscale x 8 x half> %out
142 define <vscale x 8 x bfloat> @trn2_bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) nounwind #0 {
143 ; CHECK-LABEL: trn2_bf16:
145 ; CHECK-NEXT: trn2 z0.q, z0.q, z1.q
147 %out = call <vscale x 8 x bfloat> @llvm.aarch64.sve.trn2q.nxv8bf16(<vscale x 8 x bfloat> %a,
148 <vscale x 8 x bfloat> %b)
149 ret <vscale x 8 x bfloat> %out
152 define <vscale x 4 x float> @trn2_f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) nounwind {
153 ; CHECK-LABEL: trn2_f32:
155 ; CHECK-NEXT: trn2 z0.q, z0.q, z1.q
157 %out = call <vscale x 4 x float> @llvm.aarch64.sve.trn2q.nxv4f32(<vscale x 4 x float> %a,
158 <vscale x 4 x float> %b)
159 ret <vscale x 4 x float> %out
162 define <vscale x 2 x double> @trn2_f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) nounwind {
163 ; CHECK-LABEL: trn2_f64:
165 ; CHECK-NEXT: trn2 z0.q, z0.q, z1.q
167 %out = call <vscale x 2 x double> @llvm.aarch64.sve.trn2q.nxv2f64(<vscale x 2 x double> %a,
168 <vscale x 2 x double> %b)
169 ret <vscale x 2 x double> %out
176 define <vscale x 16 x i8> @uzp1_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
177 ; CHECK-LABEL: uzp1_i8:
179 ; CHECK-NEXT: uzp1 z0.q, z0.q, z1.q
181 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.uzp1q.nxv16i8(<vscale x 16 x i8> %a,
182 <vscale x 16 x i8> %b)
183 ret <vscale x 16 x i8> %out
186 define <vscale x 8 x i16> @uzp1_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) nounwind {
187 ; CHECK-LABEL: uzp1_i16:
189 ; CHECK-NEXT: uzp1 z0.q, z0.q, z1.q
191 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.uzp1q.nxv8i16(<vscale x 8 x i16> %a,
192 <vscale x 8 x i16> %b)
193 ret <vscale x 8 x i16> %out
196 define <vscale x 4 x i32> @uzp1_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) nounwind {
197 ; CHECK-LABEL: uzp1_i32:
199 ; CHECK-NEXT: uzp1 z0.q, z0.q, z1.q
201 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.uzp1q.nxv4i32(<vscale x 4 x i32> %a,
202 <vscale x 4 x i32> %b)
203 ret <vscale x 4 x i32> %out
206 define <vscale x 2 x i64> @uzp1_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) nounwind {
207 ; CHECK-LABEL: uzp1_i64:
209 ; CHECK-NEXT: uzp1 z0.q, z0.q, z1.q
211 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.uzp1q.nxv2i64(<vscale x 2 x i64> %a,
212 <vscale x 2 x i64> %b)
213 ret <vscale x 2 x i64> %out
216 define <vscale x 8 x half> @uzp1_f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) nounwind {
217 ; CHECK-LABEL: uzp1_f16:
219 ; CHECK-NEXT: uzp1 z0.q, z0.q, z1.q
221 %out = call <vscale x 8 x half> @llvm.aarch64.sve.uzp1q.nxv8f16(<vscale x 8 x half> %a,
222 <vscale x 8 x half> %b)
223 ret <vscale x 8 x half> %out
226 define <vscale x 8 x bfloat> @uzp1_bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) nounwind #0 {
227 ; CHECK-LABEL: uzp1_bf16:
229 ; CHECK-NEXT: uzp1 z0.q, z0.q, z1.q
231 %out = call <vscale x 8 x bfloat> @llvm.aarch64.sve.uzp1q.nxv8bf16(<vscale x 8 x bfloat> %a,
232 <vscale x 8 x bfloat> %b)
233 ret <vscale x 8 x bfloat> %out
236 define <vscale x 4 x float> @uzp1_f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) nounwind {
237 ; CHECK-LABEL: uzp1_f32:
239 ; CHECK-NEXT: uzp1 z0.q, z0.q, z1.q
241 %out = call <vscale x 4 x float> @llvm.aarch64.sve.uzp1q.nxv4f32(<vscale x 4 x float> %a,
242 <vscale x 4 x float> %b)
243 ret <vscale x 4 x float> %out
246 define <vscale x 2 x double> @uzp1_f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) nounwind {
247 ; CHECK-LABEL: uzp1_f64:
249 ; CHECK-NEXT: uzp1 z0.q, z0.q, z1.q
251 %out = call <vscale x 2 x double> @llvm.aarch64.sve.uzp1q.nxv2f64(<vscale x 2 x double> %a,
252 <vscale x 2 x double> %b)
253 ret <vscale x 2 x double> %out
260 define <vscale x 16 x i8> @uzp2_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
261 ; CHECK-LABEL: uzp2_i8:
263 ; CHECK-NEXT: uzp2 z0.q, z0.q, z1.q
265 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.uzp2q.nxv16i8(<vscale x 16 x i8> %a,
266 <vscale x 16 x i8> %b)
267 ret <vscale x 16 x i8> %out
270 define <vscale x 8 x i16> @uzp2_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) nounwind {
271 ; CHECK-LABEL: uzp2_i16:
273 ; CHECK-NEXT: uzp2 z0.q, z0.q, z1.q
275 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.uzp2q.nxv8i16(<vscale x 8 x i16> %a,
276 <vscale x 8 x i16> %b)
277 ret <vscale x 8 x i16> %out
280 define <vscale x 4 x i32> @uzp2_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) nounwind {
281 ; CHECK-LABEL: uzp2_i32:
283 ; CHECK-NEXT: uzp2 z0.q, z0.q, z1.q
285 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.uzp2q.nxv4i32(<vscale x 4 x i32> %a,
286 <vscale x 4 x i32> %b)
287 ret <vscale x 4 x i32> %out
290 define <vscale x 2 x i64> @uzp2_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) nounwind {
291 ; CHECK-LABEL: uzp2_i64:
293 ; CHECK-NEXT: uzp2 z0.q, z0.q, z1.q
295 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.uzp2q.nxv2i64(<vscale x 2 x i64> %a,
296 <vscale x 2 x i64> %b)
297 ret <vscale x 2 x i64> %out
300 define <vscale x 8 x half> @uzp2_f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) nounwind {
301 ; CHECK-LABEL: uzp2_f16:
303 ; CHECK-NEXT: uzp2 z0.q, z0.q, z1.q
305 %out = call <vscale x 8 x half> @llvm.aarch64.sve.uzp2q.nxv8f16(<vscale x 8 x half> %a,
306 <vscale x 8 x half> %b)
307 ret <vscale x 8 x half> %out
310 define <vscale x 8 x bfloat> @uzp2_bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) nounwind #0 {
311 ; CHECK-LABEL: uzp2_bf16:
313 ; CHECK-NEXT: uzp2 z0.q, z0.q, z1.q
315 %out = call <vscale x 8 x bfloat> @llvm.aarch64.sve.uzp2q.nxv8bf16(<vscale x 8 x bfloat> %a,
316 <vscale x 8 x bfloat> %b)
317 ret <vscale x 8 x bfloat> %out
320 define <vscale x 4 x float> @uzp2_f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) nounwind {
321 ; CHECK-LABEL: uzp2_f32:
323 ; CHECK-NEXT: uzp2 z0.q, z0.q, z1.q
325 %out = call <vscale x 4 x float> @llvm.aarch64.sve.uzp2q.nxv4f32(<vscale x 4 x float> %a,
326 <vscale x 4 x float> %b)
327 ret <vscale x 4 x float> %out
330 define <vscale x 2 x double> @uzp2_f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) nounwind {
331 ; CHECK-LABEL: uzp2_f64:
333 ; CHECK-NEXT: uzp2 z0.q, z0.q, z1.q
335 %out = call <vscale x 2 x double> @llvm.aarch64.sve.uzp2q.nxv2f64(<vscale x 2 x double> %a,
336 <vscale x 2 x double> %b)
337 ret <vscale x 2 x double> %out
344 define <vscale x 16 x i8> @zip1_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
345 ; CHECK-LABEL: zip1_i8:
347 ; CHECK-NEXT: zip1 z0.q, z0.q, z1.q
349 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.zip1q.nxv16i8(<vscale x 16 x i8> %a,
350 <vscale x 16 x i8> %b)
351 ret <vscale x 16 x i8> %out
354 define <vscale x 8 x i16> @zip1_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) nounwind {
355 ; CHECK-LABEL: zip1_i16:
357 ; CHECK-NEXT: zip1 z0.q, z0.q, z1.q
359 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.zip1q.nxv8i16(<vscale x 8 x i16> %a,
360 <vscale x 8 x i16> %b)
361 ret <vscale x 8 x i16> %out
364 define <vscale x 4 x i32> @zip1_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) nounwind {
365 ; CHECK-LABEL: zip1_i32:
367 ; CHECK-NEXT: zip1 z0.q, z0.q, z1.q
369 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.zip1q.nxv4i32(<vscale x 4 x i32> %a,
370 <vscale x 4 x i32> %b)
371 ret <vscale x 4 x i32> %out
374 define <vscale x 2 x i64> @zip1_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) nounwind {
375 ; CHECK-LABEL: zip1_i64:
377 ; CHECK-NEXT: zip1 z0.q, z0.q, z1.q
379 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.zip1q.nxv2i64(<vscale x 2 x i64> %a,
380 <vscale x 2 x i64> %b)
381 ret <vscale x 2 x i64> %out
384 define <vscale x 8 x half> @zip1_f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) nounwind {
385 ; CHECK-LABEL: zip1_f16:
387 ; CHECK-NEXT: zip1 z0.q, z0.q, z1.q
389 %out = call <vscale x 8 x half> @llvm.aarch64.sve.zip1q.nxv8f16(<vscale x 8 x half> %a,
390 <vscale x 8 x half> %b)
391 ret <vscale x 8 x half> %out
394 define <vscale x 8 x bfloat> @zip1_bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) nounwind #0 {
395 ; CHECK-LABEL: zip1_bf16:
397 ; CHECK-NEXT: zip1 z0.q, z0.q, z1.q
399 %out = call <vscale x 8 x bfloat> @llvm.aarch64.sve.zip1q.nxv8bf16(<vscale x 8 x bfloat> %a,
400 <vscale x 8 x bfloat> %b)
401 ret <vscale x 8 x bfloat> %out
404 define <vscale x 4 x float> @zip1_f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) nounwind {
405 ; CHECK-LABEL: zip1_f32:
407 ; CHECK-NEXT: zip1 z0.q, z0.q, z1.q
409 %out = call <vscale x 4 x float> @llvm.aarch64.sve.zip1q.nxv4f32(<vscale x 4 x float> %a,
410 <vscale x 4 x float> %b)
411 ret <vscale x 4 x float> %out
414 define <vscale x 2 x double> @zip1_f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) nounwind {
415 ; CHECK-LABEL: zip1_f64:
417 ; CHECK-NEXT: zip1 z0.q, z0.q, z1.q
419 %out = call <vscale x 2 x double> @llvm.aarch64.sve.zip1q.nxv2f64(<vscale x 2 x double> %a,
420 <vscale x 2 x double> %b)
421 ret <vscale x 2 x double> %out
428 define <vscale x 16 x i8> @zip2_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
429 ; CHECK-LABEL: zip2_i8:
431 ; CHECK-NEXT: zip2 z0.q, z0.q, z1.q
433 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.zip2q.nxv16i8(<vscale x 16 x i8> %a,
434 <vscale x 16 x i8> %b)
435 ret <vscale x 16 x i8> %out
438 define <vscale x 8 x i16> @zip2_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) nounwind {
439 ; CHECK-LABEL: zip2_i16:
441 ; CHECK-NEXT: zip2 z0.q, z0.q, z1.q
443 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.zip2q.nxv8i16(<vscale x 8 x i16> %a,
444 <vscale x 8 x i16> %b)
445 ret <vscale x 8 x i16> %out
448 define <vscale x 4 x i32> @zip2_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) nounwind {
449 ; CHECK-LABEL: zip2_i32:
451 ; CHECK-NEXT: zip2 z0.q, z0.q, z1.q
453 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.zip2q.nxv4i32(<vscale x 4 x i32> %a,
454 <vscale x 4 x i32> %b)
455 ret <vscale x 4 x i32> %out
458 define <vscale x 2 x i64> @zip2_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) nounwind {
459 ; CHECK-LABEL: zip2_i64:
461 ; CHECK-NEXT: zip2 z0.q, z0.q, z1.q
463 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.zip2q.nxv2i64(<vscale x 2 x i64> %a,
464 <vscale x 2 x i64> %b)
465 ret <vscale x 2 x i64> %out
468 define <vscale x 8 x half> @zip2_f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) nounwind {
469 ; CHECK-LABEL: zip2_f16:
471 ; CHECK-NEXT: zip2 z0.q, z0.q, z1.q
473 %out = call <vscale x 8 x half> @llvm.aarch64.sve.zip2q.nxv8f16(<vscale x 8 x half> %a,
474 <vscale x 8 x half> %b)
475 ret <vscale x 8 x half> %out
478 define <vscale x 8 x bfloat> @zip2_bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) nounwind #0 {
479 ; CHECK-LABEL: zip2_bf16:
481 ; CHECK-NEXT: zip2 z0.q, z0.q, z1.q
483 %out = call <vscale x 8 x bfloat> @llvm.aarch64.sve.zip2q.nxv8bf16(<vscale x 8 x bfloat> %a,
484 <vscale x 8 x bfloat> %b)
485 ret <vscale x 8 x bfloat> %out
488 define <vscale x 4 x float> @zip2_f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) nounwind {
489 ; CHECK-LABEL: zip2_f32:
491 ; CHECK-NEXT: zip2 z0.q, z0.q, z1.q
493 %out = call <vscale x 4 x float> @llvm.aarch64.sve.zip2q.nxv4f32(<vscale x 4 x float> %a,
494 <vscale x 4 x float> %b)
495 ret <vscale x 4 x float> %out
498 define <vscale x 2 x double> @zip2_f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) nounwind {
499 ; CHECK-LABEL: zip2_f64:
501 ; CHECK-NEXT: zip2 z0.q, z0.q, z1.q
503 %out = call <vscale x 2 x double> @llvm.aarch64.sve.zip2q.nxv2f64(<vscale x 2 x double> %a,
504 <vscale x 2 x double> %b)
505 ret <vscale x 2 x double> %out
509 declare <vscale x 2 x double> @llvm.aarch64.sve.trn1q.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
510 declare <vscale x 2 x i64> @llvm.aarch64.sve.trn1q.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
511 declare <vscale x 4 x float> @llvm.aarch64.sve.trn1q.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
512 declare <vscale x 4 x i32> @llvm.aarch64.sve.trn1q.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
513 declare <vscale x 8 x bfloat> @llvm.aarch64.sve.trn1q.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x bfloat>)
514 declare <vscale x 8 x half> @llvm.aarch64.sve.trn1q.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)
515 declare <vscale x 8 x i16> @llvm.aarch64.sve.trn1q.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
516 declare <vscale x 16 x i8> @llvm.aarch64.sve.trn1q.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
518 declare <vscale x 2 x double> @llvm.aarch64.sve.trn2q.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
519 declare <vscale x 2 x i64> @llvm.aarch64.sve.trn2q.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
520 declare <vscale x 4 x float> @llvm.aarch64.sve.trn2q.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
521 declare <vscale x 4 x i32> @llvm.aarch64.sve.trn2q.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
522 declare <vscale x 8 x bfloat> @llvm.aarch64.sve.trn2q.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x bfloat>)
523 declare <vscale x 8 x half> @llvm.aarch64.sve.trn2q.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)
524 declare <vscale x 8 x i16> @llvm.aarch64.sve.trn2q.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
525 declare <vscale x 16 x i8> @llvm.aarch64.sve.trn2q.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
527 declare <vscale x 2 x double> @llvm.aarch64.sve.uzp1q.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
528 declare <vscale x 2 x i64> @llvm.aarch64.sve.uzp1q.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
529 declare <vscale x 4 x float> @llvm.aarch64.sve.uzp1q.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
530 declare <vscale x 4 x i32> @llvm.aarch64.sve.uzp1q.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
531 declare <vscale x 8 x bfloat> @llvm.aarch64.sve.uzp1q.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x bfloat>)
532 declare <vscale x 8 x half> @llvm.aarch64.sve.uzp1q.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)
533 declare <vscale x 8 x i16> @llvm.aarch64.sve.uzp1q.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
534 declare <vscale x 16 x i8> @llvm.aarch64.sve.uzp1q.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
536 declare <vscale x 2 x double> @llvm.aarch64.sve.uzp2q.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
537 declare <vscale x 2 x i64> @llvm.aarch64.sve.uzp2q.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
538 declare <vscale x 4 x float> @llvm.aarch64.sve.uzp2q.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
539 declare <vscale x 4 x i32> @llvm.aarch64.sve.uzp2q.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
540 declare <vscale x 8 x bfloat> @llvm.aarch64.sve.uzp2q.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x bfloat>)
541 declare <vscale x 8 x half> @llvm.aarch64.sve.uzp2q.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)
542 declare <vscale x 8 x i16> @llvm.aarch64.sve.uzp2q.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
543 declare <vscale x 16 x i8> @llvm.aarch64.sve.uzp2q.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
545 declare <vscale x 2 x double> @llvm.aarch64.sve.zip1q.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
546 declare <vscale x 2 x i64> @llvm.aarch64.sve.zip1q.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
547 declare <vscale x 4 x float> @llvm.aarch64.sve.zip1q.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
548 declare <vscale x 4 x i32> @llvm.aarch64.sve.zip1q.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
549 declare <vscale x 8 x bfloat> @llvm.aarch64.sve.zip1q.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x bfloat>)
550 declare <vscale x 8 x half> @llvm.aarch64.sve.zip1q.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)
551 declare <vscale x 8 x i16> @llvm.aarch64.sve.zip1q.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
552 declare <vscale x 16 x i8> @llvm.aarch64.sve.zip1q.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
554 declare <vscale x 2 x double> @llvm.aarch64.sve.zip2q.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
555 declare <vscale x 2 x i64> @llvm.aarch64.sve.zip2q.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
556 declare <vscale x 4 x float> @llvm.aarch64.sve.zip2q.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
557 declare <vscale x 4 x i32> @llvm.aarch64.sve.zip2q.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
558 declare <vscale x 8 x bfloat> @llvm.aarch64.sve.zip2q.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x bfloat>)
559 declare <vscale x 8 x half> @llvm.aarch64.sve.zip2q.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)
560 declare <vscale x 8 x i16> @llvm.aarch64.sve.zip2q.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
561 declare <vscale x 16 x i8> @llvm.aarch64.sve.zip2q.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
563 ; +bf16 is required for the bfloat version.
564 attributes #0 = { "target-features"="+sve,+f64mm,+bf16" }