]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/builtins-ppc-p9vector.c
Vendor import of clang trunk r300422:
[FreeBSD/FreeBSD.git] / test / CodeGen / builtins-ppc-p9vector.c
1 // REQUIRES: powerpc-registered-target
2 // RUN: %clang_cc1 -target-feature +altivec -target-feature +power9-vector \
3 // RUN:   -triple powerpc64-unknown-unknown -emit-llvm %s \
4 // RUN:   -o - | FileCheck %s -check-prefix=CHECK-BE
5
6 // RUN: %clang_cc1 -target-feature +altivec -target-feature +power9-vector \
7 // RUN:   -triple powerpc64le-unknown-unknown -emit-llvm %s \
8 // RUN:   -o - | FileCheck %s
9
10 #include <altivec.h>
11
12 vector signed char vsca, vscb;
13 vector unsigned char vuca, vucb;
14 vector bool char vbca, vbcb;
15 vector signed short vssa, vssb;
16 vector unsigned short vusa, vusb;
17 vector bool short vbsa, vbsb;
18 vector signed int vsia, vsib;
19 vector unsigned int vuia, vuib;
20 vector bool int vbia, vbib;
21 vector signed long long vsla, vslb;
22 vector unsigned long long vula, vulb;
23 vector bool long long vbla, vblb;
24 vector float vfa, vfb;
25 vector double vda, vdb;
26 vector unsigned __int128 vui128a, vui128b;
27 vector signed __int128 vsi128a, vsi128b;
28
29 float f[4] = { 23.4f, 56.7f, 89.0f, 12.3f };
30 double d[2] = { 23.4, 56.7 };
31 signed char sc[16] = { -8,  9, -10, 11, -12, 13, -14, 15,
32                         -0,  1,  -2,  3,  -4,  5,  -6,  7 };
33 unsigned char uc[16] = { 8,  9, 10, 11, 12, 13, 14, 15,
34                           0,  1,  2,  3,  4,  5,  6,  7 };
35 signed short ss[8] = { -1, 2, -3, 4, -5, 6, -7, 8 };
36 unsigned short us[8] = { 0, 1, 2, 3, 4, 5, 6, 7 };
37 signed int si[4] = { -1, 2, -3, 4 };
38 unsigned int ui[4] = { 0, 1, 2, 3 };
39 signed long sl[2] = { -1L, 2L };
40 unsigned long ul[2] = { 1L, 2L };
41 signed long long sll[2] = { 1LL, 1LL };
42 unsigned long long ull[2] = { -1LL, 1LL };
43 signed __int128 sint128[1] = { -1 };
44 unsigned __int128 uint128[1] = { 1 };
45
46 unsigned test1(void) {
47 // CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
48 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
49 // CHECK-BE: extractelement <2 x i64>
50 // CHECK-BE: icmp eq i64 {{.*}}, 64
51 // CHECK-BE: extractelement <2 x i64>
52 // CHECK-BE: add i64 {{.*}}, 64
53 // CHECK-BE: lshr i64 {{.*}}, 3
54 // CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
55 // CHECK: @llvm.cttz.v2i64(<2 x i64>
56 // CHECK: extractelement <2 x i64>
57 // CHECK: icmp eq i64 {{.*}}, 64
58 // CHECK: extractelement <2 x i64>
59 // CHECK: add i64 {{.*}}, 64
60 // CHECK: lshr i64 {{.*}}, 3
61   return vec_first_match_index (vsca, vscb);
62 }
63 unsigned test2(void) {
64 // CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
65 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
66 // CHECK-BE: extractelement <2 x i64>
67 // CHECK-BE: icmp eq i64 {{.*}}, 64
68 // CHECK-BE: extractelement <2 x i64>
69 // CHECK-BE: add i64 {{.*}}, 64
70 // CHECK-BE: lshr i64 {{.*}}, 3
71 // CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
72 // CHECK: @llvm.cttz.v2i64(<2 x i64>
73 // CHECK: extractelement <2 x i64>
74 // CHECK: icmp eq i64 {{.*}}, 64
75 // CHECK: extractelement <2 x i64>
76 // CHECK: add i64 {{.*}}, 64
77 // CHECK: lshr i64 {{.*}}, 3
78   return vec_first_match_index (vuca, vucb);
79 }
80 unsigned test3(void) {
81 // CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
82 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
83 // CHECK-BE: extractelement <2 x i64>
84 // CHECK-BE: icmp eq i64 {{.*}}, 64
85 // CHECK-BE: extractelement <2 x i64>
86 // CHECK-BE: add i64 {{.*}}, 64
87 // CHECK-BE: lshr i64 {{.*}}, 5
88 // CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
89 // CHECK: @llvm.cttz.v2i64(<2 x i64>
90 // CHECK: extractelement <2 x i64>
91 // CHECK: icmp eq i64 {{.*}}, 64
92 // CHECK: extractelement <2 x i64>
93 // CHECK: add i64 {{.*}}, 64
94 // CHECK: lshr i64 {{.*}}, 5
95   return vec_first_match_index (vsia, vsib);
96 }
97 unsigned test4(void) {
98 // CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
99 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
100 // CHECK-BE: extractelement <2 x i64>
101 // CHECK-BE: icmp eq i64 {{.*}}, 64
102 // CHECK-BE: extractelement <2 x i64>
103 // CHECK-BE: add i64 {{.*}}, 64
104 // CHECK-BE: lshr i64 {{.*}}, 5
105 // CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
106 // CHECK: @llvm.cttz.v2i64(<2 x i64>
107 // CHECK: extractelement <2 x i64>
108 // CHECK: icmp eq i64 {{.*}}, 64
109 // CHECK: extractelement <2 x i64>
110 // CHECK: add i64 {{.*}}, 64
111 // CHECK: lshr i64 {{.*}}, 5
112   return vec_first_match_index (vuia, vuib);
113 }
114 unsigned test5(void) {
115 // CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
116 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
117 // CHECK-BE: extractelement <2 x i64>
118 // CHECK-BE: icmp eq i64 {{.*}}, 64
119 // CHECK-BE: extractelement <2 x i64>
120 // CHECK-BE: add i64 {{.*}}, 64
121 // CHECK-BE: lshr i64 {{.*}}, 4
122 // CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
123 // CHECK: @llvm.cttz.v2i64(<2 x i64>
124 // CHECK: extractelement <2 x i64>
125 // CHECK: icmp eq i64 {{.*}}, 64
126 // CHECK: extractelement <2 x i64>
127 // CHECK: add i64 {{.*}}, 64
128 // CHECK: lshr i64 {{.*}}, 4
129   return vec_first_match_index (vssa, vssb);
130 }
131 unsigned test6(void) {
132 // CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
133 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
134 // CHECK-BE: extractelement <2 x i64>
135 // CHECK-BE: icmp eq i64 {{.*}}, 64
136 // CHECK-BE: extractelement <2 x i64>
137 // CHECK-BE: add i64 {{.*}}, 64
138 // CHECK-BE: lshr i64 {{.*}}, 4
139 // CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
140 // CHECK: @llvm.cttz.v2i64(<2 x i64>
141 // CHECK: extractelement <2 x i64>
142 // CHECK: icmp eq i64 {{.*}}, 64
143 // CHECK: extractelement <2 x i64>
144 // CHECK: add i64 {{.*}}, 64
145 // CHECK: lshr i64 {{.*}}, 4
146   return vec_first_match_index (vusa, vusb);
147 }
148 unsigned test7(void) {
149 // CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
150 // CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
151 // CHECK-BE: or <16 x i8>
152 // CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
153 // CHECK-BE: or <16 x i8>
154 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
155 // CHECK-BE: extractelement <2 x i64>
156 // CHECK-BE: icmp eq i64 {{.*}}, 64
157 // CHECK-BE: extractelement <2 x i64>
158 // CHECK-BE: add i64 {{.*}}, 64
159 // CHECK-BE: lshr i64 {{.*}}, 3
160 // CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
161 // CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
162 // CHECK: or <16 x i8>
163 // CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
164 // CHECK: or <16 x i8>
165 // CHECK: @llvm.cttz.v2i64(<2 x i64>
166 // CHECK: extractelement <2 x i64>
167 // CHECK: icmp eq i64 {{.*}}, 64
168 // CHECK: extractelement <2 x i64>
169 // CHECK: add i64 {{.*}}, 64
170 // CHECK: lshr i64 {{.*}}, 3
171   return vec_first_match_or_eos_index (vsca, vscb);
172 }
173 unsigned test8(void) {
174 // CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
175 // CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
176 // CHECK-BE: or <16 x i8>
177 // CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
178 // CHECK-BE: or <16 x i8>
179 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
180 // CHECK-BE: extractelement <2 x i64>
181 // CHECK-BE: icmp eq i64 {{.*}}, 64
182 // CHECK-BE: extractelement <2 x i64>
183 // CHECK-BE: add i64 {{.*}}, 64
184 // CHECK-BE: lshr i64 {{.*}}, 3
185 // CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
186 // CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
187 // CHECK: or <16 x i8>
188 // CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
189 // CHECK: or <16 x i8>
190 // CHECK: @llvm.cttz.v2i64(<2 x i64>
191 // CHECK: extractelement <2 x i64>
192 // CHECK: icmp eq i64 {{.*}}, 64
193 // CHECK: extractelement <2 x i64>
194 // CHECK: add i64 {{.*}}, 64
195 // CHECK: lshr i64 {{.*}}, 3
196   return vec_first_match_or_eos_index (vuca, vucb);
197 }
198 unsigned test9(void) {
199 // CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
200 // CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
201 // CHECK-BE: or <4 x i32>
202 // CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
203 // CHECK-BE: or <4 x i32>
204 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
205 // CHECK-BE: extractelement <2 x i64>
206 // CHECK-BE: icmp eq i64 {{.*}}, 64
207 // CHECK-BE: extractelement <2 x i64>
208 // CHECK-BE: add i64 {{.*}}, 64
209 // CHECK-BE: lshr i64 {{.*}}, 5
210 // CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
211 // CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
212 // CHECK: or <4 x i32>
213 // CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
214 // CHECK: or <4 x i32>
215 // CHECK: @llvm.cttz.v2i64(<2 x i64>
216 // CHECK: extractelement <2 x i64>
217 // CHECK: icmp eq i64 {{.*}}, 64
218 // CHECK: extractelement <2 x i64>
219 // CHECK: add i64 {{.*}}, 64
220 // CHECK: lshr i64 {{.*}}, 5
221   return vec_first_match_or_eos_index (vsia, vsib);
222 }
223 unsigned test10(void) {
224 // CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
225 // CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
226 // CHECK-BE: or <4 x i32>
227 // CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
228 // CHECK-BE: or <4 x i32>
229 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
230 // CHECK-BE: extractelement <2 x i64>
231 // CHECK-BE: icmp eq i64 {{.*}}, 64
232 // CHECK-BE: extractelement <2 x i64>
233 // CHECK-BE: add i64 {{.*}}, 64
234 // CHECK-BE: lshr i64 {{.*}}, 5
235 // CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
236 // CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
237 // CHECK: or <4 x i32>
238 // CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
239 // CHECK: or <4 x i32>
240 // CHECK: @llvm.cttz.v2i64(<2 x i64>
241 // CHECK: extractelement <2 x i64>
242 // CHECK: icmp eq i64 {{.*}}, 64
243 // CHECK: extractelement <2 x i64>
244 // CHECK: add i64 {{.*}}, 64
245 // CHECK: lshr i64 {{.*}}, 5
246   return vec_first_match_or_eos_index (vuia, vuib);
247 }
248 unsigned test11(void) {
249 // CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
250 // CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
251 // CHECK-BE: or <8 x i16>
252 // CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
253 // CHECK-BE: or <8 x i16>
254 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
255 // CHECK-BE: extractelement <2 x i64>
256 // CHECK-BE: icmp eq i64 {{.*}}, 64
257 // CHECK-BE: extractelement <2 x i64>
258 // CHECK-BE: add i64 {{.*}}, 64
259 // CHECK-BE: lshr i64 {{.*}}, 4
260 // CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
261 // CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
262 // CHECK: or <8 x i16>
263 // CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
264 // CHECK: or <8 x i16>
265 // CHECK: @llvm.cttz.v2i64(<2 x i64>
266 // CHECK: extractelement <2 x i64>
267 // CHECK: icmp eq i64 {{.*}}, 64
268 // CHECK: extractelement <2 x i64>
269 // CHECK: add i64 {{.*}}, 64
270 // CHECK: lshr i64 {{.*}}, 4
271   return vec_first_match_or_eos_index (vssa, vssb);
272 }
273 unsigned test12(void) {
274 // CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
275 // CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
276 // CHECK-BE: or <8 x i16>
277 // CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
278 // CHECK-BE: or <8 x i16>
279 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
280 // CHECK-BE: extractelement <2 x i64>
281 // CHECK-BE: icmp eq i64 {{.*}}, 64
282 // CHECK-BE: extractelement <2 x i64>
283 // CHECK-BE: add i64 {{.*}}, 64
284 // CHECK-BE: lshr i64 {{.*}}, 4
285 // CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
286 // CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
287 // CHECK: or <8 x i16>
288 // CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
289 // CHECK: or <8 x i16>
290 // CHECK: @llvm.cttz.v2i64(<2 x i64>
291 // CHECK: extractelement <2 x i64>
292 // CHECK: icmp eq i64 {{.*}}, 64
293 // CHECK: extractelement <2 x i64>
294 // CHECK: add i64 {{.*}}, 64
295 // CHECK: lshr i64 {{.*}}, 4
296   return vec_first_match_or_eos_index (vusa, vusb);
297 }
298 unsigned test13(void) {
299 // CHECK-BE: @llvm.ppc.altivec.vcmpneb(<16 x i8>
300 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
301 // CHECK-BE: extractelement <2 x i64>
302 // CHECK-BE: icmp eq i64 {{.*}}, 64
303 // CHECK-BE: extractelement <2 x i64>
304 // CHECK-BE: add i64 {{.*}}, 64
305 // CHECK-BE: lshr i64 {{.*}}, 3
306 // CHECK: @llvm.ppc.altivec.vcmpneb(<16 x i8>
307 // CHECK: @llvm.cttz.v2i64(<2 x i64>
308 // CHECK: extractelement <2 x i64>
309 // CHECK: icmp eq i64 {{.*}}, 64
310 // CHECK: extractelement <2 x i64>
311 // CHECK: add i64 {{.*}}, 64
312 // CHECK: lshr i64 {{.*}}, 3
313   return vec_first_mismatch_index (vsca, vscb);
314 }
315 unsigned test14(void) {
316 // CHECK-BE: @llvm.ppc.altivec.vcmpneb(<16 x i8>
317 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
318 // CHECK-BE: extractelement <2 x i64>
319 // CHECK-BE: icmp eq i64 {{.*}}, 64
320 // CHECK-BE: extractelement <2 x i64>
321 // CHECK-BE: add i64 {{.*}}, 64
322 // CHECK-BE: lshr i64 {{.*}}, 3
323 // CHECK: @llvm.ppc.altivec.vcmpneb(<16 x i8>
324 // CHECK: @llvm.cttz.v2i64(<2 x i64>
325 // CHECK: extractelement <2 x i64>
326 // CHECK: icmp eq i64 {{.*}}, 64
327 // CHECK: extractelement <2 x i64>
328 // CHECK: add i64 {{.*}}, 64
329 // CHECK: lshr i64 {{.*}}, 3
330   return vec_first_mismatch_index (vuca, vucb);
331 }
332 unsigned test15(void) {
333 // CHECK-BE: @llvm.ppc.altivec.vcmpnew(<4 x i32>
334 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
335 // CHECK-BE: extractelement <2 x i64>
336 // CHECK-BE: icmp eq i64 {{.*}}, 64
337 // CHECK-BE: extractelement <2 x i64>
338 // CHECK-BE: add i64 {{.*}}, 64
339 // CHECK-BE: lshr i64 {{.*}}, 5
340 // CHECK: @llvm.ppc.altivec.vcmpnew(<4 x i32>
341 // CHECK: @llvm.cttz.v2i64(<2 x i64>
342 // CHECK: extractelement <2 x i64>
343 // CHECK: icmp eq i64 {{.*}}, 64
344 // CHECK: extractelement <2 x i64>
345 // CHECK: add i64 {{.*}}, 64
346 // CHECK: lshr i64 {{.*}}, 5
347   return vec_first_mismatch_index (vsia, vsib);
348 }
349 unsigned test16(void) {
350 // CHECK-BE: @llvm.ppc.altivec.vcmpnew(<4 x i32>
351 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
352 // CHECK-BE: extractelement <2 x i64>
353 // CHECK-BE: icmp eq i64 {{.*}}, 64
354 // CHECK-BE: extractelement <2 x i64>
355 // CHECK-BE: add i64 {{.*}}, 64
356 // CHECK-BE: lshr i64 {{.*}}, 5
357 // CHECK: @llvm.ppc.altivec.vcmpnew(<4 x i32>
358 // CHECK: @llvm.cttz.v2i64(<2 x i64>
359 // CHECK: extractelement <2 x i64>
360 // CHECK: icmp eq i64 {{.*}}, 64
361 // CHECK: extractelement <2 x i64>
362 // CHECK: add i64 {{.*}}, 64
363 // CHECK: lshr i64 {{.*}}, 5
364   return vec_first_mismatch_index (vuia, vuib);
365 }
366 unsigned test17(void) {
367 // CHECK-BE: @llvm.ppc.altivec.vcmpneh(<8 x i16>
368 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
369 // CHECK-BE: extractelement <2 x i64>
370 // CHECK-BE: icmp eq i64 {{.*}}, 64
371 // CHECK-BE: extractelement <2 x i64>
372 // CHECK-BE: add i64 {{.*}}, 64
373 // CHECK-BE: lshr i64 {{.*}}, 4
374 // CHECK: @llvm.ppc.altivec.vcmpneh(<8 x i16>
375 // CHECK: @llvm.cttz.v2i64(<2 x i64>
376 // CHECK: extractelement <2 x i64>
377 // CHECK: icmp eq i64 {{.*}}, 64
378 // CHECK: extractelement <2 x i64>
379 // CHECK: add i64 {{.*}}, 64
380 // CHECK: lshr i64 {{.*}}, 4
381   return vec_first_mismatch_index (vssa, vssb);
382 }
383 unsigned test18(void) {
384 // CHECK-BE: @llvm.ppc.altivec.vcmpneh(<8 x i16>
385 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
386 // CHECK-BE: extractelement <2 x i64>
387 // CHECK-BE: icmp eq i64 {{.*}}, 64
388 // CHECK-BE: extractelement <2 x i64>
389 // CHECK-BE: add i64 {{.*}}, 64
390 // CHECK-BE: lshr i64 {{.*}}, 4
391 // CHECK: @llvm.ppc.altivec.vcmpneh(<8 x i16>
392 // CHECK: @llvm.cttz.v2i64(<2 x i64>
393 // CHECK: extractelement <2 x i64>
394 // CHECK: icmp eq i64 {{.*}}, 64
395 // CHECK: extractelement <2 x i64>
396 // CHECK: add i64 {{.*}}, 64
397 // CHECK: lshr i64 {{.*}}, 4
398   return vec_first_mismatch_index (vusa, vusb);
399 }
400 unsigned test19(void) {
401 // CHECK-BE: @llvm.ppc.altivec.vcmpnezb(<16 x i8>
402 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
403 // CHECK-BE: extractelement <2 x i64>
404 // CHECK-BE: icmp eq i64 {{.*}}, 64
405 // CHECK-BE: extractelement <2 x i64>
406 // CHECK-BE: add i64 {{.*}}, 64
407 // CHECK-BE: lshr i64 {{.*}}, 3
408 // CHECK: @llvm.ppc.altivec.vcmpnezb(<16 x i8>
409 // CHECK: @llvm.cttz.v2i64(<2 x i64>
410 // CHECK: extractelement <2 x i64>
411 // CHECK: icmp eq i64 {{.*}}, 64
412 // CHECK: extractelement <2 x i64>
413 // CHECK: add i64 {{.*}}, 64
414 // CHECK: lshr i64 {{.*}}, 3
415   return vec_first_mismatch_or_eos_index (vsca, vscb);
416 }
417 unsigned test20(void) {
418 // CHECK-BE: @llvm.ppc.altivec.vcmpnezb(<16 x i8>
419 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
420 // CHECK-BE: extractelement <2 x i64>
421 // CHECK-BE: icmp eq i64 {{.*}}, 64
422 // CHECK-BE: extractelement <2 x i64>
423 // CHECK-BE: add i64 {{.*}}, 64
424 // CHECK-BE: lshr i64 {{.*}}, 3
425 // CHECK: @llvm.ppc.altivec.vcmpnezb(<16 x i8>
426 // CHECK: @llvm.cttz.v2i64(<2 x i64>
427 // CHECK: extractelement <2 x i64>
428 // CHECK: icmp eq i64 {{.*}}, 64
429 // CHECK: extractelement <2 x i64>
430 // CHECK: add i64 {{.*}}, 64
431 // CHECK: lshr i64 {{.*}}, 3
432   return vec_first_mismatch_or_eos_index (vuca, vucb);
433 }
434 unsigned test21(void) {
435 // CHECK-BE: @llvm.ppc.altivec.vcmpnezw(<4 x i32>
436 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
437 // CHECK-BE: extractelement <2 x i64>
438 // CHECK-BE: icmp eq i64 {{.*}}, 64
439 // CHECK-BE: extractelement <2 x i64>
440 // CHECK-BE: add i64 {{.*}}, 64
441 // CHECK-BE: lshr i64 {{.*}}, 5
442 // CHECK: @llvm.ppc.altivec.vcmpnezw(<4 x i32>
443 // CHECK: @llvm.cttz.v2i64(<2 x i64>
444 // CHECK: extractelement <2 x i64>
445 // CHECK: icmp eq i64 {{.*}}, 64
446 // CHECK: extractelement <2 x i64>
447 // CHECK: add i64 {{.*}}, 64
448 // CHECK: lshr i64 {{.*}}, 5
449   return vec_first_mismatch_or_eos_index (vsia, vsib);
450 }
451 unsigned test22(void) {
452 // CHECK-BE: @llvm.ppc.altivec.vcmpnezw(<4 x i32>
453 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
454 // CHECK-BE: extractelement <2 x i64>
455 // CHECK-BE: icmp eq i64 {{.*}}, 64
456 // CHECK-BE: extractelement <2 x i64>
457 // CHECK-BE: add i64 {{.*}}, 64
458 // CHECK-BE: lshr i64 {{.*}}, 5
459 // CHECK: @llvm.ppc.altivec.vcmpnezw(<4 x i32>
460 // CHECK: @llvm.cttz.v2i64(<2 x i64>
461 // CHECK: extractelement <2 x i64>
462 // CHECK: icmp eq i64 {{.*}}, 64
463 // CHECK: extractelement <2 x i64>
464 // CHECK: add i64 {{.*}}, 64
465 // CHECK: lshr i64 {{.*}}, 5
466   return vec_first_mismatch_or_eos_index (vuia, vuib);
467 }
468 unsigned test23(void) {
469 // CHECK-BE: @llvm.ppc.altivec.vcmpnezh(<8 x i16>
470 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
471 // CHECK-BE: extractelement <2 x i64>
472 // CHECK-BE: icmp eq i64 {{.*}}, 64
473 // CHECK-BE: extractelement <2 x i64>
474 // CHECK-BE: add i64 {{.*}}, 64
475 // CHECK-BE: lshr i64 {{.*}}, 4
476 // CHECK: @llvm.ppc.altivec.vcmpnezh(<8 x i16>
477 // CHECK: @llvm.cttz.v2i64(<2 x i64>
478 // CHECK: extractelement <2 x i64>
479 // CHECK: icmp eq i64 {{.*}}, 64
480 // CHECK: extractelement <2 x i64>
481 // CHECK: add i64 {{.*}}, 64
482 // CHECK: lshr i64 {{.*}}, 4
483   return vec_first_mismatch_or_eos_index (vssa, vssb);
484 }
485 unsigned test24(void) {
486 // CHECK-BE: @llvm.ppc.altivec.vcmpnezh(<8 x i16>
487 // CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
488 // CHECK-BE: extractelement <2 x i64>
489 // CHECK-BE: icmp eq i64 {{.*}}, 64
490 // CHECK-BE: extractelement <2 x i64>
491 // CHECK-BE: add i64 {{.*}}, 64
492 // CHECK-BE: lshr i64 {{.*}}, 4
493 // CHECK: @llvm.ppc.altivec.vcmpnezh(<8 x i16>
494 // CHECK: @llvm.cttz.v2i64(<2 x i64>
495 // CHECK: extractelement <2 x i64>
496 // CHECK: icmp eq i64 {{.*}}, 64
497 // CHECK: extractelement <2 x i64>
498 // CHECK: add i64 {{.*}}, 64
499 // CHECK: lshr i64 {{.*}}, 4
500   return vec_first_mismatch_or_eos_index (vusa, vusb);
501 }
502 vector bool char test25(void) {
503 // CHECK-BE: @llvm.ppc.altivec.vcmpneb(<16 x i8>
504 // CHECK-BE-NEXT: ret <16 x i8>
505 // CHECK: @llvm.ppc.altivec.vcmpneb(<16 x i8>
506 // CHECK-NEXT: ret <16 x i8>
507   return vec_cmpne (vbca, vbcb);
508 }
509 vector bool char test26(void) {
510 // CHECK-BE: @llvm.ppc.altivec.vcmpneb(<16 x i8>
511 // CHECK-BE-NEXT: ret <16 x i8>
512 // CHECK: @llvm.ppc.altivec.vcmpneb(<16 x i8>
513 // CHECK-NEXT: ret <16 x i8>
514   return vec_cmpne (vsca, vscb);
515 }
516 vector bool char test27(void) {
517 // CHECK-BE: @llvm.ppc.altivec.vcmpneb(<16 x i8>
518 // CHECK-BE-NEXT: ret <16 x i8>
519 // CHECK: @llvm.ppc.altivec.vcmpneb(<16 x i8>
520 // CHECK-NEXT: ret <16 x i8>
521   return vec_cmpne (vuca, vucb);
522 }
523 vector bool int test28(void) {
524 // CHECK-BE: @llvm.ppc.altivec.vcmpnew(<4 x i32>
525 // CHECK-BE-NEXT: ret <4 x i32>
526 // CHECK: @llvm.ppc.altivec.vcmpnew(<4 x i32>
527 // CHECK-NEXT: ret <4 x i32>
528   return vec_cmpne (vbia, vbib);
529 }
530 vector bool int test29(void) {
531 // CHECK-BE: @llvm.ppc.altivec.vcmpnew(<4 x i32>
532 // CHECK-BE-NEXT: ret <4 x i32>
533 // CHECK: @llvm.ppc.altivec.vcmpnew(<4 x i32>
534 // CHECK-NEXT: ret <4 x i32>
535   return vec_cmpne (vsia, vsib);
536 }
537 vector bool int test30(void) {
538 // CHECK-BE: @llvm.ppc.altivec.vcmpnew(<4 x i32>
539 // CHECK-BE-NEXT: ret <4 x i32>
540 // CHECK: @llvm.ppc.altivec.vcmpnew(<4 x i32>
541 // CHECK-NEXT: ret <4 x i32>
542   return vec_cmpne (vuia, vuib);
543 }
544 vector bool long long test31(void) {
545 // CHECK-BE: @llvm.ppc.altivec.vcmpequd(<2 x i64>
546 // CHECK-BE: xor <2 x i64>
547 // CHECK-BE-NEXT: ret <2 x i64>
548 // CHECK: @llvm.ppc.altivec.vcmpequd(<2 x i64>
549 // CHECK: xor <2 x i64>
550 // CHECK-NEXT: ret <2 x i64>
551   return vec_cmpne (vbla, vblb);
552 }
553 vector bool long long test32(void) {
554 // CHECK-BE: @llvm.ppc.altivec.vcmpequd(<2 x i64>
555 // CHECK-BE: xor <2 x i64>
556 // CHECK-BE-NEXT: ret <2 x i64>
557 // CHECK: @llvm.ppc.altivec.vcmpequd(<2 x i64>
558 // CHECK: xor <2 x i64>
559 // CHECK-NEXT: ret <2 x i64>
560   return vec_cmpne (vsla, vslb);
561 }
562 vector bool long long test33(void) {
563 // CHECK-BE: @llvm.ppc.altivec.vcmpequd(<2 x i64>
564 // CHECK-BE: xor <2 x i64>
565 // CHECK-BE-NEXT: ret <2 x i64>
566 // CHECK: @llvm.ppc.altivec.vcmpequd(<2 x i64>
567 // CHECK: xor <2 x i64>
568 // CHECK-NEXT: ret <2 x i64>
569   return vec_cmpne (vula, vulb);
570 }
571 vector bool short test34(void) {
572 // CHECK-BE: @llvm.ppc.altivec.vcmpneh(<8 x i16>
573 // CHECK-BE-NEXT: ret <8 x i16>
574 // CHECK: @llvm.ppc.altivec.vcmpneh(<8 x i16>
575 // CHECK-NEXT: ret <8 x i16>
576   return vec_cmpne (vbsa, vbsb);
577 }
578 vector bool short test35(void) {
579 // CHECK-BE: @llvm.ppc.altivec.vcmpneh(<8 x i16>
580 // CHECK-BE-NEXT: ret <8 x i16>
581 // CHECK: @llvm.ppc.altivec.vcmpneh(<8 x i16>
582 // CHECK-NEXT: ret <8 x i16>
583   return vec_cmpne (vssa, vssb);
584 }
585 vector bool short test36(void) {
586 // CHECK-BE: @llvm.ppc.altivec.vcmpneh(<8 x i16>
587 // CHECK-BE-NEXT: ret <8 x i16>
588 // CHECK: @llvm.ppc.altivec.vcmpneh(<8 x i16>
589 // CHECK-NEXT: ret <8 x i16>
590   return vec_cmpne (vusa, vusb);
591 }
592 vector bool long long test37(void) {
593 // CHECK-BE: @llvm.ppc.altivec.vcmpequd(<2 x i64>
594 // CHECK-BE: xor <2 x i64>
595 // CHECK-BE-NEXT: ret <2 x i64>
596 // CHECK: @llvm.ppc.altivec.vcmpequd(<2 x i64>
597 // CHECK: xor <2 x i64>
598 // CHECK-NEXT: ret <2 x i64>
599   return vec_cmpne (vda, vdb);
600 }
601 vector bool int test38(void) {
602 // CHECK-BE: @llvm.ppc.altivec.vcmpnew(<4 x i32>
603 // CHECK-BE-NEXT: ret <4 x i32>
604 // CHECK: @llvm.ppc.altivec.vcmpnew(<4 x i32>
605 // CHECK-NEXT: ret <4 x i32>
606   return vec_cmpne (vfa, vfb);
607 }
608 vector signed char test39(void) {
609 // CHECK-BE: @llvm.cttz.v16i8(<16 x i8>
610 // CHECK-BE-NEXT: ret <16 x i8>
611 // CHECK: @llvm.cttz.v16i8(<16 x i8>
612 // CHECK-NEXT: ret <16 x i8>
613   return vec_cnttz (vsca);
614 }
615 vector unsigned char test40(void) {
616 // CHECK-BE: @llvm.cttz.v16i8(<16 x i8>
617 // CHECK-BE-NEXT: ret <16 x i8>
618 // CHECK: @llvm.cttz.v16i8(<16 x i8>
619 // CHECK-NEXT: ret <16 x i8>
620   return vec_cnttz (vuca);
621 }
622 vector signed int test41(void) {
623 // CHECK-BE: @llvm.cttz.v4i32(<4 x i32>
624 // CHECK-BE-NEXT: ret <4 x i32>
625 // CHECK: @llvm.cttz.v4i32(<4 x i32>
626 // CHECK-NEXT: ret <4 x i32>
627   return vec_cnttz (vsia);
628 }
629 vector unsigned int test42(void) {
630 // CHECK-BE: @llvm.cttz.v4i32(<4 x i32>
631 // CHECK-BE-NEXT: ret <4 x i32>
632 // CHECK: @llvm.cttz.v4i32(<4 x i32>
633 // CHECK-NEXT: ret <4 x i32>
634   return vec_cnttz (vuia);
635 }
636 vector signed long long test43(void) {
637 // CHECK-BE: @llvm.cttz.v2i64(<2 x i64>
638 // CHECK-BE-NEXT: ret <2 x i64>
639 // CHECK: @llvm.cttz.v2i64(<2 x i64>
640 // CHECK-NEXT: ret <2 x i64>
641   return vec_cnttz (vsla);
642 }
643 vector unsigned long long test44(void) {
644 // CHECK-BE: @llvm.cttz.v2i64(<2 x i64>
645 // CHECK-BE-NEXT: ret <2 x i64>
646 // CHECK: @llvm.cttz.v2i64(<2 x i64>
647 // CHECK-NEXT: ret <2 x i64>
648   return vec_cnttz (vula);
649 }
650 vector signed short test45(void) {
651 // CHECK-BE: @llvm.cttz.v8i16(<8 x i16>
652 // CHECK-BE-NEXT: ret <8 x i16>
653 // CHECK: @llvm.cttz.v8i16(<8 x i16>
654 // CHECK-NEXT: ret <8 x i16>
655   return vec_cnttz (vssa);
656 }
657 vector unsigned short test46(void) {
658 // CHECK-BE: @llvm.cttz.v8i16(<8 x i16>
659 // CHECK-BE-NEXT: ret <8 x i16>
660 // CHECK: @llvm.cttz.v8i16(<8 x i16>
661 // CHECK-NEXT: ret <8 x i16>
662   return vec_cnttz (vusa);
663 }
664 vector unsigned char test47(void) {
665 // CHECK-BE: @llvm.ctpop.v16i8(<16 x i8>
666 // CHECK-BE-NEXT: ret <16 x i8>
667 // CHECK: @llvm.ctpop.v16i8(<16 x i8>
668 // CHECK-NEXT: ret <16 x i8>
669   return vec_popcnt (vsca);
670 }
671 vector unsigned char test48(void) {
672 // CHECK-BE: @llvm.ctpop.v16i8(<16 x i8>
673 // CHECK-BE-NEXT: ret <16 x i8>
674 // CHECK: @llvm.ctpop.v16i8(<16 x i8>
675 // CHECK-NEXT: ret <16 x i8>
676   return vec_popcnt (vuca);
677 }
678 vector unsigned int test49(void) {
679 // CHECK-BE: @llvm.ctpop.v4i32(<4 x i32>
680 // CHECK-BE-NEXT: ret <4 x i32>
681 // CHECK: @llvm.ctpop.v4i32(<4 x i32>
682 // CHECK-NEXT: ret <4 x i32>
683   return vec_popcnt (vsia);
684 }
685 vector unsigned int test50(void) {
686 // CHECK-BE: @llvm.ctpop.v4i32(<4 x i32>
687 // CHECK-BE-NEXT: ret <4 x i32>
688 // CHECK: @llvm.ctpop.v4i32(<4 x i32>
689 // CHECK-NEXT: ret <4 x i32>
690   return vec_popcnt (vuia);
691 }
692 vector unsigned long long test51(void) {
693 // CHECK-BE: @llvm.ctpop.v2i64(<2 x i64>
694 // CHECK-BE-NEXT: ret <2 x i64>
695 // CHECK: @llvm.ctpop.v2i64(<2 x i64>
696 // CHECK-NEXT: ret <2 x i64>
697   return vec_popcnt (vsla);
698 }
699 vector unsigned long long test52(void) {
700 // CHECK-BE: @llvm.ctpop.v2i64(<2 x i64>
701 // CHECK-BE-NEXT: ret <2 x i64>
702 // CHECK: @llvm.ctpop.v2i64(<2 x i64>
703 // CHECK-NEXT: ret <2 x i64>
704   return vec_popcnt (vula);
705 }
706 vector unsigned short test53(void) {
707 // CHECK-BE: @llvm.ctpop.v8i16(<8 x i16>
708 // CHECK-BE-NEXT: ret <8 x i16>
709 // CHECK: @llvm.ctpop.v8i16(<8 x i16>
710 // CHECK-NEXT: ret <8 x i16>
711   return vec_popcnt (vssa);
712 }
713 vector unsigned short test54(void) {
714 // CHECK-BE: @llvm.ctpop.v8i16(<8 x i16>
715 // CHECK-BE-NEXT: ret <8 x i16>
716 // CHECK: @llvm.ctpop.v8i16(<8 x i16>
717 // CHECK-NEXT: ret <8 x i16>
718   return vec_popcnt (vusa);
719 }
720 vector double test55(void) {
721 // CHECK-BE: @llvm.ppc.vsx.xviexpdp(<2 x i64> %{{.+}}, <2 x i64>
722 // CHECK-BE-NEXT: ret <2 x double>
723 // CHECK: @llvm.ppc.vsx.xviexpdp(<2 x i64> %{{.+}}, <2 x i64>
724 // CHECK-NEXT: ret <2 x double>
725   return vec_insert_exp (vda,vulb);
726 }
727 vector double test56(void) {
728 // CHECK-BE: @llvm.ppc.vsx.xviexpdp(<2 x i64> %{{.+}}, <2 x i64>
729 // CHECK-BE-NEXT: ret <2 x double>
730 // CHECK: @llvm.ppc.vsx.xviexpdp(<2 x i64> %{{.+}}, <2 x i64>
731 // CHECK-NEXT: ret <2 x double>
732   return vec_insert_exp (vula, vulb);
733 }
734 vector float test57(void) {
735 // CHECK-BE: @llvm.ppc.vsx.xviexpsp(<4 x i32> %{{.+}}, <4 x i32>
736 // CHECK-BE-NEXT: ret <4 x float>
737 // CHECK: @llvm.ppc.vsx.xviexpsp(<4 x i32> %{{.+}}, <4 x i32>
738 // CHECK-NEXT: ret <4 x float>
739   return vec_insert_exp (vfa,vuib);
740 }
741 vector float test58(void) {
742 // CHECK-BE: @llvm.ppc.vsx.xviexpsp(<4 x i32> %{{.+}}, <4 x i32>
743 // CHECK-BE-NEXT: ret <4 x float>
744 // CHECK: @llvm.ppc.vsx.xviexpsp(<4 x i32> %{{.+}}, <4 x i32>
745 // CHECK-NEXT: ret <4 x float>
746   return vec_insert_exp (vuia,vuib);
747 }
748 signed int test59(void) {
749 // CHECK-BE: @llvm.ppc.altivec.vclzlsbb(<16 x i8>
750 // CHECK-BE-NEXT: ret i32
751 // CHECK-LE: @llvm.ppc.altivec.vctzlsbb(<16 x i8>
752 // CHECK-LE-NEXT: ret i32
753   return vec_cntlz_lsbb (vuca);
754 }
755 signed int test60(void) {
756 // CHECK-BE: @llvm.ppc.altivec.vclzlsbb(<16 x i8>
757 // CHECK-BE-NEXT: ret i32
758 // CHECK-LE: @llvm.ppc.altivec.vctzlsbb(<16 x i8>
759 // CHECK-LE-NEXT: ret i32
760   return vec_cntlz_lsbb (vsca);
761 }
762 signed int test61(void) {
763 // CHECK-BE: @llvm.ppc.altivec.vctzlsbb(<16 x i8>
764 // CHECK-BE-NEXT: ret i32
765 // CHECK-LE: @llvm.ppc.altivec.vclzlsbb(<16 x i8>
766 // CHECK-LE-NEXT: ret i32
767   return vec_cnttz_lsbb (vsca);
768 }
769 signed int test62(void) {
770 // CHECK-BE: @llvm.ppc.altivec.vctzlsbb(<16 x i8>
771 // CHECK-BE-NEXT: ret i32
772 // CHECK-LE: @llvm.ppc.altivec.vclzlsbb(<16 x i8>
773 // CHECK-LE-NEXT: ret i32
774   return vec_cnttz_lsbb (vuca);
775 }
776 vector unsigned int test63(void) {
777 // CHECK-BE: @llvm.ppc.altivec.vprtybw(<4 x i32>
778 // CHECK-BE-NEXT: ret <4 x i32>
779 // CHECK: @llvm.ppc.altivec.vprtybw(<4 x i32>
780 // CHECK-NEXT: ret <4 x i32>
781   return vec_parity_lsbb (vuia);
782 }
783 vector unsigned int test64(void) {
784 // CHECK-BE: @llvm.ppc.altivec.vprtybw(<4 x i32>
785 // CHECK-BE-NEXT: ret <4 x i32>
786 // CHECK: @llvm.ppc.altivec.vprtybw(<4 x i32>
787 // CHECK-NEXT: ret <4 x i32>
788   return vec_parity_lsbb (vsia);
789 }
790 vector unsigned long long test65(void) {
791 // CHECK-BE: @llvm.ppc.altivec.vprtybd(<2 x i64>
792 // CHECK-BE-NEXT: ret <2 x i64>
793 // CHECK: @llvm.ppc.altivec.vprtybd(<2 x i64>
794 // CHECK-NEXT: ret <2 x i64>
795   return vec_parity_lsbb (vula);
796 }
797 vector unsigned long long test66(void) {
798 // CHECK-BE: @llvm.ppc.altivec.vprtybd(<2 x i64>
799 // CHECK-BE-NEXT: ret <2 x i64>
800 // CHECK: @llvm.ppc.altivec.vprtybd(<2 x i64>
801 // CHECK-NEXT: ret <2 x i64>
802   return vec_parity_lsbb (vsla);
803 }
804 vector unsigned __int128 test67(void) {
805 // CHECK-BE: @llvm.ppc.altivec.vprtybq(<1 x i128>
806 // CHECK-BE-NEXT: ret <1 x i128>
807 // CHECK: @llvm.ppc.altivec.vprtybq(<1 x i128>
808 // CHECK-NEXT: ret <1 x i128>
809   return vec_parity_lsbb (vui128a);
810 }
811 vector unsigned __int128 test68(void) {
812 // CHECK-BE: @llvm.ppc.altivec.vprtybq(<1 x i128>
813 // CHECK-BE-NEXT: ret <1 x i128>
814 // CHECK: @llvm.ppc.altivec.vprtybq(<1 x i128>
815 // CHECK-NEXT: ret <1 x i128>
816   return vec_parity_lsbb (vsi128a);
817 }
818 vector unsigned char test69(void) {
819 // CHECK-BE: call <16 x i8> @llvm.ppc.altivec.vabsdub(<16 x i8> {{.+}}, <16 x i8> {{.+}})
820 // CHECK: call <16 x i8> @llvm.ppc.altivec.vabsdub(<16 x i8> {{.+}}, <16 x i8> {{.+}})
821   return vec_absd(vuca, vucb);
822 }
823 vector unsigned short test70(void) {
824 // CHECK-BE: call <8 x i16> @llvm.ppc.altivec.vabsduh(<8 x i16> {{.+}}, <8 x i16> {{.+}})
825 // CHECK: call <8 x i16> @llvm.ppc.altivec.vabsduh(<8 x i16> {{.+}}, <8 x i16> {{.+}})
826   return vec_absd(vusa, vusb);
827 }
828 vector unsigned int test71(void) {
829 // CHECK-BE: call <4 x i32> @llvm.ppc.altivec.vabsduw(<4 x i32> {{.+}}, <4 x i32> {{.+}})
830 // CHECK: call <4 x i32> @llvm.ppc.altivec.vabsduw(<4 x i32> {{.+}}, <4 x i32> {{.+}})
831   return vec_absd(vuia, vuib);
832 }
833 vector unsigned char test72(void) {
834 // CHECK-BE: @llvm.ppc.altivec.vslv(<16 x i8>
835 // CHECK-BE-NEXT: ret <16 x i8>
836 // CHECK: @llvm.ppc.altivec.vslv(<16 x i8>
837 // CHECK-NEXT: ret <16 x i8>
838   return vec_slv (vuca, vucb);
839 }
840 vector unsigned char test73(void) {
841 // CHECK-BE: @llvm.ppc.altivec.vsrv(<16 x i8>
842 // CHECK-BE-NEXT: ret <16 x i8>
843 // CHECK: @llvm.ppc.altivec.vsrv(<16 x i8>
844 // CHECK-NEXT: ret <16 x i8>
845   return vec_srv (vuca, vucb);
846 }
847 vector unsigned short test74(void) {
848 // CHECK-BE: @llvm.ppc.vsx.xvcvsphp(<4 x float>
849 // CHECK-BE: @llvm.ppc.vsx.xvcvsphp(<4 x float>
850 // CHECK-BE: @llvm.ppc.altivec.vperm
851 // CHECK: @llvm.ppc.vsx.xvcvsphp(<4 x float>
852 // CHECK: @llvm.ppc.vsx.xvcvsphp(<4 x float>
853 // CHECK: @llvm.ppc.altivec.vperm
854   return vec_pack_to_short_fp32(vfa, vfb);
855 }
856 vector unsigned int test75(void) {
857 // CHECK-BE: @llvm.ppc.altivec.vrlwmi(<4 x i32
858 // CHECK-BE-NEXT: ret <4 x i32>
859 // CHECK: @llvm.ppc.altivec.vrlwmi(<4 x i32
860 // CHECK-NEXT: ret <4 x i32>
861   return vec_rlmi(vuia, vuia, vuia);
862 }
863 vector unsigned long long test76(void) {
864 // CHECK-BE: @llvm.ppc.altivec.vrldmi(<2 x i64
865 // CHECK-BE-NEXT: ret <2 x i64>
866 // CHECK: @llvm.ppc.altivec.vrldmi(<2 x i64
867 // CHECK-NEXT: ret <2 x i64>
868   return vec_rlmi(vula, vula, vula);
869 }
870 vector unsigned int test77(void) {
871 // CHECK-BE: %[[RES1:.+]] = shl <4 x i32
872 // CHECK-BE: %[[RES2:.+]] = or <4 x i32> %[[RES1]]
873 // CHECK-BE: @llvm.ppc.altivec.vrlwnm(<4 x i32
874 // CHECK-BE: ret <4 x i32>
875 // CHECK: %[[RES1:.+]] = shl <4 x i32
876 // CHECK: %[[RES2:.+]] = or <4 x i32> %[[RES1]]
877 // CHECK: @llvm.ppc.altivec.vrlwnm(<4 x i32
878 // CHECK: ret <4 x i32>
879   return vec_rlnm(vuia, vuia, vuia);
880 }
881 vector unsigned long long test78(void) {
882 // CHECK-BE: %[[RES1:.+]] = shl <2 x i64
883 // CHECK-BE: %[[RES2:.+]] = or <2 x i64> %[[RES1]]
884 // CHECK-BE: @llvm.ppc.altivec.vrldnm(<2 x i64
885 // CHECK-BE-NEXT: ret <2 x i64>
886 // CHECK: %[[RES1:.+]] = shl <2 x i64
887 // CHECK: %[[RES2:.+]] = or <2 x i64> %[[RES1]]
888 // CHECK: @llvm.ppc.altivec.vrldnm(<2 x i64
889 // CHECK-NEXT: ret <2 x i64>
890   return vec_rlnm(vula, vula, vula);
891 }
892 vector double test79(void) {
893 // CHECK-BE: extractelement <4 x float>
894 // CHECK-BE: fpext float
895 // CHECK-BE: insertelement <2 x double>
896 // CHECK-BE: extractelement <4 x float>
897 // CHECK-BE: fpext float
898 // CHECK-BE: insertelement <2 x double>
899 // CHECK: extractelement <4 x float>
900 // CHECK: fpext float
901 // CHECK: insertelement <2 x double>
902 // CHECK: extractelement <4 x float>
903 // CHECK: fpext float
904 // CHECK: insertelement <2 x double>
905   return vec_unpackh(vfa);
906 }
907 vector double test80(void) {
908 // CHECK-BE: extractelement <4 x float>
909 // CHECK-BE: fpext float
910 // CHECK-BE: insertelement <2 x double>
911 // CHECK-BE: extractelement <4 x float>
912 // CHECK-BE: fpext float
913 // CHECK-BE: insertelement <2 x double>
914 // CHECK: extractelement <4 x float>
915 // CHECK: fpext float
916 // CHECK: insertelement <2 x double>
917 // CHECK: extractelement <4 x float>
918 // CHECK: fpext float
919 // CHECK: insertelement <2 x double>
920   return vec_unpackl(vfa);
921 }
922 vector double test81(void) {
923   // CHECK: extractelement <2 x double>
924   // CHECK: fptrunc double
925   // CHECK: insertelement <4 x float>
926   // CHECK: extractelement <2 x double>
927   // CHECK: fptrunc double
928   // CHECK: insertelement <4 x float>
929   // CHECK: extractelement <2 x double>
930   // CHECK: fptrunc double
931   // CHECK: insertelement <4 x float>
932   // CHECK: extractelement <2 x double>
933   // CHECK: fptrunc double
934   // CHECK: insertelement <4 x float>
935   // CHECK-LE: extractelement <2 x double>
936   // CHECK-LE: fptrunc double
937   // CHECK-LE: insertelement <4 x float>
938   // CHECK-LE: extractelement <2 x double>
939   // CHECK-LE: fptrunc double
940   // CHECK-LE: insertelement <4 x float>
941   // CHECK-LE: extractelement <2 x double>
942   // CHECK-LE: fptrunc double
943   // CHECK-LE: insertelement <4 x float>
944   // CHECK-LE: extractelement <2 x double>
945   // CHECK-LE: fptrunc double
946   // CHECK-LE: insertelement <4 x float>
947   return vec_pack(vda, vdb);
948 }
949 vector unsigned int test82(void) {
950 // CHECK-BE: @llvm.ppc.vsx.xvxexpsp(<4 x float> {{.+}})
951 // CHECK-BE-NEXT: ret <4 x i32>
952 // CHECK: @llvm.ppc.vsx.xvxexpsp(<4 x float> {{.+}})
953 // CHECK-NEXT: ret <4 x i32>
954   return vec_extract_exp(vfa);
955 }
956 vector unsigned long long test83(void) {
957 // CHECK-BE: @llvm.ppc.vsx.xvxexpdp(<2 x double> {{.+}})
958 // CHECK-BE-NEXT: ret <2 x i64>
959 // CHECK: @llvm.ppc.vsx.xvxexpdp(<2 x double> {{.+}})
960 // CHECK-NEXT: ret <2 x i64>
961   return vec_extract_exp(vda);
962 }
963 vector unsigned int test84(void) {
964 // CHECK-BE: @llvm.ppc.vsx.xvxsigsp(<4 x float> {{.+}})
965 // CHECK-BE-NEXT: ret <4 x i32>
966 // CHECK: @llvm.ppc.vsx.xvxsigsp(<4 x float> {{.+}})
967 // CHECK-NEXT: ret <4 x i32>
968   return vec_extract_sig(vfa);
969 }
970 vector unsigned long long test85(void) {
971 // CHECK-BE: @llvm.ppc.vsx.xvxsigdp(<2 x double> {{.+}})
972 // CHECK-BE-NEXT: ret <2 x i64>
973 // CHECK: @llvm.ppc.vsx.xvxsigdp(<2 x double> {{.+}})
974 // CHECK-NEXT: ret <2 x i64>
975   return vec_extract_sig(vda);
976 }
977 vector bool int test86(void) {
978 // CHECK-BE: @llvm.ppc.vsx.xvtstdcsp(<4 x float> {{.+}}, i32 127)
979 // CHECK-BE-NEXT: ret <4 x i32>
980 // CHECK: @llvm.ppc.vsx.xvtstdcsp(<4 x float> {{.+}}, i32 127)
981 // CHECK-NEXT: ret <4 x i32>
982    return vec_test_data_class(vfa, __VEC_CLASS_FP_NOT_NORMAL);
983 }
984 vector bool long long test87(void) {
985 // CHECK-BE: @llvm.ppc.vsx.xvtstdcdp(<2 x double> {{.+}}, i32 127)
986 // CHECK-BE_NEXT: ret <2 x i64
987 // CHECK: @llvm.ppc.vsx.xvtstdcdp(<2 x double> {{.+}}, i32 127)
988 // CHECK-NEXT: ret <2 x i64>
989   return vec_test_data_class(vda, __VEC_CLASS_FP_NOT_NORMAL);
990 }
991 vector unsigned char test88(void) {
992 // CHECK-BE: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
993 // CHECK-BE-NEXT-NEXT: ret <16 x i8>
994 // CHECK: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
995 // CHECK-NEXT-NEXT: ret <16 x i8>
996   return vec_xl_len(uc,0);
997 }
998 vector signed char test89(void) {
999 // CHECK-BE: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1000 // CHECK-BE-NEXT-NEXT: ret <16 x i8>
1001 // CHECK: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1002 // CHECK-NEXT-NEXT: ret <16 x i8>
1003   return vec_xl_len(sc,0);
1004 }
1005 vector unsigned short test90(void) {
1006 // CHECK-BE: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1007 // CHECK-BE-NEXT-NEXT: ret <8 x i16>
1008 // CHECK: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1009 // CHECK-NEXT-NEXT: ret <8 x i16>
1010   return vec_xl_len(us,0);
1011 }
1012 vector signed short test91(void) {
1013 // CHECK-BE: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1014 // CHECK-BE-NEXT-NEXT: ret <8 x i16>
1015 // CHECK: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1016 // CHECK-NEXT-NEXT: ret <8 x i16>
1017   return vec_xl_len(ss,0);
1018 }
1019 vector unsigned int test92(void) {
1020 // CHECK-BE: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1021 // CHECK-BE-NEXT: ret <4 x i32>
1022 // CHECK: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1023 // CHECK-NEXT: ret <4 x i32>
1024   return vec_xl_len(ui,0);
1025 }
1026
1027 vector signed int test93(void) {
1028 // CHECK-BE: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1029 // CHECK-BE-NEXT: ret <4 x i32>
1030 // CHECK: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1031 // CHECK-NEXT: ret <4 x i32>
1032   return vec_xl_len(si,0);
1033 }
1034
1035 vector float test94(void) {
1036 // CHECK-BE: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1037 // CHECK-BE-NEXT-NEXT: ret <4 x i32>
1038 // CHECK: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1039 // CHECK-NEXT-NEXT: ret <4 x i32>
1040   return vec_xl_len(f,0);
1041 }
1042
1043 vector unsigned long long test95(void) {
1044 // CHECK-BE: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1045 // CHECK-BE-NEXT-NEXT: ret <2 x i64>
1046 // CHECK: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1047 // CHECK-NEXT-NEXT: ret <2 x i64>
1048   return vec_xl_len(ull,0);
1049 }
1050  
1051 vector signed long long test96(void) {
1052 // CHECK-BE: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1053 // CHECK-BE-NEXT-NEXT: ret <2 x i64>
1054 // CHECK: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1055 // CHECK-NEXT-NEXT: ret <2 x i64>
1056   return vec_xl_len(sll,0);
1057 }
1058
1059 vector double test97(void) {
1060 // CHECK-BE: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1061 // CHECK-BE-NEXT-NEXT: ret <2 x i64>
1062 // CHECK: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1063 // CHECK-NEXT-NEXT: ret <2 x i64>
1064   return vec_xl_len(d,0);
1065 }
1066
1067 vector unsigned __int128 test98(void) {
1068 // CHECK-BE: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1069 // CHECK-BE-NEXT-NEXT: ret <1 x i128>
1070 // CHECK: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1071 // CHECK-NEXT-NEXT: ret <1 x i128>
1072   return vec_xl_len(uint128,0);
1073 }
1074
1075 vector signed __int128 test99(void) {
1076 // CHECK-BE: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1077 // CHECK-BE-NEXT-NEXT: ret <1 x i128>
1078 // CHECK: @llvm.ppc.vsx.lxvl(i8* %{{.+}}, i64
1079 // CHECK-NEXT-NEXT: ret <1 x i128>
1080   return vec_xl_len(sint128,0);
1081 }
1082
1083 void test100(void) {
1084 // CHECK-BE: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1085 // CHECK: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1086   return vec_xst_len(vuca,uc,0);
1087 }
1088
1089 void test101(void) {
1090 // CHECK-BE: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1091 // CHECK: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1092   return vec_xst_len(vsca,sc,0);
1093 }
1094
1095 void test102(void) {
1096 // CHECK-BE: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1097 // CHECK: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1098  return vec_xst_len(vusa,us,0);
1099 }
1100
1101 void test103(void) {
1102 // CHECK-BE: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1103 // CHECK: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1104  return vec_xst_len(vssa,ss,0);
1105 }
1106
1107 void test104(void) {
1108 // CHECK-BE: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1109 // CHECK: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1110  return vec_xst_len(vuia,ui,0);
1111 }
1112
1113 void test105(void) {
1114 // CHECK-BE: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1115 // CHECK: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1116  return vec_xst_len(vsia,si,0);
1117 }
1118
1119 void test106(void) {
1120 // CHECK-BE: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1121 // CHECK: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1122  return vec_xst_len(vfa,f,0);
1123 }
1124
1125 void test107(void) {
1126 // CHECK-BE: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1127 // CHECK: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1128  return vec_xst_len(vula,ull,0);
1129 }
1130
1131 void test108(void) {
1132 // CHECK-BE: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1133 // CHECK: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1134  return vec_xst_len(vsla,sll,0);
1135 }
1136
1137 void test109(void) {
1138 // CHECK-BE: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1139 // CHECK: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1140  return vec_xst_len(vda,d,0);
1141 }
1142
1143 void test110(void) {
1144 // CHECK-BE: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1145 // CHECK: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1146  return vec_xst_len(vui128a,uint128,0);
1147 }
1148
1149 void test111(void) {
1150 // CHECK-BE: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1151 // CHECK: @llvm.ppc.vsx.stxvl(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1152  return vec_xst_len(vsi128a,sint128,0);
1153 }
1154
1155 vector unsigned char test112(void) {
1156 // CHECK-BE: @llvm.ppc.vsx.lxvll(i8* %{{.+}}, i64
1157 // CHECK: @llvm.ppc.vsx.lxvll(i8* %{{.+}}, i64
1158 // CHECK: @llvm.ppc.altivec.lvsr(i8* %{{.+}}
1159 // CHECK: @llvm.ppc.altivec.vperm
1160   return vec_xl_len_r(uc,0);
1161 }
1162 void test113(void) {
1163 // CHECK-BE: @llvm.ppc.vsx.stxvll(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1164 // CHECK: @llvm.ppc.altivec.lvsl(i8* %{{.+}}
1165 // CHECK: @llvm.ppc.altivec.vperm
1166 // CHECK: @llvm.ppc.vsx.stxvll(<4 x i32> %{{.+}}, i8* %{{.+}}, i64
1167   return vec_xst_len_r(vuca,uc,0);
1168 }
1169 vector float test114(void) {
1170 // CHECK-BE: shufflevector <8 x i16> {{.+}}, <8 x i16> {{.+}}, <8 x i32> <i32 undef, i32 0, i32 undef, i32 1, i32 undef, i32 2, i32 undef, i32 3>
1171 // CHECK-BE: @llvm.ppc.vsx.xvcvhpsp(<8 x i16> {{.+}})
1172 // CHECK-BE-NEXT: ret <4 x float>
1173 // CHECK: shufflevector <8 x i16> {{.+}}, <8 x i16> {{.+}}, <8 x i32> <i32 0, i32 undef, i32 1, i32 undef, i32 2, i32 undef, i32 3, i32 undef>
1174 // CHECK: @llvm.ppc.vsx.xvcvhpsp(<8 x i16> {{.+}})
1175 // CHECK-NEXT: ret <4 x float>
1176   return vec_extract_fp32_from_shorth(vusa);
1177 }
1178 vector float test115(void) {
1179 // CHECK-BE: shufflevector <8 x i16> {{.+}}, <8 x i16> {{.+}}, <8 x i32> <i32 undef, i32 4, i32 undef, i32 5, i32 undef, i32 6, i32 undef, i32 7>
1180 // CHECK-BE: @llvm.ppc.vsx.xvcvhpsp(<8 x i16> {{.+}})
1181 // CHECK-BE-NEXT: ret <4 x float>
1182 // CHECK: shufflevector <8 x i16> {{.+}}, <8 x i16> {{.+}}, <8 x i32> <i32 4, i32 undef, i32 5, i32 undef, i32 6, i32 undef, i32 7, i32 undef>
1183 // CHECK: @llvm.ppc.vsx.xvcvhpsp(<8 x i16> {{.+}})
1184 // CHECK-NEXT: ret <4 x float>
1185   return vec_extract_fp32_from_shortl(vusa);
1186 }
1187 vector unsigned char test116(void) {
1188 // CHECK-BE: [[T1:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxinsertw(<4 x i32> {{.+}}, <2 x i64> {{.+}}, i32 7)
1189 // CHECK-BE-NEXT: bitcast <4 x i32> [[T1]] to <16 x i8>
1190 // CHECK: [[T1:%.+]] = shufflevector <2 x i64> {{.+}}, <2 x i64> {{.+}}, <2 x i32> <i32 1, i32 0>
1191 // CHECK-NEXT: [[T2:%.+]] =  bitcast <2 x i64> [[T1]] to <4 x i32>
1192 // CHECK-NEXT: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxinsertw(<4 x i32> [[T2]], <2 x i64> {{.+}}, i32 5)
1193 // CHECK-NEXT: bitcast <4 x i32> [[T3]] to <16 x i8>
1194   return vec_insert4b(vuia, vuca, 7);
1195 }
1196 vector unsigned char test117(void) {
1197 // CHECK-BE: [[T1:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxinsertw(<4 x i32> {{.+}}, <2 x i64> {{.+}}, i32 12)
1198 // CHECK-BE-NEXT: bitcast <4 x i32> [[T1]] to <16 x i8>
1199 // CHECK: [[T1:%.+]] = shufflevector <2 x i64> {{.+}}, <2 x i64> {{.+}}, <2 x i32> <i32 1, i32 0>
1200 // CHECK-NEXT: [[T2:%.+]] =  bitcast <2 x i64> [[T1]] to <4 x i32>
1201 // CHECK-NEXT: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxinsertw(<4 x i32> [[T2]], <2 x i64> {{.+}}, i32 0)
1202 // CHECK-NEXT: bitcast <4 x i32> [[T3]] to <16 x i8>
1203   return vec_insert4b(vuia, vuca, 13);
1204 }
1205 vector unsigned long long test118(void) {
1206 // CHECK-BE: call <2 x i64> @llvm.ppc.vsx.xxextractuw(<2 x i64> {{.+}}, i32 11)
1207 // CHECK-BE-NEXT: ret <2 x i64>
1208 // CHECK: [[T1:%.+]] = call <2 x i64> @llvm.ppc.vsx.xxextractuw(<2 x i64> {{.+}}, i32 1)
1209 // CHECK-NEXT: shufflevector <2 x i64> [[T1]], <2 x i64> [[T1]], <2 x i32> <i32 1, i32 0>
1210 // CHECK-NEXT: ret <2 x i64>
1211   return vec_extract4b(vuca, 11);
1212 }
1213 vector unsigned long long test119(void) {
1214 // CHECK-BE: call <2 x i64> @llvm.ppc.vsx.xxextractuw(<2 x i64> {{.+}}, i32 0)
1215 // CHECK-BE-NEXT: ret <2 x i64>
1216 // CHECK: [[T1:%.+]] = call <2 x i64> @llvm.ppc.vsx.xxextractuw(<2 x i64> {{.+}}, i32 12)
1217 // CHECK-NEXT: shufflevector <2 x i64> [[T1]], <2 x i64> [[T1]], <2 x i32> <i32 1, i32 0>
1218 // CHECK-NEXT: ret <2 x i64>
1219   return vec_extract4b(vuca, -5);
1220 }
1221