• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s --check-prefix=CHECK
2
3%struct.int8x8x2_t = type { [2 x <8 x i8>] }
4%struct.int16x4x2_t = type { [2 x <4 x i16>] }
5%struct.int32x2x2_t = type { [2 x <2 x i32>] }
6%struct.uint8x8x2_t = type { [2 x <8 x i8>] }
7%struct.uint16x4x2_t = type { [2 x <4 x i16>] }
8%struct.uint32x2x2_t = type { [2 x <2 x i32>] }
9%struct.float32x2x2_t = type { [2 x <2 x float>] }
10%struct.poly8x8x2_t = type { [2 x <8 x i8>] }
11%struct.poly16x4x2_t = type { [2 x <4 x i16>] }
12%struct.int8x16x2_t = type { [2 x <16 x i8>] }
13%struct.int16x8x2_t = type { [2 x <8 x i16>] }
14%struct.int32x4x2_t = type { [2 x <4 x i32>] }
15%struct.uint8x16x2_t = type { [2 x <16 x i8>] }
16%struct.uint16x8x2_t = type { [2 x <8 x i16>] }
17%struct.uint32x4x2_t = type { [2 x <4 x i32>] }
18%struct.float32x4x2_t = type { [2 x <4 x float>] }
19%struct.poly8x16x2_t = type { [2 x <16 x i8>] }
20%struct.poly16x8x2_t = type { [2 x <8 x i16>] }
21
22define <8 x i8> @test_vuzp1_s8(<8 x i8> %a, <8 x i8> %b) {
23; CHECK-LABEL: test_vuzp1_s8:
24; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
25entry:
26  %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>
27  ret <8 x i8> %shuffle.i
28}
29
30define <16 x i8> @test_vuzp1q_s8(<16 x i8> %a, <16 x i8> %b) {
31; CHECK-LABEL: test_vuzp1q_s8:
32; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
33entry:
34  %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>
35  ret <16 x i8> %shuffle.i
36}
37
38define <4 x i16> @test_vuzp1_s16(<4 x i16> %a, <4 x i16> %b) {
39; CHECK-LABEL: test_vuzp1_s16:
40; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
41entry:
42  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
43  ret <4 x i16> %shuffle.i
44}
45
46define <8 x i16> @test_vuzp1q_s16(<8 x i16> %a, <8 x i16> %b) {
47; CHECK-LABEL: test_vuzp1q_s16:
48; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
49entry:
50  %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>
51  ret <8 x i16> %shuffle.i
52}
53
54define <2 x i32> @test_vuzp1_s32(<2 x i32> %a, <2 x i32> %b) {
55; CHECK-LABEL: test_vuzp1_s32:
56; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
57entry:
58  %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
59  ret <2 x i32> %shuffle.i
60}
61
62define <4 x i32> @test_vuzp1q_s32(<4 x i32> %a, <4 x i32> %b) {
63; CHECK-LABEL: test_vuzp1q_s32:
64; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
65entry:
66  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
67  ret <4 x i32> %shuffle.i
68}
69
70define <2 x i64> @test_vuzp1q_s64(<2 x i64> %a, <2 x i64> %b) {
71; CHECK-LABEL: test_vuzp1q_s64:
72; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
73entry:
74  %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 2>
75  ret <2 x i64> %shuffle.i
76}
77
78define <8 x i8> @test_vuzp1_u8(<8 x i8> %a, <8 x i8> %b) {
79; CHECK-LABEL: test_vuzp1_u8:
80; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
81entry:
82  %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>
83  ret <8 x i8> %shuffle.i
84}
85
86define <16 x i8> @test_vuzp1q_u8(<16 x i8> %a, <16 x i8> %b) {
87; CHECK-LABEL: test_vuzp1q_u8:
88; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
89entry:
90  %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>
91  ret <16 x i8> %shuffle.i
92}
93
94define <4 x i16> @test_vuzp1_u16(<4 x i16> %a, <4 x i16> %b) {
95; CHECK-LABEL: test_vuzp1_u16:
96; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
97entry:
98  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
99  ret <4 x i16> %shuffle.i
100}
101
102define <8 x i16> @test_vuzp1q_u16(<8 x i16> %a, <8 x i16> %b) {
103; CHECK-LABEL: test_vuzp1q_u16:
104; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
105entry:
106  %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>
107  ret <8 x i16> %shuffle.i
108}
109
110define <2 x i32> @test_vuzp1_u32(<2 x i32> %a, <2 x i32> %b) {
111; CHECK-LABEL: test_vuzp1_u32:
112; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
113entry:
114  %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
115  ret <2 x i32> %shuffle.i
116}
117
118define <4 x i32> @test_vuzp1q_u32(<4 x i32> %a, <4 x i32> %b) {
119; CHECK-LABEL: test_vuzp1q_u32:
120; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
121entry:
122  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
123  ret <4 x i32> %shuffle.i
124}
125
126define <2 x i64> @test_vuzp1q_u64(<2 x i64> %a, <2 x i64> %b) {
127; CHECK-LABEL: test_vuzp1q_u64:
128; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
129entry:
130  %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 2>
131  ret <2 x i64> %shuffle.i
132}
133
134define <2 x float> @test_vuzp1_f32(<2 x float> %a, <2 x float> %b) {
135; CHECK-LABEL: test_vuzp1_f32:
136; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
137entry:
138  %shuffle.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 0, i32 2>
139  ret <2 x float> %shuffle.i
140}
141
142define <4 x float> @test_vuzp1q_f32(<4 x float> %a, <4 x float> %b) {
143; CHECK-LABEL: test_vuzp1q_f32:
144; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
145entry:
146  %shuffle.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
147  ret <4 x float> %shuffle.i
148}
149
150define <2 x double> @test_vuzp1q_f64(<2 x double> %a, <2 x double> %b) {
151; CHECK-LABEL: test_vuzp1q_f64:
152; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
153entry:
154  %shuffle.i = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 2>
155  ret <2 x double> %shuffle.i
156}
157
158define <8 x i8> @test_vuzp1_p8(<8 x i8> %a, <8 x i8> %b) {
159; CHECK-LABEL: test_vuzp1_p8:
160; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
161entry:
162  %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>
163  ret <8 x i8> %shuffle.i
164}
165
166define <16 x i8> @test_vuzp1q_p8(<16 x i8> %a, <16 x i8> %b) {
167; CHECK-LABEL: test_vuzp1q_p8:
168; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
169entry:
170  %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>
171  ret <16 x i8> %shuffle.i
172}
173
174define <4 x i16> @test_vuzp1_p16(<4 x i16> %a, <4 x i16> %b) {
175; CHECK-LABEL: test_vuzp1_p16:
176; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
177entry:
178  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
179  ret <4 x i16> %shuffle.i
180}
181
182define <8 x i16> @test_vuzp1q_p16(<8 x i16> %a, <8 x i16> %b) {
183; CHECK-LABEL: test_vuzp1q_p16:
184; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
185entry:
186  %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>
187  ret <8 x i16> %shuffle.i
188}
189
190define <8 x i8> @test_vuzp2_s8(<8 x i8> %a, <8 x i8> %b) {
191; CHECK-LABEL: test_vuzp2_s8:
192; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
193entry:
194  %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>
195  ret <8 x i8> %shuffle.i
196}
197
198define <16 x i8> @test_vuzp2q_s8(<16 x i8> %a, <16 x i8> %b) {
199; CHECK-LABEL: test_vuzp2q_s8:
200; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
201entry:
202  %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>
203  ret <16 x i8> %shuffle.i
204}
205
206define <4 x i16> @test_vuzp2_s16(<4 x i16> %a, <4 x i16> %b) {
207; CHECK-LABEL: test_vuzp2_s16:
208; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
209entry:
210  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
211  ret <4 x i16> %shuffle.i
212}
213
214define <8 x i16> @test_vuzp2q_s16(<8 x i16> %a, <8 x i16> %b) {
215; CHECK-LABEL: test_vuzp2q_s16:
216; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
217entry:
218  %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>
219  ret <8 x i16> %shuffle.i
220}
221
222define <2 x i32> @test_vuzp2_s32(<2 x i32> %a, <2 x i32> %b) {
223; CHECK-LABEL: test_vuzp2_s32:
224; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
225entry:
226  %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
227  ret <2 x i32> %shuffle.i
228}
229
230define <4 x i32> @test_vuzp2q_s32(<4 x i32> %a, <4 x i32> %b) {
231; CHECK-LABEL: test_vuzp2q_s32:
232; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
233entry:
234  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
235  ret <4 x i32> %shuffle.i
236}
237
238define <2 x i64> @test_vuzp2q_s64(<2 x i64> %a, <2 x i64> %b) {
239; CHECK-LABEL: test_vuzp2q_s64:
240; CHECK: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
241entry:
242  %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
243  ret <2 x i64> %shuffle.i
244}
245
246define <8 x i8> @test_vuzp2_u8(<8 x i8> %a, <8 x i8> %b) {
247; CHECK-LABEL: test_vuzp2_u8:
248; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
249entry:
250  %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>
251  ret <8 x i8> %shuffle.i
252}
253
254define <16 x i8> @test_vuzp2q_u8(<16 x i8> %a, <16 x i8> %b) {
255; CHECK-LABEL: test_vuzp2q_u8:
256; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
257entry:
258  %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>
259  ret <16 x i8> %shuffle.i
260}
261
262define <4 x i16> @test_vuzp2_u16(<4 x i16> %a, <4 x i16> %b) {
263; CHECK-LABEL: test_vuzp2_u16:
264; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
265entry:
266  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
267  ret <4 x i16> %shuffle.i
268}
269
270define <8 x i16> @test_vuzp2q_u16(<8 x i16> %a, <8 x i16> %b) {
271; CHECK-LABEL: test_vuzp2q_u16:
272; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
273entry:
274  %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>
275  ret <8 x i16> %shuffle.i
276}
277
278define <2 x i32> @test_vuzp2_u32(<2 x i32> %a, <2 x i32> %b) {
279; CHECK-LABEL: test_vuzp2_u32:
280; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
281entry:
282  %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
283  ret <2 x i32> %shuffle.i
284}
285
286define <4 x i32> @test_vuzp2q_u32(<4 x i32> %a, <4 x i32> %b) {
287; CHECK-LABEL: test_vuzp2q_u32:
288; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
289entry:
290  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
291  ret <4 x i32> %shuffle.i
292}
293
294define <2 x i64> @test_vuzp2q_u64(<2 x i64> %a, <2 x i64> %b) {
295; CHECK-LABEL: test_vuzp2q_u64:
296; CHECK: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
297entry:
298  %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
299  ret <2 x i64> %shuffle.i
300}
301
302define <2 x float> @test_vuzp2_f32(<2 x float> %a, <2 x float> %b) {
303; CHECK-LABEL: test_vuzp2_f32:
304; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
305entry:
306  %shuffle.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 1, i32 3>
307  ret <2 x float> %shuffle.i
308}
309
310define <4 x float> @test_vuzp2q_f32(<4 x float> %a, <4 x float> %b) {
311; CHECK-LABEL: test_vuzp2q_f32:
312; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
313entry:
314  %shuffle.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
315  ret <4 x float> %shuffle.i
316}
317
318define <2 x double> @test_vuzp2q_f64(<2 x double> %a, <2 x double> %b) {
319; CHECK-LABEL: test_vuzp2q_f64:
320; CHECK: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
321entry:
322  %shuffle.i = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 1, i32 3>
323  ret <2 x double> %shuffle.i
324}
325
326define <8 x i8> @test_vuzp2_p8(<8 x i8> %a, <8 x i8> %b) {
327; CHECK-LABEL: test_vuzp2_p8:
328; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
329entry:
330  %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>
331  ret <8 x i8> %shuffle.i
332}
333
334define <16 x i8> @test_vuzp2q_p8(<16 x i8> %a, <16 x i8> %b) {
335; CHECK-LABEL: test_vuzp2q_p8:
336; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
337entry:
338  %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>
339  ret <16 x i8> %shuffle.i
340}
341
342define <4 x i16> @test_vuzp2_p16(<4 x i16> %a, <4 x i16> %b) {
343; CHECK-LABEL: test_vuzp2_p16:
344; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
345entry:
346  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
347  ret <4 x i16> %shuffle.i
348}
349
350define <8 x i16> @test_vuzp2q_p16(<8 x i16> %a, <8 x i16> %b) {
351; CHECK-LABEL: test_vuzp2q_p16:
352; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
353entry:
354  %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>
355  ret <8 x i16> %shuffle.i
356}
357
358define <8 x i8> @test_vzip1_s8(<8 x i8> %a, <8 x i8> %b) {
359; CHECK-LABEL: test_vzip1_s8:
360; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
361entry:
362  %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>
363  ret <8 x i8> %shuffle.i
364}
365
366define <16 x i8> @test_vzip1q_s8(<16 x i8> %a, <16 x i8> %b) {
367; CHECK-LABEL: test_vzip1q_s8:
368; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
369entry:
370  %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>
371  ret <16 x i8> %shuffle.i
372}
373
374define <4 x i16> @test_vzip1_s16(<4 x i16> %a, <4 x i16> %b) {
375; CHECK-LABEL: test_vzip1_s16:
376; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
377entry:
378  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
379  ret <4 x i16> %shuffle.i
380}
381
382define <8 x i16> @test_vzip1q_s16(<8 x i16> %a, <8 x i16> %b) {
383; CHECK-LABEL: test_vzip1q_s16:
384; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
385entry:
386  %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>
387  ret <8 x i16> %shuffle.i
388}
389
390define <2 x i32> @test_vzip1_s32(<2 x i32> %a, <2 x i32> %b) {
391; CHECK-LABEL: test_vzip1_s32:
392; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
393entry:
394  %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
395  ret <2 x i32> %shuffle.i
396}
397
398define <4 x i32> @test_vzip1q_s32(<4 x i32> %a, <4 x i32> %b) {
399; CHECK-LABEL: test_vzip1q_s32:
400; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
401entry:
402  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
403  ret <4 x i32> %shuffle.i
404}
405
406define <2 x i64> @test_vzip1q_s64(<2 x i64> %a, <2 x i64> %b) {
407; CHECK-LABEL: test_vzip1q_s64:
408; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
409entry:
410  %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 2>
411  ret <2 x i64> %shuffle.i
412}
413
414define <8 x i8> @test_vzip1_u8(<8 x i8> %a, <8 x i8> %b) {
415; CHECK-LABEL: test_vzip1_u8:
416; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
417entry:
418  %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>
419  ret <8 x i8> %shuffle.i
420}
421
422define <16 x i8> @test_vzip1q_u8(<16 x i8> %a, <16 x i8> %b) {
423; CHECK-LABEL: test_vzip1q_u8:
424; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
425entry:
426  %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>
427  ret <16 x i8> %shuffle.i
428}
429
430define <4 x i16> @test_vzip1_u16(<4 x i16> %a, <4 x i16> %b) {
431; CHECK-LABEL: test_vzip1_u16:
432; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
433entry:
434  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
435  ret <4 x i16> %shuffle.i
436}
437
438define <8 x i16> @test_vzip1q_u16(<8 x i16> %a, <8 x i16> %b) {
439; CHECK-LABEL: test_vzip1q_u16:
440; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
441entry:
442  %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>
443  ret <8 x i16> %shuffle.i
444}
445
446define <2 x i32> @test_vzip1_u32(<2 x i32> %a, <2 x i32> %b) {
447; CHECK-LABEL: test_vzip1_u32:
448; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
449entry:
450  %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
451  ret <2 x i32> %shuffle.i
452}
453
454define <4 x i32> @test_vzip1q_u32(<4 x i32> %a, <4 x i32> %b) {
455; CHECK-LABEL: test_vzip1q_u32:
456; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
457entry:
458  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
459  ret <4 x i32> %shuffle.i
460}
461
462define <2 x i64> @test_vzip1q_u64(<2 x i64> %a, <2 x i64> %b) {
463; CHECK-LABEL: test_vzip1q_u64:
464; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
465entry:
466  %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 2>
467  ret <2 x i64> %shuffle.i
468}
469
470define <2 x float> @test_vzip1_f32(<2 x float> %a, <2 x float> %b) {
471; CHECK-LABEL: test_vzip1_f32:
472; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
473entry:
474  %shuffle.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 0, i32 2>
475  ret <2 x float> %shuffle.i
476}
477
478define <4 x float> @test_vzip1q_f32(<4 x float> %a, <4 x float> %b) {
479; CHECK-LABEL: test_vzip1q_f32:
480; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
481entry:
482  %shuffle.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
483  ret <4 x float> %shuffle.i
484}
485
486define <2 x double> @test_vzip1q_f64(<2 x double> %a, <2 x double> %b) {
487; CHECK-LABEL: test_vzip1q_f64:
488; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
489entry:
490  %shuffle.i = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 2>
491  ret <2 x double> %shuffle.i
492}
493
494define <8 x i8> @test_vzip1_p8(<8 x i8> %a, <8 x i8> %b) {
495; CHECK-LABEL: test_vzip1_p8:
496; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
497entry:
498  %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>
499  ret <8 x i8> %shuffle.i
500}
501
502define <16 x i8> @test_vzip1q_p8(<16 x i8> %a, <16 x i8> %b) {
503; CHECK-LABEL: test_vzip1q_p8:
504; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
505entry:
506  %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>
507  ret <16 x i8> %shuffle.i
508}
509
510define <4 x i16> @test_vzip1_p16(<4 x i16> %a, <4 x i16> %b) {
511; CHECK-LABEL: test_vzip1_p16:
512; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
513entry:
514  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
515  ret <4 x i16> %shuffle.i
516}
517
518define <8 x i16> @test_vzip1q_p16(<8 x i16> %a, <8 x i16> %b) {
519; CHECK-LABEL: test_vzip1q_p16:
520; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
521entry:
522  %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>
523  ret <8 x i16> %shuffle.i
524}
525
526define <8 x i8> @test_vzip2_s8(<8 x i8> %a, <8 x i8> %b) {
527; CHECK-LABEL: test_vzip2_s8:
528; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
529entry:
530  %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>
531  ret <8 x i8> %shuffle.i
532}
533
534define <16 x i8> @test_vzip2q_s8(<16 x i8> %a, <16 x i8> %b) {
535; CHECK-LABEL: test_vzip2q_s8:
536; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
537entry:
538  %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>
539  ret <16 x i8> %shuffle.i
540}
541
542define <4 x i16> @test_vzip2_s16(<4 x i16> %a, <4 x i16> %b) {
543; CHECK-LABEL: test_vzip2_s16:
544; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
545entry:
546  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
547  ret <4 x i16> %shuffle.i
548}
549
550define <8 x i16> @test_vzip2q_s16(<8 x i16> %a, <8 x i16> %b) {
551; CHECK-LABEL: test_vzip2q_s16:
552; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
553entry:
554  %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>
555  ret <8 x i16> %shuffle.i
556}
557
558define <2 x i32> @test_vzip2_s32(<2 x i32> %a, <2 x i32> %b) {
559; CHECK-LABEL: test_vzip2_s32:
560; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
561entry:
562  %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
563  ret <2 x i32> %shuffle.i
564}
565
566define <4 x i32> @test_vzip2q_s32(<4 x i32> %a, <4 x i32> %b) {
567; CHECK-LABEL: test_vzip2q_s32:
568; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
569entry:
570  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
571  ret <4 x i32> %shuffle.i
572}
573
574define <2 x i64> @test_vzip2q_s64(<2 x i64> %a, <2 x i64> %b) {
575; CHECK-LABEL: test_vzip2q_s64:
576; CHECK: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
577entry:
578  %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
579  ret <2 x i64> %shuffle.i
580}
581
582define <8 x i8> @test_vzip2_u8(<8 x i8> %a, <8 x i8> %b) {
583; CHECK-LABEL: test_vzip2_u8:
584; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
585entry:
586  %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>
587  ret <8 x i8> %shuffle.i
588}
589
590define <16 x i8> @test_vzip2q_u8(<16 x i8> %a, <16 x i8> %b) {
591; CHECK-LABEL: test_vzip2q_u8:
592; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
593entry:
594  %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>
595  ret <16 x i8> %shuffle.i
596}
597
598define <4 x i16> @test_vzip2_u16(<4 x i16> %a, <4 x i16> %b) {
599; CHECK-LABEL: test_vzip2_u16:
600; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
601entry:
602  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
603  ret <4 x i16> %shuffle.i
604}
605
606define <8 x i16> @test_vzip2q_u16(<8 x i16> %a, <8 x i16> %b) {
607; CHECK-LABEL: test_vzip2q_u16:
608; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
609entry:
610  %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>
611  ret <8 x i16> %shuffle.i
612}
613
614define <2 x i32> @test_vzip2_u32(<2 x i32> %a, <2 x i32> %b) {
615; CHECK-LABEL: test_vzip2_u32:
616; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
617entry:
618  %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
619  ret <2 x i32> %shuffle.i
620}
621
622define <4 x i32> @test_vzip2q_u32(<4 x i32> %a, <4 x i32> %b) {
623; CHECK-LABEL: test_vzip2q_u32:
624; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
625entry:
626  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
627  ret <4 x i32> %shuffle.i
628}
629
630define <2 x i64> @test_vzip2q_u64(<2 x i64> %a, <2 x i64> %b) {
631; CHECK-LABEL: test_vzip2q_u64:
632; CHECK: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
633entry:
634  %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
635  ret <2 x i64> %shuffle.i
636}
637
638define <2 x float> @test_vzip2_f32(<2 x float> %a, <2 x float> %b) {
639; CHECK-LABEL: test_vzip2_f32:
640; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
641entry:
642  %shuffle.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 1, i32 3>
643  ret <2 x float> %shuffle.i
644}
645
646define <4 x float> @test_vzip2q_f32(<4 x float> %a, <4 x float> %b) {
647; CHECK-LABEL: test_vzip2q_f32:
648; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
649entry:
650  %shuffle.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
651  ret <4 x float> %shuffle.i
652}
653
654define <2 x double> @test_vzip2q_f64(<2 x double> %a, <2 x double> %b) {
655; CHECK-LABEL: test_vzip2q_f64:
656; CHECK: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
657entry:
658  %shuffle.i = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 1, i32 3>
659  ret <2 x double> %shuffle.i
660}
661
662define <8 x i8> @test_vzip2_p8(<8 x i8> %a, <8 x i8> %b) {
663; CHECK-LABEL: test_vzip2_p8:
664; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
665entry:
666  %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>
667  ret <8 x i8> %shuffle.i
668}
669
670define <16 x i8> @test_vzip2q_p8(<16 x i8> %a, <16 x i8> %b) {
671; CHECK-LABEL: test_vzip2q_p8:
672; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
673entry:
674  %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>
675  ret <16 x i8> %shuffle.i
676}
677
678define <4 x i16> @test_vzip2_p16(<4 x i16> %a, <4 x i16> %b) {
679; CHECK-LABEL: test_vzip2_p16:
680; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
681entry:
682  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
683  ret <4 x i16> %shuffle.i
684}
685
686define <8 x i16> @test_vzip2q_p16(<8 x i16> %a, <8 x i16> %b) {
687; CHECK-LABEL: test_vzip2q_p16:
688; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
689entry:
690  %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>
691  ret <8 x i16> %shuffle.i
692}
693
694define <8 x i8> @test_vtrn1_s8(<8 x i8> %a, <8 x i8> %b) {
695; CHECK-LABEL: test_vtrn1_s8:
696; CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
697entry:
698  %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>
699  ret <8 x i8> %shuffle.i
700}
701
702define <16 x i8> @test_vtrn1q_s8(<16 x i8> %a, <16 x i8> %b) {
703; CHECK-LABEL: test_vtrn1q_s8:
704; CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
705entry:
706  %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>
707  ret <16 x i8> %shuffle.i
708}
709
710define <4 x i16> @test_vtrn1_s16(<4 x i16> %a, <4 x i16> %b) {
711; CHECK-LABEL: test_vtrn1_s16:
712; CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
713entry:
714  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
715  ret <4 x i16> %shuffle.i
716}
717
718define <8 x i16> @test_vtrn1q_s16(<8 x i16> %a, <8 x i16> %b) {
719; CHECK-LABEL: test_vtrn1q_s16:
720; CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
721entry:
722  %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>
723  ret <8 x i16> %shuffle.i
724}
725
726define <2 x i32> @test_vtrn1_s32(<2 x i32> %a, <2 x i32> %b) {
727; CHECK-LABEL: test_vtrn1_s32:
728; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
729entry:
730  %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
731  ret <2 x i32> %shuffle.i
732}
733
734define <4 x i32> @test_vtrn1q_s32(<4 x i32> %a, <4 x i32> %b) {
735; CHECK-LABEL: test_vtrn1q_s32:
736; CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
737entry:
738  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
739  ret <4 x i32> %shuffle.i
740}
741
742define <2 x i64> @test_vtrn1q_s64(<2 x i64> %a, <2 x i64> %b) {
743; CHECK-LABEL: test_vtrn1q_s64:
744; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
745entry:
746  %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 2>
747  ret <2 x i64> %shuffle.i
748}
749
750define <8 x i8> @test_vtrn1_u8(<8 x i8> %a, <8 x i8> %b) {
751; CHECK-LABEL: test_vtrn1_u8:
752; CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
753entry:
754  %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>
755  ret <8 x i8> %shuffle.i
756}
757
758define <16 x i8> @test_vtrn1q_u8(<16 x i8> %a, <16 x i8> %b) {
759; CHECK-LABEL: test_vtrn1q_u8:
760; CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
761entry:
762  %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>
763  ret <16 x i8> %shuffle.i
764}
765
766define <4 x i16> @test_vtrn1_u16(<4 x i16> %a, <4 x i16> %b) {
767; CHECK-LABEL: test_vtrn1_u16:
768; CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
769entry:
770  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
771  ret <4 x i16> %shuffle.i
772}
773
774define <8 x i16> @test_vtrn1q_u16(<8 x i16> %a, <8 x i16> %b) {
775; CHECK-LABEL: test_vtrn1q_u16:
776; CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
777entry:
778  %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>
779  ret <8 x i16> %shuffle.i
780}
781
782define <2 x i32> @test_vtrn1_u32(<2 x i32> %a, <2 x i32> %b) {
783; CHECK-LABEL: test_vtrn1_u32:
784; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
785entry:
786  %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
787  ret <2 x i32> %shuffle.i
788}
789
790define <4 x i32> @test_vtrn1q_u32(<4 x i32> %a, <4 x i32> %b) {
791; CHECK-LABEL: test_vtrn1q_u32:
792; CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
793entry:
794  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
795  ret <4 x i32> %shuffle.i
796}
797
798define <2 x i64> @test_vtrn1q_u64(<2 x i64> %a, <2 x i64> %b) {
799; CHECK-LABEL: test_vtrn1q_u64:
800; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
801entry:
802  %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 2>
803  ret <2 x i64> %shuffle.i
804}
805
806define <2 x float> @test_vtrn1_f32(<2 x float> %a, <2 x float> %b) {
807; CHECK-LABEL: test_vtrn1_f32:
808; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
809entry:
810  %shuffle.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 0, i32 2>
811  ret <2 x float> %shuffle.i
812}
813
814define <4 x float> @test_vtrn1q_f32(<4 x float> %a, <4 x float> %b) {
815; CHECK-LABEL: test_vtrn1q_f32:
816; CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
817entry:
818  %shuffle.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
819  ret <4 x float> %shuffle.i
820}
821
822define <2 x double> @test_vtrn1q_f64(<2 x double> %a, <2 x double> %b) {
823; CHECK-LABEL: test_vtrn1q_f64:
824; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
825entry:
826  %shuffle.i = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 2>
827  ret <2 x double> %shuffle.i
828}
829
830define <8 x i8> @test_vtrn1_p8(<8 x i8> %a, <8 x i8> %b) {
831; CHECK-LABEL: test_vtrn1_p8:
832; CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
833entry:
834  %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>
835  ret <8 x i8> %shuffle.i
836}
837
838define <16 x i8> @test_vtrn1q_p8(<16 x i8> %a, <16 x i8> %b) {
839; CHECK-LABEL: test_vtrn1q_p8:
840; CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
841entry:
842  %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>
843  ret <16 x i8> %shuffle.i
844}
845
846define <4 x i16> @test_vtrn1_p16(<4 x i16> %a, <4 x i16> %b) {
847; CHECK-LABEL: test_vtrn1_p16:
848; CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
849entry:
850  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
851  ret <4 x i16> %shuffle.i
852}
853
854define <8 x i16> @test_vtrn1q_p16(<8 x i16> %a, <8 x i16> %b) {
855; CHECK-LABEL: test_vtrn1q_p16:
856; CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
857entry:
858  %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>
859  ret <8 x i16> %shuffle.i
860}
861
862define <8 x i8> @test_vtrn2_s8(<8 x i8> %a, <8 x i8> %b) {
863; CHECK-LABEL: test_vtrn2_s8:
864; CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
865entry:
866  %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>
867  ret <8 x i8> %shuffle.i
868}
869
870define <16 x i8> @test_vtrn2q_s8(<16 x i8> %a, <16 x i8> %b) {
871; CHECK-LABEL: test_vtrn2q_s8:
872; CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
873entry:
874  %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>
875  ret <16 x i8> %shuffle.i
876}
877
878define <4 x i16> @test_vtrn2_s16(<4 x i16> %a, <4 x i16> %b) {
879; CHECK-LABEL: test_vtrn2_s16:
880; CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
881entry:
882  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
883  ret <4 x i16> %shuffle.i
884}
885
886define <8 x i16> @test_vtrn2q_s16(<8 x i16> %a, <8 x i16> %b) {
887; CHECK-LABEL: test_vtrn2q_s16:
888; CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
889entry:
890  %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>
891  ret <8 x i16> %shuffle.i
892}
893
894define <2 x i32> @test_vtrn2_s32(<2 x i32> %a, <2 x i32> %b) {
895; CHECK-LABEL: test_vtrn2_s32:
896; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
897entry:
898  %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
899  ret <2 x i32> %shuffle.i
900}
901
902define <4 x i32> @test_vtrn2q_s32(<4 x i32> %a, <4 x i32> %b) {
903; CHECK-LABEL: test_vtrn2q_s32:
904; CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
905entry:
906  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
907  ret <4 x i32> %shuffle.i
908}
909
910define <2 x i64> @test_vtrn2q_s64(<2 x i64> %a, <2 x i64> %b) {
911; CHECK-LABEL: test_vtrn2q_s64:
912; CHECK: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
913entry:
914  %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
915  ret <2 x i64> %shuffle.i
916}
917
918define <8 x i8> @test_vtrn2_u8(<8 x i8> %a, <8 x i8> %b) {
919; CHECK-LABEL: test_vtrn2_u8:
920; CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
921entry:
922  %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>
923  ret <8 x i8> %shuffle.i
924}
925
926define <16 x i8> @test_vtrn2q_u8(<16 x i8> %a, <16 x i8> %b) {
927; CHECK-LABEL: test_vtrn2q_u8:
928; CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
929entry:
930  %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>
931  ret <16 x i8> %shuffle.i
932}
933
934define <4 x i16> @test_vtrn2_u16(<4 x i16> %a, <4 x i16> %b) {
935; CHECK-LABEL: test_vtrn2_u16:
936; CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
937entry:
938  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
939  ret <4 x i16> %shuffle.i
940}
941
942define <8 x i16> @test_vtrn2q_u16(<8 x i16> %a, <8 x i16> %b) {
943; CHECK-LABEL: test_vtrn2q_u16:
944; CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
945entry:
946  %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>
947  ret <8 x i16> %shuffle.i
948}
949
950define <2 x i32> @test_vtrn2_u32(<2 x i32> %a, <2 x i32> %b) {
951; CHECK-LABEL: test_vtrn2_u32:
952; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
953entry:
954  %shuffle.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
955  ret <2 x i32> %shuffle.i
956}
957
958define <4 x i32> @test_vtrn2q_u32(<4 x i32> %a, <4 x i32> %b) {
959; CHECK-LABEL: test_vtrn2q_u32:
960; CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
961entry:
962  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
963  ret <4 x i32> %shuffle.i
964}
965
966define <2 x i64> @test_vtrn2q_u64(<2 x i64> %a, <2 x i64> %b) {
967; CHECK-LABEL: test_vtrn2q_u64:
968; CHECK: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
969entry:
970  %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 3>
971  ret <2 x i64> %shuffle.i
972}
973
974define <2 x float> @test_vtrn2_f32(<2 x float> %a, <2 x float> %b) {
975; CHECK-LABEL: test_vtrn2_f32:
976; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
977entry:
978  %shuffle.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 1, i32 3>
979  ret <2 x float> %shuffle.i
980}
981
982define <4 x float> @test_vtrn2q_f32(<4 x float> %a, <4 x float> %b) {
983; CHECK-LABEL: test_vtrn2q_f32:
984; CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
985entry:
986  %shuffle.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
987  ret <4 x float> %shuffle.i
988}
989
990define <2 x double> @test_vtrn2q_f64(<2 x double> %a, <2 x double> %b) {
991; CHECK-LABEL: test_vtrn2q_f64:
992; CHECK: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
993entry:
994  %shuffle.i = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 1, i32 3>
995  ret <2 x double> %shuffle.i
996}
997
998define <8 x i8> @test_vtrn2_p8(<8 x i8> %a, <8 x i8> %b) {
999; CHECK-LABEL: test_vtrn2_p8:
1000; CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1001entry:
1002  %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>
1003  ret <8 x i8> %shuffle.i
1004}
1005
1006define <16 x i8> @test_vtrn2q_p8(<16 x i8> %a, <16 x i8> %b) {
1007; CHECK-LABEL: test_vtrn2q_p8:
1008; CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1009entry:
1010  %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>
1011  ret <16 x i8> %shuffle.i
1012}
1013
1014define <4 x i16> @test_vtrn2_p16(<4 x i16> %a, <4 x i16> %b) {
1015; CHECK-LABEL: test_vtrn2_p16:
1016; CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1017entry:
1018  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
1019  ret <4 x i16> %shuffle.i
1020}
1021
1022define <8 x i16> @test_vtrn2q_p16(<8 x i16> %a, <8 x i16> %b) {
1023; CHECK-LABEL: test_vtrn2q_p16:
1024; CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1025entry:
1026  %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>
1027  ret <8 x i16> %shuffle.i
1028}
1029
1030define <8 x i8> @test_same_vuzp1_s8(<8 x i8> %a) {
1031; CHECK-LABEL: test_same_vuzp1_s8:
1032; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1033entry:
1034  %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>
1035  ret <8 x i8> %shuffle.i
1036}
1037
1038define <16 x i8> @test_same_vuzp1q_s8(<16 x i8> %a) {
1039; CHECK-LABEL: test_same_vuzp1q_s8:
1040; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1041entry:
1042  %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>
1043  ret <16 x i8> %shuffle.i
1044}
1045
1046define <4 x i16> @test_same_vuzp1_s16(<4 x i16> %a) {
1047; CHECK-LABEL: test_same_vuzp1_s16:
1048; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1049entry:
1050  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
1051  ret <4 x i16> %shuffle.i
1052}
1053
1054define <8 x i16> @test_same_vuzp1q_s16(<8 x i16> %a) {
1055; CHECK-LABEL: test_same_vuzp1q_s16:
1056; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1057entry:
1058  %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>
1059  ret <8 x i16> %shuffle.i
1060}
1061
1062define <4 x i32> @test_same_vuzp1q_s32(<4 x i32> %a) {
1063; CHECK-LABEL: test_same_vuzp1q_s32:
1064; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1065entry:
1066  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
1067  ret <4 x i32> %shuffle.i
1068}
1069
1070define <8 x i8> @test_same_vuzp1_u8(<8 x i8> %a) {
1071; CHECK-LABEL: test_same_vuzp1_u8:
1072; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1073entry:
1074  %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>
1075  ret <8 x i8> %shuffle.i
1076}
1077
1078define <16 x i8> @test_same_vuzp1q_u8(<16 x i8> %a) {
1079; CHECK-LABEL: test_same_vuzp1q_u8:
1080; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1081entry:
1082  %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>
1083  ret <16 x i8> %shuffle.i
1084}
1085
1086define <4 x i16> @test_same_vuzp1_u16(<4 x i16> %a) {
1087; CHECK-LABEL: test_same_vuzp1_u16:
1088; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1089entry:
1090  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
1091  ret <4 x i16> %shuffle.i
1092}
1093
1094define <8 x i16> @test_same_vuzp1q_u16(<8 x i16> %a) {
1095; CHECK-LABEL: test_same_vuzp1q_u16:
1096; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1097entry:
1098  %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>
1099  ret <8 x i16> %shuffle.i
1100}
1101
1102define <4 x i32> @test_same_vuzp1q_u32(<4 x i32> %a) {
1103; CHECK-LABEL: test_same_vuzp1q_u32:
1104; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1105entry:
1106  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
1107  ret <4 x i32> %shuffle.i
1108}
1109
1110define <4 x float> @test_same_vuzp1q_f32(<4 x float> %a) {
1111; CHECK-LABEL: test_same_vuzp1q_f32:
1112; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1113entry:
1114  %shuffle.i = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
1115  ret <4 x float> %shuffle.i
1116}
1117
1118define <8 x i8> @test_same_vuzp1_p8(<8 x i8> %a) {
1119; CHECK-LABEL: test_same_vuzp1_p8:
1120; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1121entry:
1122  %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>
1123  ret <8 x i8> %shuffle.i
1124}
1125
1126define <16 x i8> @test_same_vuzp1q_p8(<16 x i8> %a) {
1127; CHECK-LABEL: test_same_vuzp1q_p8:
1128; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1129entry:
1130  %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>
1131  ret <16 x i8> %shuffle.i
1132}
1133
1134define <4 x i16> @test_same_vuzp1_p16(<4 x i16> %a) {
1135; CHECK-LABEL: test_same_vuzp1_p16:
1136; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1137entry:
1138  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
1139  ret <4 x i16> %shuffle.i
1140}
1141
1142define <8 x i16> @test_same_vuzp1q_p16(<8 x i16> %a) {
1143; CHECK-LABEL: test_same_vuzp1q_p16:
1144; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1145entry:
1146  %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>
1147  ret <8 x i16> %shuffle.i
1148}
1149
1150define <8 x i8> @test_same_vuzp2_s8(<8 x i8> %a) {
1151; CHECK-LABEL: test_same_vuzp2_s8:
1152; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1153entry:
1154  %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>
1155  ret <8 x i8> %shuffle.i
1156}
1157
1158define <16 x i8> @test_same_vuzp2q_s8(<16 x i8> %a) {
1159; CHECK-LABEL: test_same_vuzp2q_s8:
1160; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1161entry:
1162  %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>
1163  ret <16 x i8> %shuffle.i
1164}
1165
1166define <4 x i16> @test_same_vuzp2_s16(<4 x i16> %a) {
1167; CHECK-LABEL: test_same_vuzp2_s16:
1168; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1169entry:
1170  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
1171  ret <4 x i16> %shuffle.i
1172}
1173
1174define <8 x i16> @test_same_vuzp2q_s16(<8 x i16> %a) {
1175; CHECK-LABEL: test_same_vuzp2q_s16:
1176; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1177entry:
1178  %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>
1179  ret <8 x i16> %shuffle.i
1180}
1181
1182define <4 x i32> @test_same_vuzp2q_s32(<4 x i32> %a) {
1183; CHECK-LABEL: test_same_vuzp2q_s32:
1184; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1185entry:
1186  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
1187  ret <4 x i32> %shuffle.i
1188}
1189
1190define <8 x i8> @test_same_vuzp2_u8(<8 x i8> %a) {
1191; CHECK-LABEL: test_same_vuzp2_u8:
1192; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1193entry:
1194  %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>
1195  ret <8 x i8> %shuffle.i
1196}
1197
1198define <16 x i8> @test_same_vuzp2q_u8(<16 x i8> %a) {
1199; CHECK-LABEL: test_same_vuzp2q_u8:
1200; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1201entry:
1202  %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>
1203  ret <16 x i8> %shuffle.i
1204}
1205
1206define <4 x i16> @test_same_vuzp2_u16(<4 x i16> %a) {
1207; CHECK-LABEL: test_same_vuzp2_u16:
1208; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1209entry:
1210  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
1211  ret <4 x i16> %shuffle.i
1212}
1213
1214define <8 x i16> @test_same_vuzp2q_u16(<8 x i16> %a) {
1215; CHECK-LABEL: test_same_vuzp2q_u16:
1216; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1217entry:
1218  %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>
1219  ret <8 x i16> %shuffle.i
1220}
1221
1222define <4 x i32> @test_same_vuzp2q_u32(<4 x i32> %a) {
1223; CHECK-LABEL: test_same_vuzp2q_u32:
1224; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1225entry:
1226  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
1227  ret <4 x i32> %shuffle.i
1228}
1229
1230define <4 x float> @test_same_vuzp2q_f32(<4 x float> %a) {
1231; CHECK-LABEL: test_same_vuzp2q_f32:
1232; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1233entry:
1234  %shuffle.i = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
1235  ret <4 x float> %shuffle.i
1236}
1237
1238define <8 x i8> @test_same_vuzp2_p8(<8 x i8> %a) {
1239; CHECK-LABEL: test_same_vuzp2_p8:
1240; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1241entry:
1242  %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>
1243  ret <8 x i8> %shuffle.i
1244}
1245
1246define <16 x i8> @test_same_vuzp2q_p8(<16 x i8> %a) {
1247; CHECK-LABEL: test_same_vuzp2q_p8:
1248; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1249entry:
1250  %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>
1251  ret <16 x i8> %shuffle.i
1252}
1253
1254define <4 x i16> @test_same_vuzp2_p16(<4 x i16> %a) {
1255; CHECK-LABEL: test_same_vuzp2_p16:
1256; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1257entry:
1258  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
1259  ret <4 x i16> %shuffle.i
1260}
1261
1262define <8 x i16> @test_same_vuzp2q_p16(<8 x i16> %a) {
1263; CHECK-LABEL: test_same_vuzp2q_p16:
1264; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1265entry:
1266  %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>
1267  ret <8 x i16> %shuffle.i
1268}
1269
1270define <8 x i8> @test_same_vzip1_s8(<8 x i8> %a) {
1271; CHECK-LABEL: test_same_vzip1_s8:
1272; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1273entry:
1274  %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>
1275  ret <8 x i8> %shuffle.i
1276}
1277
1278define <16 x i8> @test_same_vzip1q_s8(<16 x i8> %a) {
1279; CHECK-LABEL: test_same_vzip1q_s8:
1280; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1281entry:
1282  %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>
1283  ret <16 x i8> %shuffle.i
1284}
1285
1286define <4 x i16> @test_same_vzip1_s16(<4 x i16> %a) {
1287; CHECK-LABEL: test_same_vzip1_s16:
1288; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1289entry:
1290  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
1291  ret <4 x i16> %shuffle.i
1292}
1293
1294define <8 x i16> @test_same_vzip1q_s16(<8 x i16> %a) {
1295; CHECK-LABEL: test_same_vzip1q_s16:
1296; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1297entry:
1298  %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>
1299  ret <8 x i16> %shuffle.i
1300}
1301
1302define <4 x i32> @test_same_vzip1q_s32(<4 x i32> %a) {
1303; CHECK-LABEL: test_same_vzip1q_s32:
1304; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1305entry:
1306  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
1307  ret <4 x i32> %shuffle.i
1308}
1309
1310define <8 x i8> @test_same_vzip1_u8(<8 x i8> %a) {
1311; CHECK-LABEL: test_same_vzip1_u8:
1312; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1313entry:
1314  %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>
1315  ret <8 x i8> %shuffle.i
1316}
1317
1318define <16 x i8> @test_same_vzip1q_u8(<16 x i8> %a) {
1319; CHECK-LABEL: test_same_vzip1q_u8:
1320; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1321entry:
1322  %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>
1323  ret <16 x i8> %shuffle.i
1324}
1325
1326define <4 x i16> @test_same_vzip1_u16(<4 x i16> %a) {
1327; CHECK-LABEL: test_same_vzip1_u16:
1328; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1329entry:
1330  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
1331  ret <4 x i16> %shuffle.i
1332}
1333
1334define <8 x i16> @test_same_vzip1q_u16(<8 x i16> %a) {
1335; CHECK-LABEL: test_same_vzip1q_u16:
1336; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1337entry:
1338  %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>
1339  ret <8 x i16> %shuffle.i
1340}
1341
1342define <4 x i32> @test_same_vzip1q_u32(<4 x i32> %a) {
1343; CHECK-LABEL: test_same_vzip1q_u32:
1344; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1345entry:
1346  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
1347  ret <4 x i32> %shuffle.i
1348}
1349
1350define <4 x float> @test_same_vzip1q_f32(<4 x float> %a) {
1351; CHECK-LABEL: test_same_vzip1q_f32:
1352; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1353entry:
1354  %shuffle.i = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
1355  ret <4 x float> %shuffle.i
1356}
1357
1358define <8 x i8> @test_same_vzip1_p8(<8 x i8> %a) {
1359; CHECK-LABEL: test_same_vzip1_p8:
1360; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1361entry:
1362  %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>
1363  ret <8 x i8> %shuffle.i
1364}
1365
1366define <16 x i8> @test_same_vzip1q_p8(<16 x i8> %a) {
1367; CHECK-LABEL: test_same_vzip1q_p8:
1368; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1369entry:
1370  %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>
1371  ret <16 x i8> %shuffle.i
1372}
1373
1374define <4 x i16> @test_same_vzip1_p16(<4 x i16> %a) {
1375; CHECK-LABEL: test_same_vzip1_p16:
1376; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1377entry:
1378  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
1379  ret <4 x i16> %shuffle.i
1380}
1381
1382define <8 x i16> @test_same_vzip1q_p16(<8 x i16> %a) {
1383; CHECK-LABEL: test_same_vzip1q_p16:
1384; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1385entry:
1386  %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>
1387  ret <8 x i16> %shuffle.i
1388}
1389
1390define <8 x i8> @test_same_vzip2_s8(<8 x i8> %a) {
1391; CHECK-LABEL: test_same_vzip2_s8:
1392; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1393entry:
1394  %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>
1395  ret <8 x i8> %shuffle.i
1396}
1397
1398define <16 x i8> @test_same_vzip2q_s8(<16 x i8> %a) {
1399; CHECK-LABEL: test_same_vzip2q_s8:
1400; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1401entry:
1402  %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>
1403  ret <16 x i8> %shuffle.i
1404}
1405
1406define <4 x i16> @test_same_vzip2_s16(<4 x i16> %a) {
1407; CHECK-LABEL: test_same_vzip2_s16:
1408; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1409entry:
1410  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
1411  ret <4 x i16> %shuffle.i
1412}
1413
1414define <8 x i16> @test_same_vzip2q_s16(<8 x i16> %a) {
1415; CHECK-LABEL: test_same_vzip2q_s16:
1416; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1417entry:
1418  %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>
1419  ret <8 x i16> %shuffle.i
1420}
1421
1422define <4 x i32> @test_same_vzip2q_s32(<4 x i32> %a) {
1423; CHECK-LABEL: test_same_vzip2q_s32:
1424; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1425entry:
1426  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
1427  ret <4 x i32> %shuffle.i
1428}
1429
1430define <8 x i8> @test_same_vzip2_u8(<8 x i8> %a) {
1431; CHECK-LABEL: test_same_vzip2_u8:
1432; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1433entry:
1434  %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>
1435  ret <8 x i8> %shuffle.i
1436}
1437
1438define <16 x i8> @test_same_vzip2q_u8(<16 x i8> %a) {
1439; CHECK-LABEL: test_same_vzip2q_u8:
1440; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1441entry:
1442  %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>
1443  ret <16 x i8> %shuffle.i
1444}
1445
1446define <4 x i16> @test_same_vzip2_u16(<4 x i16> %a) {
1447; CHECK-LABEL: test_same_vzip2_u16:
1448; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1449entry:
1450  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
1451  ret <4 x i16> %shuffle.i
1452}
1453
1454define <8 x i16> @test_same_vzip2q_u16(<8 x i16> %a) {
1455; CHECK-LABEL: test_same_vzip2q_u16:
1456; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1457entry:
1458  %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>
1459  ret <8 x i16> %shuffle.i
1460}
1461
1462define <4 x i32> @test_same_vzip2q_u32(<4 x i32> %a) {
1463; CHECK-LABEL: test_same_vzip2q_u32:
1464; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1465entry:
1466  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
1467  ret <4 x i32> %shuffle.i
1468}
1469
1470define <4 x float> @test_same_vzip2q_f32(<4 x float> %a) {
1471; CHECK-LABEL: test_same_vzip2q_f32:
1472; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1473entry:
1474  %shuffle.i = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
1475  ret <4 x float> %shuffle.i
1476}
1477
1478define <8 x i8> @test_same_vzip2_p8(<8 x i8> %a) {
1479; CHECK-LABEL: test_same_vzip2_p8:
1480; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1481entry:
1482  %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>
1483  ret <8 x i8> %shuffle.i
1484}
1485
1486define <16 x i8> @test_same_vzip2q_p8(<16 x i8> %a) {
1487; CHECK-LABEL: test_same_vzip2q_p8:
1488; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1489entry:
1490  %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>
1491  ret <16 x i8> %shuffle.i
1492}
1493
1494define <4 x i16> @test_same_vzip2_p16(<4 x i16> %a) {
1495; CHECK-LABEL: test_same_vzip2_p16:
1496; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1497entry:
1498  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
1499  ret <4 x i16> %shuffle.i
1500}
1501
1502define <8 x i16> @test_same_vzip2q_p16(<8 x i16> %a) {
1503; CHECK-LABEL: test_same_vzip2q_p16:
1504; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1505entry:
1506  %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>
1507  ret <8 x i16> %shuffle.i
1508}
1509
1510define <8 x i8> @test_same_vtrn1_s8(<8 x i8> %a) {
1511; CHECK-LABEL: test_same_vtrn1_s8:
1512; CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1513entry:
1514  %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>
1515  ret <8 x i8> %shuffle.i
1516}
1517
1518define <16 x i8> @test_same_vtrn1q_s8(<16 x i8> %a) {
1519; CHECK-LABEL: test_same_vtrn1q_s8:
1520; CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1521entry:
1522  %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>
1523  ret <16 x i8> %shuffle.i
1524}
1525
1526define <4 x i16> @test_same_vtrn1_s16(<4 x i16> %a) {
1527; CHECK-LABEL: test_same_vtrn1_s16:
1528; CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1529entry:
1530  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
1531  ret <4 x i16> %shuffle.i
1532}
1533
1534define <8 x i16> @test_same_vtrn1q_s16(<8 x i16> %a) {
1535; CHECK-LABEL: test_same_vtrn1q_s16:
1536; CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1537entry:
1538  %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>
1539  ret <8 x i16> %shuffle.i
1540}
1541
1542define <4 x i32> @test_same_vtrn1q_s32(<4 x i32> %a) {
1543; CHECK-LABEL: test_same_vtrn1q_s32:
1544; CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1545entry:
1546  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
1547  ret <4 x i32> %shuffle.i
1548}
1549
1550define <8 x i8> @test_same_vtrn1_u8(<8 x i8> %a) {
1551; CHECK-LABEL: test_same_vtrn1_u8:
1552; CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1553entry:
1554  %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>
1555  ret <8 x i8> %shuffle.i
1556}
1557
1558define <16 x i8> @test_same_vtrn1q_u8(<16 x i8> %a) {
1559; CHECK-LABEL: test_same_vtrn1q_u8:
1560; CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1561entry:
1562  %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>
1563  ret <16 x i8> %shuffle.i
1564}
1565
1566define <4 x i16> @test_same_vtrn1_u16(<4 x i16> %a) {
1567; CHECK-LABEL: test_same_vtrn1_u16:
1568; CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1569entry:
1570  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
1571  ret <4 x i16> %shuffle.i
1572}
1573
1574define <8 x i16> @test_same_vtrn1q_u16(<8 x i16> %a) {
1575; CHECK-LABEL: test_same_vtrn1q_u16:
1576; CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1577entry:
1578  %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>
1579  ret <8 x i16> %shuffle.i
1580}
1581
1582define <4 x i32> @test_same_vtrn1q_u32(<4 x i32> %a) {
1583; CHECK-LABEL: test_same_vtrn1q_u32:
1584; CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1585entry:
1586  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
1587  ret <4 x i32> %shuffle.i
1588}
1589
1590define <4 x float> @test_same_vtrn1q_f32(<4 x float> %a) {
1591; CHECK-LABEL: test_same_vtrn1q_f32:
1592; CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1593entry:
1594  %shuffle.i = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
1595  ret <4 x float> %shuffle.i
1596}
1597
1598define <8 x i8> @test_same_vtrn1_p8(<8 x i8> %a) {
1599; CHECK-LABEL: test_same_vtrn1_p8:
1600; CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1601entry:
1602  %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>
1603  ret <8 x i8> %shuffle.i
1604}
1605
1606define <16 x i8> @test_same_vtrn1q_p8(<16 x i8> %a) {
1607; CHECK-LABEL: test_same_vtrn1q_p8:
1608; CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1609entry:
1610  %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>
1611  ret <16 x i8> %shuffle.i
1612}
1613
1614define <4 x i16> @test_same_vtrn1_p16(<4 x i16> %a) {
1615; CHECK-LABEL: test_same_vtrn1_p16:
1616; CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1617entry:
1618  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
1619  ret <4 x i16> %shuffle.i
1620}
1621
1622define <8 x i16> @test_same_vtrn1q_p16(<8 x i16> %a) {
1623; CHECK-LABEL: test_same_vtrn1q_p16:
1624; CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1625entry:
1626  %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>
1627  ret <8 x i16> %shuffle.i
1628}
1629
1630define <8 x i8> @test_same_vtrn2_s8(<8 x i8> %a) {
1631; CHECK-LABEL: test_same_vtrn2_s8:
1632; CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1633entry:
1634  %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>
1635  ret <8 x i8> %shuffle.i
1636}
1637
1638define <16 x i8> @test_same_vtrn2q_s8(<16 x i8> %a) {
1639; CHECK-LABEL: test_same_vtrn2q_s8:
1640; CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1641entry:
1642  %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>
1643  ret <16 x i8> %shuffle.i
1644}
1645
1646define <4 x i16> @test_same_vtrn2_s16(<4 x i16> %a) {
1647; CHECK-LABEL: test_same_vtrn2_s16:
1648; CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1649entry:
1650  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
1651  ret <4 x i16> %shuffle.i
1652}
1653
1654define <8 x i16> @test_same_vtrn2q_s16(<8 x i16> %a) {
1655; CHECK-LABEL: test_same_vtrn2q_s16:
1656; CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1657entry:
1658  %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>
1659  ret <8 x i16> %shuffle.i
1660}
1661
1662define <4 x i32> @test_same_vtrn2q_s32(<4 x i32> %a) {
1663; CHECK-LABEL: test_same_vtrn2q_s32:
1664; CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1665entry:
1666  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
1667  ret <4 x i32> %shuffle.i
1668}
1669
1670define <8 x i8> @test_same_vtrn2_u8(<8 x i8> %a) {
1671; CHECK-LABEL: test_same_vtrn2_u8:
1672; CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1673entry:
1674  %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>
1675  ret <8 x i8> %shuffle.i
1676}
1677
1678define <16 x i8> @test_same_vtrn2q_u8(<16 x i8> %a) {
1679; CHECK-LABEL: test_same_vtrn2q_u8:
1680; CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1681entry:
1682  %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>
1683  ret <16 x i8> %shuffle.i
1684}
1685
1686define <4 x i16> @test_same_vtrn2_u16(<4 x i16> %a) {
1687; CHECK-LABEL: test_same_vtrn2_u16:
1688; CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1689entry:
1690  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
1691  ret <4 x i16> %shuffle.i
1692}
1693
1694define <8 x i16> @test_same_vtrn2q_u16(<8 x i16> %a) {
1695; CHECK-LABEL: test_same_vtrn2q_u16:
1696; CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1697entry:
1698  %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>
1699  ret <8 x i16> %shuffle.i
1700}
1701
1702define <4 x i32> @test_same_vtrn2q_u32(<4 x i32> %a) {
1703; CHECK-LABEL: test_same_vtrn2q_u32:
1704; CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1705entry:
1706  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> %a, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
1707  ret <4 x i32> %shuffle.i
1708}
1709
1710define <4 x float> @test_same_vtrn2q_f32(<4 x float> %a) {
1711; CHECK-LABEL: test_same_vtrn2q_f32:
1712; CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1713entry:
1714  %shuffle.i = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
1715  ret <4 x float> %shuffle.i
1716}
1717
1718define <8 x i8> @test_same_vtrn2_p8(<8 x i8> %a) {
1719; CHECK-LABEL: test_same_vtrn2_p8:
1720; CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1721entry:
1722  %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>
1723  ret <8 x i8> %shuffle.i
1724}
1725
1726define <16 x i8> @test_same_vtrn2q_p8(<16 x i8> %a) {
1727; CHECK-LABEL: test_same_vtrn2q_p8:
1728; CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1729entry:
1730  %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>
1731  ret <16 x i8> %shuffle.i
1732}
1733
1734define <4 x i16> @test_same_vtrn2_p16(<4 x i16> %a) {
1735; CHECK-LABEL: test_same_vtrn2_p16:
1736; CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1737entry:
1738  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> %a, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
1739  ret <4 x i16> %shuffle.i
1740}
1741
1742define <8 x i16> @test_same_vtrn2q_p16(<8 x i16> %a) {
1743; CHECK-LABEL: test_same_vtrn2q_p16:
1744; CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1745entry:
1746  %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>
1747  ret <8 x i16> %shuffle.i
1748}
1749
1750
1751define <8 x i8> @test_undef_vuzp1_s8(<8 x i8> %a) {
1752; CHECK-LABEL: test_undef_vuzp1_s8:
1753; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1754entry:
1755  %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>
1756  ret <8 x i8> %shuffle.i
1757}
1758
1759define <16 x i8> @test_undef_vuzp1q_s8(<16 x i8> %a) {
1760; CHECK-LABEL: test_undef_vuzp1q_s8:
1761; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1762entry:
1763  %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>
1764  ret <16 x i8> %shuffle.i
1765}
1766
1767define <4 x i16> @test_undef_vuzp1_s16(<4 x i16> %a) {
1768; CHECK-LABEL: test_undef_vuzp1_s16:
1769; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1770entry:
1771  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
1772  ret <4 x i16> %shuffle.i
1773}
1774
1775define <8 x i16> @test_undef_vuzp1q_s16(<8 x i16> %a) {
1776; CHECK-LABEL: test_undef_vuzp1q_s16:
1777; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1778entry:
1779  %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>
1780  ret <8 x i16> %shuffle.i
1781}
1782
1783define <4 x i32> @test_undef_vuzp1q_s32(<4 x i32> %a) {
1784; CHECK-LABEL: test_undef_vuzp1q_s32:
1785; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1786entry:
1787  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
1788  ret <4 x i32> %shuffle.i
1789}
1790
1791define <8 x i8> @test_undef_vuzp1_u8(<8 x i8> %a) {
1792; CHECK-LABEL: test_undef_vuzp1_u8:
1793; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1794entry:
1795  %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>
1796  ret <8 x i8> %shuffle.i
1797}
1798
1799define <16 x i8> @test_undef_vuzp1q_u8(<16 x i8> %a) {
1800; CHECK-LABEL: test_undef_vuzp1q_u8:
1801; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1802entry:
1803  %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>
1804  ret <16 x i8> %shuffle.i
1805}
1806
1807define <4 x i16> @test_undef_vuzp1_u16(<4 x i16> %a) {
1808; CHECK-LABEL: test_undef_vuzp1_u16:
1809; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1810entry:
1811  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
1812  ret <4 x i16> %shuffle.i
1813}
1814
1815define <8 x i16> @test_undef_vuzp1q_u16(<8 x i16> %a) {
1816; CHECK-LABEL: test_undef_vuzp1q_u16:
1817; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1818entry:
1819  %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>
1820  ret <8 x i16> %shuffle.i
1821}
1822
1823define <4 x i32> @test_undef_vuzp1q_u32(<4 x i32> %a) {
1824; CHECK-LABEL: test_undef_vuzp1q_u32:
1825; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1826entry:
1827  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
1828  ret <4 x i32> %shuffle.i
1829}
1830
1831define <4 x float> @test_undef_vuzp1q_f32(<4 x float> %a) {
1832; CHECK-LABEL: test_undef_vuzp1q_f32:
1833; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1834entry:
1835  %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
1836  ret <4 x float> %shuffle.i
1837}
1838
1839define <8 x i8> @test_undef_vuzp1_p8(<8 x i8> %a) {
1840; CHECK-LABEL: test_undef_vuzp1_p8:
1841; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1842entry:
1843  %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>
1844  ret <8 x i8> %shuffle.i
1845}
1846
1847define <16 x i8> @test_undef_vuzp1q_p8(<16 x i8> %a) {
1848; CHECK-LABEL: test_undef_vuzp1q_p8:
1849; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1850entry:
1851  %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>
1852  ret <16 x i8> %shuffle.i
1853}
1854
1855define <4 x i16> @test_undef_vuzp1_p16(<4 x i16> %a) {
1856; CHECK-LABEL: test_undef_vuzp1_p16:
1857; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1858entry:
1859  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
1860  ret <4 x i16> %shuffle.i
1861}
1862
1863define <8 x i16> @test_undef_vuzp1q_p16(<8 x i16> %a) {
1864; CHECK-LABEL: test_undef_vuzp1q_p16:
1865; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1866entry:
1867  %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>
1868  ret <8 x i16> %shuffle.i
1869}
1870
1871define <8 x i8> @test_undef_vuzp2_s8(<8 x i8> %a) {
1872; CHECK-LABEL: test_undef_vuzp2_s8:
1873; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1874entry:
1875  %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>
1876  ret <8 x i8> %shuffle.i
1877}
1878
1879define <16 x i8> @test_undef_vuzp2q_s8(<16 x i8> %a) {
1880; CHECK-LABEL: test_undef_vuzp2q_s8:
1881; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1882entry:
1883  %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>
1884  ret <16 x i8> %shuffle.i
1885}
1886
1887define <4 x i16> @test_undef_vuzp2_s16(<4 x i16> %a) {
1888; CHECK-LABEL: test_undef_vuzp2_s16:
1889; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1890entry:
1891  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
1892  ret <4 x i16> %shuffle.i
1893}
1894
1895define <8 x i16> @test_undef_vuzp2q_s16(<8 x i16> %a) {
1896; CHECK-LABEL: test_undef_vuzp2q_s16:
1897; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1898entry:
1899  %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>
1900  ret <8 x i16> %shuffle.i
1901}
1902
1903define <4 x i32> @test_undef_vuzp2q_s32(<4 x i32> %a) {
1904; CHECK-LABEL: test_undef_vuzp2q_s32:
1905; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1906entry:
1907  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
1908  ret <4 x i32> %shuffle.i
1909}
1910
1911define <8 x i8> @test_undef_vuzp2_u8(<8 x i8> %a) {
1912; CHECK-LABEL: test_undef_vuzp2_u8:
1913; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1914entry:
1915  %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>
1916  ret <8 x i8> %shuffle.i
1917}
1918
1919define <16 x i8> @test_undef_vuzp2q_u8(<16 x i8> %a) {
1920; CHECK-LABEL: test_undef_vuzp2q_u8:
1921; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1922entry:
1923  %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>
1924  ret <16 x i8> %shuffle.i
1925}
1926
1927define <4 x i16> @test_undef_vuzp2_u16(<4 x i16> %a) {
1928; CHECK-LABEL: test_undef_vuzp2_u16:
1929; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1930entry:
1931  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
1932  ret <4 x i16> %shuffle.i
1933}
1934
1935define <8 x i16> @test_undef_vuzp2q_u16(<8 x i16> %a) {
1936; CHECK-LABEL: test_undef_vuzp2q_u16:
1937; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1938entry:
1939  %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>
1940  ret <8 x i16> %shuffle.i
1941}
1942
1943define <4 x i32> @test_undef_vuzp2q_u32(<4 x i32> %a) {
1944; CHECK-LABEL: test_undef_vuzp2q_u32:
1945; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1946entry:
1947  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
1948  ret <4 x i32> %shuffle.i
1949}
1950
1951define <4 x float> @test_undef_vuzp2q_f32(<4 x float> %a) {
1952; CHECK-LABEL: test_undef_vuzp2q_f32:
1953; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1954entry:
1955  %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
1956  ret <4 x float> %shuffle.i
1957}
1958
1959define <8 x i8> @test_undef_vuzp2_p8(<8 x i8> %a) {
1960; CHECK-LABEL: test_undef_vuzp2_p8:
1961; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1962entry:
1963  %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>
1964  ret <8 x i8> %shuffle.i
1965}
1966
1967define <16 x i8> @test_undef_vuzp2q_p8(<16 x i8> %a) {
1968; CHECK-LABEL: test_undef_vuzp2q_p8:
1969; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1970entry:
1971  %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>
1972  ret <16 x i8> %shuffle.i
1973}
1974
1975define <4 x i16> @test_undef_vuzp2_p16(<4 x i16> %a) {
1976; CHECK-LABEL: test_undef_vuzp2_p16:
1977; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1978entry:
1979  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
1980  ret <4 x i16> %shuffle.i
1981}
1982
1983define <8 x i16> @test_undef_vuzp2q_p16(<8 x i16> %a) {
1984; CHECK-LABEL: test_undef_vuzp2q_p16:
1985; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1986entry:
1987  %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>
1988  ret <8 x i16> %shuffle.i
1989}
1990
1991define <8 x i8> @test_undef_vzip1_s8(<8 x i8> %a) {
1992; CHECK-LABEL: test_undef_vzip1_s8:
1993; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1994entry:
1995  %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>
1996  ret <8 x i8> %shuffle.i
1997}
1998
1999define <16 x i8> @test_undef_vzip1q_s8(<16 x i8> %a) {
2000; CHECK-LABEL: test_undef_vzip1q_s8:
2001; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2002entry:
2003  %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>
2004  ret <16 x i8> %shuffle.i
2005}
2006
2007define <4 x i16> @test_undef_vzip1_s16(<4 x i16> %a) {
2008; CHECK-LABEL: test_undef_vzip1_s16:
2009; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2010entry:
2011  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2012  ret <4 x i16> %shuffle.i
2013}
2014
2015define <8 x i16> @test_undef_vzip1q_s16(<8 x i16> %a) {
2016; CHECK-LABEL: test_undef_vzip1q_s16:
2017; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2018entry:
2019  %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>
2020  ret <8 x i16> %shuffle.i
2021}
2022
2023define <4 x i32> @test_undef_vzip1q_s32(<4 x i32> %a) {
2024; CHECK-LABEL: test_undef_vzip1q_s32:
2025; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2026entry:
2027  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2028  ret <4 x i32> %shuffle.i
2029}
2030
2031define <8 x i8> @test_undef_vzip1_u8(<8 x i8> %a) {
2032; CHECK-LABEL: test_undef_vzip1_u8:
2033; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2034entry:
2035  %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>
2036  ret <8 x i8> %shuffle.i
2037}
2038
2039define <16 x i8> @test_undef_vzip1q_u8(<16 x i8> %a) {
2040; CHECK-LABEL: test_undef_vzip1q_u8:
2041; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2042entry:
2043  %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>
2044  ret <16 x i8> %shuffle.i
2045}
2046
2047define <4 x i16> @test_undef_vzip1_u16(<4 x i16> %a) {
2048; CHECK-LABEL: test_undef_vzip1_u16:
2049; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2050entry:
2051  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2052  ret <4 x i16> %shuffle.i
2053}
2054
2055define <8 x i16> @test_undef_vzip1q_u16(<8 x i16> %a) {
2056; CHECK-LABEL: test_undef_vzip1q_u16:
2057; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2058entry:
2059  %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>
2060  ret <8 x i16> %shuffle.i
2061}
2062
2063define <4 x i32> @test_undef_vzip1q_u32(<4 x i32> %a) {
2064; CHECK-LABEL: test_undef_vzip1q_u32:
2065; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2066entry:
2067  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2068  ret <4 x i32> %shuffle.i
2069}
2070
2071define <4 x float> @test_undef_vzip1q_f32(<4 x float> %a) {
2072; CHECK-LABEL: test_undef_vzip1q_f32:
2073; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2074entry:
2075  %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2076  ret <4 x float> %shuffle.i
2077}
2078
2079define <8 x i8> @test_undef_vzip1_p8(<8 x i8> %a) {
2080; CHECK-LABEL: test_undef_vzip1_p8:
2081; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2082entry:
2083  %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>
2084  ret <8 x i8> %shuffle.i
2085}
2086
2087define <16 x i8> @test_undef_vzip1q_p8(<16 x i8> %a) {
2088; CHECK-LABEL: test_undef_vzip1q_p8:
2089; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2090entry:
2091  %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>
2092  ret <16 x i8> %shuffle.i
2093}
2094
2095define <4 x i16> @test_undef_vzip1_p16(<4 x i16> %a) {
2096; CHECK-LABEL: test_undef_vzip1_p16:
2097; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2098entry:
2099  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2100  ret <4 x i16> %shuffle.i
2101}
2102
2103define <8 x i16> @test_undef_vzip1q_p16(<8 x i16> %a) {
2104; CHECK-LABEL: test_undef_vzip1q_p16:
2105; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2106entry:
2107  %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>
2108  ret <8 x i16> %shuffle.i
2109}
2110
2111define <8 x i8> @test_undef_vzip2_s8(<8 x i8> %a) {
2112; CHECK-LABEL: test_undef_vzip2_s8:
2113; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2114entry:
2115  %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>
2116  ret <8 x i8> %shuffle.i
2117}
2118
2119define <16 x i8> @test_undef_vzip2q_s8(<16 x i8> %a) {
2120; CHECK-LABEL: test_undef_vzip2q_s8:
2121; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2122entry:
2123  %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>
2124  ret <16 x i8> %shuffle.i
2125}
2126
2127define <4 x i16> @test_undef_vzip2_s16(<4 x i16> %a) {
2128; CHECK-LABEL: test_undef_vzip2_s16:
2129; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2130entry:
2131  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2132  ret <4 x i16> %shuffle.i
2133}
2134
2135define <8 x i16> @test_undef_vzip2q_s16(<8 x i16> %a) {
2136; CHECK-LABEL: test_undef_vzip2q_s16:
2137; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2138entry:
2139  %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>
2140  ret <8 x i16> %shuffle.i
2141}
2142
2143define <4 x i32> @test_undef_vzip2q_s32(<4 x i32> %a) {
2144; CHECK-LABEL: test_undef_vzip2q_s32:
2145; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2146entry:
2147  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2148  ret <4 x i32> %shuffle.i
2149}
2150
2151define <8 x i8> @test_undef_vzip2_u8(<8 x i8> %a) {
2152; CHECK-LABEL: test_undef_vzip2_u8:
2153; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2154entry:
2155  %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>
2156  ret <8 x i8> %shuffle.i
2157}
2158
2159define <16 x i8> @test_undef_vzip2q_u8(<16 x i8> %a) {
2160; CHECK-LABEL: test_undef_vzip2q_u8:
2161; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2162entry:
2163  %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>
2164  ret <16 x i8> %shuffle.i
2165}
2166
2167define <4 x i16> @test_undef_vzip2_u16(<4 x i16> %a) {
2168; CHECK-LABEL: test_undef_vzip2_u16:
2169; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2170entry:
2171  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2172  ret <4 x i16> %shuffle.i
2173}
2174
2175define <8 x i16> @test_undef_vzip2q_u16(<8 x i16> %a) {
2176; CHECK-LABEL: test_undef_vzip2q_u16:
2177; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2178entry:
2179  %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>
2180  ret <8 x i16> %shuffle.i
2181}
2182
2183define <4 x i32> @test_undef_vzip2q_u32(<4 x i32> %a) {
2184; CHECK-LABEL: test_undef_vzip2q_u32:
2185; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2186entry:
2187  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2188  ret <4 x i32> %shuffle.i
2189}
2190
2191define <4 x float> @test_undef_vzip2q_f32(<4 x float> %a) {
2192; CHECK-LABEL: test_undef_vzip2q_f32:
2193; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2194entry:
2195  %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2196  ret <4 x float> %shuffle.i
2197}
2198
2199define <8 x i8> @test_undef_vzip2_p8(<8 x i8> %a) {
2200; CHECK-LABEL: test_undef_vzip2_p8:
2201; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2202entry:
2203  %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>
2204  ret <8 x i8> %shuffle.i
2205}
2206
2207define <16 x i8> @test_undef_vzip2q_p8(<16 x i8> %a) {
2208; CHECK-LABEL: test_undef_vzip2q_p8:
2209; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2210entry:
2211  %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>
2212  ret <16 x i8> %shuffle.i
2213}
2214
2215define <4 x i16> @test_undef_vzip2_p16(<4 x i16> %a) {
2216; CHECK-LABEL: test_undef_vzip2_p16:
2217; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2218entry:
2219  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2220  ret <4 x i16> %shuffle.i
2221}
2222
2223define <8 x i16> @test_undef_vzip2q_p16(<8 x i16> %a) {
2224; CHECK-LABEL: test_undef_vzip2q_p16:
2225; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2226entry:
2227  %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>
2228  ret <8 x i16> %shuffle.i
2229}
2230
2231define <8 x i8> @test_undef_vtrn1_s8(<8 x i8> %a) {
2232; CHECK-LABEL: test_undef_vtrn1_s8:
2233; CHECK: ret
2234entry:
2235  %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>
2236  ret <8 x i8> %shuffle.i
2237}
2238
2239define <16 x i8> @test_undef_vtrn1q_s8(<16 x i8> %a) {
2240; CHECK-LABEL: test_undef_vtrn1q_s8:
2241; CHECK: ret
2242entry:
2243  %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>
2244  ret <16 x i8> %shuffle.i
2245}
2246
2247define <4 x i16> @test_undef_vtrn1_s16(<4 x i16> %a) {
2248; CHECK-LABEL: test_undef_vtrn1_s16:
2249; CHECK: ret
2250entry:
2251  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
2252  ret <4 x i16> %shuffle.i
2253}
2254
2255define <8 x i16> @test_undef_vtrn1q_s16(<8 x i16> %a) {
2256; CHECK-LABEL: test_undef_vtrn1q_s16:
2257; CHECK: ret
2258entry:
2259  %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>
2260  ret <8 x i16> %shuffle.i
2261}
2262
2263define <4 x i32> @test_undef_vtrn1q_s32(<4 x i32> %a) {
2264; CHECK-LABEL: test_undef_vtrn1q_s32:
2265; CHECK: ret
2266entry:
2267  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
2268  ret <4 x i32> %shuffle.i
2269}
2270
2271define <8 x i8> @test_undef_vtrn1_u8(<8 x i8> %a) {
2272; CHECK-LABEL: test_undef_vtrn1_u8:
2273; CHECK: ret
2274entry:
2275  %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>
2276  ret <8 x i8> %shuffle.i
2277}
2278
2279define <16 x i8> @test_undef_vtrn1q_u8(<16 x i8> %a) {
2280; CHECK-LABEL: test_undef_vtrn1q_u8:
2281; CHECK: ret
2282entry:
2283  %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>
2284  ret <16 x i8> %shuffle.i
2285}
2286
2287define <4 x i16> @test_undef_vtrn1_u16(<4 x i16> %a) {
2288; CHECK-LABEL: test_undef_vtrn1_u16:
2289; CHECK: ret
2290entry:
2291  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
2292  ret <4 x i16> %shuffle.i
2293}
2294
2295define <8 x i16> @test_undef_vtrn1q_u16(<8 x i16> %a) {
2296; CHECK-LABEL: test_undef_vtrn1q_u16:
2297; CHECK: ret
2298entry:
2299  %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>
2300  ret <8 x i16> %shuffle.i
2301}
2302
2303define <4 x i32> @test_undef_vtrn1q_u32(<4 x i32> %a) {
2304; CHECK-LABEL: test_undef_vtrn1q_u32:
2305; CHECK: ret
2306entry:
2307  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
2308  ret <4 x i32> %shuffle.i
2309}
2310
2311define <4 x float> @test_undef_vtrn1q_f32(<4 x float> %a) {
2312; CHECK-LABEL: test_undef_vtrn1q_f32:
2313; CHECK: ret
2314entry:
2315  %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
2316  ret <4 x float> %shuffle.i
2317}
2318
2319define <8 x i8> @test_undef_vtrn1_p8(<8 x i8> %a) {
2320; CHECK-LABEL: test_undef_vtrn1_p8:
2321; CHECK: ret
2322entry:
2323  %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>
2324  ret <8 x i8> %shuffle.i
2325}
2326
2327define <16 x i8> @test_undef_vtrn1q_p8(<16 x i8> %a) {
2328; CHECK-LABEL: test_undef_vtrn1q_p8:
2329; CHECK: ret
2330entry:
2331  %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>
2332  ret <16 x i8> %shuffle.i
2333}
2334
2335define <4 x i16> @test_undef_vtrn1_p16(<4 x i16> %a) {
2336; CHECK-LABEL: test_undef_vtrn1_p16:
2337; CHECK: ret
2338entry:
2339  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
2340  ret <4 x i16> %shuffle.i
2341}
2342
2343define <8 x i16> @test_undef_vtrn1q_p16(<8 x i16> %a) {
2344; CHECK-LABEL: test_undef_vtrn1q_p16:
2345; CHECK: ret
2346entry:
2347  %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>
2348  ret <8 x i16> %shuffle.i
2349}
2350
2351define <8 x i8> @test_undef_vtrn2_s8(<8 x i8> %a) {
2352; CHECK-LABEL: test_undef_vtrn2_s8:
2353; CHECK: rev16 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2354entry:
2355  %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>
2356  ret <8 x i8> %shuffle.i
2357}
2358
2359define <16 x i8> @test_undef_vtrn2q_s8(<16 x i8> %a) {
2360; CHECK-LABEL: test_undef_vtrn2q_s8:
2361; CHECK: rev16 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2362entry:
2363  %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>
2364  ret <16 x i8> %shuffle.i
2365}
2366
2367define <4 x i16> @test_undef_vtrn2_s16(<4 x i16> %a) {
2368; CHECK-LABEL: test_undef_vtrn2_s16:
2369; CHECK: rev32 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2370entry:
2371  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
2372  ret <4 x i16> %shuffle.i
2373}
2374
2375define <8 x i16> @test_undef_vtrn2q_s16(<8 x i16> %a) {
2376; CHECK-LABEL: test_undef_vtrn2q_s16:
2377; CHECK: rev32 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2378entry:
2379  %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>
2380  ret <8 x i16> %shuffle.i
2381}
2382
2383define <4 x i32> @test_undef_vtrn2q_s32(<4 x i32> %a) {
2384; CHECK-LABEL: test_undef_vtrn2q_s32:
2385; CHECK: rev64 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2386entry:
2387  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
2388  ret <4 x i32> %shuffle.i
2389}
2390
2391define <8 x i8> @test_undef_vtrn2_u8(<8 x i8> %a) {
2392; CHECK-LABEL: test_undef_vtrn2_u8:
2393; CHECK: rev16 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2394entry:
2395  %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>
2396  ret <8 x i8> %shuffle.i
2397}
2398
2399define <16 x i8> @test_undef_vtrn2q_u8(<16 x i8> %a) {
2400; CHECK-LABEL: test_undef_vtrn2q_u8:
2401; CHECK: rev16 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2402entry:
2403  %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>
2404  ret <16 x i8> %shuffle.i
2405}
2406
2407define <4 x i16> @test_undef_vtrn2_u16(<4 x i16> %a) {
2408; CHECK-LABEL: test_undef_vtrn2_u16:
2409; CHECK: rev32 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2410entry:
2411  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
2412  ret <4 x i16> %shuffle.i
2413}
2414
2415define <8 x i16> @test_undef_vtrn2q_u16(<8 x i16> %a) {
2416; CHECK-LABEL: test_undef_vtrn2q_u16:
2417; CHECK: rev32 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2418entry:
2419  %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>
2420  ret <8 x i16> %shuffle.i
2421}
2422
2423define <4 x i32> @test_undef_vtrn2q_u32(<4 x i32> %a) {
2424; CHECK-LABEL: test_undef_vtrn2q_u32:
2425; CHECK: rev64 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2426entry:
2427  %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
2428  ret <4 x i32> %shuffle.i
2429}
2430
2431define <4 x float> @test_undef_vtrn2q_f32(<4 x float> %a) {
2432; CHECK-LABEL: test_undef_vtrn2q_f32:
2433; CHECK: rev64 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2434entry:
2435  %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
2436  ret <4 x float> %shuffle.i
2437}
2438
2439define <8 x i8> @test_undef_vtrn2_p8(<8 x i8> %a) {
2440; CHECK-LABEL: test_undef_vtrn2_p8:
2441; CHECK: rev16 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2442entry:
2443  %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>
2444  ret <8 x i8> %shuffle.i
2445}
2446
2447define <16 x i8> @test_undef_vtrn2q_p8(<16 x i8> %a) {
2448; CHECK-LABEL: test_undef_vtrn2q_p8:
2449; CHECK: rev16 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2450entry:
2451  %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>
2452  ret <16 x i8> %shuffle.i
2453}
2454
2455define <4 x i16> @test_undef_vtrn2_p16(<4 x i16> %a) {
2456; CHECK-LABEL: test_undef_vtrn2_p16:
2457; CHECK: rev32 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2458entry:
2459  %shuffle.i = shufflevector <4 x i16> %a, <4 x i16> undef, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
2460  ret <4 x i16> %shuffle.i
2461}
2462
2463define <8 x i16> @test_undef_vtrn2q_p16(<8 x i16> %a) {
2464; CHECK-LABEL: test_undef_vtrn2q_p16:
2465; CHECK: rev32 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2466entry:
2467  %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>
2468  ret <8 x i16> %shuffle.i
2469}
2470
2471define %struct.int8x8x2_t @test_vuzp_s8(<8 x i8> %a, <8 x i8> %b) {
2472; CHECK-LABEL: test_vuzp_s8:
2473; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2474; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2475entry:
2476  %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>
2477  %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>
2478  %.fca.0.0.insert = insertvalue %struct.int8x8x2_t undef, <8 x i8> %vuzp.i, 0, 0
2479  %.fca.0.1.insert = insertvalue %struct.int8x8x2_t %.fca.0.0.insert, <8 x i8> %vuzp1.i, 0, 1
2480  ret %struct.int8x8x2_t %.fca.0.1.insert
2481}
2482
2483define %struct.int16x4x2_t @test_vuzp_s16(<4 x i16> %a, <4 x i16> %b) {
2484; CHECK-LABEL: test_vuzp_s16:
2485; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2486; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2487entry:
2488  %vuzp.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
2489  %vuzp1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
2490  %.fca.0.0.insert = insertvalue %struct.int16x4x2_t undef, <4 x i16> %vuzp.i, 0, 0
2491  %.fca.0.1.insert = insertvalue %struct.int16x4x2_t %.fca.0.0.insert, <4 x i16> %vuzp1.i, 0, 1
2492  ret %struct.int16x4x2_t %.fca.0.1.insert
2493}
2494
2495define %struct.int32x2x2_t @test_vuzp_s32(<2 x i32> %a, <2 x i32> %b) {
2496; CHECK-LABEL: test_vuzp_s32:
2497; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
2498; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
2499entry:
2500  %vuzp.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
2501  %vuzp1.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
2502  %.fca.0.0.insert = insertvalue %struct.int32x2x2_t undef, <2 x i32> %vuzp.i, 0, 0
2503  %.fca.0.1.insert = insertvalue %struct.int32x2x2_t %.fca.0.0.insert, <2 x i32> %vuzp1.i, 0, 1
2504  ret %struct.int32x2x2_t %.fca.0.1.insert
2505}
2506
2507define %struct.uint8x8x2_t @test_vuzp_u8(<8 x i8> %a, <8 x i8> %b) {
2508; CHECK-LABEL: test_vuzp_u8:
2509; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2510; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2511entry:
2512  %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>
2513  %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>
2514  %.fca.0.0.insert = insertvalue %struct.uint8x8x2_t undef, <8 x i8> %vuzp.i, 0, 0
2515  %.fca.0.1.insert = insertvalue %struct.uint8x8x2_t %.fca.0.0.insert, <8 x i8> %vuzp1.i, 0, 1
2516  ret %struct.uint8x8x2_t %.fca.0.1.insert
2517}
2518
2519define %struct.uint16x4x2_t @test_vuzp_u16(<4 x i16> %a, <4 x i16> %b) {
2520; CHECK-LABEL: test_vuzp_u16:
2521; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2522; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2523entry:
2524  %vuzp.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
2525  %vuzp1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
2526  %.fca.0.0.insert = insertvalue %struct.uint16x4x2_t undef, <4 x i16> %vuzp.i, 0, 0
2527  %.fca.0.1.insert = insertvalue %struct.uint16x4x2_t %.fca.0.0.insert, <4 x i16> %vuzp1.i, 0, 1
2528  ret %struct.uint16x4x2_t %.fca.0.1.insert
2529}
2530
2531define %struct.uint32x2x2_t @test_vuzp_u32(<2 x i32> %a, <2 x i32> %b) {
2532; CHECK-LABEL: test_vuzp_u32:
2533; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
2534; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
2535entry:
2536  %vuzp.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
2537  %vuzp1.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
2538  %.fca.0.0.insert = insertvalue %struct.uint32x2x2_t undef, <2 x i32> %vuzp.i, 0, 0
2539  %.fca.0.1.insert = insertvalue %struct.uint32x2x2_t %.fca.0.0.insert, <2 x i32> %vuzp1.i, 0, 1
2540  ret %struct.uint32x2x2_t %.fca.0.1.insert
2541}
2542
2543define %struct.float32x2x2_t @test_vuzp_f32(<2 x float> %a, <2 x float> %b) {
2544; CHECK-LABEL: test_vuzp_f32:
2545; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
2546; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
2547entry:
2548  %vuzp.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 0, i32 2>
2549  %vuzp1.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 1, i32 3>
2550  %.fca.0.0.insert = insertvalue %struct.float32x2x2_t undef, <2 x float> %vuzp.i, 0, 0
2551  %.fca.0.1.insert = insertvalue %struct.float32x2x2_t %.fca.0.0.insert, <2 x float> %vuzp1.i, 0, 1
2552  ret %struct.float32x2x2_t %.fca.0.1.insert
2553}
2554
2555define %struct.poly8x8x2_t @test_vuzp_p8(<8 x i8> %a, <8 x i8> %b) {
2556; CHECK-LABEL: test_vuzp_p8:
2557; CHECK: uzp1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2558; CHECK: uzp2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2559entry:
2560  %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>
2561  %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>
2562  %.fca.0.0.insert = insertvalue %struct.poly8x8x2_t undef, <8 x i8> %vuzp.i, 0, 0
2563  %.fca.0.1.insert = insertvalue %struct.poly8x8x2_t %.fca.0.0.insert, <8 x i8> %vuzp1.i, 0, 1
2564  ret %struct.poly8x8x2_t %.fca.0.1.insert
2565}
2566
2567define %struct.poly16x4x2_t @test_vuzp_p16(<4 x i16> %a, <4 x i16> %b) {
2568; CHECK-LABEL: test_vuzp_p16:
2569; CHECK: uzp1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2570; CHECK: uzp2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2571entry:
2572  %vuzp.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
2573  %vuzp1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
2574  %.fca.0.0.insert = insertvalue %struct.poly16x4x2_t undef, <4 x i16> %vuzp.i, 0, 0
2575  %.fca.0.1.insert = insertvalue %struct.poly16x4x2_t %.fca.0.0.insert, <4 x i16> %vuzp1.i, 0, 1
2576  ret %struct.poly16x4x2_t %.fca.0.1.insert
2577}
2578
2579define %struct.int8x16x2_t @test_vuzpq_s8(<16 x i8> %a, <16 x i8> %b) {
2580; CHECK-LABEL: test_vuzpq_s8:
2581; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2582; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2583entry:
2584  %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>
2585  %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>
2586  %.fca.0.0.insert = insertvalue %struct.int8x16x2_t undef, <16 x i8> %vuzp.i, 0, 0
2587  %.fca.0.1.insert = insertvalue %struct.int8x16x2_t %.fca.0.0.insert, <16 x i8> %vuzp1.i, 0, 1
2588  ret %struct.int8x16x2_t %.fca.0.1.insert
2589}
2590
2591define %struct.int16x8x2_t @test_vuzpq_s16(<8 x i16> %a, <8 x i16> %b) {
2592; CHECK-LABEL: test_vuzpq_s16:
2593; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2594; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2595entry:
2596  %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>
2597  %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>
2598  %.fca.0.0.insert = insertvalue %struct.int16x8x2_t undef, <8 x i16> %vuzp.i, 0, 0
2599  %.fca.0.1.insert = insertvalue %struct.int16x8x2_t %.fca.0.0.insert, <8 x i16> %vuzp1.i, 0, 1
2600  ret %struct.int16x8x2_t %.fca.0.1.insert
2601}
2602
2603define %struct.int32x4x2_t @test_vuzpq_s32(<4 x i32> %a, <4 x i32> %b) {
2604; CHECK-LABEL: test_vuzpq_s32:
2605; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2606; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2607entry:
2608  %vuzp.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
2609  %vuzp1.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
2610  %.fca.0.0.insert = insertvalue %struct.int32x4x2_t undef, <4 x i32> %vuzp.i, 0, 0
2611  %.fca.0.1.insert = insertvalue %struct.int32x4x2_t %.fca.0.0.insert, <4 x i32> %vuzp1.i, 0, 1
2612  ret %struct.int32x4x2_t %.fca.0.1.insert
2613}
2614
2615define %struct.uint8x16x2_t @test_vuzpq_u8(<16 x i8> %a, <16 x i8> %b) {
2616; CHECK-LABEL: test_vuzpq_u8:
2617; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2618; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2619entry:
2620  %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>
2621  %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>
2622  %.fca.0.0.insert = insertvalue %struct.uint8x16x2_t undef, <16 x i8> %vuzp.i, 0, 0
2623  %.fca.0.1.insert = insertvalue %struct.uint8x16x2_t %.fca.0.0.insert, <16 x i8> %vuzp1.i, 0, 1
2624  ret %struct.uint8x16x2_t %.fca.0.1.insert
2625}
2626
2627define %struct.uint16x8x2_t @test_vuzpq_u16(<8 x i16> %a, <8 x i16> %b) {
2628; CHECK-LABEL: test_vuzpq_u16:
2629; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2630; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2631entry:
2632  %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>
2633  %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>
2634  %.fca.0.0.insert = insertvalue %struct.uint16x8x2_t undef, <8 x i16> %vuzp.i, 0, 0
2635  %.fca.0.1.insert = insertvalue %struct.uint16x8x2_t %.fca.0.0.insert, <8 x i16> %vuzp1.i, 0, 1
2636  ret %struct.uint16x8x2_t %.fca.0.1.insert
2637}
2638
2639define %struct.uint32x4x2_t @test_vuzpq_u32(<4 x i32> %a, <4 x i32> %b) {
2640; CHECK-LABEL: test_vuzpq_u32:
2641; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2642; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2643entry:
2644  %vuzp.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
2645  %vuzp1.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
2646  %.fca.0.0.insert = insertvalue %struct.uint32x4x2_t undef, <4 x i32> %vuzp.i, 0, 0
2647  %.fca.0.1.insert = insertvalue %struct.uint32x4x2_t %.fca.0.0.insert, <4 x i32> %vuzp1.i, 0, 1
2648  ret %struct.uint32x4x2_t %.fca.0.1.insert
2649}
2650
2651define %struct.float32x4x2_t @test_vuzpq_f32(<4 x float> %a, <4 x float> %b) {
2652; CHECK-LABEL: test_vuzpq_f32:
2653; CHECK: uzp1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2654; CHECK: uzp2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2655entry:
2656  %vuzp.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
2657  %vuzp1.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
2658  %.fca.0.0.insert = insertvalue %struct.float32x4x2_t undef, <4 x float> %vuzp.i, 0, 0
2659  %.fca.0.1.insert = insertvalue %struct.float32x4x2_t %.fca.0.0.insert, <4 x float> %vuzp1.i, 0, 1
2660  ret %struct.float32x4x2_t %.fca.0.1.insert
2661}
2662
2663define %struct.poly8x16x2_t @test_vuzpq_p8(<16 x i8> %a, <16 x i8> %b) {
2664; CHECK-LABEL: test_vuzpq_p8:
2665; CHECK: uzp1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2666; CHECK: uzp2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2667entry:
2668  %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>
2669  %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>
2670  %.fca.0.0.insert = insertvalue %struct.poly8x16x2_t undef, <16 x i8> %vuzp.i, 0, 0
2671  %.fca.0.1.insert = insertvalue %struct.poly8x16x2_t %.fca.0.0.insert, <16 x i8> %vuzp1.i, 0, 1
2672  ret %struct.poly8x16x2_t %.fca.0.1.insert
2673}
2674
2675define %struct.poly16x8x2_t @test_vuzpq_p16(<8 x i16> %a, <8 x i16> %b) {
2676; CHECK-LABEL: test_vuzpq_p16:
2677; CHECK: uzp1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2678; CHECK: uzp2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2679entry:
2680  %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>
2681  %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>
2682  %.fca.0.0.insert = insertvalue %struct.poly16x8x2_t undef, <8 x i16> %vuzp.i, 0, 0
2683  %.fca.0.1.insert = insertvalue %struct.poly16x8x2_t %.fca.0.0.insert, <8 x i16> %vuzp1.i, 0, 1
2684  ret %struct.poly16x8x2_t %.fca.0.1.insert
2685}
2686
2687define %struct.int8x8x2_t @test_vzip_s8(<8 x i8> %a, <8 x i8> %b) {
2688; CHECK-LABEL: test_vzip_s8:
2689; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2690; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2691entry:
2692  %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>
2693  %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>
2694  %.fca.0.0.insert = insertvalue %struct.int8x8x2_t undef, <8 x i8> %vzip.i, 0, 0
2695  %.fca.0.1.insert = insertvalue %struct.int8x8x2_t %.fca.0.0.insert, <8 x i8> %vzip1.i, 0, 1
2696  ret %struct.int8x8x2_t %.fca.0.1.insert
2697}
2698
2699define %struct.int16x4x2_t @test_vzip_s16(<4 x i16> %a, <4 x i16> %b) {
2700; CHECK-LABEL: test_vzip_s16:
2701; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2702; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2703entry:
2704  %vzip.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2705  %vzip1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2706  %.fca.0.0.insert = insertvalue %struct.int16x4x2_t undef, <4 x i16> %vzip.i, 0, 0
2707  %.fca.0.1.insert = insertvalue %struct.int16x4x2_t %.fca.0.0.insert, <4 x i16> %vzip1.i, 0, 1
2708  ret %struct.int16x4x2_t %.fca.0.1.insert
2709}
2710
2711define %struct.int32x2x2_t @test_vzip_s32(<2 x i32> %a, <2 x i32> %b) {
2712; CHECK-LABEL: test_vzip_s32:
2713; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
2714; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
2715entry:
2716  %vzip.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
2717  %vzip1.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
2718  %.fca.0.0.insert = insertvalue %struct.int32x2x2_t undef, <2 x i32> %vzip.i, 0, 0
2719  %.fca.0.1.insert = insertvalue %struct.int32x2x2_t %.fca.0.0.insert, <2 x i32> %vzip1.i, 0, 1
2720  ret %struct.int32x2x2_t %.fca.0.1.insert
2721}
2722
2723define %struct.uint8x8x2_t @test_vzip_u8(<8 x i8> %a, <8 x i8> %b) {
2724; CHECK-LABEL: test_vzip_u8:
2725; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2726; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2727entry:
2728  %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>
2729  %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>
2730  %.fca.0.0.insert = insertvalue %struct.uint8x8x2_t undef, <8 x i8> %vzip.i, 0, 0
2731  %.fca.0.1.insert = insertvalue %struct.uint8x8x2_t %.fca.0.0.insert, <8 x i8> %vzip1.i, 0, 1
2732  ret %struct.uint8x8x2_t %.fca.0.1.insert
2733}
2734
2735define %struct.uint16x4x2_t @test_vzip_u16(<4 x i16> %a, <4 x i16> %b) {
2736; CHECK-LABEL: test_vzip_u16:
2737; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2738; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2739entry:
2740  %vzip.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2741  %vzip1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2742  %.fca.0.0.insert = insertvalue %struct.uint16x4x2_t undef, <4 x i16> %vzip.i, 0, 0
2743  %.fca.0.1.insert = insertvalue %struct.uint16x4x2_t %.fca.0.0.insert, <4 x i16> %vzip1.i, 0, 1
2744  ret %struct.uint16x4x2_t %.fca.0.1.insert
2745}
2746
2747define %struct.uint32x2x2_t @test_vzip_u32(<2 x i32> %a, <2 x i32> %b) {
2748; CHECK-LABEL: test_vzip_u32:
2749; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
2750; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
2751entry:
2752  %vzip.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
2753  %vzip1.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
2754  %.fca.0.0.insert = insertvalue %struct.uint32x2x2_t undef, <2 x i32> %vzip.i, 0, 0
2755  %.fca.0.1.insert = insertvalue %struct.uint32x2x2_t %.fca.0.0.insert, <2 x i32> %vzip1.i, 0, 1
2756  ret %struct.uint32x2x2_t %.fca.0.1.insert
2757}
2758
2759define %struct.float32x2x2_t @test_vzip_f32(<2 x float> %a, <2 x float> %b) {
2760; CHECK-LABEL: test_vzip_f32:
2761; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
2762; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
2763entry:
2764  %vzip.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 0, i32 2>
2765  %vzip1.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 1, i32 3>
2766  %.fca.0.0.insert = insertvalue %struct.float32x2x2_t undef, <2 x float> %vzip.i, 0, 0
2767  %.fca.0.1.insert = insertvalue %struct.float32x2x2_t %.fca.0.0.insert, <2 x float> %vzip1.i, 0, 1
2768  ret %struct.float32x2x2_t %.fca.0.1.insert
2769}
2770
2771define %struct.poly8x8x2_t @test_vzip_p8(<8 x i8> %a, <8 x i8> %b) {
2772; CHECK-LABEL: test_vzip_p8:
2773; CHECK: zip1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2774; CHECK: zip2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2775entry:
2776  %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>
2777  %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>
2778  %.fca.0.0.insert = insertvalue %struct.poly8x8x2_t undef, <8 x i8> %vzip.i, 0, 0
2779  %.fca.0.1.insert = insertvalue %struct.poly8x8x2_t %.fca.0.0.insert, <8 x i8> %vzip1.i, 0, 1
2780  ret %struct.poly8x8x2_t %.fca.0.1.insert
2781}
2782
2783define %struct.poly16x4x2_t @test_vzip_p16(<4 x i16> %a, <4 x i16> %b) {
2784; CHECK-LABEL: test_vzip_p16:
2785; CHECK: zip1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2786; CHECK: zip2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2787entry:
2788  %vzip.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2789  %vzip1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2790  %.fca.0.0.insert = insertvalue %struct.poly16x4x2_t undef, <4 x i16> %vzip.i, 0, 0
2791  %.fca.0.1.insert = insertvalue %struct.poly16x4x2_t %.fca.0.0.insert, <4 x i16> %vzip1.i, 0, 1
2792  ret %struct.poly16x4x2_t %.fca.0.1.insert
2793}
2794
2795define %struct.int8x16x2_t @test_vzipq_s8(<16 x i8> %a, <16 x i8> %b) {
2796; CHECK-LABEL: test_vzipq_s8:
2797; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2798; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2799entry:
2800  %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>
2801  %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>
2802  %.fca.0.0.insert = insertvalue %struct.int8x16x2_t undef, <16 x i8> %vzip.i, 0, 0
2803  %.fca.0.1.insert = insertvalue %struct.int8x16x2_t %.fca.0.0.insert, <16 x i8> %vzip1.i, 0, 1
2804  ret %struct.int8x16x2_t %.fca.0.1.insert
2805}
2806
2807define %struct.int16x8x2_t @test_vzipq_s16(<8 x i16> %a, <8 x i16> %b) {
2808; CHECK-LABEL: test_vzipq_s16:
2809; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2810; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2811entry:
2812  %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>
2813  %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>
2814  %.fca.0.0.insert = insertvalue %struct.int16x8x2_t undef, <8 x i16> %vzip.i, 0, 0
2815  %.fca.0.1.insert = insertvalue %struct.int16x8x2_t %.fca.0.0.insert, <8 x i16> %vzip1.i, 0, 1
2816  ret %struct.int16x8x2_t %.fca.0.1.insert
2817}
2818
2819define %struct.int32x4x2_t @test_vzipq_s32(<4 x i32> %a, <4 x i32> %b) {
2820; CHECK-LABEL: test_vzipq_s32:
2821; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2822; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2823entry:
2824  %vzip.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2825  %vzip1.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2826  %.fca.0.0.insert = insertvalue %struct.int32x4x2_t undef, <4 x i32> %vzip.i, 0, 0
2827  %.fca.0.1.insert = insertvalue %struct.int32x4x2_t %.fca.0.0.insert, <4 x i32> %vzip1.i, 0, 1
2828  ret %struct.int32x4x2_t %.fca.0.1.insert
2829}
2830
2831define %struct.uint8x16x2_t @test_vzipq_u8(<16 x i8> %a, <16 x i8> %b) {
2832; CHECK-LABEL: test_vzipq_u8:
2833; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2834; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2835entry:
2836  %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>
2837  %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>
2838  %.fca.0.0.insert = insertvalue %struct.uint8x16x2_t undef, <16 x i8> %vzip.i, 0, 0
2839  %.fca.0.1.insert = insertvalue %struct.uint8x16x2_t %.fca.0.0.insert, <16 x i8> %vzip1.i, 0, 1
2840  ret %struct.uint8x16x2_t %.fca.0.1.insert
2841}
2842
2843define %struct.uint16x8x2_t @test_vzipq_u16(<8 x i16> %a, <8 x i16> %b) {
2844; CHECK-LABEL: test_vzipq_u16:
2845; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2846; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2847entry:
2848  %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>
2849  %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>
2850  %.fca.0.0.insert = insertvalue %struct.uint16x8x2_t undef, <8 x i16> %vzip.i, 0, 0
2851  %.fca.0.1.insert = insertvalue %struct.uint16x8x2_t %.fca.0.0.insert, <8 x i16> %vzip1.i, 0, 1
2852  ret %struct.uint16x8x2_t %.fca.0.1.insert
2853}
2854
2855define %struct.uint32x4x2_t @test_vzipq_u32(<4 x i32> %a, <4 x i32> %b) {
2856; CHECK-LABEL: test_vzipq_u32:
2857; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2858; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2859entry:
2860  %vzip.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2861  %vzip1.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2862  %.fca.0.0.insert = insertvalue %struct.uint32x4x2_t undef, <4 x i32> %vzip.i, 0, 0
2863  %.fca.0.1.insert = insertvalue %struct.uint32x4x2_t %.fca.0.0.insert, <4 x i32> %vzip1.i, 0, 1
2864  ret %struct.uint32x4x2_t %.fca.0.1.insert
2865}
2866
2867define %struct.float32x4x2_t @test_vzipq_f32(<4 x float> %a, <4 x float> %b) {
2868; CHECK-LABEL: test_vzipq_f32:
2869; CHECK: zip1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2870; CHECK: zip2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
2871entry:
2872  %vzip.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2873  %vzip1.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2874  %.fca.0.0.insert = insertvalue %struct.float32x4x2_t undef, <4 x float> %vzip.i, 0, 0
2875  %.fca.0.1.insert = insertvalue %struct.float32x4x2_t %.fca.0.0.insert, <4 x float> %vzip1.i, 0, 1
2876  ret %struct.float32x4x2_t %.fca.0.1.insert
2877}
2878
2879define %struct.poly8x16x2_t @test_vzipq_p8(<16 x i8> %a, <16 x i8> %b) {
2880; CHECK-LABEL: test_vzipq_p8:
2881; CHECK: zip1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2882; CHECK: zip2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2883entry:
2884  %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>
2885  %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>
2886  %.fca.0.0.insert = insertvalue %struct.poly8x16x2_t undef, <16 x i8> %vzip.i, 0, 0
2887  %.fca.0.1.insert = insertvalue %struct.poly8x16x2_t %.fca.0.0.insert, <16 x i8> %vzip1.i, 0, 1
2888  ret %struct.poly8x16x2_t %.fca.0.1.insert
2889}
2890
2891define %struct.poly16x8x2_t @test_vzipq_p16(<8 x i16> %a, <8 x i16> %b) {
2892; CHECK-LABEL: test_vzipq_p16:
2893; CHECK: zip1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2894; CHECK: zip2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
2895entry:
2896  %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>
2897  %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>
2898  %.fca.0.0.insert = insertvalue %struct.poly16x8x2_t undef, <8 x i16> %vzip.i, 0, 0
2899  %.fca.0.1.insert = insertvalue %struct.poly16x8x2_t %.fca.0.0.insert, <8 x i16> %vzip1.i, 0, 1
2900  ret %struct.poly16x8x2_t %.fca.0.1.insert
2901}
2902
2903define %struct.int8x8x2_t @test_vtrn_s8(<8 x i8> %a, <8 x i8> %b) {
2904; CHECK-LABEL: test_vtrn_s8:
2905; CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2906; CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2907entry:
2908  %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>
2909  %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>
2910  %.fca.0.0.insert = insertvalue %struct.int8x8x2_t undef, <8 x i8> %vtrn.i, 0, 0
2911  %.fca.0.1.insert = insertvalue %struct.int8x8x2_t %.fca.0.0.insert, <8 x i8> %vtrn1.i, 0, 1
2912  ret %struct.int8x8x2_t %.fca.0.1.insert
2913}
2914
2915define %struct.int16x4x2_t @test_vtrn_s16(<4 x i16> %a, <4 x i16> %b) {
2916; CHECK-LABEL: test_vtrn_s16:
2917; CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2918; CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2919entry:
2920  %vtrn.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
2921  %vtrn1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
2922  %.fca.0.0.insert = insertvalue %struct.int16x4x2_t undef, <4 x i16> %vtrn.i, 0, 0
2923  %.fca.0.1.insert = insertvalue %struct.int16x4x2_t %.fca.0.0.insert, <4 x i16> %vtrn1.i, 0, 1
2924  ret %struct.int16x4x2_t %.fca.0.1.insert
2925}
2926
2927define %struct.int32x2x2_t @test_vtrn_s32(<2 x i32> %a, <2 x i32> %b) {
2928; CHECK-LABEL: test_vtrn_s32:
2929; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
2930; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
2931entry:
2932  %vtrn.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
2933  %vtrn1.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
2934  %.fca.0.0.insert = insertvalue %struct.int32x2x2_t undef, <2 x i32> %vtrn.i, 0, 0
2935  %.fca.0.1.insert = insertvalue %struct.int32x2x2_t %.fca.0.0.insert, <2 x i32> %vtrn1.i, 0, 1
2936  ret %struct.int32x2x2_t %.fca.0.1.insert
2937}
2938
2939define %struct.uint8x8x2_t @test_vtrn_u8(<8 x i8> %a, <8 x i8> %b) {
2940; CHECK-LABEL: test_vtrn_u8:
2941; CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2942; CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2943entry:
2944  %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>
2945  %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>
2946  %.fca.0.0.insert = insertvalue %struct.uint8x8x2_t undef, <8 x i8> %vtrn.i, 0, 0
2947  %.fca.0.1.insert = insertvalue %struct.uint8x8x2_t %.fca.0.0.insert, <8 x i8> %vtrn1.i, 0, 1
2948  ret %struct.uint8x8x2_t %.fca.0.1.insert
2949}
2950
2951define %struct.uint16x4x2_t @test_vtrn_u16(<4 x i16> %a, <4 x i16> %b) {
2952; CHECK-LABEL: test_vtrn_u16:
2953; CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2954; CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
2955entry:
2956  %vtrn.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
2957  %vtrn1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
2958  %.fca.0.0.insert = insertvalue %struct.uint16x4x2_t undef, <4 x i16> %vtrn.i, 0, 0
2959  %.fca.0.1.insert = insertvalue %struct.uint16x4x2_t %.fca.0.0.insert, <4 x i16> %vtrn1.i, 0, 1
2960  ret %struct.uint16x4x2_t %.fca.0.1.insert
2961}
2962
2963define %struct.uint32x2x2_t @test_vtrn_u32(<2 x i32> %a, <2 x i32> %b) {
2964; CHECK-LABEL: test_vtrn_u32:
2965; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
2966; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
2967entry:
2968  %vtrn.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 2>
2969  %vtrn1.i = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 1, i32 3>
2970  %.fca.0.0.insert = insertvalue %struct.uint32x2x2_t undef, <2 x i32> %vtrn.i, 0, 0
2971  %.fca.0.1.insert = insertvalue %struct.uint32x2x2_t %.fca.0.0.insert, <2 x i32> %vtrn1.i, 0, 1
2972  ret %struct.uint32x2x2_t %.fca.0.1.insert
2973}
2974
2975define %struct.float32x2x2_t @test_vtrn_f32(<2 x float> %a, <2 x float> %b) {
2976; CHECK-LABEL: test_vtrn_f32:
2977; CHECK: zip1 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
2978; CHECK: zip2 {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
2979entry:
2980  %vtrn.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 0, i32 2>
2981  %vtrn1.i = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 1, i32 3>
2982  %.fca.0.0.insert = insertvalue %struct.float32x2x2_t undef, <2 x float> %vtrn.i, 0, 0
2983  %.fca.0.1.insert = insertvalue %struct.float32x2x2_t %.fca.0.0.insert, <2 x float> %vtrn1.i, 0, 1
2984  ret %struct.float32x2x2_t %.fca.0.1.insert
2985}
2986
2987define %struct.poly8x8x2_t @test_vtrn_p8(<8 x i8> %a, <8 x i8> %b) {
2988; CHECK-LABEL: test_vtrn_p8:
2989; CHECK: trn1 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2990; CHECK: trn2 {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2991entry:
2992  %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>
2993  %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>
2994  %.fca.0.0.insert = insertvalue %struct.poly8x8x2_t undef, <8 x i8> %vtrn.i, 0, 0
2995  %.fca.0.1.insert = insertvalue %struct.poly8x8x2_t %.fca.0.0.insert, <8 x i8> %vtrn1.i, 0, 1
2996  ret %struct.poly8x8x2_t %.fca.0.1.insert
2997}
2998
2999define %struct.poly16x4x2_t @test_vtrn_p16(<4 x i16> %a, <4 x i16> %b) {
3000; CHECK-LABEL: test_vtrn_p16:
3001; CHECK: trn1 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
3002; CHECK: trn2 {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
3003entry:
3004  %vtrn.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
3005  %vtrn1.i = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
3006  %.fca.0.0.insert = insertvalue %struct.poly16x4x2_t undef, <4 x i16> %vtrn.i, 0, 0
3007  %.fca.0.1.insert = insertvalue %struct.poly16x4x2_t %.fca.0.0.insert, <4 x i16> %vtrn1.i, 0, 1
3008  ret %struct.poly16x4x2_t %.fca.0.1.insert
3009}
3010
3011define %struct.int8x16x2_t @test_vtrnq_s8(<16 x i8> %a, <16 x i8> %b) {
3012; CHECK-LABEL: test_vtrnq_s8:
3013; CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
3014; CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
3015entry:
3016  %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>
3017  %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>
3018  %.fca.0.0.insert = insertvalue %struct.int8x16x2_t undef, <16 x i8> %vtrn.i, 0, 0
3019  %.fca.0.1.insert = insertvalue %struct.int8x16x2_t %.fca.0.0.insert, <16 x i8> %vtrn1.i, 0, 1
3020  ret %struct.int8x16x2_t %.fca.0.1.insert
3021}
3022
3023define %struct.int16x8x2_t @test_vtrnq_s16(<8 x i16> %a, <8 x i16> %b) {
3024; CHECK-LABEL: test_vtrnq_s16:
3025; CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
3026; CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
3027entry:
3028  %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>
3029  %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>
3030  %.fca.0.0.insert = insertvalue %struct.int16x8x2_t undef, <8 x i16> %vtrn.i, 0, 0
3031  %.fca.0.1.insert = insertvalue %struct.int16x8x2_t %.fca.0.0.insert, <8 x i16> %vtrn1.i, 0, 1
3032  ret %struct.int16x8x2_t %.fca.0.1.insert
3033}
3034
3035define %struct.int32x4x2_t @test_vtrnq_s32(<4 x i32> %a, <4 x i32> %b) {
3036; CHECK-LABEL: test_vtrnq_s32:
3037; CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
3038; CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
3039entry:
3040  %vtrn.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
3041  %vtrn1.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
3042  %.fca.0.0.insert = insertvalue %struct.int32x4x2_t undef, <4 x i32> %vtrn.i, 0, 0
3043  %.fca.0.1.insert = insertvalue %struct.int32x4x2_t %.fca.0.0.insert, <4 x i32> %vtrn1.i, 0, 1
3044  ret %struct.int32x4x2_t %.fca.0.1.insert
3045}
3046
3047define %struct.uint8x16x2_t @test_vtrnq_u8(<16 x i8> %a, <16 x i8> %b) {
3048; CHECK-LABEL: test_vtrnq_u8:
3049; CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
3050; CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
3051entry:
3052  %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>
3053  %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>
3054  %.fca.0.0.insert = insertvalue %struct.uint8x16x2_t undef, <16 x i8> %vtrn.i, 0, 0
3055  %.fca.0.1.insert = insertvalue %struct.uint8x16x2_t %.fca.0.0.insert, <16 x i8> %vtrn1.i, 0, 1
3056  ret %struct.uint8x16x2_t %.fca.0.1.insert
3057}
3058
3059define %struct.uint16x8x2_t @test_vtrnq_u16(<8 x i16> %a, <8 x i16> %b) {
3060; CHECK-LABEL: test_vtrnq_u16:
3061; CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
3062; CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
3063entry:
3064  %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>
3065  %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>
3066  %.fca.0.0.insert = insertvalue %struct.uint16x8x2_t undef, <8 x i16> %vtrn.i, 0, 0
3067  %.fca.0.1.insert = insertvalue %struct.uint16x8x2_t %.fca.0.0.insert, <8 x i16> %vtrn1.i, 0, 1
3068  ret %struct.uint16x8x2_t %.fca.0.1.insert
3069}
3070
3071define %struct.uint32x4x2_t @test_vtrnq_u32(<4 x i32> %a, <4 x i32> %b) {
3072; CHECK-LABEL: test_vtrnq_u32:
3073; CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
3074; CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
3075entry:
3076  %vtrn.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
3077  %vtrn1.i = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
3078  %.fca.0.0.insert = insertvalue %struct.uint32x4x2_t undef, <4 x i32> %vtrn.i, 0, 0
3079  %.fca.0.1.insert = insertvalue %struct.uint32x4x2_t %.fca.0.0.insert, <4 x i32> %vtrn1.i, 0, 1
3080  ret %struct.uint32x4x2_t %.fca.0.1.insert
3081}
3082
3083define %struct.float32x4x2_t @test_vtrnq_f32(<4 x float> %a, <4 x float> %b) {
3084; CHECK-LABEL: test_vtrnq_f32:
3085; CHECK: trn1 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
3086; CHECK: trn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
3087entry:
3088  %vtrn.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
3089  %vtrn1.i = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
3090  %.fca.0.0.insert = insertvalue %struct.float32x4x2_t undef, <4 x float> %vtrn.i, 0, 0
3091  %.fca.0.1.insert = insertvalue %struct.float32x4x2_t %.fca.0.0.insert, <4 x float> %vtrn1.i, 0, 1
3092  ret %struct.float32x4x2_t %.fca.0.1.insert
3093}
3094
3095define %struct.poly8x16x2_t @test_vtrnq_p8(<16 x i8> %a, <16 x i8> %b) {
3096; CHECK-LABEL: test_vtrnq_p8:
3097; CHECK: trn1 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
3098; CHECK: trn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
3099entry:
3100  %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>
3101  %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>
3102  %.fca.0.0.insert = insertvalue %struct.poly8x16x2_t undef, <16 x i8> %vtrn.i, 0, 0
3103  %.fca.0.1.insert = insertvalue %struct.poly8x16x2_t %.fca.0.0.insert, <16 x i8> %vtrn1.i, 0, 1
3104  ret %struct.poly8x16x2_t %.fca.0.1.insert
3105}
3106
3107define %struct.poly16x8x2_t @test_vtrnq_p16(<8 x i16> %a, <8 x i16> %b) {
3108; CHECK-LABEL: test_vtrnq_p16:
3109; CHECK: trn1 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
3110; CHECK: trn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
3111entry:
3112  %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>
3113  %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>
3114  %.fca.0.0.insert = insertvalue %struct.poly16x8x2_t undef, <8 x i16> %vtrn.i, 0, 0
3115  %.fca.0.1.insert = insertvalue %struct.poly16x8x2_t %.fca.0.0.insert, <8 x i16> %vtrn1.i, 0, 1
3116  ret %struct.poly16x8x2_t %.fca.0.1.insert
3117}
3118
3119define %struct.uint8x8x2_t @test_uzp(<16 x i8> %y) {
3120; CHECK-LABEL: test_uzp:
3121
3122  %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>
3123  %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>
3124  %.fca.0.0.insert = insertvalue %struct.uint8x8x2_t undef, <8 x i8> %vuzp.i, 0, 0
3125  %.fca.0.1.insert = insertvalue %struct.uint8x8x2_t %.fca.0.0.insert, <8 x i8> %vuzp1.i, 0, 1
3126  ret %struct.uint8x8x2_t %.fca.0.1.insert
3127
3128}
3129