1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s
4 %struct.int8x8x2_t = type { [2 x <8 x i8>] }
5 %struct.int16x4x2_t = type { [2 x <4 x i16>] }
6 %struct.int32x2x2_t = type { [2 x <2 x i32>] }
7 %struct.uint8x8x2_t = type { [2 x <8 x i8>] }
8 %struct.uint16x4x2_t = type { [2 x <4 x i16>] }
9 %struct.uint32x2x2_t = type { [2 x <2 x i32>] }
10 %struct.float32x2x2_t = type { [2 x <2 x float>] }
11 %struct.poly8x8x2_t = type { [2 x <8 x i8>] }
12 %struct.poly16x4x2_t = type { [2 x <4 x i16>] }
13 %struct.int8x16x2_t = type { [2 x <16 x i8>] }
14 %struct.int16x8x2_t = type { [2 x <8 x i16>] }
15 %struct.int32x4x2_t = type { [2 x <4 x i32>] }
16 %struct.uint8x16x2_t = type { [2 x <16 x i8>] }
17 %struct.uint16x8x2_t = type { [2 x <8 x i16>] }
18 %struct.uint32x4x2_t = type { [2 x <4 x i32>] }
19 %struct.float32x4x2_t = type { [2 x <4 x float>] }
20 %struct.poly8x16x2_t = type { [2 x <16 x i8>] }
21 %struct.poly16x8x2_t = type { [2 x <8 x i16>] }
23 define <8 x i8> @test_vuzp1_s8(<8 x i8> %a, <8 x i8> %b) {
24 ; CHECK-LABEL: test_vuzp1_s8:
25 ; CHECK: // %bb.0: // %entry
26 ; CHECK-NEXT: uzp1 v0.8b, v0.8b, v1.8b
29 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
30 ret <8 x i8> %shuffle.i
33 define <16 x i8> @test_vuzp1q_s8(<16 x i8> %a, <16 x i8> %b) {
34 ; CHECK-LABEL: test_vuzp1q_s8:
35 ; CHECK: // %bb.0: // %entry
36 ; CHECK-NEXT: uzp1 v0.16b, v0.16b, v1.16b
39 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
40 ret <16 x i8> %shuffle.i
43 define <4 x i16> @test_vuzp1_s16(<4 x i16> %a, <4 x i16> %b) {
44 ; CHECK-LABEL: test_vuzp1_s16:
45 ; CHECK: // %bb.0: // %entry
46 ; CHECK-NEXT: uzp1 v0.4h, v0.4h, v1.4h
49 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
50 ret <4 x i16> %shuffle.i
53 define <8 x i16> @test_vuzp1q_s16(<8 x i16> %a, <8 x i16> %b) {
54 ; CHECK-LABEL: test_vuzp1q_s16:
55 ; CHECK: // %bb.0: // %entry
56 ; CHECK-NEXT: uzp1 v0.8h, v0.8h, v1.8h
59 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
60 ret <8 x i16> %shuffle.i
63 define <2 x i32> @test_vuzp1_s32(<2 x i32> %a, <2 x i32> %b) {
64 ; CHECK-LABEL: test_vuzp1_s32:
65 ; CHECK: // %bb.0: // %entry
66 ; CHECK-NEXT: zip1 v0.2s, v0.2s, v1.2s
69 %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
70 ret <2 x i32> %shuffle.i
73 define <4 x i32> @test_vuzp1q_s32(<4 x i32> %a, <4 x i32> %b) {
74 ; CHECK-LABEL: test_vuzp1q_s32:
75 ; CHECK: // %bb.0: // %entry
76 ; CHECK-NEXT: uzp1 v0.4s, v0.4s, v1.4s
79 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
80 ret <4 x i32> %shuffle.i
83 define <2 x i64> @test_vuzp1q_s64(<2 x i64> %a, <2 x i64> %b) {
84 ; CHECK-LABEL: test_vuzp1q_s64:
85 ; CHECK: // %bb.0: // %entry
86 ; CHECK-NEXT: zip1 v0.2d, v0.2d, v1.2d
89 %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 2>
90 ret <2 x i64> %shuffle.i
93 define <8 x i8> @test_vuzp1_u8(<8 x i8> %a, <8 x i8> %b) {
94 ; CHECK-LABEL: test_vuzp1_u8:
95 ; CHECK: // %bb.0: // %entry
96 ; CHECK-NEXT: uzp1 v0.8b, v0.8b, v1.8b
99 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
100 ret <8 x i8> %shuffle.i
103 define <16 x i8> @test_vuzp1q_u8(<16 x i8> %a, <16 x i8> %b) {
104 ; CHECK-LABEL: test_vuzp1q_u8:
105 ; CHECK: // %bb.0: // %entry
106 ; CHECK-NEXT: uzp1 v0.16b, v0.16b, v1.16b
109 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
110 ret <16 x i8> %shuffle.i
113 define <4 x i16> @test_vuzp1_u16(<4 x i16> %a, <4 x i16> %b) {
114 ; CHECK-LABEL: test_vuzp1_u16:
115 ; CHECK: // %bb.0: // %entry
116 ; CHECK-NEXT: uzp1 v0.4h, v0.4h, v1.4h
119 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
120 ret <4 x i16> %shuffle.i
123 define <8 x i16> @test_vuzp1q_u16(<8 x i16> %a, <8 x i16> %b) {
124 ; CHECK-LABEL: test_vuzp1q_u16:
125 ; CHECK: // %bb.0: // %entry
126 ; CHECK-NEXT: uzp1 v0.8h, v0.8h, v1.8h
129 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
130 ret <8 x i16> %shuffle.i
133 define <2 x i32> @test_vuzp1_u32(<2 x i32> %a, <2 x i32> %b) {
134 ; CHECK-LABEL: test_vuzp1_u32:
135 ; CHECK: // %bb.0: // %entry
136 ; CHECK-NEXT: zip1 v0.2s, v0.2s, v1.2s
139 %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
140 ret <2 x i32> %shuffle.i
143 define <4 x i32> @test_vuzp1q_u32(<4 x i32> %a, <4 x i32> %b) {
144 ; CHECK-LABEL: test_vuzp1q_u32:
145 ; CHECK: // %bb.0: // %entry
146 ; CHECK-NEXT: uzp1 v0.4s, v0.4s, v1.4s
149 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
150 ret <4 x i32> %shuffle.i
153 define <2 x i64> @test_vuzp1q_u64(<2 x i64> %a, <2 x i64> %b) {
154 ; CHECK-LABEL: test_vuzp1q_u64:
155 ; CHECK: // %bb.0: // %entry
156 ; CHECK-NEXT: zip1 v0.2d, v0.2d, v1.2d
159 %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 2>
160 ret <2 x i64> %shuffle.i
163 define <2 x float> @test_vuzp1_f32(<2 x float> %a, <2 x float> %b) {
164 ; CHECK-LABEL: test_vuzp1_f32:
165 ; CHECK: // %bb.0: // %entry
166 ; CHECK-NEXT: zip1 v0.2s, v0.2s, v1.2s
169 %shuffle.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 0, i32 2>
170 ret <2 x float> %shuffle.i
173 define <4 x float> @test_vuzp1q_f32(<4 x float> %a, <4 x float> %b) {
174 ; CHECK-LABEL: test_vuzp1q_f32:
175 ; CHECK: // %bb.0: // %entry
176 ; CHECK-NEXT: uzp1 v0.4s, v0.4s, v1.4s
179 %shuffle.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
180 ret <4 x float> %shuffle.i
183 define <2 x double> @test_vuzp1q_f64(<2 x double> %a, <2 x double> %b) {
184 ; CHECK-LABEL: test_vuzp1q_f64:
185 ; CHECK: // %bb.0: // %entry
186 ; CHECK-NEXT: zip1 v0.2d, v0.2d, v1.2d
189 %shuffle.i = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 2>
190 ret <2 x double> %shuffle.i
193 define <8 x i8> @test_vuzp1_p8(<8 x i8> %a, <8 x i8> %b) {
194 ; CHECK-LABEL: test_vuzp1_p8:
195 ; CHECK: // %bb.0: // %entry
196 ; CHECK-NEXT: uzp1 v0.8b, v0.8b, v1.8b
199 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
200 ret <8 x i8> %shuffle.i
203 define <16 x i8> @test_vuzp1q_p8(<16 x i8> %a, <16 x i8> %b) {
204 ; CHECK-LABEL: test_vuzp1q_p8:
205 ; CHECK: // %bb.0: // %entry
206 ; CHECK-NEXT: uzp1 v0.16b, v0.16b, v1.16b
209 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
210 ret <16 x i8> %shuffle.i
213 define <4 x i16> @test_vuzp1_p16(<4 x i16> %a, <4 x i16> %b) {
214 ; CHECK-LABEL: test_vuzp1_p16:
215 ; CHECK: // %bb.0: // %entry
216 ; CHECK-NEXT: uzp1 v0.4h, v0.4h, v1.4h
219 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
220 ret <4 x i16> %shuffle.i
223 define <8 x i16> @test_vuzp1q_p16(<8 x i16> %a, <8 x i16> %b) {
224 ; CHECK-LABEL: test_vuzp1q_p16:
225 ; CHECK: // %bb.0: // %entry
226 ; CHECK-NEXT: uzp1 v0.8h, v0.8h, v1.8h
229 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
230 ret <8 x i16> %shuffle.i
233 define <8 x i8> @test_vuzp2_s8(<8 x i8> %a, <8 x i8> %b) {
234 ; CHECK-LABEL: test_vuzp2_s8:
235 ; CHECK: // %bb.0: // %entry
236 ; CHECK-NEXT: uzp2 v0.8b, v0.8b, v1.8b
239 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
240 ret <8 x i8> %shuffle.i
243 define <16 x i8> @test_vuzp2q_s8(<16 x i8> %a, <16 x i8> %b) {
244 ; CHECK-LABEL: test_vuzp2q_s8:
245 ; CHECK: // %bb.0: // %entry
246 ; CHECK-NEXT: uzp2 v0.16b, v0.16b, v1.16b
249 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
250 ret <16 x i8> %shuffle.i
253 define <4 x i16> @test_vuzp2_s16(<4 x i16> %a, <4 x i16> %b) {
254 ; CHECK-LABEL: test_vuzp2_s16:
255 ; CHECK: // %bb.0: // %entry
256 ; CHECK-NEXT: uzp2 v0.4h, v0.4h, v1.4h
259 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
260 ret <4 x i16> %shuffle.i
263 define <8 x i16> @test_vuzp2q_s16(<8 x i16> %a, <8 x i16> %b) {
264 ; CHECK-LABEL: test_vuzp2q_s16:
265 ; CHECK: // %bb.0: // %entry
266 ; CHECK-NEXT: uzp2 v0.8h, v0.8h, v1.8h
269 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
270 ret <8 x i16> %shuffle.i
273 define <2 x i32> @test_vuzp2_s32(<2 x i32> %a, <2 x i32> %b) {
274 ; CHECK-LABEL: test_vuzp2_s32:
275 ; CHECK: // %bb.0: // %entry
276 ; CHECK-NEXT: zip2 v0.2s, v0.2s, v1.2s
279 %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
280 ret <2 x i32> %shuffle.i
283 define <4 x i32> @test_vuzp2q_s32(<4 x i32> %a, <4 x i32> %b) {
284 ; CHECK-LABEL: test_vuzp2q_s32:
285 ; CHECK: // %bb.0: // %entry
286 ; CHECK-NEXT: uzp2 v0.4s, v0.4s, v1.4s
289 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
290 ret <4 x i32> %shuffle.i
293 define <2 x i64> @test_vuzp2q_s64(<2 x i64> %a, <2 x i64> %b) {
294 ; CHECK-LABEL: test_vuzp2q_s64:
295 ; CHECK: // %bb.0: // %entry
296 ; CHECK-NEXT: zip2 v0.2d, v0.2d, v1.2d
299 %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
300 ret <2 x i64> %shuffle.i
303 define <8 x i8> @test_vuzp2_u8(<8 x i8> %a, <8 x i8> %b) {
304 ; CHECK-LABEL: test_vuzp2_u8:
305 ; CHECK: // %bb.0: // %entry
306 ; CHECK-NEXT: uzp2 v0.8b, v0.8b, v1.8b
309 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
310 ret <8 x i8> %shuffle.i
313 define <16 x i8> @test_vuzp2q_u8(<16 x i8> %a, <16 x i8> %b) {
314 ; CHECK-LABEL: test_vuzp2q_u8:
315 ; CHECK: // %bb.0: // %entry
316 ; CHECK-NEXT: uzp2 v0.16b, v0.16b, v1.16b
319 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
320 ret <16 x i8> %shuffle.i
323 define <4 x i16> @test_vuzp2_u16(<4 x i16> %a, <4 x i16> %b) {
324 ; CHECK-LABEL: test_vuzp2_u16:
325 ; CHECK: // %bb.0: // %entry
326 ; CHECK-NEXT: uzp2 v0.4h, v0.4h, v1.4h
329 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
330 ret <4 x i16> %shuffle.i
333 define <8 x i16> @test_vuzp2q_u16(<8 x i16> %a, <8 x i16> %b) {
334 ; CHECK-LABEL: test_vuzp2q_u16:
335 ; CHECK: // %bb.0: // %entry
336 ; CHECK-NEXT: uzp2 v0.8h, v0.8h, v1.8h
339 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
340 ret <8 x i16> %shuffle.i
343 define <2 x i32> @test_vuzp2_u32(<2 x i32> %a, <2 x i32> %b) {
344 ; CHECK-LABEL: test_vuzp2_u32:
345 ; CHECK: // %bb.0: // %entry
346 ; CHECK-NEXT: zip2 v0.2s, v0.2s, v1.2s
349 %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
350 ret <2 x i32> %shuffle.i
353 define <4 x i32> @test_vuzp2q_u32(<4 x i32> %a, <4 x i32> %b) {
354 ; CHECK-LABEL: test_vuzp2q_u32:
355 ; CHECK: // %bb.0: // %entry
356 ; CHECK-NEXT: uzp2 v0.4s, v0.4s, v1.4s
359 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
360 ret <4 x i32> %shuffle.i
363 define <2 x i64> @test_vuzp2q_u64(<2 x i64> %a, <2 x i64> %b) {
364 ; CHECK-LABEL: test_vuzp2q_u64:
365 ; CHECK: // %bb.0: // %entry
366 ; CHECK-NEXT: zip2 v0.2d, v0.2d, v1.2d
369 %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
370 ret <2 x i64> %shuffle.i
373 define <2 x float> @test_vuzp2_f32(<2 x float> %a, <2 x float> %b) {
374 ; CHECK-LABEL: test_vuzp2_f32:
375 ; CHECK: // %bb.0: // %entry
376 ; CHECK-NEXT: zip2 v0.2s, v0.2s, v1.2s
379 %shuffle.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 1, i32 3>
380 ret <2 x float> %shuffle.i
383 define <4 x float> @test_vuzp2q_f32(<4 x float> %a, <4 x float> %b) {
384 ; CHECK-LABEL: test_vuzp2q_f32:
385 ; CHECK: // %bb.0: // %entry
386 ; CHECK-NEXT: uzp2 v0.4s, v0.4s, v1.4s
389 %shuffle.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
390 ret <4 x float> %shuffle.i
393 define <2 x double> @test_vuzp2q_f64(<2 x double> %a, <2 x double> %b) {
394 ; CHECK-LABEL: test_vuzp2q_f64:
395 ; CHECK: // %bb.0: // %entry
396 ; CHECK-NEXT: zip2 v0.2d, v0.2d, v1.2d
399 %shuffle.i = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 1, i32 3>
400 ret <2 x double> %shuffle.i
403 define <8 x i8> @test_vuzp2_p8(<8 x i8> %a, <8 x i8> %b) {
404 ; CHECK-LABEL: test_vuzp2_p8:
405 ; CHECK: // %bb.0: // %entry
406 ; CHECK-NEXT: uzp2 v0.8b, v0.8b, v1.8b
409 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
410 ret <8 x i8> %shuffle.i
413 define <16 x i8> @test_vuzp2q_p8(<16 x i8> %a, <16 x i8> %b) {
414 ; CHECK-LABEL: test_vuzp2q_p8:
415 ; CHECK: // %bb.0: // %entry
416 ; CHECK-NEXT: uzp2 v0.16b, v0.16b, v1.16b
419 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
420 ret <16 x i8> %shuffle.i
423 define <4 x i16> @test_vuzp2_p16(<4 x i16> %a, <4 x i16> %b) {
424 ; CHECK-LABEL: test_vuzp2_p16:
425 ; CHECK: // %bb.0: // %entry
426 ; CHECK-NEXT: uzp2 v0.4h, v0.4h, v1.4h
429 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
430 ret <4 x i16> %shuffle.i
433 define <8 x i16> @test_vuzp2q_p16(<8 x i16> %a, <8 x i16> %b) {
434 ; CHECK-LABEL: test_vuzp2q_p16:
435 ; CHECK: // %bb.0: // %entry
436 ; CHECK-NEXT: uzp2 v0.8h, v0.8h, v1.8h
439 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
440 ret <8 x i16> %shuffle.i
443 define <8 x i8> @test_vzip1_s8(<8 x i8> %a, <8 x i8> %b) {
444 ; CHECK-LABEL: test_vzip1_s8:
445 ; CHECK: // %bb.0: // %entry
446 ; CHECK-NEXT: zip1 v0.8b, v0.8b, v1.8b
449 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
450 ret <8 x i8> %shuffle.i
453 define <16 x i8> @test_vzip1q_s8(<16 x i8> %a, <16 x i8> %b) {
454 ; CHECK-LABEL: test_vzip1q_s8:
455 ; CHECK: // %bb.0: // %entry
456 ; CHECK-NEXT: zip1 v0.16b, v0.16b, v1.16b
459 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
460 ret <16 x i8> %shuffle.i
463 define <4 x i16> @test_vzip1_s16(<4 x i16> %a, <4 x i16> %b) {
464 ; CHECK-LABEL: test_vzip1_s16:
465 ; CHECK: // %bb.0: // %entry
466 ; CHECK-NEXT: zip1 v0.4h, v0.4h, v1.4h
469 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
470 ret <4 x i16> %shuffle.i
473 define <8 x i16> @test_vzip1q_s16(<8 x i16> %a, <8 x i16> %b) {
474 ; CHECK-LABEL: test_vzip1q_s16:
475 ; CHECK: // %bb.0: // %entry
476 ; CHECK-NEXT: zip1 v0.8h, v0.8h, v1.8h
479 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
480 ret <8 x i16> %shuffle.i
483 define <2 x i32> @test_vzip1_s32(<2 x i32> %a, <2 x i32> %b) {
484 ; CHECK-LABEL: test_vzip1_s32:
485 ; CHECK: // %bb.0: // %entry
486 ; CHECK-NEXT: zip1 v0.2s, v0.2s, v1.2s
489 %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
490 ret <2 x i32> %shuffle.i
493 define <4 x i32> @test_vzip1q_s32(<4 x i32> %a, <4 x i32> %b) {
494 ; CHECK-LABEL: test_vzip1q_s32:
495 ; CHECK: // %bb.0: // %entry
496 ; CHECK-NEXT: zip1 v0.4s, v0.4s, v1.4s
499 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
500 ret <4 x i32> %shuffle.i
503 define <2 x i64> @test_vzip1q_s64(<2 x i64> %a, <2 x i64> %b) {
504 ; CHECK-LABEL: test_vzip1q_s64:
505 ; CHECK: // %bb.0: // %entry
506 ; CHECK-NEXT: zip1 v0.2d, v0.2d, v1.2d
509 %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 2>
510 ret <2 x i64> %shuffle.i
513 define <8 x i8> @test_vzip1_u8(<8 x i8> %a, <8 x i8> %b) {
514 ; CHECK-LABEL: test_vzip1_u8:
515 ; CHECK: // %bb.0: // %entry
516 ; CHECK-NEXT: zip1 v0.8b, v0.8b, v1.8b
519 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
520 ret <8 x i8> %shuffle.i
523 define <16 x i8> @test_vzip1q_u8(<16 x i8> %a, <16 x i8> %b) {
524 ; CHECK-LABEL: test_vzip1q_u8:
525 ; CHECK: // %bb.0: // %entry
526 ; CHECK-NEXT: zip1 v0.16b, v0.16b, v1.16b
529 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
530 ret <16 x i8> %shuffle.i
533 define <4 x i16> @test_vzip1_u16(<4 x i16> %a, <4 x i16> %b) {
534 ; CHECK-LABEL: test_vzip1_u16:
535 ; CHECK: // %bb.0: // %entry
536 ; CHECK-NEXT: zip1 v0.4h, v0.4h, v1.4h
539 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
540 ret <4 x i16> %shuffle.i
543 define <8 x i16> @test_vzip1q_u16(<8 x i16> %a, <8 x i16> %b) {
544 ; CHECK-LABEL: test_vzip1q_u16:
545 ; CHECK: // %bb.0: // %entry
546 ; CHECK-NEXT: zip1 v0.8h, v0.8h, v1.8h
549 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
550 ret <8 x i16> %shuffle.i
553 define <2 x i32> @test_vzip1_u32(<2 x i32> %a, <2 x i32> %b) {
554 ; CHECK-LABEL: test_vzip1_u32:
555 ; CHECK: // %bb.0: // %entry
556 ; CHECK-NEXT: zip1 v0.2s, v0.2s, v1.2s
559 %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
560 ret <2 x i32> %shuffle.i
563 define <4 x i32> @test_vzip1q_u32(<4 x i32> %a, <4 x i32> %b) {
564 ; CHECK-LABEL: test_vzip1q_u32:
565 ; CHECK: // %bb.0: // %entry
566 ; CHECK-NEXT: zip1 v0.4s, v0.4s, v1.4s
569 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
570 ret <4 x i32> %shuffle.i
573 define <2 x i64> @test_vzip1q_u64(<2 x i64> %a, <2 x i64> %b) {
574 ; CHECK-LABEL: test_vzip1q_u64:
575 ; CHECK: // %bb.0: // %entry
576 ; CHECK-NEXT: zip1 v0.2d, v0.2d, v1.2d
579 %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 2>
580 ret <2 x i64> %shuffle.i
583 define <2 x float> @test_vzip1_f32(<2 x float> %a, <2 x float> %b) {
584 ; CHECK-LABEL: test_vzip1_f32:
585 ; CHECK: // %bb.0: // %entry
586 ; CHECK-NEXT: zip1 v0.2s, v0.2s, v1.2s
589 %shuffle.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 0, i32 2>
590 ret <2 x float> %shuffle.i
593 define <4 x float> @test_vzip1q_f32(<4 x float> %a, <4 x float> %b) {
594 ; CHECK-LABEL: test_vzip1q_f32:
595 ; CHECK: // %bb.0: // %entry
596 ; CHECK-NEXT: zip1 v0.4s, v0.4s, v1.4s
599 %shuffle.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
600 ret <4 x float> %shuffle.i
603 define <2 x double> @test_vzip1q_f64(<2 x double> %a, <2 x double> %b) {
604 ; CHECK-LABEL: test_vzip1q_f64:
605 ; CHECK: // %bb.0: // %entry
606 ; CHECK-NEXT: zip1 v0.2d, v0.2d, v1.2d
609 %shuffle.i = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 2>
610 ret <2 x double> %shuffle.i
613 define <8 x i8> @test_vzip1_p8(<8 x i8> %a, <8 x i8> %b) {
614 ; CHECK-LABEL: test_vzip1_p8:
615 ; CHECK: // %bb.0: // %entry
616 ; CHECK-NEXT: zip1 v0.8b, v0.8b, v1.8b
619 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
620 ret <8 x i8> %shuffle.i
623 define <16 x i8> @test_vzip1q_p8(<16 x i8> %a, <16 x i8> %b) {
624 ; CHECK-LABEL: test_vzip1q_p8:
625 ; CHECK: // %bb.0: // %entry
626 ; CHECK-NEXT: zip1 v0.16b, v0.16b, v1.16b
629 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
630 ret <16 x i8> %shuffle.i
633 define <4 x i16> @test_vzip1_p16(<4 x i16> %a, <4 x i16> %b) {
634 ; CHECK-LABEL: test_vzip1_p16:
635 ; CHECK: // %bb.0: // %entry
636 ; CHECK-NEXT: zip1 v0.4h, v0.4h, v1.4h
639 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
640 ret <4 x i16> %shuffle.i
643 define <8 x i16> @test_vzip1q_p16(<8 x i16> %a, <8 x i16> %b) {
644 ; CHECK-LABEL: test_vzip1q_p16:
645 ; CHECK: // %bb.0: // %entry
646 ; CHECK-NEXT: zip1 v0.8h, v0.8h, v1.8h
649 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
650 ret <8 x i16> %shuffle.i
653 define <8 x i8> @test_vzip2_s8(<8 x i8> %a, <8 x i8> %b) {
654 ; CHECK-LABEL: test_vzip2_s8:
655 ; CHECK: // %bb.0: // %entry
656 ; CHECK-NEXT: zip2 v0.8b, v0.8b, v1.8b
659 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
660 ret <8 x i8> %shuffle.i
663 define <16 x i8> @test_vzip2q_s8(<16 x i8> %a, <16 x i8> %b) {
664 ; CHECK-LABEL: test_vzip2q_s8:
665 ; CHECK: // %bb.0: // %entry
666 ; CHECK-NEXT: zip2 v0.16b, v0.16b, v1.16b
669 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
670 ret <16 x i8> %shuffle.i
673 define <4 x i16> @test_vzip2_s16(<4 x i16> %a, <4 x i16> %b) {
674 ; CHECK-LABEL: test_vzip2_s16:
675 ; CHECK: // %bb.0: // %entry
676 ; CHECK-NEXT: zip2 v0.4h, v0.4h, v1.4h
679 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
680 ret <4 x i16> %shuffle.i
683 define <8 x i16> @test_vzip2q_s16(<8 x i16> %a, <8 x i16> %b) {
684 ; CHECK-LABEL: test_vzip2q_s16:
685 ; CHECK: // %bb.0: // %entry
686 ; CHECK-NEXT: zip2 v0.8h, v0.8h, v1.8h
689 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
690 ret <8 x i16> %shuffle.i
693 define <2 x i32> @test_vzip2_s32(<2 x i32> %a, <2 x i32> %b) {
694 ; CHECK-LABEL: test_vzip2_s32:
695 ; CHECK: // %bb.0: // %entry
696 ; CHECK-NEXT: zip2 v0.2s, v0.2s, v1.2s
699 %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
700 ret <2 x i32> %shuffle.i
703 define <4 x i32> @test_vzip2q_s32(<4 x i32> %a, <4 x i32> %b) {
704 ; CHECK-LABEL: test_vzip2q_s32:
705 ; CHECK: // %bb.0: // %entry
706 ; CHECK-NEXT: zip2 v0.4s, v0.4s, v1.4s
709 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
710 ret <4 x i32> %shuffle.i
713 define <2 x i64> @test_vzip2q_s64(<2 x i64> %a, <2 x i64> %b) {
714 ; CHECK-LABEL: test_vzip2q_s64:
715 ; CHECK: // %bb.0: // %entry
716 ; CHECK-NEXT: zip2 v0.2d, v0.2d, v1.2d
719 %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
720 ret <2 x i64> %shuffle.i
723 define <8 x i8> @test_vzip2_u8(<8 x i8> %a, <8 x i8> %b) {
724 ; CHECK-LABEL: test_vzip2_u8:
725 ; CHECK: // %bb.0: // %entry
726 ; CHECK-NEXT: zip2 v0.8b, v0.8b, v1.8b
729 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
730 ret <8 x i8> %shuffle.i
733 define <16 x i8> @test_vzip2q_u8(<16 x i8> %a, <16 x i8> %b) {
734 ; CHECK-LABEL: test_vzip2q_u8:
735 ; CHECK: // %bb.0: // %entry
736 ; CHECK-NEXT: zip2 v0.16b, v0.16b, v1.16b
739 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
740 ret <16 x i8> %shuffle.i
743 define <4 x i16> @test_vzip2_u16(<4 x i16> %a, <4 x i16> %b) {
744 ; CHECK-LABEL: test_vzip2_u16:
745 ; CHECK: // %bb.0: // %entry
746 ; CHECK-NEXT: zip2 v0.4h, v0.4h, v1.4h
749 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
750 ret <4 x i16> %shuffle.i
753 define <8 x i16> @test_vzip2q_u16(<8 x i16> %a, <8 x i16> %b) {
754 ; CHECK-LABEL: test_vzip2q_u16:
755 ; CHECK: // %bb.0: // %entry
756 ; CHECK-NEXT: zip2 v0.8h, v0.8h, v1.8h
759 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
760 ret <8 x i16> %shuffle.i
763 define <2 x i32> @test_vzip2_u32(<2 x i32> %a, <2 x i32> %b) {
764 ; CHECK-LABEL: test_vzip2_u32:
765 ; CHECK: // %bb.0: // %entry
766 ; CHECK-NEXT: zip2 v0.2s, v0.2s, v1.2s
769 %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
770 ret <2 x i32> %shuffle.i
773 define <4 x i32> @test_vzip2q_u32(<4 x i32> %a, <4 x i32> %b) {
774 ; CHECK-LABEL: test_vzip2q_u32:
775 ; CHECK: // %bb.0: // %entry
776 ; CHECK-NEXT: zip2 v0.4s, v0.4s, v1.4s
779 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
780 ret <4 x i32> %shuffle.i
783 define <2 x i64> @test_vzip2q_u64(<2 x i64> %a, <2 x i64> %b) {
784 ; CHECK-LABEL: test_vzip2q_u64:
785 ; CHECK: // %bb.0: // %entry
786 ; CHECK-NEXT: zip2 v0.2d, v0.2d, v1.2d
789 %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
790 ret <2 x i64> %shuffle.i
793 define <2 x float> @test_vzip2_f32(<2 x float> %a, <2 x float> %b) {
794 ; CHECK-LABEL: test_vzip2_f32:
795 ; CHECK: // %bb.0: // %entry
796 ; CHECK-NEXT: zip2 v0.2s, v0.2s, v1.2s
799 %shuffle.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 1, i32 3>
800 ret <2 x float> %shuffle.i
803 define <4 x float> @test_vzip2q_f32(<4 x float> %a, <4 x float> %b) {
804 ; CHECK-LABEL: test_vzip2q_f32:
805 ; CHECK: // %bb.0: // %entry
806 ; CHECK-NEXT: zip2 v0.4s, v0.4s, v1.4s
809 %shuffle.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
810 ret <4 x float> %shuffle.i
813 define <2 x double> @test_vzip2q_f64(<2 x double> %a, <2 x double> %b) {
814 ; CHECK-LABEL: test_vzip2q_f64:
815 ; CHECK: // %bb.0: // %entry
816 ; CHECK-NEXT: zip2 v0.2d, v0.2d, v1.2d
819 %shuffle.i = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 1, i32 3>
820 ret <2 x double> %shuffle.i
823 define <8 x i8> @test_vzip2_p8(<8 x i8> %a, <8 x i8> %b) {
824 ; CHECK-LABEL: test_vzip2_p8:
825 ; CHECK: // %bb.0: // %entry
826 ; CHECK-NEXT: zip2 v0.8b, v0.8b, v1.8b
829 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
830 ret <8 x i8> %shuffle.i
833 define <16 x i8> @test_vzip2q_p8(<16 x i8> %a, <16 x i8> %b) {
834 ; CHECK-LABEL: test_vzip2q_p8:
835 ; CHECK: // %bb.0: // %entry
836 ; CHECK-NEXT: zip2 v0.16b, v0.16b, v1.16b
839 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
840 ret <16 x i8> %shuffle.i
843 define <4 x i16> @test_vzip2_p16(<4 x i16> %a, <4 x i16> %b) {
844 ; CHECK-LABEL: test_vzip2_p16:
845 ; CHECK: // %bb.0: // %entry
846 ; CHECK-NEXT: zip2 v0.4h, v0.4h, v1.4h
849 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
850 ret <4 x i16> %shuffle.i
853 define <8 x i16> @test_vzip2q_p16(<8 x i16> %a, <8 x i16> %b) {
854 ; CHECK-LABEL: test_vzip2q_p16:
855 ; CHECK: // %bb.0: // %entry
856 ; CHECK-NEXT: zip2 v0.8h, v0.8h, v1.8h
859 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
860 ret <8 x i16> %shuffle.i
863 define <8 x i8> @test_vtrn1_s8(<8 x i8> %a, <8 x i8> %b) {
864 ; CHECK-LABEL: test_vtrn1_s8:
865 ; CHECK: // %bb.0: // %entry
866 ; CHECK-NEXT: trn1 v0.8b, v0.8b, v1.8b
869 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
870 ret <8 x i8> %shuffle.i
873 define <16 x i8> @test_vtrn1q_s8(<16 x i8> %a, <16 x i8> %b) {
874 ; CHECK-LABEL: test_vtrn1q_s8:
875 ; CHECK: // %bb.0: // %entry
876 ; CHECK-NEXT: trn1 v0.16b, v0.16b, v1.16b
879 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
880 ret <16 x i8> %shuffle.i
883 define <4 x i16> @test_vtrn1_s16(<4 x i16> %a, <4 x i16> %b) {
884 ; CHECK-LABEL: test_vtrn1_s16:
885 ; CHECK: // %bb.0: // %entry
886 ; CHECK-NEXT: trn1 v0.4h, v0.4h, v1.4h
889 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
890 ret <4 x i16> %shuffle.i
893 define <8 x i16> @test_vtrn1q_s16(<8 x i16> %a, <8 x i16> %b) {
894 ; CHECK-LABEL: test_vtrn1q_s16:
895 ; CHECK: // %bb.0: // %entry
896 ; CHECK-NEXT: trn1 v0.8h, v0.8h, v1.8h
899 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
900 ret <8 x i16> %shuffle.i
903 define <2 x i32> @test_vtrn1_s32(<2 x i32> %a, <2 x i32> %b) {
904 ; CHECK-LABEL: test_vtrn1_s32:
905 ; CHECK: // %bb.0: // %entry
906 ; CHECK-NEXT: zip1 v0.2s, v0.2s, v1.2s
909 %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
910 ret <2 x i32> %shuffle.i
913 define <4 x i32> @test_vtrn1q_s32(<4 x i32> %a, <4 x i32> %b) {
914 ; CHECK-LABEL: test_vtrn1q_s32:
915 ; CHECK: // %bb.0: // %entry
916 ; CHECK-NEXT: trn1 v0.4s, v0.4s, v1.4s
919 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
920 ret <4 x i32> %shuffle.i
923 define <2 x i64> @test_vtrn1q_s64(<2 x i64> %a, <2 x i64> %b) {
924 ; CHECK-LABEL: test_vtrn1q_s64:
925 ; CHECK: // %bb.0: // %entry
926 ; CHECK-NEXT: zip1 v0.2d, v0.2d, v1.2d
929 %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 2>
930 ret <2 x i64> %shuffle.i
933 define <8 x i8> @test_vtrn1_u8(<8 x i8> %a, <8 x i8> %b) {
934 ; CHECK-LABEL: test_vtrn1_u8:
935 ; CHECK: // %bb.0: // %entry
936 ; CHECK-NEXT: trn1 v0.8b, v0.8b, v1.8b
939 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
940 ret <8 x i8> %shuffle.i
943 define <16 x i8> @test_vtrn1q_u8(<16 x i8> %a, <16 x i8> %b) {
944 ; CHECK-LABEL: test_vtrn1q_u8:
945 ; CHECK: // %bb.0: // %entry
946 ; CHECK-NEXT: trn1 v0.16b, v0.16b, v1.16b
949 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
950 ret <16 x i8> %shuffle.i
953 define <4 x i16> @test_vtrn1_u16(<4 x i16> %a, <4 x i16> %b) {
954 ; CHECK-LABEL: test_vtrn1_u16:
955 ; CHECK: // %bb.0: // %entry
956 ; CHECK-NEXT: trn1 v0.4h, v0.4h, v1.4h
959 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
960 ret <4 x i16> %shuffle.i
963 define <8 x i16> @test_vtrn1q_u16(<8 x i16> %a, <8 x i16> %b) {
964 ; CHECK-LABEL: test_vtrn1q_u16:
965 ; CHECK: // %bb.0: // %entry
966 ; CHECK-NEXT: trn1 v0.8h, v0.8h, v1.8h
969 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
970 ret <8 x i16> %shuffle.i
973 define <2 x i32> @test_vtrn1_u32(<2 x i32> %a, <2 x i32> %b) {
974 ; CHECK-LABEL: test_vtrn1_u32:
975 ; CHECK: // %bb.0: // %entry
976 ; CHECK-NEXT: zip1 v0.2s, v0.2s, v1.2s
979 %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
980 ret <2 x i32> %shuffle.i
983 define <4 x i32> @test_vtrn1q_u32(<4 x i32> %a, <4 x i32> %b) {
984 ; CHECK-LABEL: test_vtrn1q_u32:
985 ; CHECK: // %bb.0: // %entry
986 ; CHECK-NEXT: trn1 v0.4s, v0.4s, v1.4s
989 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
990 ret <4 x i32> %shuffle.i
993 define <2 x i64> @test_vtrn1q_u64(<2 x i64> %a, <2 x i64> %b) {
994 ; CHECK-LABEL: test_vtrn1q_u64:
995 ; CHECK: // %bb.0: // %entry
996 ; CHECK-NEXT: zip1 v0.2d, v0.2d, v1.2d
999 %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 2>
1000 ret <2 x i64> %shuffle.i
1003 define <2 x float> @test_vtrn1_f32(<2 x float> %a, <2 x float> %b) {
1004 ; CHECK-LABEL: test_vtrn1_f32:
1005 ; CHECK: // %bb.0: // %entry
1006 ; CHECK-NEXT: zip1 v0.2s, v0.2s, v1.2s
1009 %shuffle.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 0, i32 2>
1010 ret <2 x float> %shuffle.i
1013 define <4 x float> @test_vtrn1q_f32(<4 x float> %a, <4 x float> %b) {
1014 ; CHECK-LABEL: test_vtrn1q_f32:
1015 ; CHECK: // %bb.0: // %entry
1016 ; CHECK-NEXT: trn1 v0.4s, v0.4s, v1.4s
1019 %shuffle.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
1020 ret <4 x float> %shuffle.i
1023 define <2 x double> @test_vtrn1q_f64(<2 x double> %a, <2 x double> %b) {
1024 ; CHECK-LABEL: test_vtrn1q_f64:
1025 ; CHECK: // %bb.0: // %entry
1026 ; CHECK-NEXT: zip1 v0.2d, v0.2d, v1.2d
1029 %shuffle.i = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 2>
1030 ret <2 x double> %shuffle.i
1033 define <8 x i8> @test_vtrn1_p8(<8 x i8> %a, <8 x i8> %b) {
1034 ; CHECK-LABEL: test_vtrn1_p8:
1035 ; CHECK: // %bb.0: // %entry
1036 ; CHECK-NEXT: trn1 v0.8b, v0.8b, v1.8b
1039 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
1040 ret <8 x i8> %shuffle.i
1043 define <16 x i8> @test_vtrn1q_p8(<16 x i8> %a, <16 x i8> %b) {
1044 ; CHECK-LABEL: test_vtrn1q_p8:
1045 ; CHECK: // %bb.0: // %entry
1046 ; CHECK-NEXT: trn1 v0.16b, v0.16b, v1.16b
1049 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
1050 ret <16 x i8> %shuffle.i
1053 define <4 x i16> @test_vtrn1_p16(<4 x i16> %a, <4 x i16> %b) {
1054 ; CHECK-LABEL: test_vtrn1_p16:
1055 ; CHECK: // %bb.0: // %entry
1056 ; CHECK-NEXT: trn1 v0.4h, v0.4h, v1.4h
1059 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
1060 ret <4 x i16> %shuffle.i
1063 define <8 x i16> @test_vtrn1q_p16(<8 x i16> %a, <8 x i16> %b) {
1064 ; CHECK-LABEL: test_vtrn1q_p16:
1065 ; CHECK: // %bb.0: // %entry
1066 ; CHECK-NEXT: trn1 v0.8h, v0.8h, v1.8h
1069 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
1070 ret <8 x i16> %shuffle.i
1073 define <8 x i8> @test_vtrn2_s8(<8 x i8> %a, <8 x i8> %b) {
1074 ; CHECK-LABEL: test_vtrn2_s8:
1075 ; CHECK: // %bb.0: // %entry
1076 ; CHECK-NEXT: trn2 v0.8b, v0.8b, v1.8b
1079 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
1080 ret <8 x i8> %shuffle.i
1083 define <16 x i8> @test_vtrn2q_s8(<16 x i8> %a, <16 x i8> %b) {
1084 ; CHECK-LABEL: test_vtrn2q_s8:
1085 ; CHECK: // %bb.0: // %entry
1086 ; CHECK-NEXT: trn2 v0.16b, v0.16b, v1.16b
1089 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
1090 ret <16 x i8> %shuffle.i
1093 define <4 x i16> @test_vtrn2_s16(<4 x i16> %a, <4 x i16> %b) {
1094 ; CHECK-LABEL: test_vtrn2_s16:
1095 ; CHECK: // %bb.0: // %entry
1096 ; CHECK-NEXT: trn2 v0.4h, v0.4h, v1.4h
1099 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
1100 ret <4 x i16> %shuffle.i
1103 define <8 x i16> @test_vtrn2q_s16(<8 x i16> %a, <8 x i16> %b) {
1104 ; CHECK-LABEL: test_vtrn2q_s16:
1105 ; CHECK: // %bb.0: // %entry
1106 ; CHECK-NEXT: trn2 v0.8h, v0.8h, v1.8h
1109 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
1110 ret <8 x i16> %shuffle.i
1113 define <2 x i32> @test_vtrn2_s32(<2 x i32> %a, <2 x i32> %b) {
1114 ; CHECK-LABEL: test_vtrn2_s32:
1115 ; CHECK: // %bb.0: // %entry
1116 ; CHECK-NEXT: zip2 v0.2s, v0.2s, v1.2s
1119 %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
1120 ret <2 x i32> %shuffle.i
1123 define <4 x i32> @test_vtrn2q_s32(<4 x i32> %a, <4 x i32> %b) {
1124 ; CHECK-LABEL: test_vtrn2q_s32:
1125 ; CHECK: // %bb.0: // %entry
1126 ; CHECK-NEXT: trn2 v0.4s, v0.4s, v1.4s
1129 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
1130 ret <4 x i32> %shuffle.i
1133 define <2 x i64> @test_vtrn2q_s64(<2 x i64> %a, <2 x i64> %b) {
1134 ; CHECK-LABEL: test_vtrn2q_s64:
1135 ; CHECK: // %bb.0: // %entry
1136 ; CHECK-NEXT: zip2 v0.2d, v0.2d, v1.2d
1139 %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
1140 ret <2 x i64> %shuffle.i
1143 define <8 x i8> @test_vtrn2_u8(<8 x i8> %a, <8 x i8> %b) {
1144 ; CHECK-LABEL: test_vtrn2_u8:
1145 ; CHECK: // %bb.0: // %entry
1146 ; CHECK-NEXT: trn2 v0.8b, v0.8b, v1.8b
1149 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
1150 ret <8 x i8> %shuffle.i
1153 define <16 x i8> @test_vtrn2q_u8(<16 x i8> %a, <16 x i8> %b) {
1154 ; CHECK-LABEL: test_vtrn2q_u8:
1155 ; CHECK: // %bb.0: // %entry
1156 ; CHECK-NEXT: trn2 v0.16b, v0.16b, v1.16b
1159 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
1160 ret <16 x i8> %shuffle.i
1163 define <4 x i16> @test_vtrn2_u16(<4 x i16> %a, <4 x i16> %b) {
1164 ; CHECK-LABEL: test_vtrn2_u16:
1165 ; CHECK: // %bb.0: // %entry
1166 ; CHECK-NEXT: trn2 v0.4h, v0.4h, v1.4h
1169 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
1170 ret <4 x i16> %shuffle.i
1173 define <8 x i16> @test_vtrn2q_u16(<8 x i16> %a, <8 x i16> %b) {
1174 ; CHECK-LABEL: test_vtrn2q_u16:
1175 ; CHECK: // %bb.0: // %entry
1176 ; CHECK-NEXT: trn2 v0.8h, v0.8h, v1.8h
1179 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
1180 ret <8 x i16> %shuffle.i
1183 define <2 x i32> @test_vtrn2_u32(<2 x i32> %a, <2 x i32> %b) {
1184 ; CHECK-LABEL: test_vtrn2_u32:
1185 ; CHECK: // %bb.0: // %entry
1186 ; CHECK-NEXT: zip2 v0.2s, v0.2s, v1.2s
1189 %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
1190 ret <2 x i32> %shuffle.i
1193 define <4 x i32> @test_vtrn2q_u32(<4 x i32> %a, <4 x i32> %b) {
1194 ; CHECK-LABEL: test_vtrn2q_u32:
1195 ; CHECK: // %bb.0: // %entry
1196 ; CHECK-NEXT: trn2 v0.4s, v0.4s, v1.4s
1199 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
1200 ret <4 x i32> %shuffle.i
1203 define <2 x i64> @test_vtrn2q_u64(<2 x i64> %a, <2 x i64> %b) {
1204 ; CHECK-LABEL: test_vtrn2q_u64:
1205 ; CHECK: // %bb.0: // %entry
1206 ; CHECK-NEXT: zip2 v0.2d, v0.2d, v1.2d
1209 %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
1210 ret <2 x i64> %shuffle.i
1213 define <2 x float> @test_vtrn2_f32(<2 x float> %a, <2 x float> %b) {
1214 ; CHECK-LABEL: test_vtrn2_f32:
1215 ; CHECK: // %bb.0: // %entry
1216 ; CHECK-NEXT: zip2 v0.2s, v0.2s, v1.2s
1219 %shuffle.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 1, i32 3>
1220 ret <2 x float> %shuffle.i
1223 define <4 x float> @test_vtrn2q_f32(<4 x float> %a, <4 x float> %b) {
1224 ; CHECK-LABEL: test_vtrn2q_f32:
1225 ; CHECK: // %bb.0: // %entry
1226 ; CHECK-NEXT: trn2 v0.4s, v0.4s, v1.4s
1229 %shuffle.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
1230 ret <4 x float> %shuffle.i
1233 define <2 x double> @test_vtrn2q_f64(<2 x double> %a, <2 x double> %b) {
1234 ; CHECK-LABEL: test_vtrn2q_f64:
1235 ; CHECK: // %bb.0: // %entry
1236 ; CHECK-NEXT: zip2 v0.2d, v0.2d, v1.2d
1239 %shuffle.i = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 1, i32 3>
1240 ret <2 x double> %shuffle.i
1243 define <8 x i8> @test_vtrn2_p8(<8 x i8> %a, <8 x i8> %b) {
1244 ; CHECK-LABEL: test_vtrn2_p8:
1245 ; CHECK: // %bb.0: // %entry
1246 ; CHECK-NEXT: trn2 v0.8b, v0.8b, v1.8b
1249 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
1250 ret <8 x i8> %shuffle.i
1253 define <16 x i8> @test_vtrn2q_p8(<16 x i8> %a, <16 x i8> %b) {
1254 ; CHECK-LABEL: test_vtrn2q_p8:
1255 ; CHECK: // %bb.0: // %entry
1256 ; CHECK-NEXT: trn2 v0.16b, v0.16b, v1.16b
1259 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
1260 ret <16 x i8> %shuffle.i
1263 define <4 x i16> @test_vtrn2_p16(<4 x i16> %a, <4 x i16> %b) {
1264 ; CHECK-LABEL: test_vtrn2_p16:
1265 ; CHECK: // %bb.0: // %entry
1266 ; CHECK-NEXT: trn2 v0.4h, v0.4h, v1.4h
1269 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
1270 ret <4 x i16> %shuffle.i
1273 define <8 x i16> @test_vtrn2q_p16(<8 x i16> %a, <8 x i16> %b) {
1274 ; CHECK-LABEL: test_vtrn2q_p16:
1275 ; CHECK: // %bb.0: // %entry
1276 ; CHECK-NEXT: trn2 v0.8h, v0.8h, v1.8h
1279 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
1280 ret <8 x i16> %shuffle.i
1283 define <8 x i8> @test_same_vuzp1_s8(<8 x i8> %a) {
1284 ; CHECK-LABEL: test_same_vuzp1_s8:
1285 ; CHECK: // %bb.0: // %entry
1286 ; CHECK-NEXT: uzp1 v0.8b, v0.8b, v0.8b
1289 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
1290 ret <8 x i8> %shuffle.i
1293 define <16 x i8> @test_same_vuzp1q_s8(<16 x i8> %a) {
1294 ; CHECK-LABEL: test_same_vuzp1q_s8:
1295 ; CHECK: // %bb.0: // %entry
1296 ; CHECK-NEXT: uzp1 v0.16b, v0.16b, v0.16b
1299 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
1300 ret <16 x i8> %shuffle.i
1303 define <4 x i16> @test_same_vuzp1_s16(<4 x i16> %a) {
1304 ; CHECK-LABEL: test_same_vuzp1_s16:
1305 ; CHECK: // %bb.0: // %entry
1306 ; CHECK-NEXT: uzp1 v0.4h, v0.4h, v0.4h
1309 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
1310 ret <4 x i16> %shuffle.i
1313 define <8 x i16> @test_same_vuzp1q_s16(<8 x i16> %a) {
1314 ; CHECK-LABEL: test_same_vuzp1q_s16:
1315 ; CHECK: // %bb.0: // %entry
1316 ; CHECK-NEXT: uzp1 v0.8h, v0.8h, v0.8h
1319 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
1320 ret <8 x i16> %shuffle.i
1323 define <4 x i32> @test_same_vuzp1q_s32(<4 x i32> %a) {
1324 ; CHECK-LABEL: test_same_vuzp1q_s32:
1325 ; CHECK: // %bb.0: // %entry
1326 ; CHECK-NEXT: uzp1 v0.4s, v0.4s, v0.4s
1329 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
1330 ret <4 x i32> %shuffle.i
1333 define <8 x i8> @test_same_vuzp1_u8(<8 x i8> %a) {
1334 ; CHECK-LABEL: test_same_vuzp1_u8:
1335 ; CHECK: // %bb.0: // %entry
1336 ; CHECK-NEXT: uzp1 v0.8b, v0.8b, v0.8b
1339 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
1340 ret <8 x i8> %shuffle.i
1343 define <16 x i8> @test_same_vuzp1q_u8(<16 x i8> %a) {
1344 ; CHECK-LABEL: test_same_vuzp1q_u8:
1345 ; CHECK: // %bb.0: // %entry
1346 ; CHECK-NEXT: uzp1 v0.16b, v0.16b, v0.16b
1349 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
1350 ret <16 x i8> %shuffle.i
1353 define <4 x i16> @test_same_vuzp1_u16(<4 x i16> %a) {
1354 ; CHECK-LABEL: test_same_vuzp1_u16:
1355 ; CHECK: // %bb.0: // %entry
1356 ; CHECK-NEXT: uzp1 v0.4h, v0.4h, v0.4h
1359 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
1360 ret <4 x i16> %shuffle.i
1363 define <8 x i16> @test_same_vuzp1q_u16(<8 x i16> %a) {
1364 ; CHECK-LABEL: test_same_vuzp1q_u16:
1365 ; CHECK: // %bb.0: // %entry
1366 ; CHECK-NEXT: uzp1 v0.8h, v0.8h, v0.8h
1369 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
1370 ret <8 x i16> %shuffle.i
1373 define <4 x i32> @test_same_vuzp1q_u32(<4 x i32> %a) {
1374 ; CHECK-LABEL: test_same_vuzp1q_u32:
1375 ; CHECK: // %bb.0: // %entry
1376 ; CHECK-NEXT: uzp1 v0.4s, v0.4s, v0.4s
1379 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
1380 ret <4 x i32> %shuffle.i
1383 define <4 x float> @test_same_vuzp1q_f32(<4 x float> %a) {
1384 ; CHECK-LABEL: test_same_vuzp1q_f32:
1385 ; CHECK: // %bb.0: // %entry
1386 ; CHECK-NEXT: uzp1 v0.4s, v0.4s, v0.4s
1389 %shuffle.i = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
1390 ret <4 x float> %shuffle.i
1393 define <8 x i8> @test_same_vuzp1_p8(<8 x i8> %a) {
1394 ; CHECK-LABEL: test_same_vuzp1_p8:
1395 ; CHECK: // %bb.0: // %entry
1396 ; CHECK-NEXT: uzp1 v0.8b, v0.8b, v0.8b
1399 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
1400 ret <8 x i8> %shuffle.i
1403 define <16 x i8> @test_same_vuzp1q_p8(<16 x i8> %a) {
1404 ; CHECK-LABEL: test_same_vuzp1q_p8:
1405 ; CHECK: // %bb.0: // %entry
1406 ; CHECK-NEXT: uzp1 v0.16b, v0.16b, v0.16b
1409 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
1410 ret <16 x i8> %shuffle.i
1413 define <4 x i16> @test_same_vuzp1_p16(<4 x i16> %a) {
1414 ; CHECK-LABEL: test_same_vuzp1_p16:
1415 ; CHECK: // %bb.0: // %entry
1416 ; CHECK-NEXT: uzp1 v0.4h, v0.4h, v0.4h
1419 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
1420 ret <4 x i16> %shuffle.i
1423 define <8 x i16> @test_same_vuzp1q_p16(<8 x i16> %a) {
1424 ; CHECK-LABEL: test_same_vuzp1q_p16:
1425 ; CHECK: // %bb.0: // %entry
1426 ; CHECK-NEXT: uzp1 v0.8h, v0.8h, v0.8h
1429 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
1430 ret <8 x i16> %shuffle.i
1433 define <8 x i8> @test_same_vuzp2_s8(<8 x i8> %a) {
1434 ; CHECK-LABEL: test_same_vuzp2_s8:
1435 ; CHECK: // %bb.0: // %entry
1436 ; CHECK-NEXT: uzp2 v0.8b, v0.8b, v0.8b
1439 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
1440 ret <8 x i8> %shuffle.i
1443 define <16 x i8> @test_same_vuzp2q_s8(<16 x i8> %a) {
1444 ; CHECK-LABEL: test_same_vuzp2q_s8:
1445 ; CHECK: // %bb.0: // %entry
1446 ; CHECK-NEXT: uzp2 v0.16b, v0.16b, v0.16b
1449 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
1450 ret <16 x i8> %shuffle.i
1453 define <4 x i16> @test_same_vuzp2_s16(<4 x i16> %a) {
1454 ; CHECK-LABEL: test_same_vuzp2_s16:
1455 ; CHECK: // %bb.0: // %entry
1456 ; CHECK-NEXT: uzp2 v0.4h, v0.4h, v0.4h
1459 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
1460 ret <4 x i16> %shuffle.i
1463 define <8 x i16> @test_same_vuzp2q_s16(<8 x i16> %a) {
1464 ; CHECK-LABEL: test_same_vuzp2q_s16:
1465 ; CHECK: // %bb.0: // %entry
1466 ; CHECK-NEXT: uzp2 v0.8h, v0.8h, v0.8h
1469 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
1470 ret <8 x i16> %shuffle.i
1473 define <4 x i32> @test_same_vuzp2q_s32(<4 x i32> %a) {
1474 ; CHECK-LABEL: test_same_vuzp2q_s32:
1475 ; CHECK: // %bb.0: // %entry
1476 ; CHECK-NEXT: uzp2 v0.4s, v0.4s, v0.4s
1479 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
1480 ret <4 x i32> %shuffle.i
1483 define <8 x i8> @test_same_vuzp2_u8(<8 x i8> %a) {
1484 ; CHECK-LABEL: test_same_vuzp2_u8:
1485 ; CHECK: // %bb.0: // %entry
1486 ; CHECK-NEXT: uzp2 v0.8b, v0.8b, v0.8b
1489 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
1490 ret <8 x i8> %shuffle.i
1493 define <16 x i8> @test_same_vuzp2q_u8(<16 x i8> %a) {
1494 ; CHECK-LABEL: test_same_vuzp2q_u8:
1495 ; CHECK: // %bb.0: // %entry
1496 ; CHECK-NEXT: uzp2 v0.16b, v0.16b, v0.16b
1499 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
1500 ret <16 x i8> %shuffle.i
1503 define <4 x i16> @test_same_vuzp2_u16(<4 x i16> %a) {
1504 ; CHECK-LABEL: test_same_vuzp2_u16:
1505 ; CHECK: // %bb.0: // %entry
1506 ; CHECK-NEXT: uzp2 v0.4h, v0.4h, v0.4h
1509 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
1510 ret <4 x i16> %shuffle.i
1513 define <8 x i16> @test_same_vuzp2q_u16(<8 x i16> %a) {
1514 ; CHECK-LABEL: test_same_vuzp2q_u16:
1515 ; CHECK: // %bb.0: // %entry
1516 ; CHECK-NEXT: uzp2 v0.8h, v0.8h, v0.8h
1519 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
1520 ret <8 x i16> %shuffle.i
1523 define <4 x i32> @test_same_vuzp2q_u32(<4 x i32> %a) {
1524 ; CHECK-LABEL: test_same_vuzp2q_u32:
1525 ; CHECK: // %bb.0: // %entry
1526 ; CHECK-NEXT: uzp2 v0.4s, v0.4s, v0.4s
1529 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
1530 ret <4 x i32> %shuffle.i
1533 define <4 x float> @test_same_vuzp2q_f32(<4 x float> %a) {
1534 ; CHECK-LABEL: test_same_vuzp2q_f32:
1535 ; CHECK: // %bb.0: // %entry
1536 ; CHECK-NEXT: uzp2 v0.4s, v0.4s, v0.4s
1539 %shuffle.i = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
1540 ret <4 x float> %shuffle.i
1543 define <8 x i8> @test_same_vuzp2_p8(<8 x i8> %a) {
1544 ; CHECK-LABEL: test_same_vuzp2_p8:
1545 ; CHECK: // %bb.0: // %entry
1546 ; CHECK-NEXT: uzp2 v0.8b, v0.8b, v0.8b
1549 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
1550 ret <8 x i8> %shuffle.i
1553 define <16 x i8> @test_same_vuzp2q_p8(<16 x i8> %a) {
1554 ; CHECK-LABEL: test_same_vuzp2q_p8:
1555 ; CHECK: // %bb.0: // %entry
1556 ; CHECK-NEXT: uzp2 v0.16b, v0.16b, v0.16b
1559 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
1560 ret <16 x i8> %shuffle.i
1563 define <4 x i16> @test_same_vuzp2_p16(<4 x i16> %a) {
1564 ; CHECK-LABEL: test_same_vuzp2_p16:
1565 ; CHECK: // %bb.0: // %entry
1566 ; CHECK-NEXT: uzp2 v0.4h, v0.4h, v0.4h
1569 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
1570 ret <4 x i16> %shuffle.i
1573 define <8 x i16> @test_same_vuzp2q_p16(<8 x i16> %a) {
1574 ; CHECK-LABEL: test_same_vuzp2q_p16:
1575 ; CHECK: // %bb.0: // %entry
1576 ; CHECK-NEXT: uzp2 v0.8h, v0.8h, v0.8h
1579 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
1580 ret <8 x i16> %shuffle.i
1583 define <8 x i8> @test_same_vzip1_s8(<8 x i8> %a) {
1584 ; CHECK-LABEL: test_same_vzip1_s8:
1585 ; CHECK: // %bb.0: // %entry
1586 ; CHECK-NEXT: zip1 v0.8b, v0.8b, v0.8b
1589 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
1590 ret <8 x i8> %shuffle.i
1593 define <16 x i8> @test_same_vzip1q_s8(<16 x i8> %a) {
1594 ; CHECK-LABEL: test_same_vzip1q_s8:
1595 ; CHECK: // %bb.0: // %entry
1596 ; CHECK-NEXT: zip1 v0.16b, v0.16b, v0.16b
1599 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
1600 ret <16 x i8> %shuffle.i
1603 define <4 x i16> @test_same_vzip1_s16(<4 x i16> %a) {
1604 ; CHECK-LABEL: test_same_vzip1_s16:
1605 ; CHECK: // %bb.0: // %entry
1606 ; CHECK-NEXT: zip1 v0.4h, v0.4h, v0.4h
1609 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
1610 ret <4 x i16> %shuffle.i
1613 define <8 x i16> @test_same_vzip1q_s16(<8 x i16> %a) {
1614 ; CHECK-LABEL: test_same_vzip1q_s16:
1615 ; CHECK: // %bb.0: // %entry
1616 ; CHECK-NEXT: zip1 v0.8h, v0.8h, v0.8h
1619 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
1620 ret <8 x i16> %shuffle.i
1623 define <4 x i32> @test_same_vzip1q_s32(<4 x i32> %a) {
1624 ; CHECK-LABEL: test_same_vzip1q_s32:
1625 ; CHECK: // %bb.0: // %entry
1626 ; CHECK-NEXT: zip1 v0.4s, v0.4s, v0.4s
1629 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
1630 ret <4 x i32> %shuffle.i
1633 define <8 x i8> @test_same_vzip1_u8(<8 x i8> %a) {
1634 ; CHECK-LABEL: test_same_vzip1_u8:
1635 ; CHECK: // %bb.0: // %entry
1636 ; CHECK-NEXT: zip1 v0.8b, v0.8b, v0.8b
1639 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
1640 ret <8 x i8> %shuffle.i
1643 define <16 x i8> @test_same_vzip1q_u8(<16 x i8> %a) {
1644 ; CHECK-LABEL: test_same_vzip1q_u8:
1645 ; CHECK: // %bb.0: // %entry
1646 ; CHECK-NEXT: zip1 v0.16b, v0.16b, v0.16b
1649 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
1650 ret <16 x i8> %shuffle.i
1653 define <4 x i16> @test_same_vzip1_u16(<4 x i16> %a) {
1654 ; CHECK-LABEL: test_same_vzip1_u16:
1655 ; CHECK: // %bb.0: // %entry
1656 ; CHECK-NEXT: zip1 v0.4h, v0.4h, v0.4h
1659 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
1660 ret <4 x i16> %shuffle.i
1663 define <8 x i16> @test_same_vzip1q_u16(<8 x i16> %a) {
1664 ; CHECK-LABEL: test_same_vzip1q_u16:
1665 ; CHECK: // %bb.0: // %entry
1666 ; CHECK-NEXT: zip1 v0.8h, v0.8h, v0.8h
1669 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
1670 ret <8 x i16> %shuffle.i
1673 define <4 x i32> @test_same_vzip1q_u32(<4 x i32> %a) {
1674 ; CHECK-LABEL: test_same_vzip1q_u32:
1675 ; CHECK: // %bb.0: // %entry
1676 ; CHECK-NEXT: zip1 v0.4s, v0.4s, v0.4s
1679 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
1680 ret <4 x i32> %shuffle.i
1683 define <4 x float> @test_same_vzip1q_f32(<4 x float> %a) {
1684 ; CHECK-LABEL: test_same_vzip1q_f32:
1685 ; CHECK: // %bb.0: // %entry
1686 ; CHECK-NEXT: zip1 v0.4s, v0.4s, v0.4s
1689 %shuffle.i = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
1690 ret <4 x float> %shuffle.i
1693 define <8 x i8> @test_same_vzip1_p8(<8 x i8> %a) {
1694 ; CHECK-LABEL: test_same_vzip1_p8:
1695 ; CHECK: // %bb.0: // %entry
1696 ; CHECK-NEXT: zip1 v0.8b, v0.8b, v0.8b
1699 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
1700 ret <8 x i8> %shuffle.i
1703 define <16 x i8> @test_same_vzip1q_p8(<16 x i8> %a) {
1704 ; CHECK-LABEL: test_same_vzip1q_p8:
1705 ; CHECK: // %bb.0: // %entry
1706 ; CHECK-NEXT: zip1 v0.16b, v0.16b, v0.16b
1709 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
1710 ret <16 x i8> %shuffle.i
1713 define <4 x i16> @test_same_vzip1_p16(<4 x i16> %a) {
1714 ; CHECK-LABEL: test_same_vzip1_p16:
1715 ; CHECK: // %bb.0: // %entry
1716 ; CHECK-NEXT: zip1 v0.4h, v0.4h, v0.4h
1719 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
1720 ret <4 x i16> %shuffle.i
1723 define <8 x i16> @test_same_vzip1q_p16(<8 x i16> %a) {
1724 ; CHECK-LABEL: test_same_vzip1q_p16:
1725 ; CHECK: // %bb.0: // %entry
1726 ; CHECK-NEXT: zip1 v0.8h, v0.8h, v0.8h
1729 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
1730 ret <8 x i16> %shuffle.i
1733 define <4 x i8> @test_vzip1_v4i8(<8 x i8> %p) {
1734 ; CHECK-LABEL: test_vzip1_v4i8:
1736 ; CHECK-NEXT: zip1 v0.8b, v0.8b, v0.8b
1738 %lo = shufflevector <8 x i8> %p, <8 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1742 define <8 x i8> @test_same_vzip2_s8(<8 x i8> %a) {
1743 ; CHECK-LABEL: test_same_vzip2_s8:
1744 ; CHECK: // %bb.0: // %entry
1745 ; CHECK-NEXT: zip2 v0.8b, v0.8b, v0.8b
1748 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
1749 ret <8 x i8> %shuffle.i
1752 define <16 x i8> @test_same_vzip2q_s8(<16 x i8> %a) {
1753 ; CHECK-LABEL: test_same_vzip2q_s8:
1754 ; CHECK: // %bb.0: // %entry
1755 ; CHECK-NEXT: zip2 v0.16b, v0.16b, v0.16b
1758 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
1759 ret <16 x i8> %shuffle.i
1762 define <4 x i16> @test_same_vzip2_s16(<4 x i16> %a) {
1763 ; CHECK-LABEL: test_same_vzip2_s16:
1764 ; CHECK: // %bb.0: // %entry
1765 ; CHECK-NEXT: zip2 v0.4h, v0.4h, v0.4h
1768 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
1769 ret <4 x i16> %shuffle.i
1772 define <8 x i16> @test_same_vzip2q_s16(<8 x i16> %a) {
1773 ; CHECK-LABEL: test_same_vzip2q_s16:
1774 ; CHECK: // %bb.0: // %entry
1775 ; CHECK-NEXT: zip2 v0.8h, v0.8h, v0.8h
1778 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
1779 ret <8 x i16> %shuffle.i
1782 define <4 x i32> @test_same_vzip2q_s32(<4 x i32> %a) {
1783 ; CHECK-LABEL: test_same_vzip2q_s32:
1784 ; CHECK: // %bb.0: // %entry
1785 ; CHECK-NEXT: zip2 v0.4s, v0.4s, v0.4s
1788 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
1789 ret <4 x i32> %shuffle.i
1792 define <8 x i8> @test_same_vzip2_u8(<8 x i8> %a) {
1793 ; CHECK-LABEL: test_same_vzip2_u8:
1794 ; CHECK: // %bb.0: // %entry
1795 ; CHECK-NEXT: zip2 v0.8b, v0.8b, v0.8b
1798 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
1799 ret <8 x i8> %shuffle.i
1802 define <16 x i8> @test_same_vzip2q_u8(<16 x i8> %a) {
1803 ; CHECK-LABEL: test_same_vzip2q_u8:
1804 ; CHECK: // %bb.0: // %entry
1805 ; CHECK-NEXT: zip2 v0.16b, v0.16b, v0.16b
1808 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
1809 ret <16 x i8> %shuffle.i
1812 define <4 x i16> @test_same_vzip2_u16(<4 x i16> %a) {
1813 ; CHECK-LABEL: test_same_vzip2_u16:
1814 ; CHECK: // %bb.0: // %entry
1815 ; CHECK-NEXT: zip2 v0.4h, v0.4h, v0.4h
1818 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
1819 ret <4 x i16> %shuffle.i
1822 define <8 x i16> @test_same_vzip2q_u16(<8 x i16> %a) {
1823 ; CHECK-LABEL: test_same_vzip2q_u16:
1824 ; CHECK: // %bb.0: // %entry
1825 ; CHECK-NEXT: zip2 v0.8h, v0.8h, v0.8h
1828 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
1829 ret <8 x i16> %shuffle.i
1832 define <4 x i32> @test_same_vzip2q_u32(<4 x i32> %a) {
1833 ; CHECK-LABEL: test_same_vzip2q_u32:
1834 ; CHECK: // %bb.0: // %entry
1835 ; CHECK-NEXT: zip2 v0.4s, v0.4s, v0.4s
1838 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
1839 ret <4 x i32> %shuffle.i
1842 define <4 x float> @test_same_vzip2q_f32(<4 x float> %a) {
1843 ; CHECK-LABEL: test_same_vzip2q_f32:
1844 ; CHECK: // %bb.0: // %entry
1845 ; CHECK-NEXT: zip2 v0.4s, v0.4s, v0.4s
1848 %shuffle.i = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
1849 ret <4 x float> %shuffle.i
1852 define <8 x i8> @test_same_vzip2_p8(<8 x i8> %a) {
1853 ; CHECK-LABEL: test_same_vzip2_p8:
1854 ; CHECK: // %bb.0: // %entry
1855 ; CHECK-NEXT: zip2 v0.8b, v0.8b, v0.8b
1858 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
1859 ret <8 x i8> %shuffle.i
1862 define <16 x i8> @test_same_vzip2q_p8(<16 x i8> %a) {
1863 ; CHECK-LABEL: test_same_vzip2q_p8:
1864 ; CHECK: // %bb.0: // %entry
1865 ; CHECK-NEXT: zip2 v0.16b, v0.16b, v0.16b
1868 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
1869 ret <16 x i8> %shuffle.i
1872 define <4 x i16> @test_same_vzip2_p16(<4 x i16> %a) {
1873 ; CHECK-LABEL: test_same_vzip2_p16:
1874 ; CHECK: // %bb.0: // %entry
1875 ; CHECK-NEXT: zip2 v0.4h, v0.4h, v0.4h
1878 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
1879 ret <4 x i16> %shuffle.i
1882 define <8 x i16> @test_same_vzip2q_p16(<8 x i16> %a) {
1883 ; CHECK-LABEL: test_same_vzip2q_p16:
1884 ; CHECK: // %bb.0: // %entry
1885 ; CHECK-NEXT: zip2 v0.8h, v0.8h, v0.8h
1888 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
1889 ret <8 x i16> %shuffle.i
1892 define <8 x i8> @test_same_vtrn1_s8(<8 x i8> %a) {
1893 ; CHECK-LABEL: test_same_vtrn1_s8:
1894 ; CHECK: // %bb.0: // %entry
1895 ; CHECK-NEXT: trn1 v0.8b, v0.8b, v0.8b
1898 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
1899 ret <8 x i8> %shuffle.i
1902 define <16 x i8> @test_same_vtrn1q_s8(<16 x i8> %a) {
1903 ; CHECK-LABEL: test_same_vtrn1q_s8:
1904 ; CHECK: // %bb.0: // %entry
1905 ; CHECK-NEXT: trn1 v0.16b, v0.16b, v0.16b
1908 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
1909 ret <16 x i8> %shuffle.i
1912 define <4 x i16> @test_same_vtrn1_s16(<4 x i16> %a) {
1913 ; CHECK-LABEL: test_same_vtrn1_s16:
1914 ; CHECK: // %bb.0: // %entry
1915 ; CHECK-NEXT: trn1 v0.4h, v0.4h, v0.4h
1918 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
1919 ret <4 x i16> %shuffle.i
1922 define <8 x i16> @test_same_vtrn1q_s16(<8 x i16> %a) {
1923 ; CHECK-LABEL: test_same_vtrn1q_s16:
1924 ; CHECK: // %bb.0: // %entry
1925 ; CHECK-NEXT: trn1 v0.8h, v0.8h, v0.8h
1928 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
1929 ret <8 x i16> %shuffle.i
1932 define <4 x i32> @test_same_vtrn1q_s32(<4 x i32> %a) {
1933 ; CHECK-LABEL: test_same_vtrn1q_s32:
1934 ; CHECK: // %bb.0: // %entry
1935 ; CHECK-NEXT: trn1 v0.4s, v0.4s, v0.4s
1938 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
1939 ret <4 x i32> %shuffle.i
1942 define <8 x i8> @test_same_vtrn1_u8(<8 x i8> %a) {
1943 ; CHECK-LABEL: test_same_vtrn1_u8:
1944 ; CHECK: // %bb.0: // %entry
1945 ; CHECK-NEXT: trn1 v0.8b, v0.8b, v0.8b
1948 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
1949 ret <8 x i8> %shuffle.i
1952 define <16 x i8> @test_same_vtrn1q_u8(<16 x i8> %a) {
1953 ; CHECK-LABEL: test_same_vtrn1q_u8:
1954 ; CHECK: // %bb.0: // %entry
1955 ; CHECK-NEXT: trn1 v0.16b, v0.16b, v0.16b
1958 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
1959 ret <16 x i8> %shuffle.i
1962 define <4 x i16> @test_same_vtrn1_u16(<4 x i16> %a) {
1963 ; CHECK-LABEL: test_same_vtrn1_u16:
1964 ; CHECK: // %bb.0: // %entry
1965 ; CHECK-NEXT: trn1 v0.4h, v0.4h, v0.4h
1968 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
1969 ret <4 x i16> %shuffle.i
1972 define <8 x i16> @test_same_vtrn1q_u16(<8 x i16> %a) {
1973 ; CHECK-LABEL: test_same_vtrn1q_u16:
1974 ; CHECK: // %bb.0: // %entry
1975 ; CHECK-NEXT: trn1 v0.8h, v0.8h, v0.8h
1978 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
1979 ret <8 x i16> %shuffle.i
1982 define <4 x i32> @test_same_vtrn1q_u32(<4 x i32> %a) {
1983 ; CHECK-LABEL: test_same_vtrn1q_u32:
1984 ; CHECK: // %bb.0: // %entry
1985 ; CHECK-NEXT: trn1 v0.4s, v0.4s, v0.4s
1988 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
1989 ret <4 x i32> %shuffle.i
1992 define <4 x float> @test_same_vtrn1q_f32(<4 x float> %a) {
1993 ; CHECK-LABEL: test_same_vtrn1q_f32:
1994 ; CHECK: // %bb.0: // %entry
1995 ; CHECK-NEXT: trn1 v0.4s, v0.4s, v0.4s
1998 %shuffle.i = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
1999 ret <4 x float> %shuffle.i
2002 define <8 x i8> @test_same_vtrn1_p8(<8 x i8> %a) {
2003 ; CHECK-LABEL: test_same_vtrn1_p8:
2004 ; CHECK: // %bb.0: // %entry
2005 ; CHECK-NEXT: trn1 v0.8b, v0.8b, v0.8b
2008 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
2009 ret <8 x i8> %shuffle.i
2012 define <16 x i8> @test_same_vtrn1q_p8(<16 x i8> %a) {
2013 ; CHECK-LABEL: test_same_vtrn1q_p8:
2014 ; CHECK: // %bb.0: // %entry
2015 ; CHECK-NEXT: trn1 v0.16b, v0.16b, v0.16b
2018 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
2019 ret <16 x i8> %shuffle.i
2022 define <4 x i16> @test_same_vtrn1_p16(<4 x i16> %a) {
2023 ; CHECK-LABEL: test_same_vtrn1_p16:
2024 ; CHECK: // %bb.0: // %entry
2025 ; CHECK-NEXT: trn1 v0.4h, v0.4h, v0.4h
2028 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
2029 ret <4 x i16> %shuffle.i
2032 define <8 x i16> @test_same_vtrn1q_p16(<8 x i16> %a) {
2033 ; CHECK-LABEL: test_same_vtrn1q_p16:
2034 ; CHECK: // %bb.0: // %entry
2035 ; CHECK-NEXT: trn1 v0.8h, v0.8h, v0.8h
2038 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
2039 ret <8 x i16> %shuffle.i
2042 define <8 x i8> @test_same_vtrn2_s8(<8 x i8> %a) {
2043 ; CHECK-LABEL: test_same_vtrn2_s8:
2044 ; CHECK: // %bb.0: // %entry
2045 ; CHECK-NEXT: trn2 v0.8b, v0.8b, v0.8b
2048 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
2049 ret <8 x i8> %shuffle.i
2052 define <16 x i8> @test_same_vtrn2q_s8(<16 x i8> %a) {
2053 ; CHECK-LABEL: test_same_vtrn2q_s8:
2054 ; CHECK: // %bb.0: // %entry
2055 ; CHECK-NEXT: trn2 v0.16b, v0.16b, v0.16b
2058 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
2059 ret <16 x i8> %shuffle.i
2062 define <4 x i16> @test_same_vtrn2_s16(<4 x i16> %a) {
2063 ; CHECK-LABEL: test_same_vtrn2_s16:
2064 ; CHECK: // %bb.0: // %entry
2065 ; CHECK-NEXT: trn2 v0.4h, v0.4h, v0.4h
2068 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
2069 ret <4 x i16> %shuffle.i
2072 define <8 x i16> @test_same_vtrn2q_s16(<8 x i16> %a) {
2073 ; CHECK-LABEL: test_same_vtrn2q_s16:
2074 ; CHECK: // %bb.0: // %entry
2075 ; CHECK-NEXT: trn2 v0.8h, v0.8h, v0.8h
2078 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
2079 ret <8 x i16> %shuffle.i
2082 define <4 x i32> @test_same_vtrn2q_s32(<4 x i32> %a) {
2083 ; CHECK-LABEL: test_same_vtrn2q_s32:
2084 ; CHECK: // %bb.0: // %entry
2085 ; CHECK-NEXT: trn2 v0.4s, v0.4s, v0.4s
2088 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
2089 ret <4 x i32> %shuffle.i
2092 define <8 x i8> @test_same_vtrn2_u8(<8 x i8> %a) {
2093 ; CHECK-LABEL: test_same_vtrn2_u8:
2094 ; CHECK: // %bb.0: // %entry
2095 ; CHECK-NEXT: trn2 v0.8b, v0.8b, v0.8b
2098 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
2099 ret <8 x i8> %shuffle.i
2102 define <16 x i8> @test_same_vtrn2q_u8(<16 x i8> %a) {
2103 ; CHECK-LABEL: test_same_vtrn2q_u8:
2104 ; CHECK: // %bb.0: // %entry
2105 ; CHECK-NEXT: trn2 v0.16b, v0.16b, v0.16b
2108 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
2109 ret <16 x i8> %shuffle.i
2112 define <4 x i16> @test_same_vtrn2_u16(<4 x i16> %a) {
2113 ; CHECK-LABEL: test_same_vtrn2_u16:
2114 ; CHECK: // %bb.0: // %entry
2115 ; CHECK-NEXT: trn2 v0.4h, v0.4h, v0.4h
2118 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
2119 ret <4 x i16> %shuffle.i
2122 define <8 x i16> @test_same_vtrn2q_u16(<8 x i16> %a) {
2123 ; CHECK-LABEL: test_same_vtrn2q_u16:
2124 ; CHECK: // %bb.0: // %entry
2125 ; CHECK-NEXT: trn2 v0.8h, v0.8h, v0.8h
2128 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
2129 ret <8 x i16> %shuffle.i
2132 define <4 x i32> @test_same_vtrn2q_u32(<4 x i32> %a) {
2133 ; CHECK-LABEL: test_same_vtrn2q_u32:
2134 ; CHECK: // %bb.0: // %entry
2135 ; CHECK-NEXT: trn2 v0.4s, v0.4s, v0.4s
2138 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
2139 ret <4 x i32> %shuffle.i
2142 define <4 x float> @test_same_vtrn2q_f32(<4 x float> %a) {
2143 ; CHECK-LABEL: test_same_vtrn2q_f32:
2144 ; CHECK: // %bb.0: // %entry
2145 ; CHECK-NEXT: trn2 v0.4s, v0.4s, v0.4s
2148 %shuffle.i = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
2149 ret <4 x float> %shuffle.i
2152 define <8 x i8> @test_same_vtrn2_p8(<8 x i8> %a) {
2153 ; CHECK-LABEL: test_same_vtrn2_p8:
2154 ; CHECK: // %bb.0: // %entry
2155 ; CHECK-NEXT: trn2 v0.8b, v0.8b, v0.8b
2158 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
2159 ret <8 x i8> %shuffle.i
2162 define <16 x i8> @test_same_vtrn2q_p8(<16 x i8> %a) {
2163 ; CHECK-LABEL: test_same_vtrn2q_p8:
2164 ; CHECK: // %bb.0: // %entry
2165 ; CHECK-NEXT: trn2 v0.16b, v0.16b, v0.16b
2168 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
2169 ret <16 x i8> %shuffle.i
2172 define <4 x i16> @test_same_vtrn2_p16(<4 x i16> %a) {
2173 ; CHECK-LABEL: test_same_vtrn2_p16:
2174 ; CHECK: // %bb.0: // %entry
2175 ; CHECK-NEXT: trn2 v0.4h, v0.4h, v0.4h
2178 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
2179 ret <4 x i16> %shuffle.i
2182 define <8 x i16> @test_same_vtrn2q_p16(<8 x i16> %a) {
2183 ; CHECK-LABEL: test_same_vtrn2q_p16:
2184 ; CHECK: // %bb.0: // %entry
2185 ; CHECK-NEXT: trn2 v0.8h, v0.8h, v0.8h
2188 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
2189 ret <8 x i16> %shuffle.i
2193 define <8 x i8> @test_undef_vuzp1_s8(<8 x i8> %a) {
2194 ; CHECK-LABEL: test_undef_vuzp1_s8:
2195 ; CHECK: // %bb.0: // %entry
2196 ; CHECK-NEXT: uzp1 v0.8b, v0.8b, v0.8b
2199 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
2200 ret <8 x i8> %shuffle.i
2203 define <16 x i8> @test_undef_vuzp1q_s8(<16 x i8> %a) {
2204 ; CHECK-LABEL: test_undef_vuzp1q_s8:
2205 ; CHECK: // %bb.0: // %entry
2206 ; CHECK-NEXT: xtn v0.8b, v0.8h
2209 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
2210 ret <16 x i8> %shuffle.i
2213 define <4 x i16> @test_undef_vuzp1_s16(<4 x i16> %a) {
2214 ; CHECK-LABEL: test_undef_vuzp1_s16:
2215 ; CHECK: // %bb.0: // %entry
2216 ; CHECK-NEXT: uzp1 v0.4h, v0.4h, v0.4h
2219 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
2220 ret <4 x i16> %shuffle.i
2223 define <8 x i16> @test_undef_vuzp1q_s16(<8 x i16> %a) {
2224 ; CHECK-LABEL: test_undef_vuzp1q_s16:
2225 ; CHECK: // %bb.0: // %entry
2226 ; CHECK-NEXT: xtn v0.4h, v0.4s
2229 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
2230 ret <8 x i16> %shuffle.i
2233 define <4 x i32> @test_undef_vuzp1q_s32(<4 x i32> %a) {
2234 ; CHECK-LABEL: test_undef_vuzp1q_s32:
2235 ; CHECK: // %bb.0: // %entry
2236 ; CHECK-NEXT: xtn v0.2s, v0.2d
2239 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
2240 ret <4 x i32> %shuffle.i
2243 define <8 x i8> @test_undef_vuzp1_u8(<8 x i8> %a) {
2244 ; CHECK-LABEL: test_undef_vuzp1_u8:
2245 ; CHECK: // %bb.0: // %entry
2246 ; CHECK-NEXT: uzp1 v0.8b, v0.8b, v0.8b
2249 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
2250 ret <8 x i8> %shuffle.i
2253 define <16 x i8> @test_undef_vuzp1q_u8(<16 x i8> %a) {
2254 ; CHECK-LABEL: test_undef_vuzp1q_u8:
2255 ; CHECK: // %bb.0: // %entry
2256 ; CHECK-NEXT: xtn v0.8b, v0.8h
2259 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
2260 ret <16 x i8> %shuffle.i
2263 define <4 x i16> @test_undef_vuzp1_u16(<4 x i16> %a) {
2264 ; CHECK-LABEL: test_undef_vuzp1_u16:
2265 ; CHECK: // %bb.0: // %entry
2266 ; CHECK-NEXT: uzp1 v0.4h, v0.4h, v0.4h
2269 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
2270 ret <4 x i16> %shuffle.i
2273 define <8 x i16> @test_undef_vuzp1q_u16(<8 x i16> %a) {
2274 ; CHECK-LABEL: test_undef_vuzp1q_u16:
2275 ; CHECK: // %bb.0: // %entry
2276 ; CHECK-NEXT: xtn v0.4h, v0.4s
2279 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
2280 ret <8 x i16> %shuffle.i
2283 define <4 x i32> @test_undef_vuzp1q_u32(<4 x i32> %a) {
2284 ; CHECK-LABEL: test_undef_vuzp1q_u32:
2285 ; CHECK: // %bb.0: // %entry
2286 ; CHECK-NEXT: xtn v0.2s, v0.2d
2289 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
2290 ret <4 x i32> %shuffle.i
2293 define <4 x float> @test_undef_vuzp1q_f32(<4 x float> %a) {
2294 ; CHECK-LABEL: test_undef_vuzp1q_f32:
2295 ; CHECK: // %bb.0: // %entry
2296 ; CHECK-NEXT: uzp1 v0.4s, v0.4s, v0.4s
2299 %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
2300 ret <4 x float> %shuffle.i
2303 define <8 x i8> @test_undef_vuzp1_p8(<8 x i8> %a) {
2304 ; CHECK-LABEL: test_undef_vuzp1_p8:
2305 ; CHECK: // %bb.0: // %entry
2306 ; CHECK-NEXT: uzp1 v0.8b, v0.8b, v0.8b
2309 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
2310 ret <8 x i8> %shuffle.i
2313 define <16 x i8> @test_undef_vuzp1q_p8(<16 x i8> %a) {
2314 ; CHECK-LABEL: test_undef_vuzp1q_p8:
2315 ; CHECK: // %bb.0: // %entry
2316 ; CHECK-NEXT: xtn v0.8b, v0.8h
2319 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
2320 ret <16 x i8> %shuffle.i
2323 define <4 x i16> @test_undef_vuzp1_p16(<4 x i16> %a) {
2324 ; CHECK-LABEL: test_undef_vuzp1_p16:
2325 ; CHECK: // %bb.0: // %entry
2326 ; CHECK-NEXT: uzp1 v0.4h, v0.4h, v0.4h
2329 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
2330 ret <4 x i16> %shuffle.i
2333 define <8 x i16> @test_undef_vuzp1q_p16(<8 x i16> %a) {
2334 ; CHECK-LABEL: test_undef_vuzp1q_p16:
2335 ; CHECK: // %bb.0: // %entry
2336 ; CHECK-NEXT: xtn v0.4h, v0.4s
2339 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
2340 ret <8 x i16> %shuffle.i
2343 define <8 x i8> @test_undef_vuzp2_s8(<8 x i8> %a) {
2344 ; CHECK-LABEL: test_undef_vuzp2_s8:
2345 ; CHECK: // %bb.0: // %entry
2346 ; CHECK-NEXT: uzp2 v0.8b, v0.8b, v0.8b
2349 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
2350 ret <8 x i8> %shuffle.i
2353 define <16 x i8> @test_undef_vuzp2q_s8(<16 x i8> %a) {
2354 ; CHECK-LABEL: test_undef_vuzp2q_s8:
2355 ; CHECK: // %bb.0: // %entry
2356 ; CHECK-NEXT: uzp2 v0.16b, v0.16b, v0.16b
2359 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
2360 ret <16 x i8> %shuffle.i
2363 define <4 x i16> @test_undef_vuzp2_s16(<4 x i16> %a) {
2364 ; CHECK-LABEL: test_undef_vuzp2_s16:
2365 ; CHECK: // %bb.0: // %entry
2366 ; CHECK-NEXT: uzp2 v0.4h, v0.4h, v0.4h
2369 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
2370 ret <4 x i16> %shuffle.i
2373 define <8 x i16> @test_undef_vuzp2q_s16(<8 x i16> %a) {
2374 ; CHECK-LABEL: test_undef_vuzp2q_s16:
2375 ; CHECK: // %bb.0: // %entry
2376 ; CHECK-NEXT: uzp2 v0.8h, v0.8h, v0.8h
2379 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
2380 ret <8 x i16> %shuffle.i
2383 define <4 x i32> @test_undef_vuzp2q_s32(<4 x i32> %a) {
2384 ; CHECK-LABEL: test_undef_vuzp2q_s32:
2385 ; CHECK: // %bb.0: // %entry
2386 ; CHECK-NEXT: uzp2 v0.4s, v0.4s, v0.4s
2389 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
2390 ret <4 x i32> %shuffle.i
2393 define <8 x i8> @test_undef_vuzp2_u8(<8 x i8> %a) {
2394 ; CHECK-LABEL: test_undef_vuzp2_u8:
2395 ; CHECK: // %bb.0: // %entry
2396 ; CHECK-NEXT: uzp2 v0.8b, v0.8b, v0.8b
2399 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
2400 ret <8 x i8> %shuffle.i
2403 define <16 x i8> @test_undef_vuzp2q_u8(<16 x i8> %a) {
2404 ; CHECK-LABEL: test_undef_vuzp2q_u8:
2405 ; CHECK: // %bb.0: // %entry
2406 ; CHECK-NEXT: uzp2 v0.16b, v0.16b, v0.16b
2409 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
2410 ret <16 x i8> %shuffle.i
2413 define <4 x i16> @test_undef_vuzp2_u16(<4 x i16> %a) {
2414 ; CHECK-LABEL: test_undef_vuzp2_u16:
2415 ; CHECK: // %bb.0: // %entry
2416 ; CHECK-NEXT: uzp2 v0.4h, v0.4h, v0.4h
2419 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
2420 ret <4 x i16> %shuffle.i
2423 define <8 x i16> @test_undef_vuzp2q_u16(<8 x i16> %a) {
2424 ; CHECK-LABEL: test_undef_vuzp2q_u16:
2425 ; CHECK: // %bb.0: // %entry
2426 ; CHECK-NEXT: uzp2 v0.8h, v0.8h, v0.8h
2429 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
2430 ret <8 x i16> %shuffle.i
2433 define <4 x i32> @test_undef_vuzp2q_u32(<4 x i32> %a) {
2434 ; CHECK-LABEL: test_undef_vuzp2q_u32:
2435 ; CHECK: // %bb.0: // %entry
2436 ; CHECK-NEXT: uzp2 v0.4s, v0.4s, v0.4s
2439 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
2440 ret <4 x i32> %shuffle.i
2443 define <4 x float> @test_undef_vuzp2q_f32(<4 x float> %a) {
2444 ; CHECK-LABEL: test_undef_vuzp2q_f32:
2445 ; CHECK: // %bb.0: // %entry
2446 ; CHECK-NEXT: uzp2 v0.4s, v0.4s, v0.4s
2449 %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
2450 ret <4 x float> %shuffle.i
2453 define <8 x i8> @test_undef_vuzp2_p8(<8 x i8> %a) {
2454 ; CHECK-LABEL: test_undef_vuzp2_p8:
2455 ; CHECK: // %bb.0: // %entry
2456 ; CHECK-NEXT: uzp2 v0.8b, v0.8b, v0.8b
2459 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
2460 ret <8 x i8> %shuffle.i
2463 define <16 x i8> @test_undef_vuzp2q_p8(<16 x i8> %a) {
2464 ; CHECK-LABEL: test_undef_vuzp2q_p8:
2465 ; CHECK: // %bb.0: // %entry
2466 ; CHECK-NEXT: uzp2 v0.16b, v0.16b, v0.16b
2469 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
2470 ret <16 x i8> %shuffle.i
2473 define <4 x i16> @test_undef_vuzp2_p16(<4 x i16> %a) {
2474 ; CHECK-LABEL: test_undef_vuzp2_p16:
2475 ; CHECK: // %bb.0: // %entry
2476 ; CHECK-NEXT: uzp2 v0.4h, v0.4h, v0.4h
2479 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
2480 ret <4 x i16> %shuffle.i
2483 define <8 x i16> @test_undef_vuzp2q_p16(<8 x i16> %a) {
2484 ; CHECK-LABEL: test_undef_vuzp2q_p16:
2485 ; CHECK: // %bb.0: // %entry
2486 ; CHECK-NEXT: uzp2 v0.8h, v0.8h, v0.8h
2489 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
2490 ret <8 x i16> %shuffle.i
2493 define <8 x i8> @test_undef_vzip1_s8(<8 x i8> %a) {
2494 ; CHECK-LABEL: test_undef_vzip1_s8:
2495 ; CHECK: // %bb.0: // %entry
2496 ; CHECK-NEXT: zip1 v0.8b, v0.8b, v0.8b
2499 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
2500 ret <8 x i8> %shuffle.i
2503 define <16 x i8> @test_undef_vzip1q_s8(<16 x i8> %a) {
2504 ; CHECK-LABEL: test_undef_vzip1q_s8:
2505 ; CHECK: // %bb.0: // %entry
2506 ; CHECK-NEXT: zip1 v0.16b, v0.16b, v0.16b
2509 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
2510 ret <16 x i8> %shuffle.i
2513 define <4 x i16> @test_undef_vzip1_s16(<4 x i16> %a) {
2514 ; CHECK-LABEL: test_undef_vzip1_s16:
2515 ; CHECK: // %bb.0: // %entry
2516 ; CHECK-NEXT: zip1 v0.4h, v0.4h, v0.4h
2519 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2520 ret <4 x i16> %shuffle.i
2523 define <8 x i16> @test_undef_vzip1q_s16(<8 x i16> %a) {
2524 ; CHECK-LABEL: test_undef_vzip1q_s16:
2525 ; CHECK: // %bb.0: // %entry
2526 ; CHECK-NEXT: zip1 v0.8h, v0.8h, v0.8h
2529 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
2530 ret <8 x i16> %shuffle.i
2533 define <4 x i32> @test_undef_vzip1q_s32(<4 x i32> %a) {
2534 ; CHECK-LABEL: test_undef_vzip1q_s32:
2535 ; CHECK: // %bb.0: // %entry
2536 ; CHECK-NEXT: zip1 v0.4s, v0.4s, v0.4s
2539 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2540 ret <4 x i32> %shuffle.i
2543 define <8 x i8> @test_undef_vzip1_u8(<8 x i8> %a) {
2544 ; CHECK-LABEL: test_undef_vzip1_u8:
2545 ; CHECK: // %bb.0: // %entry
2546 ; CHECK-NEXT: zip1 v0.8b, v0.8b, v0.8b
2549 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
2550 ret <8 x i8> %shuffle.i
2553 define <16 x i8> @test_undef_vzip1q_u8(<16 x i8> %a) {
2554 ; CHECK-LABEL: test_undef_vzip1q_u8:
2555 ; CHECK: // %bb.0: // %entry
2556 ; CHECK-NEXT: zip1 v0.16b, v0.16b, v0.16b
2559 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
2560 ret <16 x i8> %shuffle.i
2563 define <4 x i16> @test_undef_vzip1_u16(<4 x i16> %a) {
2564 ; CHECK-LABEL: test_undef_vzip1_u16:
2565 ; CHECK: // %bb.0: // %entry
2566 ; CHECK-NEXT: zip1 v0.4h, v0.4h, v0.4h
2569 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2570 ret <4 x i16> %shuffle.i
2573 define <8 x i16> @test_undef_vzip1q_u16(<8 x i16> %a) {
2574 ; CHECK-LABEL: test_undef_vzip1q_u16:
2575 ; CHECK: // %bb.0: // %entry
2576 ; CHECK-NEXT: zip1 v0.8h, v0.8h, v0.8h
2579 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
2580 ret <8 x i16> %shuffle.i
2583 define <4 x i32> @test_undef_vzip1q_u32(<4 x i32> %a) {
2584 ; CHECK-LABEL: test_undef_vzip1q_u32:
2585 ; CHECK: // %bb.0: // %entry
2586 ; CHECK-NEXT: zip1 v0.4s, v0.4s, v0.4s
2589 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2590 ret <4 x i32> %shuffle.i
2593 define <4 x float> @test_undef_vzip1q_f32(<4 x float> %a) {
2594 ; CHECK-LABEL: test_undef_vzip1q_f32:
2595 ; CHECK: // %bb.0: // %entry
2596 ; CHECK-NEXT: zip1 v0.4s, v0.4s, v0.4s
2599 %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2600 ret <4 x float> %shuffle.i
2603 define <8 x i8> @test_undef_vzip1_p8(<8 x i8> %a) {
2604 ; CHECK-LABEL: test_undef_vzip1_p8:
2605 ; CHECK: // %bb.0: // %entry
2606 ; CHECK-NEXT: zip1 v0.8b, v0.8b, v0.8b
2609 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
2610 ret <8 x i8> %shuffle.i
2613 define <16 x i8> @test_undef_vzip1q_p8(<16 x i8> %a) {
2614 ; CHECK-LABEL: test_undef_vzip1q_p8:
2615 ; CHECK: // %bb.0: // %entry
2616 ; CHECK-NEXT: zip1 v0.16b, v0.16b, v0.16b
2619 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
2620 ret <16 x i8> %shuffle.i
2623 define <4 x i16> @test_undef_vzip1_p16(<4 x i16> %a) {
2624 ; CHECK-LABEL: test_undef_vzip1_p16:
2625 ; CHECK: // %bb.0: // %entry
2626 ; CHECK-NEXT: zip1 v0.4h, v0.4h, v0.4h
2629 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2630 ret <4 x i16> %shuffle.i
2633 define <8 x i16> @test_undef_vzip1q_p16(<8 x i16> %a) {
2634 ; CHECK-LABEL: test_undef_vzip1q_p16:
2635 ; CHECK: // %bb.0: // %entry
2636 ; CHECK-NEXT: zip1 v0.8h, v0.8h, v0.8h
2639 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
2640 ret <8 x i16> %shuffle.i
2643 define <8 x i8> @test_undef_vzip2_s8(<8 x i8> %a) {
2644 ; CHECK-LABEL: test_undef_vzip2_s8:
2645 ; CHECK: // %bb.0: // %entry
2646 ; CHECK-NEXT: zip2 v0.8b, v0.8b, v0.8b
2649 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
2650 ret <8 x i8> %shuffle.i
2653 define <16 x i8> @test_undef_vzip2q_s8(<16 x i8> %a) {
2654 ; CHECK-LABEL: test_undef_vzip2q_s8:
2655 ; CHECK: // %bb.0: // %entry
2656 ; CHECK-NEXT: zip2 v0.16b, v0.16b, v0.16b
2659 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
2660 ret <16 x i8> %shuffle.i
2663 define <4 x i16> @test_undef_vzip2_s16(<4 x i16> %a) {
2664 ; CHECK-LABEL: test_undef_vzip2_s16:
2665 ; CHECK: // %bb.0: // %entry
2666 ; CHECK-NEXT: zip2 v0.4h, v0.4h, v0.4h
2669 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2670 ret <4 x i16> %shuffle.i
2673 define <8 x i16> @test_undef_vzip2q_s16(<8 x i16> %a) {
2674 ; CHECK-LABEL: test_undef_vzip2q_s16:
2675 ; CHECK: // %bb.0: // %entry
2676 ; CHECK-NEXT: zip2 v0.8h, v0.8h, v0.8h
2679 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
2680 ret <8 x i16> %shuffle.i
2683 define <4 x i32> @test_undef_vzip2q_s32(<4 x i32> %a) {
2684 ; CHECK-LABEL: test_undef_vzip2q_s32:
2685 ; CHECK: // %bb.0: // %entry
2686 ; CHECK-NEXT: zip2 v0.4s, v0.4s, v0.4s
2689 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2690 ret <4 x i32> %shuffle.i
2693 define <8 x i8> @test_undef_vzip2_u8(<8 x i8> %a) {
2694 ; CHECK-LABEL: test_undef_vzip2_u8:
2695 ; CHECK: // %bb.0: // %entry
2696 ; CHECK-NEXT: zip2 v0.8b, v0.8b, v0.8b
2699 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
2700 ret <8 x i8> %shuffle.i
2703 define <16 x i8> @test_undef_vzip2q_u8(<16 x i8> %a) {
2704 ; CHECK-LABEL: test_undef_vzip2q_u8:
2705 ; CHECK: // %bb.0: // %entry
2706 ; CHECK-NEXT: zip2 v0.16b, v0.16b, v0.16b
2709 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
2710 ret <16 x i8> %shuffle.i
2713 define <4 x i16> @test_undef_vzip2_u16(<4 x i16> %a) {
2714 ; CHECK-LABEL: test_undef_vzip2_u16:
2715 ; CHECK: // %bb.0: // %entry
2716 ; CHECK-NEXT: zip2 v0.4h, v0.4h, v0.4h
2719 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2720 ret <4 x i16> %shuffle.i
2723 define <8 x i16> @test_undef_vzip2q_u16(<8 x i16> %a) {
2724 ; CHECK-LABEL: test_undef_vzip2q_u16:
2725 ; CHECK: // %bb.0: // %entry
2726 ; CHECK-NEXT: zip2 v0.8h, v0.8h, v0.8h
2729 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
2730 ret <8 x i16> %shuffle.i
2733 define <4 x i32> @test_undef_vzip2q_u32(<4 x i32> %a) {
2734 ; CHECK-LABEL: test_undef_vzip2q_u32:
2735 ; CHECK: // %bb.0: // %entry
2736 ; CHECK-NEXT: zip2 v0.4s, v0.4s, v0.4s
2739 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2740 ret <4 x i32> %shuffle.i
2743 define <4 x float> @test_undef_vzip2q_f32(<4 x float> %a) {
2744 ; CHECK-LABEL: test_undef_vzip2q_f32:
2745 ; CHECK: // %bb.0: // %entry
2746 ; CHECK-NEXT: zip2 v0.4s, v0.4s, v0.4s
2749 %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2750 ret <4 x float> %shuffle.i
2753 define <8 x i8> @test_undef_vzip2_p8(<8 x i8> %a) {
2754 ; CHECK-LABEL: test_undef_vzip2_p8:
2755 ; CHECK: // %bb.0: // %entry
2756 ; CHECK-NEXT: zip2 v0.8b, v0.8b, v0.8b
2759 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
2760 ret <8 x i8> %shuffle.i
2763 define <16 x i8> @test_undef_vzip2q_p8(<16 x i8> %a) {
2764 ; CHECK-LABEL: test_undef_vzip2q_p8:
2765 ; CHECK: // %bb.0: // %entry
2766 ; CHECK-NEXT: zip2 v0.16b, v0.16b, v0.16b
2769 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
2770 ret <16 x i8> %shuffle.i
2773 define <4 x i16> @test_undef_vzip2_p16(<4 x i16> %a) {
2774 ; CHECK-LABEL: test_undef_vzip2_p16:
2775 ; CHECK: // %bb.0: // %entry
2776 ; CHECK-NEXT: zip2 v0.4h, v0.4h, v0.4h
2779 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2780 ret <4 x i16> %shuffle.i
2783 define <8 x i16> @test_undef_vzip2q_p16(<8 x i16> %a) {
2784 ; CHECK-LABEL: test_undef_vzip2q_p16:
2785 ; CHECK: // %bb.0: // %entry
2786 ; CHECK-NEXT: zip2 v0.8h, v0.8h, v0.8h
2789 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
2790 ret <8 x i16> %shuffle.i
2793 define <8 x i8> @test_undef_vtrn1_s8(<8 x i8> %a) {
2794 ; CHECK-LABEL: test_undef_vtrn1_s8:
2795 ; CHECK: // %bb.0: // %entry
2798 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
2799 ret <8 x i8> %shuffle.i
2802 define <16 x i8> @test_undef_vtrn1q_s8(<16 x i8> %a) {
2803 ; CHECK-LABEL: test_undef_vtrn1q_s8:
2804 ; CHECK: // %bb.0: // %entry
2807 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
2808 ret <16 x i8> %shuffle.i
2811 define <4 x i16> @test_undef_vtrn1_s16(<4 x i16> %a) {
2812 ; CHECK-LABEL: test_undef_vtrn1_s16:
2813 ; CHECK: // %bb.0: // %entry
2816 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
2817 ret <4 x i16> %shuffle.i
2820 define <8 x i16> @test_undef_vtrn1q_s16(<8 x i16> %a) {
2821 ; CHECK-LABEL: test_undef_vtrn1q_s16:
2822 ; CHECK: // %bb.0: // %entry
2825 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
2826 ret <8 x i16> %shuffle.i
2829 define <4 x i32> @test_undef_vtrn1q_s32(<4 x i32> %a) {
2830 ; CHECK-LABEL: test_undef_vtrn1q_s32:
2831 ; CHECK: // %bb.0: // %entry
2834 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
2835 ret <4 x i32> %shuffle.i
2838 define <8 x i8> @test_undef_vtrn1_u8(<8 x i8> %a) {
2839 ; CHECK-LABEL: test_undef_vtrn1_u8:
2840 ; CHECK: // %bb.0: // %entry
2843 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
2844 ret <8 x i8> %shuffle.i
2847 define <16 x i8> @test_undef_vtrn1q_u8(<16 x i8> %a) {
2848 ; CHECK-LABEL: test_undef_vtrn1q_u8:
2849 ; CHECK: // %bb.0: // %entry
2852 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
2853 ret <16 x i8> %shuffle.i
2856 define <4 x i16> @test_undef_vtrn1_u16(<4 x i16> %a) {
2857 ; CHECK-LABEL: test_undef_vtrn1_u16:
2858 ; CHECK: // %bb.0: // %entry
2861 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
2862 ret <4 x i16> %shuffle.i
2865 define <8 x i16> @test_undef_vtrn1q_u16(<8 x i16> %a) {
2866 ; CHECK-LABEL: test_undef_vtrn1q_u16:
2867 ; CHECK: // %bb.0: // %entry
2870 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
2871 ret <8 x i16> %shuffle.i
2874 define <4 x i32> @test_undef_vtrn1q_u32(<4 x i32> %a) {
2875 ; CHECK-LABEL: test_undef_vtrn1q_u32:
2876 ; CHECK: // %bb.0: // %entry
2879 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
2880 ret <4 x i32> %shuffle.i
2883 define <4 x float> @test_undef_vtrn1q_f32(<4 x float> %a) {
2884 ; CHECK-LABEL: test_undef_vtrn1q_f32:
2885 ; CHECK: // %bb.0: // %entry
2888 %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
2889 ret <4 x float> %shuffle.i
2892 define <8 x i8> @test_undef_vtrn1_p8(<8 x i8> %a) {
2893 ; CHECK-LABEL: test_undef_vtrn1_p8:
2894 ; CHECK: // %bb.0: // %entry
2897 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
2898 ret <8 x i8> %shuffle.i
2901 define <16 x i8> @test_undef_vtrn1q_p8(<16 x i8> %a) {
2902 ; CHECK-LABEL: test_undef_vtrn1q_p8:
2903 ; CHECK: // %bb.0: // %entry
2906 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
2907 ret <16 x i8> %shuffle.i
2910 define <4 x i16> @test_undef_vtrn1_p16(<4 x i16> %a) {
2911 ; CHECK-LABEL: test_undef_vtrn1_p16:
2912 ; CHECK: // %bb.0: // %entry
2915 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
2916 ret <4 x i16> %shuffle.i
2919 define <8 x i16> @test_undef_vtrn1q_p16(<8 x i16> %a) {
2920 ; CHECK-LABEL: test_undef_vtrn1q_p16:
2921 ; CHECK: // %bb.0: // %entry
2924 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
2925 ret <8 x i16> %shuffle.i
2928 define <8 x i8> @test_undef_vtrn2_s8(<8 x i8> %a) {
2929 ; CHECK-LABEL: test_undef_vtrn2_s8:
2930 ; CHECK: // %bb.0: // %entry
2931 ; CHECK-NEXT: rev16 v0.8b, v0.8b
2934 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
2935 ret <8 x i8> %shuffle.i
2938 define <16 x i8> @test_undef_vtrn2q_s8(<16 x i8> %a) {
2939 ; CHECK-LABEL: test_undef_vtrn2q_s8:
2940 ; CHECK: // %bb.0: // %entry
2941 ; CHECK-NEXT: rev16 v0.16b, v0.16b
2944 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
2945 ret <16 x i8> %shuffle.i
2948 define <4 x i16> @test_undef_vtrn2_s16(<4 x i16> %a) {
2949 ; CHECK-LABEL: test_undef_vtrn2_s16:
2950 ; CHECK: // %bb.0: // %entry
2951 ; CHECK-NEXT: rev32 v0.4h, v0.4h
2954 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
2955 ret <4 x i16> %shuffle.i
2958 define <8 x i16> @test_undef_vtrn2q_s16(<8 x i16> %a) {
2959 ; CHECK-LABEL: test_undef_vtrn2q_s16:
2960 ; CHECK: // %bb.0: // %entry
2961 ; CHECK-NEXT: rev32 v0.8h, v0.8h
2964 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
2965 ret <8 x i16> %shuffle.i
2968 define <4 x i32> @test_undef_vtrn2q_s32(<4 x i32> %a) {
2969 ; CHECK-LABEL: test_undef_vtrn2q_s32:
2970 ; CHECK: // %bb.0: // %entry
2971 ; CHECK-NEXT: rev64 v0.4s, v0.4s
2974 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
2975 ret <4 x i32> %shuffle.i
2978 define <8 x i8> @test_undef_vtrn2_u8(<8 x i8> %a) {
2979 ; CHECK-LABEL: test_undef_vtrn2_u8:
2980 ; CHECK: // %bb.0: // %entry
2981 ; CHECK-NEXT: rev16 v0.8b, v0.8b
2984 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
2985 ret <8 x i8> %shuffle.i
2988 define <16 x i8> @test_undef_vtrn2q_u8(<16 x i8> %a) {
2989 ; CHECK-LABEL: test_undef_vtrn2q_u8:
2990 ; CHECK: // %bb.0: // %entry
2991 ; CHECK-NEXT: rev16 v0.16b, v0.16b
2994 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
2995 ret <16 x i8> %shuffle.i
2998 define <4 x i16> @test_undef_vtrn2_u16(<4 x i16> %a) {
2999 ; CHECK-LABEL: test_undef_vtrn2_u16:
3000 ; CHECK: // %bb.0: // %entry
3001 ; CHECK-NEXT: rev32 v0.4h, v0.4h
3004 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
3005 ret <4 x i16> %shuffle.i
3008 define <8 x i16> @test_undef_vtrn2q_u16(<8 x i16> %a) {
3009 ; CHECK-LABEL: test_undef_vtrn2q_u16:
3010 ; CHECK: // %bb.0: // %entry
3011 ; CHECK-NEXT: rev32 v0.8h, v0.8h
3014 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
3015 ret <8 x i16> %shuffle.i
3018 define <4 x i32> @test_undef_vtrn2q_u32(<4 x i32> %a) {
3019 ; CHECK-LABEL: test_undef_vtrn2q_u32:
3020 ; CHECK: // %bb.0: // %entry
3021 ; CHECK-NEXT: rev64 v0.4s, v0.4s
3024 %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
3025 ret <4 x i32> %shuffle.i
3028 define <4 x float> @test_undef_vtrn2q_f32(<4 x float> %a) {
3029 ; CHECK-LABEL: test_undef_vtrn2q_f32:
3030 ; CHECK: // %bb.0: // %entry
3031 ; CHECK-NEXT: rev64 v0.4s, v0.4s
3034 %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
3035 ret <4 x float> %shuffle.i
3038 define <8 x i8> @test_undef_vtrn2_p8(<8 x i8> %a) {
3039 ; CHECK-LABEL: test_undef_vtrn2_p8:
3040 ; CHECK: // %bb.0: // %entry
3041 ; CHECK-NEXT: rev16 v0.8b, v0.8b
3044 %shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
3045 ret <8 x i8> %shuffle.i
3048 define <16 x i8> @test_undef_vtrn2q_p8(<16 x i8> %a) {
3049 ; CHECK-LABEL: test_undef_vtrn2q_p8:
3050 ; CHECK: // %bb.0: // %entry
3051 ; CHECK-NEXT: rev16 v0.16b, v0.16b
3054 %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
3055 ret <16 x i8> %shuffle.i
3058 define <4 x i16> @test_undef_vtrn2_p16(<4 x i16> %a) {
3059 ; CHECK-LABEL: test_undef_vtrn2_p16:
3060 ; CHECK: // %bb.0: // %entry
3061 ; CHECK-NEXT: rev32 v0.4h, v0.4h
3064 %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
3065 ret <4 x i16> %shuffle.i
3068 define <8 x i16> @test_undef_vtrn2q_p16(<8 x i16> %a) {
3069 ; CHECK-LABEL: test_undef_vtrn2q_p16:
3070 ; CHECK: // %bb.0: // %entry
3071 ; CHECK-NEXT: rev32 v0.8h, v0.8h
3074 %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
3075 ret <8 x i16> %shuffle.i
3078 define %struct.int8x8x2_t @test_vuzp_s8(<8 x i8> %a, <8 x i8> %b) {
3079 ; CHECK-LABEL: test_vuzp_s8:
3080 ; CHECK: // %bb.0: // %entry
3081 ; CHECK-NEXT: uzp1 v2.8b, v0.8b, v1.8b
3082 ; CHECK-NEXT: uzp2 v1.8b, v0.8b, v1.8b
3083 ; CHECK-NEXT: fmov d0, d2
3086 %vuzp.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
3087 %vuzp1.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
3088 %.fca.0.0.insert = insertvalue %struct.int8x8x2_t undef, <8 x i8> %vuzp.i, 0, 0
3089 %.fca.0.1.insert = insertvalue %struct.int8x8x2_t %.fca.0.0.insert, <8 x i8> %vuzp1.i, 0, 1
3090 ret %struct.int8x8x2_t %.fca.0.1.insert
3093 define %struct.int16x4x2_t @test_vuzp_s16(<4 x i16> %a, <4 x i16> %b) {
3094 ; CHECK-LABEL: test_vuzp_s16:
3095 ; CHECK: // %bb.0: // %entry
3096 ; CHECK-NEXT: uzp1 v2.4h, v0.4h, v1.4h
3097 ; CHECK-NEXT: uzp2 v1.4h, v0.4h, v1.4h
3098 ; CHECK-NEXT: fmov d0, d2
3101 %vuzp.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
3102 %vuzp1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
3103 %.fca.0.0.insert = insertvalue %struct.int16x4x2_t undef, <4 x i16> %vuzp.i, 0, 0
3104 %.fca.0.1.insert = insertvalue %struct.int16x4x2_t %.fca.0.0.insert, <4 x i16> %vuzp1.i, 0, 1
3105 ret %struct.int16x4x2_t %.fca.0.1.insert
3108 define %struct.int32x2x2_t @test_vuzp_s32(<2 x i32> %a, <2 x i32> %b) {
3109 ; CHECK-LABEL: test_vuzp_s32:
3110 ; CHECK: // %bb.0: // %entry
3111 ; CHECK-NEXT: zip1 v2.2s, v0.2s, v1.2s
3112 ; CHECK-NEXT: zip2 v1.2s, v0.2s, v1.2s
3113 ; CHECK-NEXT: fmov d0, d2
3116 %vuzp.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
3117 %vuzp1.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
3118 %.fca.0.0.insert = insertvalue %struct.int32x2x2_t undef, <2 x i32> %vuzp.i, 0, 0
3119 %.fca.0.1.insert = insertvalue %struct.int32x2x2_t %.fca.0.0.insert, <2 x i32> %vuzp1.i, 0, 1
3120 ret %struct.int32x2x2_t %.fca.0.1.insert
3123 define %struct.uint8x8x2_t @test_vuzp_u8(<8 x i8> %a, <8 x i8> %b) {
3124 ; CHECK-LABEL: test_vuzp_u8:
3125 ; CHECK: // %bb.0: // %entry
3126 ; CHECK-NEXT: uzp1 v2.8b, v0.8b, v1.8b
3127 ; CHECK-NEXT: uzp2 v1.8b, v0.8b, v1.8b
3128 ; CHECK-NEXT: fmov d0, d2
3131 %vuzp.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
3132 %vuzp1.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
3133 %.fca.0.0.insert = insertvalue %struct.uint8x8x2_t undef, <8 x i8> %vuzp.i, 0, 0
3134 %.fca.0.1.insert = insertvalue %struct.uint8x8x2_t %.fca.0.0.insert, <8 x i8> %vuzp1.i, 0, 1
3135 ret %struct.uint8x8x2_t %.fca.0.1.insert
3138 define %struct.uint16x4x2_t @test_vuzp_u16(<4 x i16> %a, <4 x i16> %b) {
3139 ; CHECK-LABEL: test_vuzp_u16:
3140 ; CHECK: // %bb.0: // %entry
3141 ; CHECK-NEXT: uzp1 v2.4h, v0.4h, v1.4h
3142 ; CHECK-NEXT: uzp2 v1.4h, v0.4h, v1.4h
3143 ; CHECK-NEXT: fmov d0, d2
3146 %vuzp.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
3147 %vuzp1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
3148 %.fca.0.0.insert = insertvalue %struct.uint16x4x2_t undef, <4 x i16> %vuzp.i, 0, 0
3149 %.fca.0.1.insert = insertvalue %struct.uint16x4x2_t %.fca.0.0.insert, <4 x i16> %vuzp1.i, 0, 1
3150 ret %struct.uint16x4x2_t %.fca.0.1.insert
3153 define %struct.uint32x2x2_t @test_vuzp_u32(<2 x i32> %a, <2 x i32> %b) {
3154 ; CHECK-LABEL: test_vuzp_u32:
3155 ; CHECK: // %bb.0: // %entry
3156 ; CHECK-NEXT: zip1 v2.2s, v0.2s, v1.2s
3157 ; CHECK-NEXT: zip2 v1.2s, v0.2s, v1.2s
3158 ; CHECK-NEXT: fmov d0, d2
3161 %vuzp.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
3162 %vuzp1.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
3163 %.fca.0.0.insert = insertvalue %struct.uint32x2x2_t undef, <2 x i32> %vuzp.i, 0, 0
3164 %.fca.0.1.insert = insertvalue %struct.uint32x2x2_t %.fca.0.0.insert, <2 x i32> %vuzp1.i, 0, 1
3165 ret %struct.uint32x2x2_t %.fca.0.1.insert
3168 define %struct.float32x2x2_t @test_vuzp_f32(<2 x float> %a, <2 x float> %b) {
3169 ; CHECK-LABEL: test_vuzp_f32:
3170 ; CHECK: // %bb.0: // %entry
3171 ; CHECK-NEXT: zip1 v2.2s, v0.2s, v1.2s
3172 ; CHECK-NEXT: zip2 v1.2s, v0.2s, v1.2s
3173 ; CHECK-NEXT: fmov d0, d2
3176 %vuzp.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 0, i32 2>
3177 %vuzp1.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 1, i32 3>
3178 %.fca.0.0.insert = insertvalue %struct.float32x2x2_t undef, <2 x float> %vuzp.i, 0, 0
3179 %.fca.0.1.insert = insertvalue %struct.float32x2x2_t %.fca.0.0.insert, <2 x float> %vuzp1.i, 0, 1
3180 ret %struct.float32x2x2_t %.fca.0.1.insert
3183 define %struct.poly8x8x2_t @test_vuzp_p8(<8 x i8> %a, <8 x i8> %b) {
3184 ; CHECK-LABEL: test_vuzp_p8:
3185 ; CHECK: // %bb.0: // %entry
3186 ; CHECK-NEXT: uzp1 v2.8b, v0.8b, v1.8b
3187 ; CHECK-NEXT: uzp2 v1.8b, v0.8b, v1.8b
3188 ; CHECK-NEXT: fmov d0, d2
3191 %vuzp.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
3192 %vuzp1.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
3193 %.fca.0.0.insert = insertvalue %struct.poly8x8x2_t undef, <8 x i8> %vuzp.i, 0, 0
3194 %.fca.0.1.insert = insertvalue %struct.poly8x8x2_t %.fca.0.0.insert, <8 x i8> %vuzp1.i, 0, 1
3195 ret %struct.poly8x8x2_t %.fca.0.1.insert
3198 define %struct.poly16x4x2_t @test_vuzp_p16(<4 x i16> %a, <4 x i16> %b) {
3199 ; CHECK-LABEL: test_vuzp_p16:
3200 ; CHECK: // %bb.0: // %entry
3201 ; CHECK-NEXT: uzp1 v2.4h, v0.4h, v1.4h
3202 ; CHECK-NEXT: uzp2 v1.4h, v0.4h, v1.4h
3203 ; CHECK-NEXT: fmov d0, d2
3206 %vuzp.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
3207 %vuzp1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
3208 %.fca.0.0.insert = insertvalue %struct.poly16x4x2_t undef, <4 x i16> %vuzp.i, 0, 0
3209 %.fca.0.1.insert = insertvalue %struct.poly16x4x2_t %.fca.0.0.insert, <4 x i16> %vuzp1.i, 0, 1
3210 ret %struct.poly16x4x2_t %.fca.0.1.insert
3213 define %struct.int8x16x2_t @test_vuzpq_s8(<16 x i8> %a, <16 x i8> %b) {
3214 ; CHECK-LABEL: test_vuzpq_s8:
3215 ; CHECK: // %bb.0: // %entry
3216 ; CHECK-NEXT: uzp1 v2.16b, v0.16b, v1.16b
3217 ; CHECK-NEXT: uzp2 v1.16b, v0.16b, v1.16b
3218 ; CHECK-NEXT: mov v0.16b, v2.16b
3221 %vuzp.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
3222 %vuzp1.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
3223 %.fca.0.0.insert = insertvalue %struct.int8x16x2_t undef, <16 x i8> %vuzp.i, 0, 0
3224 %.fca.0.1.insert = insertvalue %struct.int8x16x2_t %.fca.0.0.insert, <16 x i8> %vuzp1.i, 0, 1
3225 ret %struct.int8x16x2_t %.fca.0.1.insert
3228 define %struct.int16x8x2_t @test_vuzpq_s16(<8 x i16> %a, <8 x i16> %b) {
3229 ; CHECK-LABEL: test_vuzpq_s16:
3230 ; CHECK: // %bb.0: // %entry
3231 ; CHECK-NEXT: uzp1 v2.8h, v0.8h, v1.8h
3232 ; CHECK-NEXT: uzp2 v1.8h, v0.8h, v1.8h
3233 ; CHECK-NEXT: mov v0.16b, v2.16b
3236 %vuzp.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
3237 %vuzp1.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
3238 %.fca.0.0.insert = insertvalue %struct.int16x8x2_t undef, <8 x i16> %vuzp.i, 0, 0
3239 %.fca.0.1.insert = insertvalue %struct.int16x8x2_t %.fca.0.0.insert, <8 x i16> %vuzp1.i, 0, 1
3240 ret %struct.int16x8x2_t %.fca.0.1.insert
3243 define %struct.int32x4x2_t @test_vuzpq_s32(<4 x i32> %a, <4 x i32> %b) {
3244 ; CHECK-LABEL: test_vuzpq_s32:
3245 ; CHECK: // %bb.0: // %entry
3246 ; CHECK-NEXT: uzp1 v2.4s, v0.4s, v1.4s
3247 ; CHECK-NEXT: uzp2 v1.4s, v0.4s, v1.4s
3248 ; CHECK-NEXT: mov v0.16b, v2.16b
3251 %vuzp.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
3252 %vuzp1.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
3253 %.fca.0.0.insert = insertvalue %struct.int32x4x2_t undef, <4 x i32> %vuzp.i, 0, 0
3254 %.fca.0.1.insert = insertvalue %struct.int32x4x2_t %.fca.0.0.insert, <4 x i32> %vuzp1.i, 0, 1
3255 ret %struct.int32x4x2_t %.fca.0.1.insert
3258 define %struct.uint8x16x2_t @test_vuzpq_u8(<16 x i8> %a, <16 x i8> %b) {
3259 ; CHECK-LABEL: test_vuzpq_u8:
3260 ; CHECK: // %bb.0: // %entry
3261 ; CHECK-NEXT: uzp1 v2.16b, v0.16b, v1.16b
3262 ; CHECK-NEXT: uzp2 v1.16b, v0.16b, v1.16b
3263 ; CHECK-NEXT: mov v0.16b, v2.16b
3266 %vuzp.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
3267 %vuzp1.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
3268 %.fca.0.0.insert = insertvalue %struct.uint8x16x2_t undef, <16 x i8> %vuzp.i, 0, 0
3269 %.fca.0.1.insert = insertvalue %struct.uint8x16x2_t %.fca.0.0.insert, <16 x i8> %vuzp1.i, 0, 1
3270 ret %struct.uint8x16x2_t %.fca.0.1.insert
3273 define %struct.uint16x8x2_t @test_vuzpq_u16(<8 x i16> %a, <8 x i16> %b) {
3274 ; CHECK-LABEL: test_vuzpq_u16:
3275 ; CHECK: // %bb.0: // %entry
3276 ; CHECK-NEXT: uzp1 v2.8h, v0.8h, v1.8h
3277 ; CHECK-NEXT: uzp2 v1.8h, v0.8h, v1.8h
3278 ; CHECK-NEXT: mov v0.16b, v2.16b
3281 %vuzp.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
3282 %vuzp1.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
3283 %.fca.0.0.insert = insertvalue %struct.uint16x8x2_t undef, <8 x i16> %vuzp.i, 0, 0
3284 %.fca.0.1.insert = insertvalue %struct.uint16x8x2_t %.fca.0.0.insert, <8 x i16> %vuzp1.i, 0, 1
3285 ret %struct.uint16x8x2_t %.fca.0.1.insert
3288 define %struct.uint32x4x2_t @test_vuzpq_u32(<4 x i32> %a, <4 x i32> %b) {
3289 ; CHECK-LABEL: test_vuzpq_u32:
3290 ; CHECK: // %bb.0: // %entry
3291 ; CHECK-NEXT: uzp1 v2.4s, v0.4s, v1.4s
3292 ; CHECK-NEXT: uzp2 v1.4s, v0.4s, v1.4s
3293 ; CHECK-NEXT: mov v0.16b, v2.16b
3296 %vuzp.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
3297 %vuzp1.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
3298 %.fca.0.0.insert = insertvalue %struct.uint32x4x2_t undef, <4 x i32> %vuzp.i, 0, 0
3299 %.fca.0.1.insert = insertvalue %struct.uint32x4x2_t %.fca.0.0.insert, <4 x i32> %vuzp1.i, 0, 1
3300 ret %struct.uint32x4x2_t %.fca.0.1.insert
3303 define %struct.float32x4x2_t @test_vuzpq_f32(<4 x float> %a, <4 x float> %b) {
3304 ; CHECK-LABEL: test_vuzpq_f32:
3305 ; CHECK: // %bb.0: // %entry
3306 ; CHECK-NEXT: uzp1 v2.4s, v0.4s, v1.4s
3307 ; CHECK-NEXT: uzp2 v1.4s, v0.4s, v1.4s
3308 ; CHECK-NEXT: mov v0.16b, v2.16b
3311 %vuzp.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
3312 %vuzp1.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
3313 %.fca.0.0.insert = insertvalue %struct.float32x4x2_t undef, <4 x float> %vuzp.i, 0, 0
3314 %.fca.0.1.insert = insertvalue %struct.float32x4x2_t %.fca.0.0.insert, <4 x float> %vuzp1.i, 0, 1
3315 ret %struct.float32x4x2_t %.fca.0.1.insert
3318 define %struct.poly8x16x2_t @test_vuzpq_p8(<16 x i8> %a, <16 x i8> %b) {
3319 ; CHECK-LABEL: test_vuzpq_p8:
3320 ; CHECK: // %bb.0: // %entry
3321 ; CHECK-NEXT: uzp1 v2.16b, v0.16b, v1.16b
3322 ; CHECK-NEXT: uzp2 v1.16b, v0.16b, v1.16b
3323 ; CHECK-NEXT: mov v0.16b, v2.16b
3326 %vuzp.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
3327 %vuzp1.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
3328 %.fca.0.0.insert = insertvalue %struct.poly8x16x2_t undef, <16 x i8> %vuzp.i, 0, 0
3329 %.fca.0.1.insert = insertvalue %struct.poly8x16x2_t %.fca.0.0.insert, <16 x i8> %vuzp1.i, 0, 1
3330 ret %struct.poly8x16x2_t %.fca.0.1.insert
3333 define %struct.poly16x8x2_t @test_vuzpq_p16(<8 x i16> %a, <8 x i16> %b) {
3334 ; CHECK-LABEL: test_vuzpq_p16:
3335 ; CHECK: // %bb.0: // %entry
3336 ; CHECK-NEXT: uzp1 v2.8h, v0.8h, v1.8h
3337 ; CHECK-NEXT: uzp2 v1.8h, v0.8h, v1.8h
3338 ; CHECK-NEXT: mov v0.16b, v2.16b
3341 %vuzp.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
3342 %vuzp1.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
3343 %.fca.0.0.insert = insertvalue %struct.poly16x8x2_t undef, <8 x i16> %vuzp.i, 0, 0
3344 %.fca.0.1.insert = insertvalue %struct.poly16x8x2_t %.fca.0.0.insert, <8 x i16> %vuzp1.i, 0, 1
3345 ret %struct.poly16x8x2_t %.fca.0.1.insert
3348 define %struct.int8x8x2_t @test_vzip_s8(<8 x i8> %a, <8 x i8> %b) {
3349 ; CHECK-LABEL: test_vzip_s8:
3350 ; CHECK: // %bb.0: // %entry
3351 ; CHECK-NEXT: zip1 v2.8b, v0.8b, v1.8b
3352 ; CHECK-NEXT: zip2 v1.8b, v0.8b, v1.8b
3353 ; CHECK-NEXT: fmov d0, d2
3356 %vzip.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
3357 %vzip1.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
3358 %.fca.0.0.insert = insertvalue %struct.int8x8x2_t undef, <8 x i8> %vzip.i, 0, 0
3359 %.fca.0.1.insert = insertvalue %struct.int8x8x2_t %.fca.0.0.insert, <8 x i8> %vzip1.i, 0, 1
3360 ret %struct.int8x8x2_t %.fca.0.1.insert
3363 define %struct.int16x4x2_t @test_vzip_s16(<4 x i16> %a, <4 x i16> %b) {
3364 ; CHECK-LABEL: test_vzip_s16:
3365 ; CHECK: // %bb.0: // %entry
3366 ; CHECK-NEXT: zip1 v2.4h, v0.4h, v1.4h
3367 ; CHECK-NEXT: zip2 v1.4h, v0.4h, v1.4h
3368 ; CHECK-NEXT: fmov d0, d2
3371 %vzip.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
3372 %vzip1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
3373 %.fca.0.0.insert = insertvalue %struct.int16x4x2_t undef, <4 x i16> %vzip.i, 0, 0
3374 %.fca.0.1.insert = insertvalue %struct.int16x4x2_t %.fca.0.0.insert, <4 x i16> %vzip1.i, 0, 1
3375 ret %struct.int16x4x2_t %.fca.0.1.insert
3378 define %struct.int32x2x2_t @test_vzip_s32(<2 x i32> %a, <2 x i32> %b) {
3379 ; CHECK-LABEL: test_vzip_s32:
3380 ; CHECK: // %bb.0: // %entry
3381 ; CHECK-NEXT: zip1 v2.2s, v0.2s, v1.2s
3382 ; CHECK-NEXT: zip2 v1.2s, v0.2s, v1.2s
3383 ; CHECK-NEXT: fmov d0, d2
3386 %vzip.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
3387 %vzip1.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
3388 %.fca.0.0.insert = insertvalue %struct.int32x2x2_t undef, <2 x i32> %vzip.i, 0, 0
3389 %.fca.0.1.insert = insertvalue %struct.int32x2x2_t %.fca.0.0.insert, <2 x i32> %vzip1.i, 0, 1
3390 ret %struct.int32x2x2_t %.fca.0.1.insert
3393 define %struct.uint8x8x2_t @test_vzip_u8(<8 x i8> %a, <8 x i8> %b) {
3394 ; CHECK-LABEL: test_vzip_u8:
3395 ; CHECK: // %bb.0: // %entry
3396 ; CHECK-NEXT: zip1 v2.8b, v0.8b, v1.8b
3397 ; CHECK-NEXT: zip2 v1.8b, v0.8b, v1.8b
3398 ; CHECK-NEXT: fmov d0, d2
3401 %vzip.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
3402 %vzip1.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
3403 %.fca.0.0.insert = insertvalue %struct.uint8x8x2_t undef, <8 x i8> %vzip.i, 0, 0
3404 %.fca.0.1.insert = insertvalue %struct.uint8x8x2_t %.fca.0.0.insert, <8 x i8> %vzip1.i, 0, 1
3405 ret %struct.uint8x8x2_t %.fca.0.1.insert
3408 define %struct.uint16x4x2_t @test_vzip_u16(<4 x i16> %a, <4 x i16> %b) {
3409 ; CHECK-LABEL: test_vzip_u16:
3410 ; CHECK: // %bb.0: // %entry
3411 ; CHECK-NEXT: zip1 v2.4h, v0.4h, v1.4h
3412 ; CHECK-NEXT: zip2 v1.4h, v0.4h, v1.4h
3413 ; CHECK-NEXT: fmov d0, d2
3416 %vzip.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
3417 %vzip1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
3418 %.fca.0.0.insert = insertvalue %struct.uint16x4x2_t undef, <4 x i16> %vzip.i, 0, 0
3419 %.fca.0.1.insert = insertvalue %struct.uint16x4x2_t %.fca.0.0.insert, <4 x i16> %vzip1.i, 0, 1
3420 ret %struct.uint16x4x2_t %.fca.0.1.insert
3423 define %struct.uint32x2x2_t @test_vzip_u32(<2 x i32> %a, <2 x i32> %b) {
3424 ; CHECK-LABEL: test_vzip_u32:
3425 ; CHECK: // %bb.0: // %entry
3426 ; CHECK-NEXT: zip1 v2.2s, v0.2s, v1.2s
3427 ; CHECK-NEXT: zip2 v1.2s, v0.2s, v1.2s
3428 ; CHECK-NEXT: fmov d0, d2
3431 %vzip.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
3432 %vzip1.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
3433 %.fca.0.0.insert = insertvalue %struct.uint32x2x2_t undef, <2 x i32> %vzip.i, 0, 0
3434 %.fca.0.1.insert = insertvalue %struct.uint32x2x2_t %.fca.0.0.insert, <2 x i32> %vzip1.i, 0, 1
3435 ret %struct.uint32x2x2_t %.fca.0.1.insert
3438 define %struct.float32x2x2_t @test_vzip_f32(<2 x float> %a, <2 x float> %b) {
3439 ; CHECK-LABEL: test_vzip_f32:
3440 ; CHECK: // %bb.0: // %entry
3441 ; CHECK-NEXT: zip1 v2.2s, v0.2s, v1.2s
3442 ; CHECK-NEXT: zip2 v1.2s, v0.2s, v1.2s
3443 ; CHECK-NEXT: fmov d0, d2
3446 %vzip.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 0, i32 2>
3447 %vzip1.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 1, i32 3>
3448 %.fca.0.0.insert = insertvalue %struct.float32x2x2_t undef, <2 x float> %vzip.i, 0, 0
3449 %.fca.0.1.insert = insertvalue %struct.float32x2x2_t %.fca.0.0.insert, <2 x float> %vzip1.i, 0, 1
3450 ret %struct.float32x2x2_t %.fca.0.1.insert
3453 define %struct.poly8x8x2_t @test_vzip_p8(<8 x i8> %a, <8 x i8> %b) {
3454 ; CHECK-LABEL: test_vzip_p8:
3455 ; CHECK: // %bb.0: // %entry
3456 ; CHECK-NEXT: zip1 v2.8b, v0.8b, v1.8b
3457 ; CHECK-NEXT: zip2 v1.8b, v0.8b, v1.8b
3458 ; CHECK-NEXT: fmov d0, d2
3461 %vzip.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
3462 %vzip1.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
3463 %.fca.0.0.insert = insertvalue %struct.poly8x8x2_t undef, <8 x i8> %vzip.i, 0, 0
3464 %.fca.0.1.insert = insertvalue %struct.poly8x8x2_t %.fca.0.0.insert, <8 x i8> %vzip1.i, 0, 1
3465 ret %struct.poly8x8x2_t %.fca.0.1.insert
3468 define %struct.poly16x4x2_t @test_vzip_p16(<4 x i16> %a, <4 x i16> %b) {
3469 ; CHECK-LABEL: test_vzip_p16:
3470 ; CHECK: // %bb.0: // %entry
3471 ; CHECK-NEXT: zip1 v2.4h, v0.4h, v1.4h
3472 ; CHECK-NEXT: zip2 v1.4h, v0.4h, v1.4h
3473 ; CHECK-NEXT: fmov d0, d2
3476 %vzip.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
3477 %vzip1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
3478 %.fca.0.0.insert = insertvalue %struct.poly16x4x2_t undef, <4 x i16> %vzip.i, 0, 0
3479 %.fca.0.1.insert = insertvalue %struct.poly16x4x2_t %.fca.0.0.insert, <4 x i16> %vzip1.i, 0, 1
3480 ret %struct.poly16x4x2_t %.fca.0.1.insert
3483 define %struct.int8x16x2_t @test_vzipq_s8(<16 x i8> %a, <16 x i8> %b) {
3484 ; CHECK-LABEL: test_vzipq_s8:
3485 ; CHECK: // %bb.0: // %entry
3486 ; CHECK-NEXT: zip1 v2.16b, v0.16b, v1.16b
3487 ; CHECK-NEXT: zip2 v1.16b, v0.16b, v1.16b
3488 ; CHECK-NEXT: mov v0.16b, v2.16b
3491 %vzip.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
3492 %vzip1.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
3493 %.fca.0.0.insert = insertvalue %struct.int8x16x2_t undef, <16 x i8> %vzip.i, 0, 0
3494 %.fca.0.1.insert = insertvalue %struct.int8x16x2_t %.fca.0.0.insert, <16 x i8> %vzip1.i, 0, 1
3495 ret %struct.int8x16x2_t %.fca.0.1.insert
3498 define %struct.int16x8x2_t @test_vzipq_s16(<8 x i16> %a, <8 x i16> %b) {
3499 ; CHECK-LABEL: test_vzipq_s16:
3500 ; CHECK: // %bb.0: // %entry
3501 ; CHECK-NEXT: zip1 v2.8h, v0.8h, v1.8h
3502 ; CHECK-NEXT: zip2 v1.8h, v0.8h, v1.8h
3503 ; CHECK-NEXT: mov v0.16b, v2.16b
3506 %vzip.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
3507 %vzip1.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
3508 %.fca.0.0.insert = insertvalue %struct.int16x8x2_t undef, <8 x i16> %vzip.i, 0, 0
3509 %.fca.0.1.insert = insertvalue %struct.int16x8x2_t %.fca.0.0.insert, <8 x i16> %vzip1.i, 0, 1
3510 ret %struct.int16x8x2_t %.fca.0.1.insert
3513 define %struct.int32x4x2_t @test_vzipq_s32(<4 x i32> %a, <4 x i32> %b) {
3514 ; CHECK-LABEL: test_vzipq_s32:
3515 ; CHECK: // %bb.0: // %entry
3516 ; CHECK-NEXT: zip1 v2.4s, v0.4s, v1.4s
3517 ; CHECK-NEXT: zip2 v1.4s, v0.4s, v1.4s
3518 ; CHECK-NEXT: mov v0.16b, v2.16b
3521 %vzip.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
3522 %vzip1.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
3523 %.fca.0.0.insert = insertvalue %struct.int32x4x2_t undef, <4 x i32> %vzip.i, 0, 0
3524 %.fca.0.1.insert = insertvalue %struct.int32x4x2_t %.fca.0.0.insert, <4 x i32> %vzip1.i, 0, 1
3525 ret %struct.int32x4x2_t %.fca.0.1.insert
3528 define %struct.uint8x16x2_t @test_vzipq_u8(<16 x i8> %a, <16 x i8> %b) {
3529 ; CHECK-LABEL: test_vzipq_u8:
3530 ; CHECK: // %bb.0: // %entry
3531 ; CHECK-NEXT: zip1 v2.16b, v0.16b, v1.16b
3532 ; CHECK-NEXT: zip2 v1.16b, v0.16b, v1.16b
3533 ; CHECK-NEXT: mov v0.16b, v2.16b
3536 %vzip.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
3537 %vzip1.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
3538 %.fca.0.0.insert = insertvalue %struct.uint8x16x2_t undef, <16 x i8> %vzip.i, 0, 0
3539 %.fca.0.1.insert = insertvalue %struct.uint8x16x2_t %.fca.0.0.insert, <16 x i8> %vzip1.i, 0, 1
3540 ret %struct.uint8x16x2_t %.fca.0.1.insert
3543 define %struct.uint16x8x2_t @test_vzipq_u16(<8 x i16> %a, <8 x i16> %b) {
3544 ; CHECK-LABEL: test_vzipq_u16:
3545 ; CHECK: // %bb.0: // %entry
3546 ; CHECK-NEXT: zip1 v2.8h, v0.8h, v1.8h
3547 ; CHECK-NEXT: zip2 v1.8h, v0.8h, v1.8h
3548 ; CHECK-NEXT: mov v0.16b, v2.16b
3551 %vzip.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
3552 %vzip1.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
3553 %.fca.0.0.insert = insertvalue %struct.uint16x8x2_t undef, <8 x i16> %vzip.i, 0, 0
3554 %.fca.0.1.insert = insertvalue %struct.uint16x8x2_t %.fca.0.0.insert, <8 x i16> %vzip1.i, 0, 1
3555 ret %struct.uint16x8x2_t %.fca.0.1.insert
3558 define %struct.uint32x4x2_t @test_vzipq_u32(<4 x i32> %a, <4 x i32> %b) {
3559 ; CHECK-LABEL: test_vzipq_u32:
3560 ; CHECK: // %bb.0: // %entry
3561 ; CHECK-NEXT: zip1 v2.4s, v0.4s, v1.4s
3562 ; CHECK-NEXT: zip2 v1.4s, v0.4s, v1.4s
3563 ; CHECK-NEXT: mov v0.16b, v2.16b
3566 %vzip.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
3567 %vzip1.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
3568 %.fca.0.0.insert = insertvalue %struct.uint32x4x2_t undef, <4 x i32> %vzip.i, 0, 0
3569 %.fca.0.1.insert = insertvalue %struct.uint32x4x2_t %.fca.0.0.insert, <4 x i32> %vzip1.i, 0, 1
3570 ret %struct.uint32x4x2_t %.fca.0.1.insert
3573 define %struct.float32x4x2_t @test_vzipq_f32(<4 x float> %a, <4 x float> %b) {
3574 ; CHECK-LABEL: test_vzipq_f32:
3575 ; CHECK: // %bb.0: // %entry
3576 ; CHECK-NEXT: zip1 v2.4s, v0.4s, v1.4s
3577 ; CHECK-NEXT: zip2 v1.4s, v0.4s, v1.4s
3578 ; CHECK-NEXT: mov v0.16b, v2.16b
3581 %vzip.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
3582 %vzip1.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
3583 %.fca.0.0.insert = insertvalue %struct.float32x4x2_t undef, <4 x float> %vzip.i, 0, 0
3584 %.fca.0.1.insert = insertvalue %struct.float32x4x2_t %.fca.0.0.insert, <4 x float> %vzip1.i, 0, 1
3585 ret %struct.float32x4x2_t %.fca.0.1.insert
3588 define %struct.poly8x16x2_t @test_vzipq_p8(<16 x i8> %a, <16 x i8> %b) {
3589 ; CHECK-LABEL: test_vzipq_p8:
3590 ; CHECK: // %bb.0: // %entry
3591 ; CHECK-NEXT: zip1 v2.16b, v0.16b, v1.16b
3592 ; CHECK-NEXT: zip2 v1.16b, v0.16b, v1.16b
3593 ; CHECK-NEXT: mov v0.16b, v2.16b
3596 %vzip.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
3597 %vzip1.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
3598 %.fca.0.0.insert = insertvalue %struct.poly8x16x2_t undef, <16 x i8> %vzip.i, 0, 0
3599 %.fca.0.1.insert = insertvalue %struct.poly8x16x2_t %.fca.0.0.insert, <16 x i8> %vzip1.i, 0, 1
3600 ret %struct.poly8x16x2_t %.fca.0.1.insert
3603 define %struct.poly16x8x2_t @test_vzipq_p16(<8 x i16> %a, <8 x i16> %b) {
3604 ; CHECK-LABEL: test_vzipq_p16:
3605 ; CHECK: // %bb.0: // %entry
3606 ; CHECK-NEXT: zip1 v2.8h, v0.8h, v1.8h
3607 ; CHECK-NEXT: zip2 v1.8h, v0.8h, v1.8h
3608 ; CHECK-NEXT: mov v0.16b, v2.16b
3611 %vzip.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
3612 %vzip1.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
3613 %.fca.0.0.insert = insertvalue %struct.poly16x8x2_t undef, <8 x i16> %vzip.i, 0, 0
3614 %.fca.0.1.insert = insertvalue %struct.poly16x8x2_t %.fca.0.0.insert, <8 x i16> %vzip1.i, 0, 1
3615 ret %struct.poly16x8x2_t %.fca.0.1.insert
3618 define %struct.int8x8x2_t @test_vtrn_s8(<8 x i8> %a, <8 x i8> %b) {
3619 ; CHECK-LABEL: test_vtrn_s8:
3620 ; CHECK: // %bb.0: // %entry
3621 ; CHECK-NEXT: trn1 v2.8b, v0.8b, v1.8b
3622 ; CHECK-NEXT: trn2 v1.8b, v0.8b, v1.8b
3623 ; CHECK-NEXT: fmov d0, d2
3626 %vtrn.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
3627 %vtrn1.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
3628 %.fca.0.0.insert = insertvalue %struct.int8x8x2_t undef, <8 x i8> %vtrn.i, 0, 0
3629 %.fca.0.1.insert = insertvalue %struct.int8x8x2_t %.fca.0.0.insert, <8 x i8> %vtrn1.i, 0, 1
3630 ret %struct.int8x8x2_t %.fca.0.1.insert
3633 define %struct.int16x4x2_t @test_vtrn_s16(<4 x i16> %a, <4 x i16> %b) {
3634 ; CHECK-LABEL: test_vtrn_s16:
3635 ; CHECK: // %bb.0: // %entry
3636 ; CHECK-NEXT: trn1 v2.4h, v0.4h, v1.4h
3637 ; CHECK-NEXT: trn2 v1.4h, v0.4h, v1.4h
3638 ; CHECK-NEXT: fmov d0, d2
3641 %vtrn.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
3642 %vtrn1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
3643 %.fca.0.0.insert = insertvalue %struct.int16x4x2_t undef, <4 x i16> %vtrn.i, 0, 0
3644 %.fca.0.1.insert = insertvalue %struct.int16x4x2_t %.fca.0.0.insert, <4 x i16> %vtrn1.i, 0, 1
3645 ret %struct.int16x4x2_t %.fca.0.1.insert
3648 define %struct.int32x2x2_t @test_vtrn_s32(<2 x i32> %a, <2 x i32> %b) {
3649 ; CHECK-LABEL: test_vtrn_s32:
3650 ; CHECK: // %bb.0: // %entry
3651 ; CHECK-NEXT: zip1 v2.2s, v0.2s, v1.2s
3652 ; CHECK-NEXT: zip2 v1.2s, v0.2s, v1.2s
3653 ; CHECK-NEXT: fmov d0, d2
3656 %vtrn.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
3657 %vtrn1.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
3658 %.fca.0.0.insert = insertvalue %struct.int32x2x2_t undef, <2 x i32> %vtrn.i, 0, 0
3659 %.fca.0.1.insert = insertvalue %struct.int32x2x2_t %.fca.0.0.insert, <2 x i32> %vtrn1.i, 0, 1
3660 ret %struct.int32x2x2_t %.fca.0.1.insert
3663 define %struct.uint8x8x2_t @test_vtrn_u8(<8 x i8> %a, <8 x i8> %b) {
3664 ; CHECK-LABEL: test_vtrn_u8:
3665 ; CHECK: // %bb.0: // %entry
3666 ; CHECK-NEXT: trn1 v2.8b, v0.8b, v1.8b
3667 ; CHECK-NEXT: trn2 v1.8b, v0.8b, v1.8b
3668 ; CHECK-NEXT: fmov d0, d2
3671 %vtrn.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
3672 %vtrn1.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
3673 %.fca.0.0.insert = insertvalue %struct.uint8x8x2_t undef, <8 x i8> %vtrn.i, 0, 0
3674 %.fca.0.1.insert = insertvalue %struct.uint8x8x2_t %.fca.0.0.insert, <8 x i8> %vtrn1.i, 0, 1
3675 ret %struct.uint8x8x2_t %.fca.0.1.insert
3678 define %struct.uint16x4x2_t @test_vtrn_u16(<4 x i16> %a, <4 x i16> %b) {
3679 ; CHECK-LABEL: test_vtrn_u16:
3680 ; CHECK: // %bb.0: // %entry
3681 ; CHECK-NEXT: trn1 v2.4h, v0.4h, v1.4h
3682 ; CHECK-NEXT: trn2 v1.4h, v0.4h, v1.4h
3683 ; CHECK-NEXT: fmov d0, d2
3686 %vtrn.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
3687 %vtrn1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
3688 %.fca.0.0.insert = insertvalue %struct.uint16x4x2_t undef, <4 x i16> %vtrn.i, 0, 0
3689 %.fca.0.1.insert = insertvalue %struct.uint16x4x2_t %.fca.0.0.insert, <4 x i16> %vtrn1.i, 0, 1
3690 ret %struct.uint16x4x2_t %.fca.0.1.insert
3693 define %struct.uint32x2x2_t @test_vtrn_u32(<2 x i32> %a, <2 x i32> %b) {
3694 ; CHECK-LABEL: test_vtrn_u32:
3695 ; CHECK: // %bb.0: // %entry
3696 ; CHECK-NEXT: zip1 v2.2s, v0.2s, v1.2s
3697 ; CHECK-NEXT: zip2 v1.2s, v0.2s, v1.2s
3698 ; CHECK-NEXT: fmov d0, d2
3701 %vtrn.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
3702 %vtrn1.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
3703 %.fca.0.0.insert = insertvalue %struct.uint32x2x2_t undef, <2 x i32> %vtrn.i, 0, 0
3704 %.fca.0.1.insert = insertvalue %struct.uint32x2x2_t %.fca.0.0.insert, <2 x i32> %vtrn1.i, 0, 1
3705 ret %struct.uint32x2x2_t %.fca.0.1.insert
3708 define %struct.float32x2x2_t @test_vtrn_f32(<2 x float> %a, <2 x float> %b) {
3709 ; CHECK-LABEL: test_vtrn_f32:
3710 ; CHECK: // %bb.0: // %entry
3711 ; CHECK-NEXT: zip1 v2.2s, v0.2s, v1.2s
3712 ; CHECK-NEXT: zip2 v1.2s, v0.2s, v1.2s
3713 ; CHECK-NEXT: fmov d0, d2
3716 %vtrn.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 0, i32 2>
3717 %vtrn1.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 1, i32 3>
3718 %.fca.0.0.insert = insertvalue %struct.float32x2x2_t undef, <2 x float> %vtrn.i, 0, 0
3719 %.fca.0.1.insert = insertvalue %struct.float32x2x2_t %.fca.0.0.insert, <2 x float> %vtrn1.i, 0, 1
3720 ret %struct.float32x2x2_t %.fca.0.1.insert
3723 define %struct.poly8x8x2_t @test_vtrn_p8(<8 x i8> %a, <8 x i8> %b) {
3724 ; CHECK-LABEL: test_vtrn_p8:
3725 ; CHECK: // %bb.0: // %entry
3726 ; CHECK-NEXT: trn1 v2.8b, v0.8b, v1.8b
3727 ; CHECK-NEXT: trn2 v1.8b, v0.8b, v1.8b
3728 ; CHECK-NEXT: fmov d0, d2
3731 %vtrn.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
3732 %vtrn1.i = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
3733 %.fca.0.0.insert = insertvalue %struct.poly8x8x2_t undef, <8 x i8> %vtrn.i, 0, 0
3734 %.fca.0.1.insert = insertvalue %struct.poly8x8x2_t %.fca.0.0.insert, <8 x i8> %vtrn1.i, 0, 1
3735 ret %struct.poly8x8x2_t %.fca.0.1.insert
3738 define %struct.poly16x4x2_t @test_vtrn_p16(<4 x i16> %a, <4 x i16> %b) {
3739 ; CHECK-LABEL: test_vtrn_p16:
3740 ; CHECK: // %bb.0: // %entry
3741 ; CHECK-NEXT: trn1 v2.4h, v0.4h, v1.4h
3742 ; CHECK-NEXT: trn2 v1.4h, v0.4h, v1.4h
3743 ; CHECK-NEXT: fmov d0, d2
3746 %vtrn.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
3747 %vtrn1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
3748 %.fca.0.0.insert = insertvalue %struct.poly16x4x2_t undef, <4 x i16> %vtrn.i, 0, 0
3749 %.fca.0.1.insert = insertvalue %struct.poly16x4x2_t %.fca.0.0.insert, <4 x i16> %vtrn1.i, 0, 1
3750 ret %struct.poly16x4x2_t %.fca.0.1.insert
3753 define %struct.int8x16x2_t @test_vtrnq_s8(<16 x i8> %a, <16 x i8> %b) {
3754 ; CHECK-LABEL: test_vtrnq_s8:
3755 ; CHECK: // %bb.0: // %entry
3756 ; CHECK-NEXT: trn1 v2.16b, v0.16b, v1.16b
3757 ; CHECK-NEXT: trn2 v1.16b, v0.16b, v1.16b
3758 ; CHECK-NEXT: mov v0.16b, v2.16b
3761 %vtrn.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
3762 %vtrn1.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
3763 %.fca.0.0.insert = insertvalue %struct.int8x16x2_t undef, <16 x i8> %vtrn.i, 0, 0
3764 %.fca.0.1.insert = insertvalue %struct.int8x16x2_t %.fca.0.0.insert, <16 x i8> %vtrn1.i, 0, 1
3765 ret %struct.int8x16x2_t %.fca.0.1.insert
3768 define %struct.int16x8x2_t @test_vtrnq_s16(<8 x i16> %a, <8 x i16> %b) {
3769 ; CHECK-LABEL: test_vtrnq_s16:
3770 ; CHECK: // %bb.0: // %entry
3771 ; CHECK-NEXT: trn1 v2.8h, v0.8h, v1.8h
3772 ; CHECK-NEXT: trn2 v1.8h, v0.8h, v1.8h
3773 ; CHECK-NEXT: mov v0.16b, v2.16b
3776 %vtrn.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
3777 %vtrn1.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
3778 %.fca.0.0.insert = insertvalue %struct.int16x8x2_t undef, <8 x i16> %vtrn.i, 0, 0
3779 %.fca.0.1.insert = insertvalue %struct.int16x8x2_t %.fca.0.0.insert, <8 x i16> %vtrn1.i, 0, 1
3780 ret %struct.int16x8x2_t %.fca.0.1.insert
3783 define %struct.int32x4x2_t @test_vtrnq_s32(<4 x i32> %a, <4 x i32> %b) {
3784 ; CHECK-LABEL: test_vtrnq_s32:
3785 ; CHECK: // %bb.0: // %entry
3786 ; CHECK-NEXT: trn1 v2.4s, v0.4s, v1.4s
3787 ; CHECK-NEXT: trn2 v1.4s, v0.4s, v1.4s
3788 ; CHECK-NEXT: mov v0.16b, v2.16b
3791 %vtrn.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
3792 %vtrn1.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
3793 %.fca.0.0.insert = insertvalue %struct.int32x4x2_t undef, <4 x i32> %vtrn.i, 0, 0
3794 %.fca.0.1.insert = insertvalue %struct.int32x4x2_t %.fca.0.0.insert, <4 x i32> %vtrn1.i, 0, 1
3795 ret %struct.int32x4x2_t %.fca.0.1.insert
3798 define %struct.uint8x16x2_t @test_vtrnq_u8(<16 x i8> %a, <16 x i8> %b) {
3799 ; CHECK-LABEL: test_vtrnq_u8:
3800 ; CHECK: // %bb.0: // %entry
3801 ; CHECK-NEXT: trn1 v2.16b, v0.16b, v1.16b
3802 ; CHECK-NEXT: trn2 v1.16b, v0.16b, v1.16b
3803 ; CHECK-NEXT: mov v0.16b, v2.16b
3806 %vtrn.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
3807 %vtrn1.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
3808 %.fca.0.0.insert = insertvalue %struct.uint8x16x2_t undef, <16 x i8> %vtrn.i, 0, 0
3809 %.fca.0.1.insert = insertvalue %struct.uint8x16x2_t %.fca.0.0.insert, <16 x i8> %vtrn1.i, 0, 1
3810 ret %struct.uint8x16x2_t %.fca.0.1.insert
3813 define %struct.uint16x8x2_t @test_vtrnq_u16(<8 x i16> %a, <8 x i16> %b) {
3814 ; CHECK-LABEL: test_vtrnq_u16:
3815 ; CHECK: // %bb.0: // %entry
3816 ; CHECK-NEXT: trn1 v2.8h, v0.8h, v1.8h
3817 ; CHECK-NEXT: trn2 v1.8h, v0.8h, v1.8h
3818 ; CHECK-NEXT: mov v0.16b, v2.16b
3821 %vtrn.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
3822 %vtrn1.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
3823 %.fca.0.0.insert = insertvalue %struct.uint16x8x2_t undef, <8 x i16> %vtrn.i, 0, 0
3824 %.fca.0.1.insert = insertvalue %struct.uint16x8x2_t %.fca.0.0.insert, <8 x i16> %vtrn1.i, 0, 1
3825 ret %struct.uint16x8x2_t %.fca.0.1.insert
3828 define %struct.uint32x4x2_t @test_vtrnq_u32(<4 x i32> %a, <4 x i32> %b) {
3829 ; CHECK-LABEL: test_vtrnq_u32:
3830 ; CHECK: // %bb.0: // %entry
3831 ; CHECK-NEXT: trn1 v2.4s, v0.4s, v1.4s
3832 ; CHECK-NEXT: trn2 v1.4s, v0.4s, v1.4s
3833 ; CHECK-NEXT: mov v0.16b, v2.16b
3836 %vtrn.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
3837 %vtrn1.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
3838 %.fca.0.0.insert = insertvalue %struct.uint32x4x2_t undef, <4 x i32> %vtrn.i, 0, 0
3839 %.fca.0.1.insert = insertvalue %struct.uint32x4x2_t %.fca.0.0.insert, <4 x i32> %vtrn1.i, 0, 1
3840 ret %struct.uint32x4x2_t %.fca.0.1.insert
3843 define %struct.float32x4x2_t @test_vtrnq_f32(<4 x float> %a, <4 x float> %b) {
3844 ; CHECK-LABEL: test_vtrnq_f32:
3845 ; CHECK: // %bb.0: // %entry
3846 ; CHECK-NEXT: trn1 v2.4s, v0.4s, v1.4s
3847 ; CHECK-NEXT: trn2 v1.4s, v0.4s, v1.4s
3848 ; CHECK-NEXT: mov v0.16b, v2.16b
3851 %vtrn.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
3852 %vtrn1.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
3853 %.fca.0.0.insert = insertvalue %struct.float32x4x2_t undef, <4 x float> %vtrn.i, 0, 0
3854 %.fca.0.1.insert = insertvalue %struct.float32x4x2_t %.fca.0.0.insert, <4 x float> %vtrn1.i, 0, 1
3855 ret %struct.float32x4x2_t %.fca.0.1.insert
3858 define %struct.poly8x16x2_t @test_vtrnq_p8(<16 x i8> %a, <16 x i8> %b) {
3859 ; CHECK-LABEL: test_vtrnq_p8:
3860 ; CHECK: // %bb.0: // %entry
3861 ; CHECK-NEXT: trn1 v2.16b, v0.16b, v1.16b
3862 ; CHECK-NEXT: trn2 v1.16b, v0.16b, v1.16b
3863 ; CHECK-NEXT: mov v0.16b, v2.16b
3866 %vtrn.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
3867 %vtrn1.i = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
3868 %.fca.0.0.insert = insertvalue %struct.poly8x16x2_t undef, <16 x i8> %vtrn.i, 0, 0
3869 %.fca.0.1.insert = insertvalue %struct.poly8x16x2_t %.fca.0.0.insert, <16 x i8> %vtrn1.i, 0, 1
3870 ret %struct.poly8x16x2_t %.fca.0.1.insert
3873 define %struct.poly16x8x2_t @test_vtrnq_p16(<8 x i16> %a, <8 x i16> %b) {
3874 ; CHECK-LABEL: test_vtrnq_p16:
3875 ; CHECK: // %bb.0: // %entry
3876 ; CHECK-NEXT: trn1 v2.8h, v0.8h, v1.8h
3877 ; CHECK-NEXT: trn2 v1.8h, v0.8h, v1.8h
3878 ; CHECK-NEXT: mov v0.16b, v2.16b
3881 %vtrn.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
3882 %vtrn1.i = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
3883 %.fca.0.0.insert = insertvalue %struct.poly16x8x2_t undef, <8 x i16> %vtrn.i, 0, 0
3884 %.fca.0.1.insert = insertvalue %struct.poly16x8x2_t %.fca.0.0.insert, <8 x i16> %vtrn1.i, 0, 1
3885 ret %struct.poly16x8x2_t %.fca.0.1.insert
3888 define %struct.uint8x8x2_t @test_uzp(<16 x i8> %y) {
3889 ; CHECK-LABEL: test_uzp:
3891 ; CHECK-NEXT: ext v1.16b, v0.16b, v0.16b, #8
3892 ; CHECK-NEXT: uzp1 v2.8b, v0.8b, v1.8b
3893 ; CHECK-NEXT: uzp2 v1.8b, v0.8b, v1.8b
3894 ; CHECK-NEXT: fmov d0, d2
3897 %vuzp.i = shufflevector <16 x i8> %y, <16 x i8> undef, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
3898 %vuzp1.i = shufflevector <16 x i8> %y, <16 x i8> undef, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
3899 %.fca.0.0.insert = insertvalue %struct.uint8x8x2_t undef, <8 x i8> %vuzp.i, 0, 0
3900 %.fca.0.1.insert = insertvalue %struct.uint8x8x2_t %.fca.0.0.insert, <8 x i8> %vuzp1.i, 0, 1
3901 ret %struct.uint8x8x2_t %.fca.0.1.insert