[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / neon-perm.ll
blob26ffa2727a1cd1c6a07d73fe5f25ad148f0af2d2
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
27 ; CHECK-NEXT:    ret
28 entry:
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
37 ; CHECK-NEXT:    ret
38 entry:
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
47 ; CHECK-NEXT:    ret
48 entry:
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
57 ; CHECK-NEXT:    ret
58 entry:
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
67 ; CHECK-NEXT:    ret
68 entry:
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
77 ; CHECK-NEXT:    ret
78 entry:
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
87 ; CHECK-NEXT:    ret
88 entry:
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
97 ; CHECK-NEXT:    ret
98 entry:
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
107 ; CHECK-NEXT:    ret
108 entry:
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
117 ; CHECK-NEXT:    ret
118 entry:
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
127 ; CHECK-NEXT:    ret
128 entry:
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
137 ; CHECK-NEXT:    ret
138 entry:
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
147 ; CHECK-NEXT:    ret
148 entry:
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
157 ; CHECK-NEXT:    ret
158 entry:
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
167 ; CHECK-NEXT:    ret
168 entry:
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
177 ; CHECK-NEXT:    ret
178 entry:
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
187 ; CHECK-NEXT:    ret
188 entry:
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
197 ; CHECK-NEXT:    ret
198 entry:
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
207 ; CHECK-NEXT:    ret
208 entry:
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
217 ; CHECK-NEXT:    ret
218 entry:
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
227 ; CHECK-NEXT:    ret
228 entry:
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
237 ; CHECK-NEXT:    ret
238 entry:
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
247 ; CHECK-NEXT:    ret
248 entry:
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
257 ; CHECK-NEXT:    ret
258 entry:
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
267 ; CHECK-NEXT:    ret
268 entry:
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
277 ; CHECK-NEXT:    ret
278 entry:
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
287 ; CHECK-NEXT:    ret
288 entry:
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
297 ; CHECK-NEXT:    ret
298 entry:
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
307 ; CHECK-NEXT:    ret
308 entry:
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
317 ; CHECK-NEXT:    ret
318 entry:
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
327 ; CHECK-NEXT:    ret
328 entry:
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
337 ; CHECK-NEXT:    ret
338 entry:
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
347 ; CHECK-NEXT:    ret
348 entry:
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
357 ; CHECK-NEXT:    ret
358 entry:
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
367 ; CHECK-NEXT:    ret
368 entry:
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
377 ; CHECK-NEXT:    ret
378 entry:
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
387 ; CHECK-NEXT:    ret
388 entry:
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
397 ; CHECK-NEXT:    ret
398 entry:
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
407 ; CHECK-NEXT:    ret
408 entry:
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
417 ; CHECK-NEXT:    ret
418 entry:
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
427 ; CHECK-NEXT:    ret
428 entry:
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
437 ; CHECK-NEXT:    ret
438 entry:
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
447 ; CHECK-NEXT:    ret
448 entry:
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
457 ; CHECK-NEXT:    ret
458 entry:
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
467 ; CHECK-NEXT:    ret
468 entry:
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
477 ; CHECK-NEXT:    ret
478 entry:
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
487 ; CHECK-NEXT:    ret
488 entry:
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
497 ; CHECK-NEXT:    ret
498 entry:
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
507 ; CHECK-NEXT:    ret
508 entry:
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
517 ; CHECK-NEXT:    ret
518 entry:
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
527 ; CHECK-NEXT:    ret
528 entry:
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
537 ; CHECK-NEXT:    ret
538 entry:
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
547 ; CHECK-NEXT:    ret
548 entry:
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
557 ; CHECK-NEXT:    ret
558 entry:
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
567 ; CHECK-NEXT:    ret
568 entry:
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
577 ; CHECK-NEXT:    ret
578 entry:
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
587 ; CHECK-NEXT:    ret
588 entry:
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
597 ; CHECK-NEXT:    ret
598 entry:
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
607 ; CHECK-NEXT:    ret
608 entry:
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
617 ; CHECK-NEXT:    ret
618 entry:
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
627 ; CHECK-NEXT:    ret
628 entry:
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
637 ; CHECK-NEXT:    ret
638 entry:
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
647 ; CHECK-NEXT:    ret
648 entry:
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
657 ; CHECK-NEXT:    ret
658 entry:
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
667 ; CHECK-NEXT:    ret
668 entry:
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
677 ; CHECK-NEXT:    ret
678 entry:
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
687 ; CHECK-NEXT:    ret
688 entry:
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
697 ; CHECK-NEXT:    ret
698 entry:
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
707 ; CHECK-NEXT:    ret
708 entry:
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
717 ; CHECK-NEXT:    ret
718 entry:
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
727 ; CHECK-NEXT:    ret
728 entry:
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
737 ; CHECK-NEXT:    ret
738 entry:
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
747 ; CHECK-NEXT:    ret
748 entry:
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
757 ; CHECK-NEXT:    ret
758 entry:
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
767 ; CHECK-NEXT:    ret
768 entry:
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
777 ; CHECK-NEXT:    ret
778 entry:
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
787 ; CHECK-NEXT:    ret
788 entry:
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
797 ; CHECK-NEXT:    ret
798 entry:
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
807 ; CHECK-NEXT:    ret
808 entry:
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
817 ; CHECK-NEXT:    ret
818 entry:
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
827 ; CHECK-NEXT:    ret
828 entry:
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
837 ; CHECK-NEXT:    ret
838 entry:
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
847 ; CHECK-NEXT:    ret
848 entry:
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
857 ; CHECK-NEXT:    ret
858 entry:
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
867 ; CHECK-NEXT:    ret
868 entry:
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
877 ; CHECK-NEXT:    ret
878 entry:
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
887 ; CHECK-NEXT:    ret
888 entry:
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
897 ; CHECK-NEXT:    ret
898 entry:
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
907 ; CHECK-NEXT:    ret
908 entry:
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
917 ; CHECK-NEXT:    ret
918 entry:
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
927 ; CHECK-NEXT:    ret
928 entry:
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
937 ; CHECK-NEXT:    ret
938 entry:
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
947 ; CHECK-NEXT:    ret
948 entry:
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
957 ; CHECK-NEXT:    ret
958 entry:
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
967 ; CHECK-NEXT:    ret
968 entry:
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
977 ; CHECK-NEXT:    ret
978 entry:
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
987 ; CHECK-NEXT:    ret
988 entry:
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
997 ; CHECK-NEXT:    ret
998 entry:
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
1007 ; CHECK-NEXT:    ret
1008 entry:
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
1017 ; CHECK-NEXT:    ret
1018 entry:
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
1027 ; CHECK-NEXT:    ret
1028 entry:
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
1037 ; CHECK-NEXT:    ret
1038 entry:
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
1047 ; CHECK-NEXT:    ret
1048 entry:
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
1057 ; CHECK-NEXT:    ret
1058 entry:
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
1067 ; CHECK-NEXT:    ret
1068 entry:
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
1077 ; CHECK-NEXT:    ret
1078 entry:
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
1087 ; CHECK-NEXT:    ret
1088 entry:
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
1097 ; CHECK-NEXT:    ret
1098 entry:
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
1107 ; CHECK-NEXT:    ret
1108 entry:
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
1117 ; CHECK-NEXT:    ret
1118 entry:
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
1127 ; CHECK-NEXT:    ret
1128 entry:
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
1137 ; CHECK-NEXT:    ret
1138 entry:
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
1147 ; CHECK-NEXT:    ret
1148 entry:
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
1157 ; CHECK-NEXT:    ret
1158 entry:
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
1167 ; CHECK-NEXT:    ret
1168 entry:
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
1177 ; CHECK-NEXT:    ret
1178 entry:
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
1187 ; CHECK-NEXT:    ret
1188 entry:
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
1197 ; CHECK-NEXT:    ret
1198 entry:
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
1207 ; CHECK-NEXT:    ret
1208 entry:
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
1217 ; CHECK-NEXT:    ret
1218 entry:
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
1227 ; CHECK-NEXT:    ret
1228 entry:
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
1237 ; CHECK-NEXT:    ret
1238 entry:
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
1247 ; CHECK-NEXT:    ret
1248 entry:
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
1257 ; CHECK-NEXT:    ret
1258 entry:
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
1267 ; CHECK-NEXT:    ret
1268 entry:
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
1277 ; CHECK-NEXT:    ret
1278 entry:
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
1287 ; CHECK-NEXT:    ret
1288 entry:
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
1297 ; CHECK-NEXT:    ret
1298 entry:
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
1307 ; CHECK-NEXT:    ret
1308 entry:
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
1317 ; CHECK-NEXT:    ret
1318 entry:
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
1327 ; CHECK-NEXT:    ret
1328 entry:
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
1337 ; CHECK-NEXT:    ret
1338 entry:
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
1347 ; CHECK-NEXT:    ret
1348 entry:
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
1357 ; CHECK-NEXT:    ret
1358 entry:
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
1367 ; CHECK-NEXT:    ret
1368 entry:
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
1377 ; CHECK-NEXT:    ret
1378 entry:
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
1387 ; CHECK-NEXT:    ret
1388 entry:
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
1397 ; CHECK-NEXT:    ret
1398 entry:
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
1407 ; CHECK-NEXT:    ret
1408 entry:
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
1417 ; CHECK-NEXT:    ret
1418 entry:
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
1427 ; CHECK-NEXT:    ret
1428 entry:
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
1437 ; CHECK-NEXT:    ret
1438 entry:
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
1447 ; CHECK-NEXT:    ret
1448 entry:
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
1457 ; CHECK-NEXT:    ret
1458 entry:
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
1467 ; CHECK-NEXT:    ret
1468 entry:
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
1477 ; CHECK-NEXT:    ret
1478 entry:
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
1487 ; CHECK-NEXT:    ret
1488 entry:
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
1497 ; CHECK-NEXT:    ret
1498 entry:
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
1507 ; CHECK-NEXT:    ret
1508 entry:
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
1517 ; CHECK-NEXT:    ret
1518 entry:
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
1527 ; CHECK-NEXT:    ret
1528 entry:
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
1537 ; CHECK-NEXT:    ret
1538 entry:
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
1547 ; CHECK-NEXT:    ret
1548 entry:
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
1557 ; CHECK-NEXT:    ret
1558 entry:
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
1567 ; CHECK-NEXT:    ret
1568 entry:
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
1577 ; CHECK-NEXT:    ret
1578 entry:
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
1587 ; CHECK-NEXT:    ret
1588 entry:
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
1597 ; CHECK-NEXT:    ret
1598 entry:
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
1607 ; CHECK-NEXT:    ret
1608 entry:
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
1617 ; CHECK-NEXT:    ret
1618 entry:
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
1627 ; CHECK-NEXT:    ret
1628 entry:
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
1637 ; CHECK-NEXT:    ret
1638 entry:
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
1647 ; CHECK-NEXT:    ret
1648 entry:
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
1657 ; CHECK-NEXT:    ret
1658 entry:
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
1667 ; CHECK-NEXT:    ret
1668 entry:
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
1677 ; CHECK-NEXT:    ret
1678 entry:
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
1687 ; CHECK-NEXT:    ret
1688 entry:
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
1697 ; CHECK-NEXT:    ret
1698 entry:
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
1707 ; CHECK-NEXT:    ret
1708 entry:
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
1717 ; CHECK-NEXT:    ret
1718 entry:
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
1727 ; CHECK-NEXT:    ret
1728 entry:
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:
1735 ; CHECK:       // %bb.0:
1736 ; CHECK-NEXT:    zip1 v0.8b, v0.8b, v0.8b
1737 ; CHECK-NEXT:    ret
1738  %lo = shufflevector <8 x i8> %p, <8 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1739  ret <4 x i8> %lo
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
1746 ; CHECK-NEXT:    ret
1747 entry:
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
1756 ; CHECK-NEXT:    ret
1757 entry:
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
1766 ; CHECK-NEXT:    ret
1767 entry:
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
1776 ; CHECK-NEXT:    ret
1777 entry:
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
1786 ; CHECK-NEXT:    ret
1787 entry:
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
1796 ; CHECK-NEXT:    ret
1797 entry:
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
1806 ; CHECK-NEXT:    ret
1807 entry:
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
1816 ; CHECK-NEXT:    ret
1817 entry:
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
1826 ; CHECK-NEXT:    ret
1827 entry:
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
1836 ; CHECK-NEXT:    ret
1837 entry:
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
1846 ; CHECK-NEXT:    ret
1847 entry:
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
1856 ; CHECK-NEXT:    ret
1857 entry:
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
1866 ; CHECK-NEXT:    ret
1867 entry:
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
1876 ; CHECK-NEXT:    ret
1877 entry:
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
1886 ; CHECK-NEXT:    ret
1887 entry:
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
1896 ; CHECK-NEXT:    ret
1897 entry:
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
1906 ; CHECK-NEXT:    ret
1907 entry:
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
1916 ; CHECK-NEXT:    ret
1917 entry:
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
1926 ; CHECK-NEXT:    ret
1927 entry:
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
1936 ; CHECK-NEXT:    ret
1937 entry:
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
1946 ; CHECK-NEXT:    ret
1947 entry:
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
1956 ; CHECK-NEXT:    ret
1957 entry:
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
1966 ; CHECK-NEXT:    ret
1967 entry:
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
1976 ; CHECK-NEXT:    ret
1977 entry:
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
1986 ; CHECK-NEXT:    ret
1987 entry:
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
1996 ; CHECK-NEXT:    ret
1997 entry:
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
2006 ; CHECK-NEXT:    ret
2007 entry:
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
2016 ; CHECK-NEXT:    ret
2017 entry:
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
2026 ; CHECK-NEXT:    ret
2027 entry:
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
2036 ; CHECK-NEXT:    ret
2037 entry:
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
2046 ; CHECK-NEXT:    ret
2047 entry:
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
2056 ; CHECK-NEXT:    ret
2057 entry:
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
2066 ; CHECK-NEXT:    ret
2067 entry:
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
2076 ; CHECK-NEXT:    ret
2077 entry:
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
2086 ; CHECK-NEXT:    ret
2087 entry:
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
2096 ; CHECK-NEXT:    ret
2097 entry:
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
2106 ; CHECK-NEXT:    ret
2107 entry:
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
2116 ; CHECK-NEXT:    ret
2117 entry:
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
2126 ; CHECK-NEXT:    ret
2127 entry:
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
2136 ; CHECK-NEXT:    ret
2137 entry:
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
2146 ; CHECK-NEXT:    ret
2147 entry:
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
2156 ; CHECK-NEXT:    ret
2157 entry:
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
2166 ; CHECK-NEXT:    ret
2167 entry:
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
2176 ; CHECK-NEXT:    ret
2177 entry:
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
2186 ; CHECK-NEXT:    ret
2187 entry:
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
2197 ; CHECK-NEXT:    ret
2198 entry:
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
2207 ; CHECK-NEXT:    ret
2208 entry:
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
2217 ; CHECK-NEXT:    ret
2218 entry:
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
2227 ; CHECK-NEXT:    ret
2228 entry:
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
2237 ; CHECK-NEXT:    ret
2238 entry:
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
2247 ; CHECK-NEXT:    ret
2248 entry:
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
2257 ; CHECK-NEXT:    ret
2258 entry:
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
2267 ; CHECK-NEXT:    ret
2268 entry:
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
2277 ; CHECK-NEXT:    ret
2278 entry:
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
2287 ; CHECK-NEXT:    ret
2288 entry:
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
2297 ; CHECK-NEXT:    ret
2298 entry:
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
2307 ; CHECK-NEXT:    ret
2308 entry:
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
2317 ; CHECK-NEXT:    ret
2318 entry:
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
2327 ; CHECK-NEXT:    ret
2328 entry:
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
2337 ; CHECK-NEXT:    ret
2338 entry:
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
2347 ; CHECK-NEXT:    ret
2348 entry:
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
2357 ; CHECK-NEXT:    ret
2358 entry:
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
2367 ; CHECK-NEXT:    ret
2368 entry:
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
2377 ; CHECK-NEXT:    ret
2378 entry:
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
2387 ; CHECK-NEXT:    ret
2388 entry:
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
2397 ; CHECK-NEXT:    ret
2398 entry:
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
2407 ; CHECK-NEXT:    ret
2408 entry:
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
2417 ; CHECK-NEXT:    ret
2418 entry:
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
2427 ; CHECK-NEXT:    ret
2428 entry:
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
2437 ; CHECK-NEXT:    ret
2438 entry:
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
2447 ; CHECK-NEXT:    ret
2448 entry:
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
2457 ; CHECK-NEXT:    ret
2458 entry:
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
2467 ; CHECK-NEXT:    ret
2468 entry:
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
2477 ; CHECK-NEXT:    ret
2478 entry:
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
2487 ; CHECK-NEXT:    ret
2488 entry:
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
2497 ; CHECK-NEXT:    ret
2498 entry:
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
2507 ; CHECK-NEXT:    ret
2508 entry:
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
2517 ; CHECK-NEXT:    ret
2518 entry:
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
2527 ; CHECK-NEXT:    ret
2528 entry:
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
2537 ; CHECK-NEXT:    ret
2538 entry:
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
2547 ; CHECK-NEXT:    ret
2548 entry:
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
2557 ; CHECK-NEXT:    ret
2558 entry:
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
2567 ; CHECK-NEXT:    ret
2568 entry:
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
2577 ; CHECK-NEXT:    ret
2578 entry:
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
2587 ; CHECK-NEXT:    ret
2588 entry:
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
2597 ; CHECK-NEXT:    ret
2598 entry:
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
2607 ; CHECK-NEXT:    ret
2608 entry:
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
2617 ; CHECK-NEXT:    ret
2618 entry:
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
2627 ; CHECK-NEXT:    ret
2628 entry:
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
2637 ; CHECK-NEXT:    ret
2638 entry:
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
2647 ; CHECK-NEXT:    ret
2648 entry:
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
2657 ; CHECK-NEXT:    ret
2658 entry:
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
2667 ; CHECK-NEXT:    ret
2668 entry:
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
2677 ; CHECK-NEXT:    ret
2678 entry:
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
2687 ; CHECK-NEXT:    ret
2688 entry:
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
2697 ; CHECK-NEXT:    ret
2698 entry:
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
2707 ; CHECK-NEXT:    ret
2708 entry:
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
2717 ; CHECK-NEXT:    ret
2718 entry:
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
2727 ; CHECK-NEXT:    ret
2728 entry:
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
2737 ; CHECK-NEXT:    ret
2738 entry:
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
2747 ; CHECK-NEXT:    ret
2748 entry:
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
2757 ; CHECK-NEXT:    ret
2758 entry:
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
2767 ; CHECK-NEXT:    ret
2768 entry:
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
2777 ; CHECK-NEXT:    ret
2778 entry:
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
2787 ; CHECK-NEXT:    ret
2788 entry:
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
2796 ; CHECK-NEXT:    ret
2797 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
2805 ; CHECK-NEXT:    ret
2806 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
2814 ; CHECK-NEXT:    ret
2815 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
2823 ; CHECK-NEXT:    ret
2824 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
2832 ; CHECK-NEXT:    ret
2833 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
2841 ; CHECK-NEXT:    ret
2842 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
2850 ; CHECK-NEXT:    ret
2851 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
2859 ; CHECK-NEXT:    ret
2860 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
2868 ; CHECK-NEXT:    ret
2869 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
2877 ; CHECK-NEXT:    ret
2878 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
2886 ; CHECK-NEXT:    ret
2887 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
2895 ; CHECK-NEXT:    ret
2896 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
2904 ; CHECK-NEXT:    ret
2905 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
2913 ; CHECK-NEXT:    ret
2914 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
2922 ; CHECK-NEXT:    ret
2923 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
2932 ; CHECK-NEXT:    ret
2933 entry:
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
2942 ; CHECK-NEXT:    ret
2943 entry:
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
2952 ; CHECK-NEXT:    ret
2953 entry:
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
2962 ; CHECK-NEXT:    ret
2963 entry:
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
2972 ; CHECK-NEXT:    ret
2973 entry:
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
2982 ; CHECK-NEXT:    ret
2983 entry:
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
2992 ; CHECK-NEXT:    ret
2993 entry:
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
3002 ; CHECK-NEXT:    ret
3003 entry:
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
3012 ; CHECK-NEXT:    ret
3013 entry:
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
3022 ; CHECK-NEXT:    ret
3023 entry:
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
3032 ; CHECK-NEXT:    ret
3033 entry:
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
3042 ; CHECK-NEXT:    ret
3043 entry:
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
3052 ; CHECK-NEXT:    ret
3053 entry:
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
3062 ; CHECK-NEXT:    ret
3063 entry:
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
3072 ; CHECK-NEXT:    ret
3073 entry:
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
3084 ; CHECK-NEXT:    ret
3085 entry:
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
3099 ; CHECK-NEXT:    ret
3100 entry:
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
3114 ; CHECK-NEXT:    ret
3115 entry:
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
3129 ; CHECK-NEXT:    ret
3130 entry:
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
3144 ; CHECK-NEXT:    ret
3145 entry:
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
3159 ; CHECK-NEXT:    ret
3160 entry:
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
3174 ; CHECK-NEXT:    ret
3175 entry:
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
3189 ; CHECK-NEXT:    ret
3190 entry:
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
3204 ; CHECK-NEXT:    ret
3205 entry:
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
3219 ; CHECK-NEXT:    ret
3220 entry:
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
3234 ; CHECK-NEXT:    ret
3235 entry:
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
3249 ; CHECK-NEXT:    ret
3250 entry:
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
3264 ; CHECK-NEXT:    ret
3265 entry:
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
3279 ; CHECK-NEXT:    ret
3280 entry:
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
3294 ; CHECK-NEXT:    ret
3295 entry:
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
3309 ; CHECK-NEXT:    ret
3310 entry:
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
3324 ; CHECK-NEXT:    ret
3325 entry:
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
3339 ; CHECK-NEXT:    ret
3340 entry:
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
3354 ; CHECK-NEXT:    ret
3355 entry:
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
3369 ; CHECK-NEXT:    ret
3370 entry:
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
3384 ; CHECK-NEXT:    ret
3385 entry:
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
3399 ; CHECK-NEXT:    ret
3400 entry:
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
3414 ; CHECK-NEXT:    ret
3415 entry:
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
3429 ; CHECK-NEXT:    ret
3430 entry:
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
3444 ; CHECK-NEXT:    ret
3445 entry:
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
3459 ; CHECK-NEXT:    ret
3460 entry:
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
3474 ; CHECK-NEXT:    ret
3475 entry:
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
3489 ; CHECK-NEXT:    ret
3490 entry:
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
3504 ; CHECK-NEXT:    ret
3505 entry:
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
3519 ; CHECK-NEXT:    ret
3520 entry:
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
3534 ; CHECK-NEXT:    ret
3535 entry:
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
3549 ; CHECK-NEXT:    ret
3550 entry:
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
3564 ; CHECK-NEXT:    ret
3565 entry:
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
3579 ; CHECK-NEXT:    ret
3580 entry:
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
3594 ; CHECK-NEXT:    ret
3595 entry:
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
3609 ; CHECK-NEXT:    ret
3610 entry:
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
3624 ; CHECK-NEXT:    ret
3625 entry:
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
3639 ; CHECK-NEXT:    ret
3640 entry:
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
3654 ; CHECK-NEXT:    ret
3655 entry:
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
3669 ; CHECK-NEXT:    ret
3670 entry:
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
3684 ; CHECK-NEXT:    ret
3685 entry:
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
3699 ; CHECK-NEXT:    ret
3700 entry:
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
3714 ; CHECK-NEXT:    ret
3715 entry:
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
3729 ; CHECK-NEXT:    ret
3730 entry:
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
3744 ; CHECK-NEXT:    ret
3745 entry:
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
3759 ; CHECK-NEXT:    ret
3760 entry:
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
3774 ; CHECK-NEXT:    ret
3775 entry:
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
3789 ; CHECK-NEXT:    ret
3790 entry:
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
3804 ; CHECK-NEXT:    ret
3805 entry:
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
3819 ; CHECK-NEXT:    ret
3820 entry:
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
3834 ; CHECK-NEXT:    ret
3835 entry:
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
3849 ; CHECK-NEXT:    ret
3850 entry:
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
3864 ; CHECK-NEXT:    ret
3865 entry:
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
3879 ; CHECK-NEXT:    ret
3880 entry:
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:
3890 ; CHECK:       // %bb.0:
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
3895 ; CHECK-NEXT:    ret
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