blob: 9e70d24416290a320198bd18db46fde23a8aae84 [file] [log] [blame]
Graham Yiu67152612017-11-01 18:06:56 +00001; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-linux-gnu \
2; RUN: -verify-machineinstrs < %s | FileCheck %s
3; RUN: llc -O0 -mcpu=pwr9 -mtriple=powerpc64le-unknown-linux-gnu \
4; RUN: -verify-machineinstrs < %s | FileCheck %s
5; RUN: llc -mcpu=pwr9 -mtriple=powerpc64-unknown-linux-gnu \
6; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefix=CHECK-BE
7; RUN: llc -O0 -mcpu=pwr9 -mtriple=powerpc64-unknown-linux-gnu \
8; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefix=CHECK-BE
9
10; The following testcases take one halfword element from the second vector and
11; inserts it at various locations in the first vector
12define <8 x i16> @shuffle_vector_halfword_0_8(<8 x i16> %a, <8 x i16> %b) {
13entry:
14; CHECK-LABEL: shuffle_vector_halfword_0_8
15; CHECK: vsldoi 3, 3, 3, 8
16; CHECK: vinserth 2, 3, 14
17; CHECK-BE-LABEL: shuffle_vector_halfword_0_8
18; CHECK-BE: vsldoi 3, 3, 3, 10
19; CHECK-BE: vinserth 2, 3, 0
20 %vecins = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 8, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
21 ret <8 x i16> %vecins
22}
23
24define <8 x i16> @shuffle_vector_halfword_1_15(<8 x i16> %a, <8 x i16> %b) {
25entry:
26; CHECK-LABEL: shuffle_vector_halfword_1_15
27; CHECK: vsldoi 3, 3, 3, 10
28; CHECK: vinserth 2, 3, 12
29; CHECK-BE-LABEL: shuffle_vector_halfword_1_15
30; CHECK-BE: vsldoi 3, 3, 3, 8
31; CHECK-BE: vinserth 2, 3, 2
32 %vecins = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 15, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
33 ret <8 x i16> %vecins
34}
35
36define <8 x i16> @shuffle_vector_halfword_2_9(<8 x i16> %a, <8 x i16> %b) {
37entry:
38; CHECK-LABEL: shuffle_vector_halfword_2_9
39; CHECK: vsldoi 3, 3, 3, 6
40; CHECK: vinserth 2, 3, 10
41; CHECK-BE-LABEL: shuffle_vector_halfword_2_9
42; CHECK-BE: vsldoi 3, 3, 3, 12
43; CHECK-BE: vinserth 2, 3, 4
44 %vecins = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 1, i32 9, i32 3, i32 4, i32 5, i32 6, i32 7>
45 ret <8 x i16> %vecins
46}
47
48define <8 x i16> @shuffle_vector_halfword_3_13(<8 x i16> %a, <8 x i16> %b) {
49entry:
50; CHECK-LABEL: shuffle_vector_halfword_3_13
51; CHECK: vsldoi 3, 3, 3, 14
52; CHECK: vinserth 2, 3, 8
53; CHECK-BE-LABEL: shuffle_vector_halfword_3_13
54; CHECK-BE: vsldoi 3, 3, 3, 4
55; CHECK-BE: vinserth 2, 3, 6
56 %vecins = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 13, i32 4, i32 5, i32 6, i32 7>
57 ret <8 x i16> %vecins
58}
59
60define <8 x i16> @shuffle_vector_halfword_4_10(<8 x i16> %a, <8 x i16> %b) {
61entry:
62; CHECK-LABEL: shuffle_vector_halfword_4_10
63; CHECK: vsldoi 3, 3, 3, 4
64; CHECK: vinserth 2, 3, 6
65; CHECK-BE-LABEL: shuffle_vector_halfword_4_10
66; CHECK-BE: vsldoi 3, 3, 3, 14
67; CHECK-BE: vinserth 2, 3, 8
68 %vecins = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 10, i32 5, i32 6, i32 7>
69 ret <8 x i16> %vecins
70}
71
72define <8 x i16> @shuffle_vector_halfword_5_14(<8 x i16> %a, <8 x i16> %b) {
73entry:
74; CHECK-LABEL: shuffle_vector_halfword_5_14
75; CHECK: vsldoi 3, 3, 3, 12
76; CHECK: vinserth 2, 3, 4
77; CHECK-BE-LABEL: shuffle_vector_halfword_5_14
78; CHECK-BE: vsldoi 3, 3, 3, 6
79; CHECK-BE: vinserth 2, 3, 10
80 %vecins = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 14, i32 6, i32 7>
81 ret <8 x i16> %vecins
82}
83
84define <8 x i16> @shuffle_vector_halfword_6_11(<8 x i16> %a, <8 x i16> %b) {
85entry:
86; CHECK-LABEL: shuffle_vector_halfword_6_11
87; CHECK: vsldoi 3, 3, 3, 2
88; CHECK: vinserth 2, 3, 2
89; CHECK-BE-LABEL: shuffle_vector_halfword_6_11
90; CHECK-BE: vinserth 2, 3, 12
91 %vecins = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 11, i32 7>
92 ret <8 x i16> %vecins
93}
94
95define <8 x i16> @shuffle_vector_halfword_7_12(<8 x i16> %a, <8 x i16> %b) {
96entry:
97; CHECK-LABEL: shuffle_vector_halfword_7_12
98; CHECK: vinserth 2, 3, 0
99; CHECK-BE-LABEL: shuffle_vector_halfword_7_12
100; CHECK-BE: vsldoi 3, 3, 3, 2
101; CHECK-BE: vinserth 2, 3, 14
102 %vecins = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 12>
103 ret <8 x i16> %vecins
104}
105
106define <8 x i16> @shuffle_vector_halfword_8_1(<8 x i16> %a, <8 x i16> %b) {
107entry:
108; CHECK-LABEL: shuffle_vector_halfword_8_1
Stefan Pintilie659f0402018-03-27 17:51:53 +0000109; CHECK: vsldoi {{[0-9]+}}, 2, 2, 6
110; CHECK: vinserth {{[0-9]+}}, {{[0-9]+}}, 14
Graham Yiu67152612017-11-01 18:06:56 +0000111; CHECK-BE-LABEL: shuffle_vector_halfword_8_1
Stefan Pintilie659f0402018-03-27 17:51:53 +0000112; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 12
113; CHECK-BE: vinserth {{[0-9]+}}, {{[0-9]+}}, 0
Graham Yiu67152612017-11-01 18:06:56 +0000114 %vecins = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
115 ret <8 x i16> %vecins
116}
117
118; The following testcases take one halfword element from the first vector and
119; inserts it at various locations in the second vector
120define <8 x i16> @shuffle_vector_halfword_9_7(<8 x i16> %a, <8 x i16> %b) {
121entry:
122; CHECK-LABEL: shuffle_vector_halfword_9_7
Stefan Pintilie659f0402018-03-27 17:51:53 +0000123; CHECK: vsldoi {{[0-9]+}}, 2, 2, 10
124; CHECK: vinserth {{[0-9]+}}, {{[0-9]+}}, 12
Graham Yiu67152612017-11-01 18:06:56 +0000125; CHECK-BE-LABEL: shuffle_vector_halfword_9_7
Stefan Pintilie659f0402018-03-27 17:51:53 +0000126; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 8
127; CHECK-BE: vinserth {{[0-9]+}}, {{[0-9]+}}, 2
Graham Yiu67152612017-11-01 18:06:56 +0000128 %vecins = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 8, i32 7, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
129 ret <8 x i16> %vecins
130}
131
132define <8 x i16> @shuffle_vector_halfword_10_4(<8 x i16> %a, <8 x i16> %b) {
133entry:
134; CHECK-LABEL: shuffle_vector_halfword_10_4
135; CHECK: vinserth 3, 2, 10
136; CHECK: vmr 2, 3
137; CHECK-BE-LABEL: shuffle_vector_halfword_10_4
Stefan Pintilie659f0402018-03-27 17:51:53 +0000138; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 2
139; CHECK-BE: vinserth {{[0-9]+}}, {{[0-9]+}}, 4
Graham Yiu67152612017-11-01 18:06:56 +0000140 %vecins = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 8, i32 9, i32 4, i32 11, i32 12, i32 13, i32 14, i32 15>
141 ret <8 x i16> %vecins
142}
143
144define <8 x i16> @shuffle_vector_halfword_11_2(<8 x i16> %a, <8 x i16> %b) {
145entry:
146; CHECK-LABEL: shuffle_vector_halfword_11_2
Stefan Pintilie659f0402018-03-27 17:51:53 +0000147; CHECK: vsldoi {{[0-9]+}}, 2, 2, 4
148; CHECK: vinserth {{[0-9]+}}, {{[0-9]+}}, 8
Graham Yiu67152612017-11-01 18:06:56 +0000149; CHECK-BE-LABEL: shuffle_vector_halfword_11_2
Stefan Pintilie659f0402018-03-27 17:51:53 +0000150; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 14
151; CHECK-BE: vinserth {{[0-9]+}}, {{[0-9]+}}, 6
Graham Yiu67152612017-11-01 18:06:56 +0000152 %vecins = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 2, i32 12, i32 13, i32 14, i32 15>
153 ret <8 x i16> %vecins
154}
155
156define <8 x i16> @shuffle_vector_halfword_12_6(<8 x i16> %a, <8 x i16> %b) {
157entry:
158; CHECK-LABEL: shuffle_vector_halfword_12_6
Stefan Pintilie659f0402018-03-27 17:51:53 +0000159; CHECK: vsldoi {{[0-9]+}}, 2, 2, 12
160; CHECK: vinserth {{[0-9]+}}, {{[0-9]+}}, 6
Graham Yiu67152612017-11-01 18:06:56 +0000161; CHECK-BE-LABEL: shuffle_vector_halfword_12_6
Stefan Pintilie659f0402018-03-27 17:51:53 +0000162; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 6
163; CHECK-BE: vinserth {{[0-9]+}}, {{[0-9]+}}, 8
Graham Yiu67152612017-11-01 18:06:56 +0000164 %vecins = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 6, i32 13, i32 14, i32 15>
165 ret <8 x i16> %vecins
166}
167
168define <8 x i16> @shuffle_vector_halfword_13_3(<8 x i16> %a, <8 x i16> %b) {
169entry:
170; CHECK-LABEL: shuffle_vector_halfword_13_3
Stefan Pintilie659f0402018-03-27 17:51:53 +0000171; CHECK: vsldoi {{[0-9]+}}, 2, 2, 2
172; CHECK: vinserth {{[0-9]+}}, {{[0-9]+}}, 4
Graham Yiu67152612017-11-01 18:06:56 +0000173; CHECK-BE-LABEL: shuffle_vector_halfword_13_3
174; CHECK-BE: vinserth 3, 2, 10
175; CHECK-BE: vmr 2, 3
176 %vecins = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 3, i32 14, i32 15>
177 ret <8 x i16> %vecins
178}
179
180define <8 x i16> @shuffle_vector_halfword_14_5(<8 x i16> %a, <8 x i16> %b) {
181entry:
182; CHECK-LABEL: shuffle_vector_halfword_14_5
Stefan Pintilie659f0402018-03-27 17:51:53 +0000183; CHECK: vsldoi {{[0-9]+}}, 2, 2, 14
184; CHECK: vinserth {{[0-9]+}}, {{[0-9]+}}, 2
Graham Yiu67152612017-11-01 18:06:56 +0000185; CHECK-BE-LABEL: shuffle_vector_halfword_14_5
Stefan Pintilie659f0402018-03-27 17:51:53 +0000186; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 4
187; CHECK-BE: vinserth {{[0-9]+}}, {{[0-9]+}}, 12
Graham Yiu67152612017-11-01 18:06:56 +0000188 %vecins = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 5, i32 15>
189 ret <8 x i16> %vecins
190}
191
192define <8 x i16> @shuffle_vector_halfword_15_0(<8 x i16> %a, <8 x i16> %b) {
193entry:
194; CHECK-LABEL: shuffle_vector_halfword_15_0
Stefan Pintilie659f0402018-03-27 17:51:53 +0000195; CHECK: vsldoi {{[0-9]+}}, 2, 2, 8
196; CHECK: vinserth {{[0-9]+}}, {{[0-9]+}}, 0
Graham Yiu67152612017-11-01 18:06:56 +0000197; CHECK-BE-LABEL: shuffle_vector_halfword_15_0
Stefan Pintilie659f0402018-03-27 17:51:53 +0000198; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 10
199; CHECK-BE: vinserth {{[0-9]+}}, {{[0-9]+}}, 14
Graham Yiu67152612017-11-01 18:06:56 +0000200 %vecins = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 0>
201 ret <8 x i16> %vecins
202}
203
204; The following testcases use the same vector in both arguments of the
205; shufflevector. If halfword element 3 in BE mode(or 4 in LE mode) is the one
206; we're attempting to insert, then we can use the vector insert instruction
207define <8 x i16> @shuffle_vector_halfword_0_4(<8 x i16> %a) {
208entry:
209; CHECK-LABEL: shuffle_vector_halfword_0_4
210; CHECK: vinserth 2, 2, 14
211; CHECK-BE-LABEL: shuffle_vector_halfword_0_4
212; CHECK-BE-NOT: vinserth
213 %vecins = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 4, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
214 ret <8 x i16> %vecins
215}
216
217define <8 x i16> @shuffle_vector_halfword_1_3(<8 x i16> %a) {
218entry:
219; CHECK-LABEL: shuffle_vector_halfword_1_3
220; CHECK-NOT: vinserth
221; CHECK-BE-LABEL: shuffle_vector_halfword_1_3
222; CHECK-BE: vinserth 2, 2, 2
223 %vecins = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 3, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
224 ret <8 x i16> %vecins
225}
226
227define <8 x i16> @shuffle_vector_halfword_2_3(<8 x i16> %a) {
228entry:
229; CHECK-LABEL: shuffle_vector_halfword_2_3
230; CHECK-NOT: vinserth
231; CHECK-BE-LABEL: shuffle_vector_halfword_2_3
232; CHECK-BE: vinserth 2, 2, 4
233 %vecins = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 1, i32 3, i32 3, i32 4, i32 5, i32 6, i32 7>
234 ret <8 x i16> %vecins
235}
236
237define <8 x i16> @shuffle_vector_halfword_3_4(<8 x i16> %a) {
238entry:
239; CHECK-LABEL: shuffle_vector_halfword_3_4
240; CHECK: vinserth 2, 2, 8
241; CHECK-BE-LABEL: shuffle_vector_halfword_3_4
242; CHECK-BE-NOT: vinserth
243 %vecins = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 1, i32 2, i32 4, i32 4, i32 5, i32 6, i32 7>
244 ret <8 x i16> %vecins
245}
246
247define <8 x i16> @shuffle_vector_halfword_4_3(<8 x i16> %a) {
248entry:
249; CHECK-LABEL: shuffle_vector_halfword_4_3
250; CHECK-NOT: vinserth
251; CHECK-BE-LABEL: shuffle_vector_halfword_4_3
252; CHECK-BE: vinserth 2, 2, 8
253 %vecins = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 3, i32 5, i32 6, i32 7>
254 ret <8 x i16> %vecins
255}
256
257define <8 x i16> @shuffle_vector_halfword_5_3(<8 x i16> %a) {
258entry:
259; CHECK-LABEL: shuffle_vector_halfword_5_3
260; CHECK-NOT: vinserth
261; CHECK-BE-LABEL: shuffle_vector_halfword_5_3
262; CHECK-BE: vinserth 2, 2, 10
263 %vecins = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 3, i32 6, i32 7>
264 ret <8 x i16> %vecins
265}
266
267define <8 x i16> @shuffle_vector_halfword_6_4(<8 x i16> %a) {
268entry:
269; CHECK-LABEL: shuffle_vector_halfword_6_4
270; CHECK: vinserth 2, 2, 2
271; CHECK-BE-LABEL: shuffle_vector_halfword_6_4
272; CHECK-BE-NOT: vinserth
273 %vecins = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 4, i32 7>
274 ret <8 x i16> %vecins
275}
276
277define <8 x i16> @shuffle_vector_halfword_7_4(<8 x i16> %a) {
278entry:
279; CHECK-LABEL: shuffle_vector_halfword_7_4
280; CHECK: vinserth 2, 2, 0
281; CHECK-BE-LABEL: shuffle_vector_halfword_7_4
282; CHECK-BE-NOT: vinserth
283 %vecins = shufflevector <8 x i16> %a, <8 x i16> %a, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 4>
284 ret <8 x i16> %vecins
285}
286
Graham Yiu030621b2017-11-06 20:18:30 +0000287; The following testcases take one byte element from the second vector and
288; inserts it at various locations in the first vector
289define <16 x i8> @shuffle_vector_byte_0_16(<16 x i8> %a, <16 x i8> %b) {
290entry:
291; CHECK-LABEL: shuffle_vector_byte_0_16
292; CHECK: vsldoi 3, 3, 3, 8
293; CHECK: vinsertb 2, 3, 15
294; CHECK-BE-LABEL: shuffle_vector_byte_0_16
295; CHECK-BE: vsldoi 3, 3, 3, 9
296; CHECK-BE: vinsertb 2, 3, 0
297 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
298 ret <16 x i8> %vecins
299}
300
301define <16 x i8> @shuffle_vector_byte_1_25(<16 x i8> %a, <16 x i8> %b) {
302entry:
303; CHECK-LABEL: shuffle_vector_byte_1_25
304; CHECK: vsldoi 3, 3, 3, 15
305; CHECK: vinsertb 2, 3, 14
306; CHECK-BE-LABEL: shuffle_vector_byte_1_25
307; CHECK-BE: vsldoi 3, 3, 3, 2
308; CHECK-BE: vinsertb 2, 3, 1
309 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 25, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
310 ret <16 x i8> %vecins
311}
312
313define <16 x i8> @shuffle_vector_byte_2_18(<16 x i8> %a, <16 x i8> %b) {
314entry:
315; CHECK-LABEL: shuffle_vector_byte_2_18
316; CHECK: vsldoi 3, 3, 3, 6
317; CHECK: vinsertb 2, 3, 13
318; CHECK-BE-LABEL: shuffle_vector_byte_2_18
319; CHECK-BE: vsldoi 3, 3, 3, 11
320; CHECK-BE: vinsertb 2, 3, 2
321 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 18, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
322 ret <16 x i8> %vecins
323}
324
325define <16 x i8> @shuffle_vector_byte_3_27(<16 x i8> %a, <16 x i8> %b) {
326entry:
327; CHECK-LABEL: shuffle_vector_byte_3_27
328; CHECK: vsldoi 3, 3, 3, 13
329; CHECK: vinsertb 2, 3, 12
330; CHECK-BE-LABEL: shuffle_vector_byte_3_27
331; CHECK-BE: vsldoi 3, 3, 3, 4
332; CHECK-BE: vinsertb 2, 3, 3
333 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 27, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
334 ret <16 x i8> %vecins
335}
336
337define <16 x i8> @shuffle_vector_byte_4_20(<16 x i8> %a, <16 x i8> %b) {
338entry:
339; CHECK-LABEL: shuffle_vector_byte_4_20
340; CHECK: vsldoi 3, 3, 3, 4
341; CHECK: vinsertb 2, 3, 11
342; CHECK-BE-LABEL: shuffle_vector_byte_4_20
343; CHECK-BE: vsldoi 3, 3, 3, 13
344; CHECK-BE: vinsertb 2, 3, 4
345 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 20, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
346 ret <16 x i8> %vecins
347}
348
349define <16 x i8> @shuffle_vector_byte_5_29(<16 x i8> %a, <16 x i8> %b) {
350entry:
351; CHECK-LABEL: shuffle_vector_byte_5_29
352; CHECK: vsldoi 3, 3, 3, 11
353; CHECK: vinsertb 2, 3, 10
354; CHECK-BE-LABEL: shuffle_vector_byte_5_29
355; CHECK-BE: vsldoi 3, 3, 3, 6
356; CHECK-BE: vinsertb 2, 3, 5
357 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 29, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
358 ret <16 x i8> %vecins
359}
360
361define <16 x i8> @shuffle_vector_byte_6_22(<16 x i8> %a, <16 x i8> %b) {
362entry:
363; CHECK-LABEL: shuffle_vector_byte_6_22
364; CHECK: vsldoi 3, 3, 3, 2
365; CHECK: vinsertb 2, 3, 9
366; CHECK-BE-LABEL: shuffle_vector_byte_6_22
367; CHECK-BE: vsldoi 3, 3, 3, 15
368; CHECK-BE: vinsertb 2, 3, 6
369 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 22, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
370 ret <16 x i8> %vecins
371}
372
373define <16 x i8> @shuffle_vector_byte_7_31(<16 x i8> %a, <16 x i8> %b) {
374entry:
375; CHECK-LABEL: shuffle_vector_byte_7_31
376; CHECK: vsldoi 3, 3, 3, 9
377; CHECK: vinsertb 2, 3, 8
378; CHECK-BE-LABEL: shuffle_vector_byte_7_31
379; CHECK-BE: vsldoi 3, 3, 3, 8
380; CHECK-BE: vinsertb 2, 3, 7
381 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 31, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
382 ret <16 x i8> %vecins
383}
384
385define <16 x i8> @shuffle_vector_byte_8_24(<16 x i8> %a, <16 x i8> %b) {
386entry:
387; CHECK-LABEL: shuffle_vector_byte_8_24
388; CHECK: vinsertb 2, 3, 7
389; CHECK-BE-LABEL: shuffle_vector_byte_8_24
390; CHECK-BE: vsldoi 3, 3, 3, 1
391; CHECK-BE: vinsertb 2, 3, 8
392 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 24, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
393 ret <16 x i8> %vecins
394}
395
396define <16 x i8> @shuffle_vector_byte_9_17(<16 x i8> %a, <16 x i8> %b) {
397entry:
398; CHECK-LABEL: shuffle_vector_byte_9_17
399; CHECK: vsldoi 3, 3, 3, 7
400; CHECK: vinsertb 2, 3, 6
401; CHECK-BE-LABEL: shuffle_vector_byte_9_17
402; CHECK-BE: vsldoi 3, 3, 3, 10
403; CHECK-BE: vinsertb 2, 3, 9
404 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 17, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
405 ret <16 x i8> %vecins
406}
407
408define <16 x i8> @shuffle_vector_byte_10_26(<16 x i8> %a, <16 x i8> %b) {
409entry:
410; CHECK-LABEL: shuffle_vector_byte_10_26
411; CHECK: vsldoi 3, 3, 3, 14
412; CHECK: vinsertb 2, 3, 5
413; CHECK-BE-LABEL: shuffle_vector_byte_10_26
414; CHECK-BE: vsldoi 3, 3, 3, 3
415; CHECK-BE: vinsertb 2, 3, 10
416 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 26, i32 11, i32 12, i32 13, i32 14, i32 15>
417 ret <16 x i8> %vecins
418}
419
420define <16 x i8> @shuffle_vector_byte_11_19(<16 x i8> %a, <16 x i8> %b) {
421entry:
422; CHECK-LABEL: shuffle_vector_byte_11_19
423; CHECK: vsldoi 3, 3, 3, 5
424; CHECK: vinsertb 2, 3, 4
425; CHECK-BE-LABEL: shuffle_vector_byte_11_19
426; CHECK-BE: vsldoi 3, 3, 3, 12
427; CHECK-BE: vinsertb 2, 3, 11
428 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 19, i32 12, i32 13, i32 14, i32 15>
429 ret <16 x i8> %vecins
430}
431
432define <16 x i8> @shuffle_vector_byte_12_28(<16 x i8> %a, <16 x i8> %b) {
433entry:
434; CHECK-LABEL: shuffle_vector_byte_12_28
435; CHECK: vsldoi 3, 3, 3, 12
436; CHECK: vinsertb 2, 3, 3
437; CHECK-BE-LABEL: shuffle_vector_byte_12_28
438; CHECK-BE: vsldoi 3, 3, 3, 5
439; CHECK-BE: vinsertb 2, 3, 12
440 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 28, i32 13, i32 14, i32 15>
441 ret <16 x i8> %vecins
442}
443
444define <16 x i8> @shuffle_vector_byte_13_21(<16 x i8> %a, <16 x i8> %b) {
445entry:
446; CHECK-LABEL: shuffle_vector_byte_13_21
447; CHECK: vsldoi 3, 3, 3, 3
448; CHECK: vinsertb 2, 3, 2
449; CHECK-BE-LABEL: shuffle_vector_byte_13_21
450; CHECK-BE: vsldoi 3, 3, 3, 14
451; CHECK-BE: vinsertb 2, 3, 13
452 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 21, i32 14, i32 15>
453 ret <16 x i8> %vecins
454}
455
456define <16 x i8> @shuffle_vector_byte_14_30(<16 x i8> %a, <16 x i8> %b) {
457entry:
458; CHECK-LABEL: shuffle_vector_byte_14_30
459; CHECK: vsldoi 3, 3, 3, 10
460; CHECK: vinsertb 2, 3, 1
461; CHECK-BE-LABEL: shuffle_vector_byte_14_30
462; CHECK-BE: vsldoi 3, 3, 3, 7
463; CHECK-BE: vinsertb 2, 3, 14
464 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 30, i32 15>
465 ret <16 x i8> %vecins
466}
467
468define <16 x i8> @shuffle_vector_byte_15_23(<16 x i8> %a, <16 x i8> %b) {
469entry:
470; CHECK-LABEL: shuffle_vector_byte_15_23
471; CHECK: vsldoi 3, 3, 3, 1
472; CHECK: vinsertb 2, 3, 0
473; CHECK-BE-LABEL: shuffle_vector_byte_15_23
474; CHECK-BE: vinsertb 2, 3, 15
475 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 23>
476 ret <16 x i8> %vecins
477}
478
479; The following testcases take one byte element from the first vector and
480; inserts it at various locations in the second vector
481define <16 x i8> @shuffle_vector_byte_16_8(<16 x i8> %a, <16 x i8> %b) {
482entry:
483; CHECK-LABEL: shuffle_vector_byte_16_8
484; CHECK: vinsertb 3, 2, 15
485; CHECK: vmr 2, 3
486; CHECK-BE-LABEL: shuffle_vector_byte_16_8
Stefan Pintilie659f0402018-03-27 17:51:53 +0000487; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 1
488; CHECK-BE: vinsertb {{[0-9]+}}, {{[0-9]+}}, 0
Graham Yiu030621b2017-11-06 20:18:30 +0000489 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 8, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
490 ret <16 x i8> %vecins
491}
492
493define <16 x i8> @shuffle_vector_byte_17_1(<16 x i8> %a, <16 x i8> %b) {
494entry:
495; CHECK-LABEL: shuffle_vector_byte_17_1
Stefan Pintilie659f0402018-03-27 17:51:53 +0000496; CHECK: vsldoi {{[0-9]+}}, 2, 2, 7
497; CHECK: vinsertb {{[0-9]+}}, {{[0-9]+}}, 14
Graham Yiu030621b2017-11-06 20:18:30 +0000498; CHECK-BE-LABEL: shuffle_vector_byte_17_1
Stefan Pintilie659f0402018-03-27 17:51:53 +0000499; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 10
500; CHECK-BE: vinsertb {{[0-9]+}}, {{[0-9]+}}, 1
Graham Yiu030621b2017-11-06 20:18:30 +0000501 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 1, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
502 ret <16 x i8> %vecins
503}
504
505define <16 x i8> @shuffle_vector_byte_18_10(<16 x i8> %a, <16 x i8> %b) {
506entry:
507; CHECK-LABEL: shuffle_vector_byte_18_10
Stefan Pintilie659f0402018-03-27 17:51:53 +0000508; CHECK: vsldoi {{[0-9]+}}, 2, 2, 14
509; CHECK: vinsertb {{[0-9]+}}, {{[0-9]+}}, 13
Graham Yiu030621b2017-11-06 20:18:30 +0000510; CHECK-BE-LABEL: shuffle_vector_byte_18_10
Stefan Pintilie659f0402018-03-27 17:51:53 +0000511; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 3
512; CHECK-BE: vinsertb {{[0-9]+}}, {{[0-9]+}}, 2
Graham Yiu030621b2017-11-06 20:18:30 +0000513 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 10, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
514 ret <16 x i8> %vecins
515}
516
517define <16 x i8> @shuffle_vector_byte_19_3(<16 x i8> %a, <16 x i8> %b) {
518entry:
519; CHECK-LABEL: shuffle_vector_byte_19_3
Stefan Pintilie659f0402018-03-27 17:51:53 +0000520; CHECK: vsldoi {{[0-9]+}}, 2, 2, 5
521; CHECK: vinsertb {{[0-9]+}}, {{[0-9]+}}, 12
Graham Yiu030621b2017-11-06 20:18:30 +0000522; CHECK-BE-LABEL: shuffle_vector_byte_19_3
Stefan Pintilie659f0402018-03-27 17:51:53 +0000523; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 12
524; CHECK-BE: vinsertb {{[0-9]+}}, {{[0-9]+}}, 3
Graham Yiu030621b2017-11-06 20:18:30 +0000525 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 3, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
526 ret <16 x i8> %vecins
527}
528
529define <16 x i8> @shuffle_vector_byte_20_12(<16 x i8> %a, <16 x i8> %b) {
530entry:
531; CHECK-LABEL: shuffle_vector_byte_20_12
Stefan Pintilie659f0402018-03-27 17:51:53 +0000532; CHECK: vsldoi {{[0-9]+}}, 2, 2, 12
533; CHECK: vinsertb {{[0-9]+}}, {{[0-9]+}}, 11
Graham Yiu030621b2017-11-06 20:18:30 +0000534; CHECK-BE-LABEL: shuffle_vector_byte_20_12
Stefan Pintilie659f0402018-03-27 17:51:53 +0000535; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 5
536; CHECK-BE: vinsertb {{[0-9]+}}, {{[0-9]+}}, 4
Graham Yiu030621b2017-11-06 20:18:30 +0000537 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 12, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
538 ret <16 x i8> %vecins
539}
540
541define <16 x i8> @shuffle_vector_byte_21_5(<16 x i8> %a, <16 x i8> %b) {
542entry:
543; CHECK-LABEL: shuffle_vector_byte_21_5
Stefan Pintilie659f0402018-03-27 17:51:53 +0000544; CHECK: vsldoi {{[0-9]+}}, 2, 2, 3
545; CHECK: vinsertb {{[0-9]+}}, {{[0-9]+}}, 10
Graham Yiu030621b2017-11-06 20:18:30 +0000546; CHECK-BE-LABEL: shuffle_vector_byte_21_5
Stefan Pintilie659f0402018-03-27 17:51:53 +0000547; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 14
548; CHECK-BE: vinsertb {{[0-9]+}}, {{[0-9]+}}, 5
Graham Yiu030621b2017-11-06 20:18:30 +0000549 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 5, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
550 ret <16 x i8> %vecins
551}
552
553define <16 x i8> @shuffle_vector_byte_22_14(<16 x i8> %a, <16 x i8> %b) {
554entry:
555; CHECK-LABEL: shuffle_vector_byte_22_14
Stefan Pintilie659f0402018-03-27 17:51:53 +0000556; CHECK: vsldoi {{[0-9]+}}, 2, 2, 10
557; CHECK: vinsertb {{[0-9]+}}, {{[0-9]+}}, 9
Graham Yiu030621b2017-11-06 20:18:30 +0000558; CHECK-BE-LABEL: shuffle_vector_byte_22_14
Stefan Pintilie659f0402018-03-27 17:51:53 +0000559; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 7
560; CHECK-BE: vinsertb {{[0-9]+}}, {{[0-9]+}}, 6
Graham Yiu030621b2017-11-06 20:18:30 +0000561 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 14, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
562 ret <16 x i8> %vecins
563}
564
565define <16 x i8> @shuffle_vector_byte_23_7(<16 x i8> %a, <16 x i8> %b) {
566entry:
567; CHECK-LABEL: shuffle_vector_byte_23_7
Stefan Pintilie659f0402018-03-27 17:51:53 +0000568; CHECK: vsldoi {{[0-9]+}}, 2, 2, 1
569; CHECK: vinsertb {{[0-9]+}}, {{[0-9]+}}, 8
Graham Yiu030621b2017-11-06 20:18:30 +0000570; CHECK-BE-LABEL: shuffle_vector_byte_23_7
571; CHECK-BE: vinsertb 3, 2, 7
572; CHECK-BE: vmr 2, 3
573 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 7, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
574 ret <16 x i8> %vecins
575}
576
577define <16 x i8> @shuffle_vector_byte_24_0(<16 x i8> %a, <16 x i8> %b) {
578entry:
579; CHECK-LABEL: shuffle_vector_byte_24_0
Stefan Pintilie659f0402018-03-27 17:51:53 +0000580; CHECK: vsldoi {{[0-9]+}}, 2, 2, 8
581; CHECK: vinsertb {{[0-9]+}}, {{[0-9]+}}, 7
Graham Yiu030621b2017-11-06 20:18:30 +0000582; CHECK-BE-LABEL: shuffle_vector_byte_24_0
Stefan Pintilie659f0402018-03-27 17:51:53 +0000583; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 9
584; CHECK-BE: vinsertb {{[0-9]+}}, {{[0-9]+}}, 8
Graham Yiu030621b2017-11-06 20:18:30 +0000585 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 0, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
586 ret <16 x i8> %vecins
587}
588
589define <16 x i8> @shuffle_vector_byte_25_9(<16 x i8> %a, <16 x i8> %b) {
590entry:
591; CHECK-LABEL: shuffle_vector_byte_25_9
Stefan Pintilie659f0402018-03-27 17:51:53 +0000592; CHECK: vsldoi {{[0-9]+}}, 2, 2, 15
593; CHECK: vinsertb {{[0-9]+}}, {{[0-9]+}}, 6
Graham Yiu030621b2017-11-06 20:18:30 +0000594; CHECK-BE-LABEL: shuffle_vector_byte_25_9
Stefan Pintilie659f0402018-03-27 17:51:53 +0000595; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 2
596; CHECK-BE: vinsertb {{[0-9]+}}, {{[0-9]+}}, 9
Graham Yiu030621b2017-11-06 20:18:30 +0000597 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 9, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
598 ret <16 x i8> %vecins
599}
600
601define <16 x i8> @shuffle_vector_byte_26_2(<16 x i8> %a, <16 x i8> %b) {
602entry:
603; CHECK-LABEL: shuffle_vector_byte_26_2
Stefan Pintilie659f0402018-03-27 17:51:53 +0000604; CHECK: vsldoi {{[0-9]+}}, 2, 2, 6
605; CHECK: vinsertb {{[0-9]+}}, {{[0-9]+}}, 5
Graham Yiu030621b2017-11-06 20:18:30 +0000606; CHECK-BE-LABEL: shuffle_vector_byte_26_2
Stefan Pintilie659f0402018-03-27 17:51:53 +0000607; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 11
608; CHECK-BE: vinsertb {{[0-9]+}}, {{[0-9]+}}, 10
Graham Yiu030621b2017-11-06 20:18:30 +0000609 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 2, i32 27, i32 28, i32 29, i32 30, i32 31>
610 ret <16 x i8> %vecins
611}
612
613define <16 x i8> @shuffle_vector_byte_27_11(<16 x i8> %a, <16 x i8> %b) {
614entry:
615; CHECK-LABEL: shuffle_vector_byte_27_11
Stefan Pintilie659f0402018-03-27 17:51:53 +0000616; CHECK: vsldoi {{[0-9]+}}, 2, 2, 13
617; CHECK: vinsertb {{[0-9]+}}, {{[0-9]+}}, 4
Graham Yiu030621b2017-11-06 20:18:30 +0000618; CHECK-BE-LABEL: shuffle_vector_byte_27_11
Stefan Pintilie659f0402018-03-27 17:51:53 +0000619; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 4
620; CHECK-BE: vinsertb {{[0-9]+}}, {{[0-9]+}}, 11
Graham Yiu030621b2017-11-06 20:18:30 +0000621 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 11, i32 28, i32 29, i32 30, i32 31>
622 ret <16 x i8> %vecins
623}
624
625define <16 x i8> @shuffle_vector_byte_28_4(<16 x i8> %a, <16 x i8> %b) {
626entry:
627; CHECK-LABEL: shuffle_vector_byte_28_4
Stefan Pintilie659f0402018-03-27 17:51:53 +0000628; CHECK: vsldoi {{[0-9]+}}, 2, 2, 4
629; CHECK: vinsertb {{[0-9]+}}, {{[0-9]+}}, 3
Graham Yiu030621b2017-11-06 20:18:30 +0000630; CHECK-BE-LABEL: shuffle_vector_byte_28_4
Stefan Pintilie659f0402018-03-27 17:51:53 +0000631; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 13
632; CHECK-BE: vinsertb {{[0-9]+}}, {{[0-9]+}}, 12
Graham Yiu030621b2017-11-06 20:18:30 +0000633 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 4, i32 29, i32 30, i32 31>
634 ret <16 x i8> %vecins
635}
636
637define <16 x i8> @shuffle_vector_byte_29_13(<16 x i8> %a, <16 x i8> %b) {
638entry:
639; CHECK-LABEL: shuffle_vector_byte_29_13
Stefan Pintilie659f0402018-03-27 17:51:53 +0000640; CHECK: vsldoi {{[0-9]+}}, 2, 2, 11
641; CHECK: vinsertb {{[0-9]+}}, {{[0-9]+}}, 2
Graham Yiu030621b2017-11-06 20:18:30 +0000642; CHECK-BE-LABEL: shuffle_vector_byte_29_13
Stefan Pintilie659f0402018-03-27 17:51:53 +0000643; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 6
644; CHECK-BE: vinsertb {{[0-9]+}}, {{[0-9]+}}, 13
Graham Yiu030621b2017-11-06 20:18:30 +0000645 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 13, i32 30, i32 31>
646 ret <16 x i8> %vecins
647}
648
649define <16 x i8> @shuffle_vector_byte_30_6(<16 x i8> %a, <16 x i8> %b) {
650entry:
651; CHECK-LABEL: shuffle_vector_byte_30_6
Stefan Pintilie659f0402018-03-27 17:51:53 +0000652; CHECK: vsldoi {{[0-9]+}}, 2, 2, 2
653; CHECK: vinsertb {{[0-9]+}}, {{[0-9]+}}, 1
Graham Yiu030621b2017-11-06 20:18:30 +0000654; CHECK-BE-LABEL: shuffle_vector_byte_30_6
Stefan Pintilie659f0402018-03-27 17:51:53 +0000655; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 15
656; CHECK-BE: vinsertb {{[0-9]+}}, {{[0-9]+}}, 14
Graham Yiu030621b2017-11-06 20:18:30 +0000657 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 6, i32 31>
658 ret <16 x i8> %vecins
659}
660
661define <16 x i8> @shuffle_vector_byte_31_15(<16 x i8> %a, <16 x i8> %b) {
662entry:
663; CHECK-LABEL: shuffle_vector_byte_31_15
Stefan Pintilie659f0402018-03-27 17:51:53 +0000664; CHECK: vsldoi {{[0-9]+}}, 2, 2, 9
665; CHECK: vinsertb {{[0-9]+}}, {{[0-9]+}}, 0
Graham Yiu030621b2017-11-06 20:18:30 +0000666; CHECK-BE-LABEL: shuffle_vector_byte_31_15
Stefan Pintilie659f0402018-03-27 17:51:53 +0000667; CHECK-BE: vsldoi {{[0-9]+}}, 2, 2, 8
668; CHECK-BE: vinsertb {{[0-9]+}}, {{[0-9]+}}, 15
Graham Yiu030621b2017-11-06 20:18:30 +0000669 %vecins = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 15>
670 ret <16 x i8> %vecins
671}
672
673; The following testcases use the same vector in both arguments of the
674; shufflevector. If byte element 7 in BE mode(or 8 in LE mode) is the one
675; we're attempting to insert, then we can use the vector insert instruction
676define <16 x i8> @shuffle_vector_byte_0_7(<16 x i8> %a) {
677entry:
678; CHECK-LABEL: shuffle_vector_byte_0_7
679; CHECK-NOT: vinsertb
680; CHECK-BE-LABEL: shuffle_vector_byte_0_7
681; CHECK-BE: vinsertb 2, 2, 0
682 %vecins = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 7, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
683 ret <16 x i8> %vecins
684}
685
686define <16 x i8> @shuffle_vector_byte_1_8(<16 x i8> %a) {
687entry:
688; CHECK-LABEL: shuffle_vector_byte_1_8
689; CHECK: vinsertb 2, 2, 14
690; CHECK-BE-LABEL: shuffle_vector_byte_1_8
691; CHECK-BE-NOT: vinsertb
692 %vecins = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 8, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
693 ret <16 x i8> %vecins
694}
695
696define <16 x i8> @shuffle_vector_byte_2_8(<16 x i8> %a) {
697entry:
698; CHECK-LABEL: shuffle_vector_byte_2_8
699; CHECK: vinsertb 2, 2, 13
700; CHECK-BE-LABEL: shuffle_vector_byte_2_8
701; CHECK-BE-NOT: vinsertb
702 %vecins = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 1, i32 8, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
703 ret <16 x i8> %vecins
704}
705
706define <16 x i8> @shuffle_vector_byte_3_7(<16 x i8> %a) {
707entry:
708; CHECK-LABEL: shuffle_vector_byte_3_7
709; CHECK-NOT: vinsertb
710; CHECK-BE-LABEL: shuffle_vector_byte_3_7
711; CHECK-BE: vinsertb 2, 2, 3
712 %vecins = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 1, i32 2, i32 7, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
713 ret <16 x i8> %vecins
714}
715
716define <16 x i8> @shuffle_vector_byte_4_7(<16 x i8> %a) {
717entry:
718; CHECK-LABEL: shuffle_vector_byte_4_7
719; CHECK-NOT: vinsertb
720; CHECK-BE-LABEL: shuffle_vector_byte_4_7
721; CHECK-BE: vinsertb 2, 2, 4
722 %vecins = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
723 ret <16 x i8> %vecins
724}
725
726define <16 x i8> @shuffle_vector_byte_5_8(<16 x i8> %a) {
727entry:
728; CHECK-LABEL: shuffle_vector_byte_5_8
729; CHECK: vinsertb 2, 2, 10
730; CHECK-BE-LABEL: shuffle_vector_byte_5_8
731; CHECK-BE-NOT: vinsertb
732 %vecins = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 8, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
733 ret <16 x i8> %vecins
734}
735
736define <16 x i8> @shuffle_vector_byte_6_8(<16 x i8> %a) {
737entry:
738; CHECK-LABEL: shuffle_vector_byte_6_8
739; CHECK: vinsertb 2, 2, 9
740; CHECK-BE-LABEL: shuffle_vector_byte_6_8
741; CHECK-BE-NOT: vinsertb
742 %vecins = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 8, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
743 ret <16 x i8> %vecins
744}
745
746define <16 x i8> @shuffle_vector_byte_7_8(<16 x i8> %a) {
747entry:
748; CHECK-LABEL: shuffle_vector_byte_7_8
749; CHECK: vinsertb 2, 2, 8
750; CHECK-BE-LABEL: shuffle_vector_byte_7_8
751; CHECK-BE-NOT: vinsertb
752 %vecins = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 8, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
753 ret <16 x i8> %vecins
754}
755
756define <16 x i8> @shuffle_vector_byte_8_7(<16 x i8> %a) {
757entry:
758; CHECK-LABEL: shuffle_vector_byte_8_7
759; CHECK-NOT: vinsertb
760; CHECK-BE-LABEL: shuffle_vector_byte_8_7
761; CHECK-BE: vinsertb 2, 2, 8
762 %vecins = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 7, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
763 ret <16 x i8> %vecins
764}
765
766define <16 x i8> @shuffle_vector_byte_9_7(<16 x i8> %a) {
767entry:
768; CHECK-LABEL: shuffle_vector_byte_9_7
769; CHECK-NOT: vinsertb
770; CHECK-BE-LABEL: shuffle_vector_byte_9_7
771; CHECK-BE: vinsertb 2, 2, 9
772 %vecins = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 7, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
773 ret <16 x i8> %vecins
774}
775
776define <16 x i8> @shuffle_vector_byte_10_7(<16 x i8> %a) {
777entry:
778; CHECK-LABEL: shuffle_vector_byte_10_7
779; CHECK-NOT: vinsertb
780; CHECK-BE-LABEL: shuffle_vector_byte_10_7
781; CHECK-BE: vinsertb 2, 2, 10
782 %vecins = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 7, i32 11, i32 12, i32 13, i32 14, i32 15>
783 ret <16 x i8> %vecins
784}
785
786define <16 x i8> @shuffle_vector_byte_11_8(<16 x i8> %a) {
787entry:
788; CHECK-LABEL: shuffle_vector_byte_11_8
789; CHECK: vinsertb 2, 2, 4
790; CHECK-BE-LABEL: shuffle_vector_byte_11_8
791; CHECK-BE-NOT: vinsertb
792 %vecins = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 8, i32 12, i32 13, i32 14, i32 15>
793 ret <16 x i8> %vecins
794}
795
796define <16 x i8> @shuffle_vector_byte_12_8(<16 x i8> %a) {
797entry:
798; CHECK-LABEL: shuffle_vector_byte_12_8
799; CHECK: vinsertb 2, 2, 3
800; CHECK-BE-LABEL: shuffle_vector_byte_12_8
801; CHECK-BE-NOT: vinsertb
802 %vecins = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 8, i32 13, i32 14, i32 15>
803 ret <16 x i8> %vecins
804}
805
806define <16 x i8> @shuffle_vector_byte_13_7(<16 x i8> %a) {
807entry:
808; CHECK-LABEL: shuffle_vector_byte_13_7
809; CHECK-NOT: vinsertb
810; CHECK-BE-LABEL: shuffle_vector_byte_13_7
811; CHECK-BE: vinsertb 2, 2, 13
812 %vecins = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 7, i32 14, i32 15>
813 ret <16 x i8> %vecins
814}
815
816define <16 x i8> @shuffle_vector_byte_14_7(<16 x i8> %a) {
817entry:
818; CHECK-LABEL: shuffle_vector_byte_14_7
819; CHECK-NOT: vinsertb
820; CHECK-BE-LABEL: shuffle_vector_byte_14_7
821; CHECK-BE: vinsertb 2, 2, 14
822 %vecins = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 7, i32 15>
823 ret <16 x i8> %vecins
824}
825
826define <16 x i8> @shuffle_vector_byte_15_8(<16 x i8> %a) {
827entry:
828; CHECK-LABEL: shuffle_vector_byte_15_8
829; CHECK: vinsertb 2, 2, 0
830; CHECK-BE-LABEL: shuffle_vector_byte_15_8
831; CHECK-BE-NOT: vinsertb
832 %vecins = shufflevector <16 x i8> %a, <16 x i8> %a, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 8>
833 ret <16 x i8> %vecins
834}
Graham Yiu5cd044e2017-11-07 20:55:43 +0000835
836; The following tests try to insert one halfword element into the vector. We
837; should always be using the 'vinserth' instruction.
838define <8 x i16> @insert_halfword_0(<8 x i16> %a, i16 %b) {
839entry:
840; CHECK-LABEL: insert_halfword_0
841; CHECK: vinserth 2, 3, 14
842; CHECK-BE-LABEL: insert_halfword_0
843; CHECK-BE: vinserth 2, 3, 0
844 %vecins = insertelement <8 x i16> %a, i16 %b, i32 0
845 ret <8 x i16> %vecins
846}
847
848define <8 x i16> @insert_halfword_1(<8 x i16> %a, i16 %b) {
849entry:
850; CHECK-LABEL: insert_halfword_1
851; CHECK: vinserth 2, 3, 12
852; CHECK-BE-LABEL: insert_halfword_1
853; CHECK-BE: vinserth 2, 3, 2
854 %vecins = insertelement <8 x i16> %a, i16 %b, i32 1
855 ret <8 x i16> %vecins
856}
857
858define <8 x i16> @insert_halfword_2(<8 x i16> %a, i16 %b) {
859entry:
860; CHECK-LABEL: insert_halfword_2
861; CHECK: vinserth 2, 3, 10
862; CHECK-BE-LABEL: insert_halfword_2
863; CHECK-BE: vinserth 2, 3, 4
864 %vecins = insertelement <8 x i16> %a, i16 %b, i32 2
865 ret <8 x i16> %vecins
866}
867
868define <8 x i16> @insert_halfword_3(<8 x i16> %a, i16 %b) {
869entry:
870; CHECK-LABEL: insert_halfword_3
871; CHECK: vinserth 2, 3, 8
872; CHECK-BE-LABEL: insert_halfword_3
873; CHECK-BE: vinserth 2, 3, 6
874 %vecins = insertelement <8 x i16> %a, i16 %b, i32 3
875 ret <8 x i16> %vecins
876}
877
878define <8 x i16> @insert_halfword_4(<8 x i16> %a, i16 %b) {
879entry:
880; CHECK-LABEL: insert_halfword_4
881; CHECK: vinserth 2, 3, 6
882; CHECK-BE-LABEL: insert_halfword_4
883; CHECK-BE: vinserth 2, 3, 8
884 %vecins = insertelement <8 x i16> %a, i16 %b, i32 4
885 ret <8 x i16> %vecins
886}
887
888define <8 x i16> @insert_halfword_5(<8 x i16> %a, i16 %b) {
889entry:
890; CHECK-LABEL: insert_halfword_5
891; CHECK: vinserth 2, 3, 4
892; CHECK-BE-LABEL: insert_halfword_5
893; CHECK-BE: vinserth 2, 3, 10
894 %vecins = insertelement <8 x i16> %a, i16 %b, i32 5
895 ret <8 x i16> %vecins
896}
897
898define <8 x i16> @insert_halfword_6(<8 x i16> %a, i16 %b) {
899entry:
900; CHECK-LABEL: insert_halfword_6
901; CHECK: vinserth 2, 3, 2
902; CHECK-BE-LABEL: insert_halfword_6
903; CHECK-BE: vinserth 2, 3, 12
904 %vecins = insertelement <8 x i16> %a, i16 %b, i32 6
905 ret <8 x i16> %vecins
906}
907
908define <8 x i16> @insert_halfword_7(<8 x i16> %a, i16 %b) {
909entry:
910; CHECK-LABEL: insert_halfword_7
911; CHECK: vinserth 2, 3, 0
912; CHECK-BE-LABEL: insert_halfword_7
913; CHECK-BE: vinserth 2, 3, 14
914 %vecins = insertelement <8 x i16> %a, i16 %b, i32 7
915 ret <8 x i16> %vecins
916}
917
918; The following tests try to insert one byte element into the vector. We
919; should always be using the 'vinsertb' instruction.
920define <16 x i8> @insert_byte_0(<16 x i8> %a, i8 %b) {
921entry:
922; CHECK-LABEL: insert_byte_0
923; CHECK: vinsertb 2, 3, 15
924; CHECK-BE-LABEL: insert_byte_0
925; CHECK-BE: vinsertb 2, 3, 0
926 %vecins = insertelement <16 x i8> %a, i8 %b, i32 0
927 ret <16 x i8> %vecins
928}
929
930define <16 x i8> @insert_byte_1(<16 x i8> %a, i8 %b) {
931entry:
932; CHECK-LABEL: insert_byte_1
933; CHECK: vinsertb 2, 3, 14
934; CHECK-BE-LABEL: insert_byte_1
935; CHECK-BE: vinsertb 2, 3, 1
936 %vecins = insertelement <16 x i8> %a, i8 %b, i32 1
937 ret <16 x i8> %vecins
938}
939
940define <16 x i8> @insert_byte_2(<16 x i8> %a, i8 %b) {
941entry:
942; CHECK-LABEL: insert_byte_2
943; CHECK: vinsertb 2, 3, 13
944; CHECK-BE-LABEL: insert_byte_2
945; CHECK-BE: vinsertb 2, 3, 2
946 %vecins = insertelement <16 x i8> %a, i8 %b, i32 2
947 ret <16 x i8> %vecins
948}
949
950define <16 x i8> @insert_byte_3(<16 x i8> %a, i8 %b) {
951entry:
952; CHECK-LABEL: insert_byte_3
953; CHECK: vinsertb 2, 3, 12
954; CHECK-BE-LABEL: insert_byte_3
955; CHECK-BE: vinsertb 2, 3, 3
956 %vecins = insertelement <16 x i8> %a, i8 %b, i32 3
957 ret <16 x i8> %vecins
958}
959
960define <16 x i8> @insert_byte_4(<16 x i8> %a, i8 %b) {
961entry:
962; CHECK-LABEL: insert_byte_4
963; CHECK: vinsertb 2, 3, 11
964; CHECK-BE-LABEL: insert_byte_4
965; CHECK-BE: vinsertb 2, 3, 4
966 %vecins = insertelement <16 x i8> %a, i8 %b, i32 4
967 ret <16 x i8> %vecins
968}
969
970define <16 x i8> @insert_byte_5(<16 x i8> %a, i8 %b) {
971entry:
972; CHECK-LABEL: insert_byte_5
973; CHECK: vinsertb 2, 3, 10
974; CHECK-BE-LABEL: insert_byte_5
975; CHECK-BE: vinsertb 2, 3, 5
976 %vecins = insertelement <16 x i8> %a, i8 %b, i32 5
977 ret <16 x i8> %vecins
978}
979
980define <16 x i8> @insert_byte_6(<16 x i8> %a, i8 %b) {
981entry:
982; CHECK-LABEL: insert_byte_6
983; CHECK: vinsertb 2, 3, 9
984; CHECK-BE-LABEL: insert_byte_6
985; CHECK-BE: vinsertb 2, 3, 6
986 %vecins = insertelement <16 x i8> %a, i8 %b, i32 6
987 ret <16 x i8> %vecins
988}
989
990define <16 x i8> @insert_byte_7(<16 x i8> %a, i8 %b) {
991entry:
992; CHECK-LABEL: insert_byte_7
993; CHECK: vinsertb 2, 3, 8
994; CHECK-BE-LABEL: insert_byte_7
995; CHECK-BE: vinsertb 2, 3, 7
996 %vecins = insertelement <16 x i8> %a, i8 %b, i32 7
997 ret <16 x i8> %vecins
998}
999
1000define <16 x i8> @insert_byte_8(<16 x i8> %a, i8 %b) {
1001entry:
1002; CHECK-LABEL: insert_byte_8
1003; CHECK: vinsertb 2, 3, 7
1004; CHECK-BE-LABEL: insert_byte_8
1005; CHECK-BE: vinsertb 2, 3, 8
1006 %vecins = insertelement <16 x i8> %a, i8 %b, i32 8
1007 ret <16 x i8> %vecins
1008}
1009
1010define <16 x i8> @insert_byte_9(<16 x i8> %a, i8 %b) {
1011entry:
1012; CHECK-LABEL: insert_byte_9
1013; CHECK: vinsertb 2, 3, 6
1014; CHECK-BE-LABEL: insert_byte_9
1015; CHECK-BE: vinsertb 2, 3, 9
1016 %vecins = insertelement <16 x i8> %a, i8 %b, i32 9
1017 ret <16 x i8> %vecins
1018}
1019
1020define <16 x i8> @insert_byte_10(<16 x i8> %a, i8 %b) {
1021entry:
1022; CHECK-LABEL: insert_byte_10
1023; CHECK: vinsertb 2, 3, 5
1024; CHECK-BE-LABEL: insert_byte_10
1025; CHECK-BE: vinsertb 2, 3, 10
1026 %vecins = insertelement <16 x i8> %a, i8 %b, i32 10
1027 ret <16 x i8> %vecins
1028}
1029
1030define <16 x i8> @insert_byte_11(<16 x i8> %a, i8 %b) {
1031entry:
1032; CHECK-LABEL: insert_byte_11
1033; CHECK: vinsertb 2, 3, 4
1034; CHECK-BE-LABEL: insert_byte_11
1035; CHECK-BE: vinsertb 2, 3, 11
1036 %vecins = insertelement <16 x i8> %a, i8 %b, i32 11
1037 ret <16 x i8> %vecins
1038}
1039
1040define <16 x i8> @insert_byte_12(<16 x i8> %a, i8 %b) {
1041entry:
1042; CHECK-LABEL: insert_byte_12
1043; CHECK: vinsertb 2, 3, 3
1044; CHECK-BE-LABEL: insert_byte_12
1045; CHECK-BE: vinsertb 2, 3, 12
1046 %vecins = insertelement <16 x i8> %a, i8 %b, i32 12
1047 ret <16 x i8> %vecins
1048}
1049
1050define <16 x i8> @insert_byte_13(<16 x i8> %a, i8 %b) {
1051entry:
1052; CHECK-LABEL: insert_byte_13
1053; CHECK: vinsertb 2, 3, 2
1054; CHECK-BE-LABEL: insert_byte_13
1055; CHECK-BE: vinsertb 2, 3, 13
1056 %vecins = insertelement <16 x i8> %a, i8 %b, i32 13
1057 ret <16 x i8> %vecins
1058}
1059
1060define <16 x i8> @insert_byte_14(<16 x i8> %a, i8 %b) {
1061entry:
1062; CHECK-LABEL: insert_byte_14
1063; CHECK: vinsertb 2, 3, 1
1064; CHECK-BE-LABEL: insert_byte_14
1065; CHECK-BE: vinsertb 2, 3, 14
1066 %vecins = insertelement <16 x i8> %a, i8 %b, i32 14
1067 ret <16 x i8> %vecins
1068}
1069
1070define <16 x i8> @insert_byte_15(<16 x i8> %a, i8 %b) {
1071entry:
1072; CHECK-LABEL: insert_byte_15
1073; CHECK: vinsertb 2, 3, 0
1074; CHECK-BE-LABEL: insert_byte_15
1075; CHECK-BE: vinsertb 2, 3, 15
1076 %vecins = insertelement <16 x i8> %a, i8 %b, i32 15
1077 ret <16 x i8> %vecins
1078}