blob: b41e88dbbcce85f61d2ee4a15a8f4b2a6940f1e6 [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;
Nemanja Ivanovic4f69f922016-10-28 19:49:03 +000026vector unsigned __int128 vui128a, vui128b;
27vector signed __int128 vsi128a, vsi128b;
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +000028
29unsigned test1(void) {
30// CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
31// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
32// CHECK-BE: extractelement <2 x i64>
33// CHECK-BE: icmp eq i64 {{.*}}, 64
34// CHECK-BE: extractelement <2 x i64>
35// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +000036// CHECK-BE: lshr i64 {{.*}}, 3
37// CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
38// CHECK: @llvm.cttz.v2i64(<2 x i64>
39// CHECK: extractelement <2 x i64>
40// CHECK: icmp eq i64 {{.*}}, 64
41// CHECK: extractelement <2 x i64>
42// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +000043// CHECK: lshr i64 {{.*}}, 3
44 return vec_first_match_index (vsca, vscb);
45}
46unsigned test2(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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +000053// 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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +000060// CHECK: lshr i64 {{.*}}, 3
61 return vec_first_match_index (vuca, vucb);
62}
63unsigned test3(void) {
64// CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +000070// CHECK-BE: lshr i64 {{.*}}, 5
71// CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +000077// CHECK: lshr i64 {{.*}}, 5
78 return vec_first_match_index (vsia, vsib);
79}
80unsigned test4(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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +000087// 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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +000094// CHECK: lshr i64 {{.*}}, 5
95 return vec_first_match_index (vuia, vuib);
96}
97unsigned test5(void) {
98// CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000104// CHECK-BE: lshr i64 {{.*}}, 4
105// CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000111// CHECK: lshr i64 {{.*}}, 4
112 return vec_first_match_index (vssa, vssb);
113}
114unsigned test6(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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000121// 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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000128// CHECK: lshr i64 {{.*}}, 4
129 return vec_first_match_index (vusa, vusb);
130}
131unsigned test7(void) {
132// CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
133// CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
134// CHECK-BE: or <16 x i8>
135// CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
136// CHECK-BE: or <16 x i8>
137// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
138// CHECK-BE: extractelement <2 x i64>
139// CHECK-BE: icmp eq i64 {{.*}}, 64
140// CHECK-BE: extractelement <2 x i64>
141// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000142// CHECK-BE: lshr i64 {{.*}}, 3
143// CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
144// CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
145// CHECK: or <16 x i8>
146// CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
147// CHECK: or <16 x i8>
148// CHECK: @llvm.cttz.v2i64(<2 x i64>
149// CHECK: extractelement <2 x i64>
150// CHECK: icmp eq i64 {{.*}}, 64
151// CHECK: extractelement <2 x i64>
152// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000153// CHECK: lshr i64 {{.*}}, 3
154 return vec_first_match_or_eos_index (vsca, vscb);
155}
156unsigned test8(void) {
157// CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
158// CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
159// CHECK-BE: or <16 x i8>
160// CHECK-BE: @llvm.ppc.altivec.vcmpequb(<16 x i8>
161// CHECK-BE: or <16 x i8>
162// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
163// CHECK-BE: extractelement <2 x i64>
164// CHECK-BE: icmp eq i64 {{.*}}, 64
165// CHECK-BE: extractelement <2 x i64>
166// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000167// CHECK-BE: lshr i64 {{.*}}, 3
168// CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
169// CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
170// CHECK: or <16 x i8>
171// CHECK: @llvm.ppc.altivec.vcmpequb(<16 x i8>
172// CHECK: or <16 x i8>
173// CHECK: @llvm.cttz.v2i64(<2 x i64>
174// CHECK: extractelement <2 x i64>
175// CHECK: icmp eq i64 {{.*}}, 64
176// CHECK: extractelement <2 x i64>
177// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000178// CHECK: lshr i64 {{.*}}, 3
179 return vec_first_match_or_eos_index (vuca, vucb);
180}
181unsigned test9(void) {
182// CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
183// CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
184// CHECK-BE: or <4 x i32>
185// CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
186// CHECK-BE: or <4 x i32>
187// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
188// CHECK-BE: extractelement <2 x i64>
189// CHECK-BE: icmp eq i64 {{.*}}, 64
190// CHECK-BE: extractelement <2 x i64>
191// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000192// CHECK-BE: lshr i64 {{.*}}, 5
193// CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
194// CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
195// CHECK: or <4 x i32>
196// CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
197// CHECK: or <4 x i32>
198// CHECK: @llvm.cttz.v2i64(<2 x i64>
199// CHECK: extractelement <2 x i64>
200// CHECK: icmp eq i64 {{.*}}, 64
201// CHECK: extractelement <2 x i64>
202// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000203// CHECK: lshr i64 {{.*}}, 5
204 return vec_first_match_or_eos_index (vsia, vsib);
205}
206unsigned test10(void) {
207// CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
208// CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
209// CHECK-BE: or <4 x i32>
210// CHECK-BE: @llvm.ppc.altivec.vcmpequw(<4 x i32>
211// CHECK-BE: or <4 x i32>
212// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
213// CHECK-BE: extractelement <2 x i64>
214// CHECK-BE: icmp eq i64 {{.*}}, 64
215// CHECK-BE: extractelement <2 x i64>
216// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000217// CHECK-BE: lshr i64 {{.*}}, 5
218// CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
219// CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
220// CHECK: or <4 x i32>
221// CHECK: @llvm.ppc.altivec.vcmpequw(<4 x i32>
222// CHECK: or <4 x i32>
223// CHECK: @llvm.cttz.v2i64(<2 x i64>
224// CHECK: extractelement <2 x i64>
225// CHECK: icmp eq i64 {{.*}}, 64
226// CHECK: extractelement <2 x i64>
227// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000228// CHECK: lshr i64 {{.*}}, 5
229 return vec_first_match_or_eos_index (vuia, vuib);
230}
231unsigned test11(void) {
232// CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
233// CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
234// CHECK-BE: or <8 x i16>
235// CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
236// CHECK-BE: or <8 x i16>
237// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
238// CHECK-BE: extractelement <2 x i64>
239// CHECK-BE: icmp eq i64 {{.*}}, 64
240// CHECK-BE: extractelement <2 x i64>
241// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000242// CHECK-BE: lshr i64 {{.*}}, 4
243// CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
244// CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
245// CHECK: or <8 x i16>
246// CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
247// CHECK: or <8 x i16>
248// CHECK: @llvm.cttz.v2i64(<2 x i64>
249// CHECK: extractelement <2 x i64>
250// CHECK: icmp eq i64 {{.*}}, 64
251// CHECK: extractelement <2 x i64>
252// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000253// CHECK: lshr i64 {{.*}}, 4
254 return vec_first_match_or_eos_index (vssa, vssb);
255}
256unsigned test12(void) {
257// CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
258// CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
259// CHECK-BE: or <8 x i16>
260// CHECK-BE: @llvm.ppc.altivec.vcmpequh(<8 x i16>
261// CHECK-BE: or <8 x i16>
262// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
263// CHECK-BE: extractelement <2 x i64>
264// CHECK-BE: icmp eq i64 {{.*}}, 64
265// CHECK-BE: extractelement <2 x i64>
266// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000267// CHECK-BE: lshr i64 {{.*}}, 4
268// CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
269// CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
270// CHECK: or <8 x i16>
271// CHECK: @llvm.ppc.altivec.vcmpequh(<8 x i16>
272// CHECK: or <8 x i16>
273// CHECK: @llvm.cttz.v2i64(<2 x i64>
274// CHECK: extractelement <2 x i64>
275// CHECK: icmp eq i64 {{.*}}, 64
276// CHECK: extractelement <2 x i64>
277// CHECK: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000278// CHECK: lshr i64 {{.*}}, 4
279 return vec_first_match_or_eos_index (vusa, vusb);
280}
281unsigned test13(void) {
282// CHECK-BE: @llvm.ppc.altivec.vcmpneb(<16 x i8>
283// CHECK-BE: @llvm.ctlz.v2i64(<2 x i64>
284// CHECK-BE: extractelement <2 x i64>
285// CHECK-BE: icmp eq i64 {{.*}}, 64
286// CHECK-BE: extractelement <2 x i64>
287// CHECK-BE: add i64 {{.*}}, 64
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000288// CHECK-BE: lshr i64 {{.*}}, 3
289// CHECK: @llvm.ppc.altivec.vcmpneb(<16 x i8>
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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000295// CHECK: lshr i64 {{.*}}, 3
296 return vec_first_mismatch_index (vsca, vscb);
297}
298unsigned test14(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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000305// 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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000312// CHECK: lshr i64 {{.*}}, 3
313 return vec_first_mismatch_index (vuca, vucb);
314}
315unsigned test15(void) {
316// CHECK-BE: @llvm.ppc.altivec.vcmpnew(<4 x i32>
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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000322// CHECK-BE: lshr i64 {{.*}}, 5
323// CHECK: @llvm.ppc.altivec.vcmpnew(<4 x i32>
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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000329// CHECK: lshr i64 {{.*}}, 5
330 return vec_first_mismatch_index (vsia, vsib);
331}
332unsigned test16(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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000339// 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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000346// CHECK: lshr i64 {{.*}}, 5
347 return vec_first_mismatch_index (vuia, vuib);
348}
349unsigned test17(void) {
350// CHECK-BE: @llvm.ppc.altivec.vcmpneh(<8 x i16>
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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000356// CHECK-BE: lshr i64 {{.*}}, 4
357// CHECK: @llvm.ppc.altivec.vcmpneh(<8 x i16>
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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000363// CHECK: lshr i64 {{.*}}, 4
364 return vec_first_mismatch_index (vssa, vssb);
365}
366unsigned test18(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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000373// 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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000380// CHECK: lshr i64 {{.*}}, 4
381 return vec_first_mismatch_index (vusa, vusb);
382}
383unsigned test19(void) {
384// CHECK-BE: @llvm.ppc.altivec.vcmpnezb(<16 x i8>
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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000390// CHECK-BE: lshr i64 {{.*}}, 3
391// CHECK: @llvm.ppc.altivec.vcmpnezb(<16 x i8>
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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000397// CHECK: lshr i64 {{.*}}, 3
398 return vec_first_mismatch_or_eos_index (vsca, vscb);
399}
400unsigned test20(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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000407// 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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000414// CHECK: lshr i64 {{.*}}, 3
415 return vec_first_mismatch_or_eos_index (vuca, vucb);
416}
417unsigned test21(void) {
418// CHECK-BE: @llvm.ppc.altivec.vcmpnezw(<4 x i32>
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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000424// CHECK-BE: lshr i64 {{.*}}, 5
425// CHECK: @llvm.ppc.altivec.vcmpnezw(<4 x i32>
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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000431// CHECK: lshr i64 {{.*}}, 5
432 return vec_first_mismatch_or_eos_index (vsia, vsib);
433}
434unsigned test22(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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000441// 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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000448// CHECK: lshr i64 {{.*}}, 5
449 return vec_first_mismatch_or_eos_index (vuia, vuib);
450}
451unsigned test23(void) {
452// CHECK-BE: @llvm.ppc.altivec.vcmpnezh(<8 x i16>
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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000458// CHECK-BE: lshr i64 {{.*}}, 4
459// CHECK: @llvm.ppc.altivec.vcmpnezh(<8 x i16>
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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000465// CHECK: lshr i64 {{.*}}, 4
466 return vec_first_mismatch_or_eos_index (vssa, vssb);
467}
468unsigned test24(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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000475// 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
Nemanja Ivanovic10e2b5d2016-09-27 10:45:22 +0000482// CHECK: lshr i64 {{.*}}, 4
483 return vec_first_mismatch_or_eos_index (vusa, vusb);
484}
485vector bool char test25(void) {
486// CHECK-BE: @llvm.ppc.altivec.vcmpneb(<16 x i8>
487// CHECK-BE-NEXT: ret <16 x i8>
488// CHECK: @llvm.ppc.altivec.vcmpneb(<16 x i8>
489// CHECK-NEXT: ret <16 x i8>
490 return vec_cmpne (vbca, vbcb);
491}
492vector bool char test26(void) {
493// CHECK-BE: @llvm.ppc.altivec.vcmpneb(<16 x i8>
494// CHECK-BE-NEXT: ret <16 x i8>
495// CHECK: @llvm.ppc.altivec.vcmpneb(<16 x i8>
496// CHECK-NEXT: ret <16 x i8>
497 return vec_cmpne (vsca, vscb);
498}
499vector bool char test27(void) {
500// CHECK-BE: @llvm.ppc.altivec.vcmpneb(<16 x i8>
501// CHECK-BE-NEXT: ret <16 x i8>
502// CHECK: @llvm.ppc.altivec.vcmpneb(<16 x i8>
503// CHECK-NEXT: ret <16 x i8>
504 return vec_cmpne (vuca, vucb);
505}
506vector bool int test28(void) {
507// CHECK-BE: @llvm.ppc.altivec.vcmpnew(<4 x i32>
508// CHECK-BE-NEXT: ret <4 x i32>
509// CHECK: @llvm.ppc.altivec.vcmpnew(<4 x i32>
510// CHECK-NEXT: ret <4 x i32>
511 return vec_cmpne (vbia, vbib);
512}
513vector bool int test29(void) {
514// CHECK-BE: @llvm.ppc.altivec.vcmpnew(<4 x i32>
515// CHECK-BE-NEXT: ret <4 x i32>
516// CHECK: @llvm.ppc.altivec.vcmpnew(<4 x i32>
517// CHECK-NEXT: ret <4 x i32>
518 return vec_cmpne (vsia, vsib);
519}
520vector bool int test30(void) {
521// CHECK-BE: @llvm.ppc.altivec.vcmpnew(<4 x i32>
522// CHECK-BE-NEXT: ret <4 x i32>
523// CHECK: @llvm.ppc.altivec.vcmpnew(<4 x i32>
524// CHECK-NEXT: ret <4 x i32>
525 return vec_cmpne (vuia, vuib);
526}
527vector bool long long test31(void) {
528// CHECK-BE: @llvm.ppc.altivec.vcmpequd(<2 x i64>
529// CHECK-BE: xor <2 x i64>
530// CHECK-BE-NEXT: ret <2 x i64>
531// CHECK: @llvm.ppc.altivec.vcmpequd(<2 x i64>
532// CHECK: xor <2 x i64>
533// CHECK-NEXT: ret <2 x i64>
534 return vec_cmpne (vbla, vblb);
535}
536vector bool long long test32(void) {
537// CHECK-BE: @llvm.ppc.altivec.vcmpequd(<2 x i64>
538// CHECK-BE: xor <2 x i64>
539// CHECK-BE-NEXT: ret <2 x i64>
540// CHECK: @llvm.ppc.altivec.vcmpequd(<2 x i64>
541// CHECK: xor <2 x i64>
542// CHECK-NEXT: ret <2 x i64>
543 return vec_cmpne (vsla, vslb);
544}
545vector bool long long test33(void) {
546// CHECK-BE: @llvm.ppc.altivec.vcmpequd(<2 x i64>
547// CHECK-BE: xor <2 x i64>
548// CHECK-BE-NEXT: ret <2 x i64>
549// CHECK: @llvm.ppc.altivec.vcmpequd(<2 x i64>
550// CHECK: xor <2 x i64>
551// CHECK-NEXT: ret <2 x i64>
552 return vec_cmpne (vula, vulb);
553}
554vector bool short test34(void) {
555// CHECK-BE: @llvm.ppc.altivec.vcmpneh(<8 x i16>
556// CHECK-BE-NEXT: ret <8 x i16>
557// CHECK: @llvm.ppc.altivec.vcmpneh(<8 x i16>
558// CHECK-NEXT: ret <8 x i16>
559 return vec_cmpne (vbsa, vbsb);
560}
561vector bool short test35(void) {
562// CHECK-BE: @llvm.ppc.altivec.vcmpneh(<8 x i16>
563// CHECK-BE-NEXT: ret <8 x i16>
564// CHECK: @llvm.ppc.altivec.vcmpneh(<8 x i16>
565// CHECK-NEXT: ret <8 x i16>
566 return vec_cmpne (vssa, vssb);
567}
568vector bool short test36(void) {
569// CHECK-BE: @llvm.ppc.altivec.vcmpneh(<8 x i16>
570// CHECK-BE-NEXT: ret <8 x i16>
571// CHECK: @llvm.ppc.altivec.vcmpneh(<8 x i16>
572// CHECK-NEXT: ret <8 x i16>
573 return vec_cmpne (vusa, vusb);
574}
575vector bool long long test37(void) {
576// CHECK-BE: @llvm.ppc.altivec.vcmpequd(<2 x i64>
577// CHECK-BE: xor <2 x i64>
578// CHECK-BE-NEXT: ret <2 x i64>
579// CHECK: @llvm.ppc.altivec.vcmpequd(<2 x i64>
580// CHECK: xor <2 x i64>
581// CHECK-NEXT: ret <2 x i64>
582 return vec_cmpne (vda, vdb);
583}
584vector bool int test38(void) {
585// CHECK-BE: @llvm.ppc.altivec.vcmpnew(<4 x i32>
586// CHECK-BE-NEXT: ret <4 x i32>
587// CHECK: @llvm.ppc.altivec.vcmpnew(<4 x i32>
588// CHECK-NEXT: ret <4 x i32>
589 return vec_cmpne (vfa, vfb);
590}
591vector signed char test39(void) {
592// CHECK-BE: @llvm.cttz.v16i8(<16 x i8>
593// CHECK-BE-NEXT: ret <16 x i8>
594// CHECK: @llvm.cttz.v16i8(<16 x i8>
595// CHECK-NEXT: ret <16 x i8>
596 return vec_cnttz (vsca);
597}
598vector unsigned char test40(void) {
599// CHECK-BE: @llvm.cttz.v16i8(<16 x i8>
600// CHECK-BE-NEXT: ret <16 x i8>
601// CHECK: @llvm.cttz.v16i8(<16 x i8>
602// CHECK-NEXT: ret <16 x i8>
603 return vec_cnttz (vuca);
604}
605vector signed int test41(void) {
606// CHECK-BE: @llvm.cttz.v4i32(<4 x i32>
607// CHECK-BE-NEXT: ret <4 x i32>
608// CHECK: @llvm.cttz.v4i32(<4 x i32>
609// CHECK-NEXT: ret <4 x i32>
610 return vec_cnttz (vsia);
611}
612vector unsigned int test42(void) {
613// CHECK-BE: @llvm.cttz.v4i32(<4 x i32>
614// CHECK-BE-NEXT: ret <4 x i32>
615// CHECK: @llvm.cttz.v4i32(<4 x i32>
616// CHECK-NEXT: ret <4 x i32>
617 return vec_cnttz (vuia);
618}
619vector signed long long test43(void) {
620// CHECK-BE: @llvm.cttz.v2i64(<2 x i64>
621// CHECK-BE-NEXT: ret <2 x i64>
622// CHECK: @llvm.cttz.v2i64(<2 x i64>
623// CHECK-NEXT: ret <2 x i64>
624 return vec_cnttz (vsla);
625}
626vector unsigned long long test44(void) {
627// CHECK-BE: @llvm.cttz.v2i64(<2 x i64>
628// CHECK-BE-NEXT: ret <2 x i64>
629// CHECK: @llvm.cttz.v2i64(<2 x i64>
630// CHECK-NEXT: ret <2 x i64>
631 return vec_cnttz (vula);
632}
633vector signed short test45(void) {
634// CHECK-BE: @llvm.cttz.v8i16(<8 x i16>
635// CHECK-BE-NEXT: ret <8 x i16>
636// CHECK: @llvm.cttz.v8i16(<8 x i16>
637// CHECK-NEXT: ret <8 x i16>
638 return vec_cnttz (vssa);
639}
640vector unsigned short test46(void) {
641// CHECK-BE: @llvm.cttz.v8i16(<8 x i16>
642// CHECK-BE-NEXT: ret <8 x i16>
643// CHECK: @llvm.cttz.v8i16(<8 x i16>
644// CHECK-NEXT: ret <8 x i16>
645 return vec_cnttz (vusa);
646}
647vector unsigned char test47(void) {
648// CHECK-BE: @llvm.ctpop.v16i8(<16 x i8>
649// CHECK-BE-NEXT: ret <16 x i8>
650// CHECK: @llvm.ctpop.v16i8(<16 x i8>
651// CHECK-NEXT: ret <16 x i8>
652 return vec_popcnt (vsca);
653}
654vector unsigned char test48(void) {
655// CHECK-BE: @llvm.ctpop.v16i8(<16 x i8>
656// CHECK-BE-NEXT: ret <16 x i8>
657// CHECK: @llvm.ctpop.v16i8(<16 x i8>
658// CHECK-NEXT: ret <16 x i8>
659 return vec_popcnt (vuca);
660}
661vector unsigned int test49(void) {
662// CHECK-BE: @llvm.ctpop.v4i32(<4 x i32>
663// CHECK-BE-NEXT: ret <4 x i32>
664// CHECK: @llvm.ctpop.v4i32(<4 x i32>
665// CHECK-NEXT: ret <4 x i32>
666 return vec_popcnt (vsia);
667}
668vector unsigned int test50(void) {
669// CHECK-BE: @llvm.ctpop.v4i32(<4 x i32>
670// CHECK-BE-NEXT: ret <4 x i32>
671// CHECK: @llvm.ctpop.v4i32(<4 x i32>
672// CHECK-NEXT: ret <4 x i32>
673 return vec_popcnt (vuia);
674}
675vector unsigned long long test51(void) {
676// CHECK-BE: @llvm.ctpop.v2i64(<2 x i64>
677// CHECK-BE-NEXT: ret <2 x i64>
678// CHECK: @llvm.ctpop.v2i64(<2 x i64>
679// CHECK-NEXT: ret <2 x i64>
680 return vec_popcnt (vsla);
681}
682vector unsigned long long test52(void) {
683// CHECK-BE: @llvm.ctpop.v2i64(<2 x i64>
684// CHECK-BE-NEXT: ret <2 x i64>
685// CHECK: @llvm.ctpop.v2i64(<2 x i64>
686// CHECK-NEXT: ret <2 x i64>
687 return vec_popcnt (vula);
688}
689vector unsigned short test53(void) {
690// CHECK-BE: @llvm.ctpop.v8i16(<8 x i16>
691// CHECK-BE-NEXT: ret <8 x i16>
692// CHECK: @llvm.ctpop.v8i16(<8 x i16>
693// CHECK-NEXT: ret <8 x i16>
694 return vec_popcnt (vssa);
695}
696vector unsigned short test54(void) {
697// CHECK-BE: @llvm.ctpop.v8i16(<8 x i16>
698// CHECK-BE-NEXT: ret <8 x i16>
699// CHECK: @llvm.ctpop.v8i16(<8 x i16>
700// CHECK-NEXT: ret <8 x i16>
701 return vec_popcnt (vusa);
702}
Nemanja Ivanovic4f69f922016-10-28 19:49:03 +0000703signed int test59(void) {
704// CHECK-BE: @llvm.ppc.altivec.vclzlsbb(<16 x i8>
705// CHECK-BE-NEXT: ret i32
706// CHECK-LE: @llvm.ppc.altivec.vctzlsbb(<16 x i8>
707// CHECK-LE-NEXT: ret i32
708 return vec_cntlz_lsbb (vuca);
709}
710signed int test60(void) {
711// CHECK-BE: @llvm.ppc.altivec.vclzlsbb(<16 x i8>
712// CHECK-BE-NEXT: ret i32
713// CHECK-LE: @llvm.ppc.altivec.vctzlsbb(<16 x i8>
714// CHECK-LE-NEXT: ret i32
715 return vec_cntlz_lsbb (vsca);
716}
717signed int test61(void) {
718// CHECK-BE: @llvm.ppc.altivec.vctzlsbb(<16 x i8>
719// CHECK-BE-NEXT: ret i32
720// CHECK-LE: @llvm.ppc.altivec.vclzlsbb(<16 x i8>
721// CHECK-LE-NEXT: ret i32
722 return vec_cnttz_lsbb (vsca);
723}
724signed int test62(void) {
725// CHECK-BE: @llvm.ppc.altivec.vctzlsbb(<16 x i8>
726// CHECK-BE-NEXT: ret i32
727// CHECK-LE: @llvm.ppc.altivec.vclzlsbb(<16 x i8>
728// CHECK-LE-NEXT: ret i32
729 return vec_cnttz_lsbb (vuca);
730}
731
732vector unsigned int test63(void) {
733// CHECK-BE: @llvm.ppc.altivec.vprtybw(<4 x i32>
734// CHECK-BE-NEXT: ret <4 x i32>
735// CHECK: @llvm.ppc.altivec.vprtybw(<4 x i32>
736// CHECK-NEXT: ret <4 x i32>
737 return vec_parity_lsbb (vuia);
738}
739
740vector unsigned int test64(void) {
741// CHECK-BE: @llvm.ppc.altivec.vprtybw(<4 x i32>
742// CHECK-BE-NEXT: ret <4 x i32>
743// CHECK: @llvm.ppc.altivec.vprtybw(<4 x i32>
744// CHECK-NEXT: ret <4 x i32>
745 return vec_parity_lsbb (vsia);
746}
747
748vector unsigned long long test65(void) {
749// CHECK-BE: @llvm.ppc.altivec.vprtybd(<2 x i64>
750// CHECK-BE-NEXT: ret <2 x i64>
751// CHECK: @llvm.ppc.altivec.vprtybd(<2 x i64>
752// CHECK-NEXT: ret <2 x i64>
753 return vec_parity_lsbb (vula);
754}
755
756vector unsigned long long test66(void) {
757// CHECK-BE: @llvm.ppc.altivec.vprtybd(<2 x i64>
758// CHECK-BE-NEXT: ret <2 x i64>
759// CHECK: @llvm.ppc.altivec.vprtybd(<2 x i64>
760// CHECK-NEXT: ret <2 x i64>
761 return vec_parity_lsbb (vsla);
762}
763vector unsigned __int128 test67(void) {
764// CHECK-BE: @llvm.ppc.altivec.vprtybq(<1 x i128>
765// CHECK-BE-NEXT: ret <1 x i128>
766// CHECK: @llvm.ppc.altivec.vprtybq(<1 x i128>
767// CHECK-NEXT: ret <1 x i128>
768 return vec_parity_lsbb (vui128a);
769}
770
771vector unsigned __int128 test68(void) {
772// CHECK-BE: @llvm.ppc.altivec.vprtybq(<1 x i128>
773// CHECK-BE-NEXT: ret <1 x i128>
774// CHECK: @llvm.ppc.altivec.vprtybq(<1 x i128>
775// CHECK-NEXT: ret <1 x i128>
776 return vec_parity_lsbb (vsi128a);
777}
Nemanja Ivanovic3de0a382016-10-26 19:27:11 +0000778vector double test55(void) {
779// CHECK-BE: @llvm.ppc.vsx.xviexpdp(<2 x i64> %{{.+}}, <2 x i64>
780// CHECK-BE-NEXT: ret <2 x double>
781// CHECK: @llvm.ppc.vsx.xviexpdp(<2 x i64> %{{.+}}, <2 x i64>
782// CHECK-NEXT: ret <2 x double>
783 return vec_insert_exp (vda,vulb);
784}
785vector double test56(void) {
786// CHECK-BE: @llvm.ppc.vsx.xviexpdp(<2 x i64> %{{.+}}, <2 x i64>
787// CHECK-BE-NEXT: ret <2 x double>
788// CHECK: @llvm.ppc.vsx.xviexpdp(<2 x i64> %{{.+}}, <2 x i64>
789// CHECK-NEXT: ret <2 x double>
790 return vec_insert_exp (vula, vulb);
791}
792vector float test57(void) {
793// CHECK-BE: @llvm.ppc.vsx.xviexpsp(<4 x i32> %{{.+}}, <4 x i32>
794// CHECK-BE-NEXT: ret <4 x float>
795// CHECK: @llvm.ppc.vsx.xviexpsp(<4 x i32> %{{.+}}, <4 x i32>
796// CHECK-NEXT: ret <4 x float>
797 return vec_insert_exp (vfa,vuib);
798}
799vector float test58(void) {
800// CHECK-BE: @llvm.ppc.vsx.xviexpsp(<4 x i32> %{{.+}}, <4 x i32>
801// CHECK-BE-NEXT: ret <4 x float>
802// CHECK: @llvm.ppc.vsx.xviexpsp(<4 x i32> %{{.+}}, <4 x i32>
803// CHECK-NEXT: ret <4 x float>
804 return vec_insert_exp (vuia,vuib);
805}