blob: 8f7f48cc593062d003a43465fea12a09118a3d80 [file] [log] [blame]
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +00001// REQUIRES: powerpc-registered-target
2// RUN: %clang_cc1 -faltivec -target-feature +power9-vector \
3// RUN: -triple powerpc64-unknown-unknown -emit-llvm %s \
Nemanja Ivanovic06d550b2016-10-05 19:11:36 +00004// RUN: -o - | FileCheck %s -check-prefix=CHECK-BE
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +00005
6// RUN: %clang_cc1 -faltivec -target-feature +power9-vector \
7// RUN: -triple powerpc64le-unknown-unknown -emit-llvm %s \
Nemanja Ivanovic06d550b2016-10-05 19:11:36 +00008// RUN: -o - | FileCheck %s
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +00009
10#include <altivec.h>
11
12vector signed char vsca, vscb;
13vector unsigned char vuca, vucb;
14vector bool char vbca, vbcb;
15vector signed short vssa, vssb;
16vector unsigned short vusa, vusb;
17vector bool short vbsa, vbsb;
18vector signed int vsia, vsib;
19vector unsigned int vuia, vuib;
20vector bool int vbia, vbib;
21vector signed long long vsla, vslb;
22vector unsigned long long vula, vulb;
23vector bool long long vbla, vblb;
24vector float vfa, vfb;
25vector double vda, vdb;
26
27unsigned test1(void) {
28// CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
29// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
30// CHECK-BE: extractelement <2 x i64>
31// CHECK-BE: icmp eq i64 {{.*}}, 64
32// CHECK-BE: extractelement <2 x i64>
33// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +000034// CHECK-BE: lshr i64 {{.*}}, 3
35// CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
36// CHECK: @llvm.cttz.v2i64(<2 x i64>
37// CHECK: extractelement <2 x i64>
38// CHECK: icmp eq i64 {{.*}}, 64
39// CHECK: extractelement <2 x i64>
40// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +000041// CHECK: lshr i64 {{.*}}, 3
42 return vec_first_match_index (vsca, vscb);
43}
44unsigned test2(void) {
45// CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
46// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
47// CHECK-BE: extractelement <2 x i64>
48// CHECK-BE: icmp eq i64 {{.*}}, 64
49// CHECK-BE: extractelement <2 x i64>
50// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +000051// CHECK-BE: lshr i64 {{.*}}, 3
52// CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
53// CHECK: @llvm.cttz.v2i64(<2 x i64>
54// CHECK: extractelement <2 x i64>
55// CHECK: icmp eq i64 {{.*}}, 64
56// CHECK: extractelement <2 x i64>
57// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +000058// CHECK: lshr i64 {{.*}}, 3
59 return vec_first_match_index (vuca, vucb);
60}
61unsigned test3(void) {
62// CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
63// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
64// CHECK-BE: extractelement <2 x i64>
65// CHECK-BE: icmp eq i64 {{.*}}, 64
66// CHECK-BE: extractelement <2 x i64>
67// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +000068// CHECK-BE: lshr i64 {{.*}}, 5
69// CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
70// CHECK: @llvm.cttz.v2i64(<2 x i64>
71// CHECK: extractelement <2 x i64>
72// CHECK: icmp eq i64 {{.*}}, 64
73// CHECK: extractelement <2 x i64>
74// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +000075// CHECK: lshr i64 {{.*}}, 5
76 return vec_first_match_index (vsia, vsib);
77}
78unsigned test4(void) {
79// CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
80// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
81// CHECK-BE: extractelement <2 x i64>
82// CHECK-BE: icmp eq i64 {{.*}}, 64
83// CHECK-BE: extractelement <2 x i64>
84// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +000085// CHECK-BE: lshr i64 {{.*}}, 5
86// CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
87// CHECK: @llvm.cttz.v2i64(<2 x i64>
88// CHECK: extractelement <2 x i64>
89// CHECK: icmp eq i64 {{.*}}, 64
90// CHECK: extractelement <2 x i64>
91// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +000092// CHECK: lshr i64 {{.*}}, 5
93 return vec_first_match_index (vuia, vuib);
94}
95unsigned test5(void) {
96// CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
97// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
98// CHECK-BE: extractelement <2 x i64>
99// CHECK-BE: icmp eq i64 {{.*}}, 64
100// CHECK-BE: extractelement <2 x i64>
101// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000102// CHECK-BE: lshr i64 {{.*}}, 4
103// CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
104// CHECK: @llvm.cttz.v2i64(<2 x i64>
105// CHECK: extractelement <2 x i64>
106// CHECK: icmp eq i64 {{.*}}, 64
107// CHECK: extractelement <2 x i64>
108// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000109// CHECK: lshr i64 {{.*}}, 4
110 return vec_first_match_index (vssa, vssb);
111}
112unsigned test6(void) {
113// CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
114// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
115// CHECK-BE: extractelement <2 x i64>
116// CHECK-BE: icmp eq i64 {{.*}}, 64
117// CHECK-BE: extractelement <2 x i64>
118// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000119// CHECK-BE: lshr i64 {{.*}}, 4
120// CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
121// CHECK: @llvm.cttz.v2i64(<2 x i64>
122// CHECK: extractelement <2 x i64>
123// CHECK: icmp eq i64 {{.*}}, 64
124// CHECK: extractelement <2 x i64>
125// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000126// CHECK: lshr i64 {{.*}}, 4
127 return vec_first_match_index (vusa, vusb);
128}
129unsigned test7(void) {
130// CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
131// CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
132// CHECK-BE: or <16 x i8>
133// CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
134// CHECK-BE: or <16 x i8>
135// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
136// CHECK-BE: extractelement <2 x i64>
137// CHECK-BE: icmp eq i64 {{.*}}, 64
138// CHECK-BE: extractelement <2 x i64>
139// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000140// CHECK-BE: lshr i64 {{.*}}, 3
141// CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
142// CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
143// CHECK: or <16 x i8>
144// CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
145// CHECK: or <16 x i8>
146// CHECK: @llvm.cttz.v2i64(<2 x i64>
147// CHECK: extractelement <2 x i64>
148// CHECK: icmp eq i64 {{.*}}, 64
149// CHECK: extractelement <2 x i64>
150// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000151// CHECK: lshr i64 {{.*}}, 3
152 return vec_first_match_or_eos_index (vsca, vscb);
153}
154unsigned test8(void) {
155// CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
156// CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
157// CHECK-BE: or <16 x i8>
158// CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
159// CHECK-BE: or <16 x i8>
160// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
161// CHECK-BE: extractelement <2 x i64>
162// CHECK-BE: icmp eq i64 {{.*}}, 64
163// CHECK-BE: extractelement <2 x i64>
164// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000165// CHECK-BE: lshr i64 {{.*}}, 3
166// CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
167// CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
168// CHECK: or <16 x i8>
169// CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
170// CHECK: or <16 x i8>
171// CHECK: @llvm.cttz.v2i64(<2 x i64>
172// CHECK: extractelement <2 x i64>
173// CHECK: icmp eq i64 {{.*}}, 64
174// CHECK: extractelement <2 x i64>
175// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000176// CHECK: lshr i64 {{.*}}, 3
177 return vec_first_match_or_eos_index (vuca, vucb);
178}
179unsigned test9(void) {
180// CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
181// CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
182// CHECK-BE: or <4 x i32>
183// CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
184// CHECK-BE: or <4 x i32>
185// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
186// CHECK-BE: extractelement <2 x i64>
187// CHECK-BE: icmp eq i64 {{.*}}, 64
188// CHECK-BE: extractelement <2 x i64>
189// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000190// CHECK-BE: lshr i64 {{.*}}, 5
191// CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
192// CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
193// CHECK: or <4 x i32>
194// CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
195// CHECK: or <4 x i32>
196// CHECK: @llvm.cttz.v2i64(<2 x i64>
197// CHECK: extractelement <2 x i64>
198// CHECK: icmp eq i64 {{.*}}, 64
199// CHECK: extractelement <2 x i64>
200// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000201// CHECK: lshr i64 {{.*}}, 5
202 return vec_first_match_or_eos_index (vsia, vsib);
203}
204unsigned test10(void) {
205// CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
206// CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
207// CHECK-BE: or <4 x i32>
208// CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
209// CHECK-BE: or <4 x i32>
210// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
211// CHECK-BE: extractelement <2 x i64>
212// CHECK-BE: icmp eq i64 {{.*}}, 64
213// CHECK-BE: extractelement <2 x i64>
214// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000215// CHECK-BE: lshr i64 {{.*}}, 5
216// CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
217// CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
218// CHECK: or <4 x i32>
219// CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
220// CHECK: or <4 x i32>
221// CHECK: @llvm.cttz.v2i64(<2 x i64>
222// CHECK: extractelement <2 x i64>
223// CHECK: icmp eq i64 {{.*}}, 64
224// CHECK: extractelement <2 x i64>
225// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000226// CHECK: lshr i64 {{.*}}, 5
227 return vec_first_match_or_eos_index (vuia, vuib);
228}
229unsigned test11(void) {
230// CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
231// CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
232// CHECK-BE: or <8 x i16>
233// CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
234// CHECK-BE: or <8 x i16>
235// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
236// CHECK-BE: extractelement <2 x i64>
237// CHECK-BE: icmp eq i64 {{.*}}, 64
238// CHECK-BE: extractelement <2 x i64>
239// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000240// CHECK-BE: lshr i64 {{.*}}, 4
241// CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
242// CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
243// CHECK: or <8 x i16>
244// CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
245// CHECK: or <8 x i16>
246// CHECK: @llvm.cttz.v2i64(<2 x i64>
247// CHECK: extractelement <2 x i64>
248// CHECK: icmp eq i64 {{.*}}, 64
249// CHECK: extractelement <2 x i64>
250// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000251// CHECK: lshr i64 {{.*}}, 4
252 return vec_first_match_or_eos_index (vssa, vssb);
253}
254unsigned test12(void) {
255// CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
256// CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
257// CHECK-BE: or <8 x i16>
258// CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
259// CHECK-BE: or <8 x i16>
260// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
261// CHECK-BE: extractelement <2 x i64>
262// CHECK-BE: icmp eq i64 {{.*}}, 64
263// CHECK-BE: extractelement <2 x i64>
264// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000265// CHECK-BE: lshr i64 {{.*}}, 4
266// CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
267// CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
268// CHECK: or <8 x i16>
269// CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
270// CHECK: or <8 x i16>
271// CHECK: @llvm.cttz.v2i64(<2 x i64>
272// CHECK: extractelement <2 x i64>
273// CHECK: icmp eq i64 {{.*}}, 64
274// CHECK: extractelement <2 x i64>
275// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000276// CHECK: lshr i64 {{.*}}, 4
277 return vec_first_match_or_eos_index (vusa, vusb);
278}
279unsigned test13(void) {
280// CHECK-BE: @llvm.ppc.altivec.vcmpneb(<16 x i8>
281// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
282// CHECK-BE: extractelement <2 x i64>
283// CHECK-BE: icmp eq i64 {{.*}}, 64
284// CHECK-BE: extractelement <2 x i64>
285// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000286// CHECK-BE: lshr i64 {{.*}}, 3
287// CHECK: @llvm.ppc.altivec.vcmpneb(<16 x i8>
288// CHECK: @llvm.cttz.v2i64(<2 x i64>
289// CHECK: extractelement <2 x i64>
290// CHECK: icmp eq i64 {{.*}}, 64
291// CHECK: extractelement <2 x i64>
292// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000293// CHECK: lshr i64 {{.*}}, 3
294 return vec_first_mismatch_index (vsca, vscb);
295}
296unsigned test14(void) {
297// CHECK-BE: @llvm.ppc.altivec.vcmpneb(<16 x i8>
298// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
299// CHECK-BE: extractelement <2 x i64>
300// CHECK-BE: icmp eq i64 {{.*}}, 64
301// CHECK-BE: extractelement <2 x i64>
302// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000303// CHECK-BE: lshr i64 {{.*}}, 3
304// CHECK: @llvm.ppc.altivec.vcmpneb(<16 x i8>
305// CHECK: @llvm.cttz.v2i64(<2 x i64>
306// CHECK: extractelement <2 x i64>
307// CHECK: icmp eq i64 {{.*}}, 64
308// CHECK: extractelement <2 x i64>
309// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000310// CHECK: lshr i64 {{.*}}, 3
311 return vec_first_mismatch_index (vuca, vucb);
312}
313unsigned test15(void) {
314// CHECK-BE: @llvm.ppc.altivec.vcmpnew(<4 x i32>
315// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
316// CHECK-BE: extractelement <2 x i64>
317// CHECK-BE: icmp eq i64 {{.*}}, 64
318// CHECK-BE: extractelement <2 x i64>
319// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000320// CHECK-BE: lshr i64 {{.*}}, 5
321// CHECK: @llvm.ppc.altivec.vcmpnew(<4 x i32>
322// CHECK: @llvm.cttz.v2i64(<2 x i64>
323// CHECK: extractelement <2 x i64>
324// CHECK: icmp eq i64 {{.*}}, 64
325// CHECK: extractelement <2 x i64>
326// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000327// CHECK: lshr i64 {{.*}}, 5
328 return vec_first_mismatch_index (vsia, vsib);
329}
330unsigned test16(void) {
331// CHECK-BE: @llvm.ppc.altivec.vcmpnew(<4 x i32>
332// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
333// CHECK-BE: extractelement <2 x i64>
334// CHECK-BE: icmp eq i64 {{.*}}, 64
335// CHECK-BE: extractelement <2 x i64>
336// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000337// CHECK-BE: lshr i64 {{.*}}, 5
338// CHECK: @llvm.ppc.altivec.vcmpnew(<4 x i32>
339// CHECK: @llvm.cttz.v2i64(<2 x i64>
340// CHECK: extractelement <2 x i64>
341// CHECK: icmp eq i64 {{.*}}, 64
342// CHECK: extractelement <2 x i64>
343// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000344// CHECK: lshr i64 {{.*}}, 5
345 return vec_first_mismatch_index (vuia, vuib);
346}
347unsigned test17(void) {
348// CHECK-BE: @llvm.ppc.altivec.vcmpneh(<8 x i16>
349// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
350// CHECK-BE: extractelement <2 x i64>
351// CHECK-BE: icmp eq i64 {{.*}}, 64
352// CHECK-BE: extractelement <2 x i64>
353// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000354// CHECK-BE: lshr i64 {{.*}}, 4
355// CHECK: @llvm.ppc.altivec.vcmpneh(<8 x i16>
356// CHECK: @llvm.cttz.v2i64(<2 x i64>
357// CHECK: extractelement <2 x i64>
358// CHECK: icmp eq i64 {{.*}}, 64
359// CHECK: extractelement <2 x i64>
360// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000361// CHECK: lshr i64 {{.*}}, 4
362 return vec_first_mismatch_index (vssa, vssb);
363}
364unsigned test18(void) {
365// CHECK-BE: @llvm.ppc.altivec.vcmpneh(<8 x i16>
366// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
367// CHECK-BE: extractelement <2 x i64>
368// CHECK-BE: icmp eq i64 {{.*}}, 64
369// CHECK-BE: extractelement <2 x i64>
370// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000371// CHECK-BE: lshr i64 {{.*}}, 4
372// CHECK: @llvm.ppc.altivec.vcmpneh(<8 x i16>
373// CHECK: @llvm.cttz.v2i64(<2 x i64>
374// CHECK: extractelement <2 x i64>
375// CHECK: icmp eq i64 {{.*}}, 64
376// CHECK: extractelement <2 x i64>
377// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000378// CHECK: lshr i64 {{.*}}, 4
379 return vec_first_mismatch_index (vusa, vusb);
380}
381unsigned test19(void) {
382// CHECK-BE: @llvm.ppc.altivec.vcmpnezb(<16 x i8>
383// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
384// CHECK-BE: extractelement <2 x i64>
385// CHECK-BE: icmp eq i64 {{.*}}, 64
386// CHECK-BE: extractelement <2 x i64>
387// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000388// CHECK-BE: lshr i64 {{.*}}, 3
389// CHECK: @llvm.ppc.altivec.vcmpnezb(<16 x i8>
390// CHECK: @llvm.cttz.v2i64(<2 x i64>
391// CHECK: extractelement <2 x i64>
392// CHECK: icmp eq i64 {{.*}}, 64
393// CHECK: extractelement <2 x i64>
394// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000395// CHECK: lshr i64 {{.*}}, 3
396 return vec_first_mismatch_or_eos_index (vsca, vscb);
397}
398unsigned test20(void) {
399// CHECK-BE: @llvm.ppc.altivec.vcmpnezb(<16 x i8>
400// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
401// CHECK-BE: extractelement <2 x i64>
402// CHECK-BE: icmp eq i64 {{.*}}, 64
403// CHECK-BE: extractelement <2 x i64>
404// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000405// CHECK-BE: lshr i64 {{.*}}, 3
406// CHECK: @llvm.ppc.altivec.vcmpnezb(<16 x i8>
407// CHECK: @llvm.cttz.v2i64(<2 x i64>
408// CHECK: extractelement <2 x i64>
409// CHECK: icmp eq i64 {{.*}}, 64
410// CHECK: extractelement <2 x i64>
411// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000412// CHECK: lshr i64 {{.*}}, 3
413 return vec_first_mismatch_or_eos_index (vuca, vucb);
414}
415unsigned test21(void) {
416// CHECK-BE: @llvm.ppc.altivec.vcmpnezw(<4 x i32>
417// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
418// CHECK-BE: extractelement <2 x i64>
419// CHECK-BE: icmp eq i64 {{.*}}, 64
420// CHECK-BE: extractelement <2 x i64>
421// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000422// CHECK-BE: lshr i64 {{.*}}, 5
423// CHECK: @llvm.ppc.altivec.vcmpnezw(<4 x i32>
424// CHECK: @llvm.cttz.v2i64(<2 x i64>
425// CHECK: extractelement <2 x i64>
426// CHECK: icmp eq i64 {{.*}}, 64
427// CHECK: extractelement <2 x i64>
428// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000429// CHECK: lshr i64 {{.*}}, 5
430 return vec_first_mismatch_or_eos_index (vsia, vsib);
431}
432unsigned test22(void) {
433// CHECK-BE: @llvm.ppc.altivec.vcmpnezw(<4 x i32>
434// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
435// CHECK-BE: extractelement <2 x i64>
436// CHECK-BE: icmp eq i64 {{.*}}, 64
437// CHECK-BE: extractelement <2 x i64>
438// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000439// CHECK-BE: lshr i64 {{.*}}, 5
440// CHECK: @llvm.ppc.altivec.vcmpnezw(<4 x i32>
441// CHECK: @llvm.cttz.v2i64(<2 x i64>
442// CHECK: extractelement <2 x i64>
443// CHECK: icmp eq i64 {{.*}}, 64
444// CHECK: extractelement <2 x i64>
445// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000446// CHECK: lshr i64 {{.*}}, 5
447 return vec_first_mismatch_or_eos_index (vuia, vuib);
448}
449unsigned test23(void) {
450// CHECK-BE: @llvm.ppc.altivec.vcmpnezh(<8 x i16>
451// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
452// CHECK-BE: extractelement <2 x i64>
453// CHECK-BE: icmp eq i64 {{.*}}, 64
454// CHECK-BE: extractelement <2 x i64>
455// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000456// CHECK-BE: lshr i64 {{.*}}, 4
457// CHECK: @llvm.ppc.altivec.vcmpnezh(<8 x i16>
458// CHECK: @llvm.cttz.v2i64(<2 x i64>
459// CHECK: extractelement <2 x i64>
460// CHECK: icmp eq i64 {{.*}}, 64
461// CHECK: extractelement <2 x i64>
462// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000463// CHECK: lshr i64 {{.*}}, 4
464 return vec_first_mismatch_or_eos_index (vssa, vssb);
465}
466unsigned test24(void) {
467// CHECK-BE: @llvm.ppc.altivec.vcmpnezh(<8 x i16>
468// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
469// CHECK-BE: extractelement <2 x i64>
470// CHECK-BE: icmp eq i64 {{.*}}, 64
471// CHECK-BE: extractelement <2 x i64>
472// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000473// CHECK-BE: lshr i64 {{.*}}, 4
474// CHECK: @llvm.ppc.altivec.vcmpnezh(<8 x i16>
475// CHECK: @llvm.cttz.v2i64(<2 x i64>
476// CHECK: extractelement <2 x i64>
477// CHECK: icmp eq i64 {{.*}}, 64
478// CHECK: extractelement <2 x i64>
479// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000480// CHECK: lshr i64 {{.*}}, 4
481 return vec_first_mismatch_or_eos_index (vusa, vusb);
482}
483vector bool char test25(void) {
484// CHECK-BE: @llvm.ppc.altivec.vcmpneb(<16 x i8>
485// CHECK-BE-NEXT: ret <16 x i8>
486// CHECK: @llvm.ppc.altivec.vcmpneb(<16 x i8>
487// CHECK-NEXT: ret <16 x i8>
488 return vec_cmpne (vbca, vbcb);
489}
490vector bool char test26(void) {
491// CHECK-BE: @llvm.ppc.altivec.vcmpneb(<16 x i8>
492// CHECK-BE-NEXT: ret <16 x i8>
493// CHECK: @llvm.ppc.altivec.vcmpneb(<16 x i8>
494// CHECK-NEXT: ret <16 x i8>
495 return vec_cmpne (vsca, vscb);
496}
497vector bool char test27(void) {
498// CHECK-BE: @llvm.ppc.altivec.vcmpneb(<16 x i8>
499// CHECK-BE-NEXT: ret <16 x i8>
500// CHECK: @llvm.ppc.altivec.vcmpneb(<16 x i8>
501// CHECK-NEXT: ret <16 x i8>
502 return vec_cmpne (vuca, vucb);
503}
504vector bool int test28(void) {
505// CHECK-BE: @llvm.ppc.altivec.vcmpnew(<4 x i32>
506// CHECK-BE-NEXT: ret <4 x i32>
507// CHECK: @llvm.ppc.altivec.vcmpnew(<4 x i32>
508// CHECK-NEXT: ret <4 x i32>
509 return vec_cmpne (vbia, vbib);
510}
511vector bool int test29(void) {
512// CHECK-BE: @llvm.ppc.altivec.vcmpnew(<4 x i32>
513// CHECK-BE-NEXT: ret <4 x i32>
514// CHECK: @llvm.ppc.altivec.vcmpnew(<4 x i32>
515// CHECK-NEXT: ret <4 x i32>
516 return vec_cmpne (vsia, vsib);
517}
518vector bool int test30(void) {
519// CHECK-BE: @llvm.ppc.altivec.vcmpnew(<4 x i32>
520// CHECK-BE-NEXT: ret <4 x i32>
521// CHECK: @llvm.ppc.altivec.vcmpnew(<4 x i32>
522// CHECK-NEXT: ret <4 x i32>
523 return vec_cmpne (vuia, vuib);
524}
525vector bool long long test31(void) {
526// CHECK-BE: @llvm.ppc.altivec.vcmpequd(<2 x i64>
527// CHECK-BE: xor <2 x i64>
528// CHECK-BE-NEXT: ret <2 x i64>
529// CHECK: @llvm.ppc.altivec.vcmpequd(<2 x i64>
530// CHECK: xor <2 x i64>
531// CHECK-NEXT: ret <2 x i64>
532 return vec_cmpne (vbla, vblb);
533}
534vector bool long long test32(void) {
535// CHECK-BE: @llvm.ppc.altivec.vcmpequd(<2 x i64>
536// CHECK-BE: xor <2 x i64>
537// CHECK-BE-NEXT: ret <2 x i64>
538// CHECK: @llvm.ppc.altivec.vcmpequd(<2 x i64>
539// CHECK: xor <2 x i64>
540// CHECK-NEXT: ret <2 x i64>
541 return vec_cmpne (vsla, vslb);
542}
543vector bool long long test33(void) {
544// CHECK-BE: @llvm.ppc.altivec.vcmpequd(<2 x i64>
545// CHECK-BE: xor <2 x i64>
546// CHECK-BE-NEXT: ret <2 x i64>
547// CHECK: @llvm.ppc.altivec.vcmpequd(<2 x i64>
548// CHECK: xor <2 x i64>
549// CHECK-NEXT: ret <2 x i64>
550 return vec_cmpne (vula, vulb);
551}
552vector bool short test34(void) {
553// CHECK-BE: @llvm.ppc.altivec.vcmpneh(<8 x i16>
554// CHECK-BE-NEXT: ret <8 x i16>
555// CHECK: @llvm.ppc.altivec.vcmpneh(<8 x i16>
556// CHECK-NEXT: ret <8 x i16>
557 return vec_cmpne (vbsa, vbsb);
558}
559vector bool short test35(void) {
560// CHECK-BE: @llvm.ppc.altivec.vcmpneh(<8 x i16>
561// CHECK-BE-NEXT: ret <8 x i16>
562// CHECK: @llvm.ppc.altivec.vcmpneh(<8 x i16>
563// CHECK-NEXT: ret <8 x i16>
564 return vec_cmpne (vssa, vssb);
565}
566vector bool short test36(void) {
567// CHECK-BE: @llvm.ppc.altivec.vcmpneh(<8 x i16>
568// CHECK-BE-NEXT: ret <8 x i16>
569// CHECK: @llvm.ppc.altivec.vcmpneh(<8 x i16>
570// CHECK-NEXT: ret <8 x i16>
571 return vec_cmpne (vusa, vusb);
572}
573vector bool long long test37(void) {
574// CHECK-BE: @llvm.ppc.altivec.vcmpequd(<2 x i64>
575// CHECK-BE: xor <2 x i64>
576// CHECK-BE-NEXT: ret <2 x i64>
577// CHECK: @llvm.ppc.altivec.vcmpequd(<2 x i64>
578// CHECK: xor <2 x i64>
579// CHECK-NEXT: ret <2 x i64>
580 return vec_cmpne (vda, vdb);
581}
582vector bool int test38(void) {
583// CHECK-BE: @llvm.ppc.altivec.vcmpnew(<4 x i32>
584// CHECK-BE-NEXT: ret <4 x i32>
585// CHECK: @llvm.ppc.altivec.vcmpnew(<4 x i32>
586// CHECK-NEXT: ret <4 x i32>
587 return vec_cmpne (vfa, vfb);
588}
589vector signed char test39(void) {
590// CHECK-BE: @llvm.cttz.v16i8(<16 x i8>
591// CHECK-BE-NEXT: ret <16 x i8>
592// CHECK: @llvm.cttz.v16i8(<16 x i8>
593// CHECK-NEXT: ret <16 x i8>
594 return vec_cnttz (vsca);
595}
596vector unsigned char test40(void) {
597// CHECK-BE: @llvm.cttz.v16i8(<16 x i8>
598// CHECK-BE-NEXT: ret <16 x i8>
599// CHECK: @llvm.cttz.v16i8(<16 x i8>
600// CHECK-NEXT: ret <16 x i8>
601 return vec_cnttz (vuca);
602}
603vector signed int test41(void) {
604// CHECK-BE: @llvm.cttz.v4i32(<4 x i32>
605// CHECK-BE-NEXT: ret <4 x i32>
606// CHECK: @llvm.cttz.v4i32(<4 x i32>
607// CHECK-NEXT: ret <4 x i32>
608 return vec_cnttz (vsia);
609}
610vector unsigned int test42(void) {
611// CHECK-BE: @llvm.cttz.v4i32(<4 x i32>
612// CHECK-BE-NEXT: ret <4 x i32>
613// CHECK: @llvm.cttz.v4i32(<4 x i32>
614// CHECK-NEXT: ret <4 x i32>
615 return vec_cnttz (vuia);
616}
617vector signed long long test43(void) {
618// CHECK-BE: @llvm.cttz.v2i64(<2 x i64>
619// CHECK-BE-NEXT: ret <2 x i64>
620// CHECK: @llvm.cttz.v2i64(<2 x i64>
621// CHECK-NEXT: ret <2 x i64>
622 return vec_cnttz (vsla);
623}
624vector unsigned long long test44(void) {
625// CHECK-BE: @llvm.cttz.v2i64(<2 x i64>
626// CHECK-BE-NEXT: ret <2 x i64>
627// CHECK: @llvm.cttz.v2i64(<2 x i64>
628// CHECK-NEXT: ret <2 x i64>
629 return vec_cnttz (vula);
630}
631vector signed short test45(void) {
632// CHECK-BE: @llvm.cttz.v8i16(<8 x i16>
633// CHECK-BE-NEXT: ret <8 x i16>
634// CHECK: @llvm.cttz.v8i16(<8 x i16>
635// CHECK-NEXT: ret <8 x i16>
636 return vec_cnttz (vssa);
637}
638vector unsigned short test46(void) {
639// CHECK-BE: @llvm.cttz.v8i16(<8 x i16>
640// CHECK-BE-NEXT: ret <8 x i16>
641// CHECK: @llvm.cttz.v8i16(<8 x i16>
642// CHECK-NEXT: ret <8 x i16>
643 return vec_cnttz (vusa);
644}
645vector unsigned char test47(void) {
646// CHECK-BE: @llvm.ctpop.v16i8(<16 x i8>
647// CHECK-BE-NEXT: ret <16 x i8>
648// CHECK: @llvm.ctpop.v16i8(<16 x i8>
649// CHECK-NEXT: ret <16 x i8>
650 return vec_popcnt (vsca);
651}
652vector unsigned char test48(void) {
653// CHECK-BE: @llvm.ctpop.v16i8(<16 x i8>
654// CHECK-BE-NEXT: ret <16 x i8>
655// CHECK: @llvm.ctpop.v16i8(<16 x i8>
656// CHECK-NEXT: ret <16 x i8>
657 return vec_popcnt (vuca);
658}
659vector unsigned int test49(void) {
660// CHECK-BE: @llvm.ctpop.v4i32(<4 x i32>
661// CHECK-BE-NEXT: ret <4 x i32>
662// CHECK: @llvm.ctpop.v4i32(<4 x i32>
663// CHECK-NEXT: ret <4 x i32>
664 return vec_popcnt (vsia);
665}
666vector unsigned int test50(void) {
667// CHECK-BE: @llvm.ctpop.v4i32(<4 x i32>
668// CHECK-BE-NEXT: ret <4 x i32>
669// CHECK: @llvm.ctpop.v4i32(<4 x i32>
670// CHECK-NEXT: ret <4 x i32>
671 return vec_popcnt (vuia);
672}
673vector unsigned long long test51(void) {
674// CHECK-BE: @llvm.ctpop.v2i64(<2 x i64>
675// CHECK-BE-NEXT: ret <2 x i64>
676// CHECK: @llvm.ctpop.v2i64(<2 x i64>
677// CHECK-NEXT: ret <2 x i64>
678 return vec_popcnt (vsla);
679}
680vector unsigned long long test52(void) {
681// CHECK-BE: @llvm.ctpop.v2i64(<2 x i64>
682// CHECK-BE-NEXT: ret <2 x i64>
683// CHECK: @llvm.ctpop.v2i64(<2 x i64>
684// CHECK-NEXT: ret <2 x i64>
685 return vec_popcnt (vula);
686}
687vector unsigned short test53(void) {
688// CHECK-BE: @llvm.ctpop.v8i16(<8 x i16>
689// CHECK-BE-NEXT: ret <8 x i16>
690// CHECK: @llvm.ctpop.v8i16(<8 x i16>
691// CHECK-NEXT: ret <8 x i16>
692 return vec_popcnt (vssa);
693}
694vector unsigned short test54(void) {
695// CHECK-BE: @llvm.ctpop.v8i16(<8 x i16>
696// CHECK-BE-NEXT: ret <8 x i16>
697// CHECK: @llvm.ctpop.v8i16(<8 x i16>
698// CHECK-NEXT: ret <8 x i16>
699 return vec_popcnt (vusa);
700}
Nemanja Ivanovic3de0a382016-10-26 19:27:11 +0000701vector double test55(void) {
702// CHECK-BE: @llvm.ppc.vsx.xviexpdp(<2 x i64> %{{.+}}, <2 x i64>
703// CHECK-BE-NEXT: ret <2 x double>
704// CHECK: @llvm.ppc.vsx.xviexpdp(<2 x i64> %{{.+}}, <2 x i64>
705// CHECK-NEXT: ret <2 x double>
706 return vec_insert_exp (vda,vulb);
707}
708vector double test56(void) {
709// CHECK-BE: @llvm.ppc.vsx.xviexpdp(<2 x i64> %{{.+}}, <2 x i64>
710// CHECK-BE-NEXT: ret <2 x double>
711// CHECK: @llvm.ppc.vsx.xviexpdp(<2 x i64> %{{.+}}, <2 x i64>
712// CHECK-NEXT: ret <2 x double>
713 return vec_insert_exp (vula, vulb);
714}
715vector float test57(void) {
716// CHECK-BE: @llvm.ppc.vsx.xviexpsp(<4 x i32> %{{.+}}, <4 x i32>
717// CHECK-BE-NEXT: ret <4 x float>
718// CHECK: @llvm.ppc.vsx.xviexpsp(<4 x i32> %{{.+}}, <4 x i32>
719// CHECK-NEXT: ret <4 x float>
720 return vec_insert_exp (vfa,vuib);
721}
722vector float test58(void) {
723// CHECK-BE: @llvm.ppc.vsx.xviexpsp(<4 x i32> %{{.+}}, <4 x i32>
724// CHECK-BE-NEXT: ret <4 x float>
725// CHECK: @llvm.ppc.vsx.xviexpsp(<4 x i32> %{{.+}}, <4 x i32>
726// CHECK-NEXT: ret <4 x float>
727 return vec_insert_exp (vuia,vuib);
728}