blob: a805352ad3b933fa36a7d01cc89bb2199f17bff9 [file] [log] [blame]
Simon Pilgrim6c38e712017-03-15 20:20:43 +00001// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +xop -emit-llvm -o - -Wall -Werror | FileCheck %s
2// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +xop -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s
3
4
5#include <x86intrin.h>
6
7// _MM_PCOMCTRL_LT
8
9__m128i test_mm_comlt_epu8(__m128i a, __m128i b) {
10 // CHECK-LABEL: test_mm_comlt_epu8
11 // CHECK: call <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i8 0)
12 return _mm_comlt_epu8(a, b);
13}
14
15__m128i test_mm_comlt_epu16(__m128i a, __m128i b) {
16 // CHECK-LABEL: test_mm_comlt_epu16
17 // CHECK: call <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, i8 0)
18 return _mm_comlt_epu16(a, b);
19}
20
21__m128i test_mm_comlt_epu32(__m128i a, __m128i b) {
22 // CHECK-LABEL: test_mm_comlt_epu32
23 // CHECK: call <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, i8 0)
24 return _mm_comlt_epu32(a, b);
25}
26
27__m128i test_mm_comlt_epu64(__m128i a, __m128i b) {
28 // CHECK-LABEL: test_mm_comlt_epu64
29 // CHECK: call <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i8 0)
30 return _mm_comlt_epu64(a, b);
31}
32
33__m128i test_mm_comlt_epi8(__m128i a, __m128i b) {
34 // CHECK-LABEL: test_mm_comlt_epi8
35 // CHECK: call <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i8 0)
36 return _mm_comlt_epi8(a, b);
37}
38
39__m128i test_mm_comlt_epi16(__m128i a, __m128i b) {
40 // CHECK-LABEL: test_mm_comlt_epi16
41 // CHECK: call <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, i8 0)
42 return _mm_comlt_epi16(a, b);
43}
44
45__m128i test_mm_comlt_epi32(__m128i a, __m128i b) {
46 // CHECK-LABEL: test_mm_comlt_epi32
47 // CHECK: call <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, i8 0)
48 return _mm_comlt_epi32(a, b);
49}
50
51__m128i test_mm_comlt_epi64(__m128i a, __m128i b) {
52 // CHECK-LABEL: test_mm_comlt_epi64
53 // CHECK: call <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i8 0)
54 return _mm_comlt_epi64(a, b);
55}
56
57// _MM_PCOMCTRL_LE
58
59__m128i test_mm_comle_epu8(__m128i a, __m128i b) {
60 // CHECK-LABEL: test_mm_comle_epu8
61 // CHECK: call <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i8 1)
62 return _mm_comle_epu8(a, b);
63}
64
65__m128i test_mm_comle_epu16(__m128i a, __m128i b) {
66 // CHECK-LABEL: test_mm_comle_epu16
67 // CHECK: call <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, i8 1)
68 return _mm_comle_epu16(a, b);
69}
70
71__m128i test_mm_comle_epu32(__m128i a, __m128i b) {
72 // CHECK-LABEL: test_mm_comle_epu32
73 // CHECK: call <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, i8 1)
74 return _mm_comle_epu32(a, b);
75}
76
77__m128i test_mm_comle_epu64(__m128i a, __m128i b) {
78 // CHECK-LABEL: test_mm_comle_epu64
79 // CHECK: call <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i8 1)
80 return _mm_comle_epu64(a, b);
81}
82
83__m128i test_mm_comle_epi8(__m128i a, __m128i b) {
84 // CHECK-LABEL: test_mm_comle_epi8
85 // CHECK: call <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i8 1)
86 return _mm_comle_epi8(a, b);
87}
88
89__m128i test_mm_comle_epi16(__m128i a, __m128i b) {
90 // CHECK-LABEL: test_mm_comle_epi16
91 // CHECK: call <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, i8 1)
92 return _mm_comle_epi16(a, b);
93}
94
95__m128i test_mm_comle_epi32(__m128i a, __m128i b) {
96 // CHECK-LABEL: test_mm_comle_epi32
97 // CHECK: call <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, i8 1)
98 return _mm_comle_epi32(a, b);
99}
100
101__m128i test_mm_comle_epi64(__m128i a, __m128i b) {
102 // CHECK-LABEL: test_mm_comle_epi64
103 // CHECK: call <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i8 1)
104 return _mm_comle_epi64(a, b);
105}
106
107// _MM_PCOMCTRL_GT
108
109__m128i test_mm_comgt_epu8(__m128i a, __m128i b) {
110 // CHECK-LABEL: test_mm_comgt_epu8
111 // CHECK: call <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i8 2)
112 return _mm_comgt_epu8(a, b);
113}
114
115__m128i test_mm_comgt_epu16(__m128i a, __m128i b) {
116 // CHECK-LABEL: test_mm_comgt_epu16
117 // CHECK: call <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, i8 2)
118 return _mm_comgt_epu16(a, b);
119}
120
121__m128i test_mm_comgt_epu32(__m128i a, __m128i b) {
122 // CHECK-LABEL: test_mm_comgt_epu32
123 // CHECK: call <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, i8 2)
124 return _mm_comgt_epu32(a, b);
125}
126
127__m128i test_mm_comgt_epu64(__m128i a, __m128i b) {
128 // CHECK-LABEL: test_mm_comgt_epu64
129 // CHECK: call <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i8 2)
130 return _mm_comgt_epu64(a, b);
131}
132
133__m128i test_mm_comgt_epi8(__m128i a, __m128i b) {
134 // CHECK-LABEL: test_mm_comgt_epi8
135 // CHECK: call <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i8 2)
136 return _mm_comgt_epi8(a, b);
137}
138
139__m128i test_mm_comgt_epi16(__m128i a, __m128i b) {
140 // CHECK-LABEL: test_mm_comgt_epi16
141 // CHECK: call <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, i8 2)
142 return _mm_comgt_epi16(a, b);
143}
144
145__m128i test_mm_comgt_epi32(__m128i a, __m128i b) {
146 // CHECK-LABEL: test_mm_comgt_epi32
147 // CHECK: call <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, i8 2)
148 return _mm_comgt_epi32(a, b);
149}
150
151__m128i test_mm_comgt_epi64(__m128i a, __m128i b) {
152 // CHECK-LABEL: test_mm_comgt_epi64
153 // CHECK: call <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i8 2)
154 return _mm_comgt_epi64(a, b);
155}
156
157// _MM_PCOMCTRL_GE
158
159__m128i test_mm_comge_epu8(__m128i a, __m128i b) {
160 // CHECK-LABEL: test_mm_comge_epu8
161 // CHECK: call <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i8 3)
162 return _mm_comge_epu8(a, b);
163}
164
165__m128i test_mm_comge_epu16(__m128i a, __m128i b) {
166 // CHECK-LABEL: test_mm_comge_epu16
167 // CHECK: call <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, i8 3)
168 return _mm_comge_epu16(a, b);
169}
170
171__m128i test_mm_comge_epu32(__m128i a, __m128i b) {
172 // CHECK-LABEL: test_mm_comge_epu32
173 // CHECK: call <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, i8 3)
174 return _mm_comge_epu32(a, b);
175}
176
177__m128i test_mm_comge_epu64(__m128i a, __m128i b) {
178 // CHECK-LABEL: test_mm_comge_epu64
179 // CHECK: call <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i8 3)
180 return _mm_comge_epu64(a, b);
181}
182
183__m128i test_mm_comge_epi8(__m128i a, __m128i b) {
184 // CHECK-LABEL: test_mm_comge_epi8
185 // CHECK: call <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i8 3)
186 return _mm_comge_epi8(a, b);
187}
188
189__m128i test_mm_comge_epi16(__m128i a, __m128i b) {
190 // CHECK-LABEL: test_mm_comge_epi16
191 // CHECK: call <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, i8 3)
192 return _mm_comge_epi16(a, b);
193}
194
195__m128i test_mm_comge_epi32(__m128i a, __m128i b) {
196 // CHECK-LABEL: test_mm_comge_epi32
197 // CHECK: call <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, i8 3)
198 return _mm_comge_epi32(a, b);
199}
200
201__m128i test_mm_comge_epi64(__m128i a, __m128i b) {
202 // CHECK-LABEL: test_mm_comge_epi64
203 // CHECK: call <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i8 3)
204 return _mm_comge_epi64(a, b);
205}
206
207// _MM_PCOMCTRL_EQ
208
209__m128i test_mm_comeq_epu8(__m128i a, __m128i b) {
210 // CHECK-LABEL: test_mm_comeq_epu8
211 // CHECK: call <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i8 4)
212 return _mm_comeq_epu8(a, b);
213}
214
215__m128i test_mm_comeq_epu16(__m128i a, __m128i b) {
216 // CHECK-LABEL: test_mm_comeq_epu16
217 // CHECK: call <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, i8 4)
218 return _mm_comeq_epu16(a, b);
219}
220
221__m128i test_mm_comeq_epu32(__m128i a, __m128i b) {
222 // CHECK-LABEL: test_mm_comeq_epu32
223 // CHECK: call <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, i8 4)
224 return _mm_comeq_epu32(a, b);
225}
226
227__m128i test_mm_comeq_epu64(__m128i a, __m128i b) {
228 // CHECK-LABEL: test_mm_comeq_epu64
229 // CHECK: call <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i8 4)
230 return _mm_comeq_epu64(a, b);
231}
232
233__m128i test_mm_comeq_epi8(__m128i a, __m128i b) {
234 // CHECK-LABEL: test_mm_comeq_epi8
235 // CHECK: call <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i8 4)
236 return _mm_comeq_epi8(a, b);
237}
238
239__m128i test_mm_comeq_epi16(__m128i a, __m128i b) {
240 // CHECK-LABEL: test_mm_comeq_epi16
241 // CHECK: call <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, i8 4)
242 return _mm_comeq_epi16(a, b);
243}
244
245__m128i test_mm_comeq_epi32(__m128i a, __m128i b) {
246 // CHECK-LABEL: test_mm_comeq_epi32
247 // CHECK: call <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, i8 4)
248 return _mm_comeq_epi32(a, b);
249}
250
251__m128i test_mm_comeq_epi64(__m128i a, __m128i b) {
252 // CHECK-LABEL: test_mm_comeq_epi64
253 // CHECK: call <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i8 4)
254 return _mm_comeq_epi64(a, b);
255}
256
257// _MM_PCOMCTRL_NEQ
258
259__m128i test_mm_comneq_epu8(__m128i a, __m128i b) {
260 // CHECK-LABEL: test_mm_comneq_epu8
261 // CHECK: call <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i8 5)
262 return _mm_comneq_epu8(a, b);
263}
264
265__m128i test_mm_comneq_epu16(__m128i a, __m128i b) {
266 // CHECK-LABEL: test_mm_comneq_epu16
267 // CHECK: call <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, i8 5)
268 return _mm_comneq_epu16(a, b);
269}
270
271__m128i test_mm_comneq_epu32(__m128i a, __m128i b) {
272 // CHECK-LABEL: test_mm_comneq_epu32
273 // CHECK: call <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, i8 5)
274 return _mm_comneq_epu32(a, b);
275}
276
277__m128i test_mm_comneq_epu64(__m128i a, __m128i b) {
278 // CHECK-LABEL: test_mm_comneq_epu64
279 // CHECK: call <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i8 5)
280 return _mm_comneq_epu64(a, b);
281}
282
283__m128i test_mm_comneq_epi8(__m128i a, __m128i b) {
284 // CHECK-LABEL: test_mm_comneq_epi8
285 // CHECK: call <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i8 5)
286 return _mm_comneq_epi8(a, b);
287}
288
289__m128i test_mm_comneq_epi16(__m128i a, __m128i b) {
290 // CHECK-LABEL: test_mm_comneq_epi16
291 // CHECK: call <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, i8 5)
292 return _mm_comneq_epi16(a, b);
293}
294
295__m128i test_mm_comneq_epi32(__m128i a, __m128i b) {
296 // CHECK-LABEL: test_mm_comneq_epi32
297 // CHECK: call <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, i8 5)
298 return _mm_comneq_epi32(a, b);
299}
300
301__m128i test_mm_comneq_epi64(__m128i a, __m128i b) {
302 // CHECK-LABEL: test_mm_comneq_epi64
303 // CHECK: call <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i8 5)
304 return _mm_comneq_epi64(a, b);
305}
306
307// _MM_PCOMCTRL_FALSE
308
309__m128i test_mm_comfalse_epu8(__m128i a, __m128i b) {
310 // CHECK-LABEL: test_mm_comfalse_epu8
311 // CHECK: call <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i8 6)
312 return _mm_comfalse_epu8(a, b);
313}
314
315__m128i test_mm_comfalse_epu16(__m128i a, __m128i b) {
316 // CHECK-LABEL: test_mm_comfalse_epu16
317 // CHECK: call <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, i8 6)
318 return _mm_comfalse_epu16(a, b);
319}
320
321__m128i test_mm_comfalse_epu32(__m128i a, __m128i b) {
322 // CHECK-LABEL: test_mm_comfalse_epu32
323 // CHECK: call <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, i8 6)
324 return _mm_comfalse_epu32(a, b);
325}
326
327__m128i test_mm_comfalse_epu64(__m128i a, __m128i b) {
328 // CHECK-LABEL: test_mm_comfalse_epu64
329 // CHECK: call <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i8 6)
330 return _mm_comfalse_epu64(a, b);
331}
332
333__m128i test_mm_comfalse_epi8(__m128i a, __m128i b) {
334 // CHECK-LABEL: test_mm_comfalse_epi8
335 // CHECK: call <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i8 6)
336 return _mm_comfalse_epi8(a, b);
337}
338
339__m128i test_mm_comfalse_epi16(__m128i a, __m128i b) {
340 // CHECK-LABEL: test_mm_comfalse_epi16
341 // CHECK: call <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, i8 6)
342 return _mm_comfalse_epi16(a, b);
343}
344
345__m128i test_mm_comfalse_epi32(__m128i a, __m128i b) {
346 // CHECK-LABEL: test_mm_comfalse_epi32
347 // CHECK: call <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, i8 6)
348 return _mm_comfalse_epi32(a, b);
349}
350
351__m128i test_mm_comfalse_epi64(__m128i a, __m128i b) {
352 // CHECK-LABEL: test_mm_comfalse_epi64
353 // CHECK: call <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i8 6)
354 return _mm_comfalse_epi64(a, b);
355}
356
357// _MM_PCOMCTRL_TRUE
358
359__m128i test_mm_comtrue_epu8(__m128i a, __m128i b) {
360 // CHECK-LABEL: test_mm_comtrue_epu8
361 // CHECK: call <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i8 7)
362 return _mm_comtrue_epu8(a, b);
363}
364
365__m128i test_mm_comtrue_epu16(__m128i a, __m128i b) {
366 // CHECK-LABEL: test_mm_comtrue_epu16
367 // CHECK: call <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, i8 7)
368 return _mm_comtrue_epu16(a, b);
369}
370
371__m128i test_mm_comtrue_epu32(__m128i a, __m128i b) {
372 // CHECK-LABEL: test_mm_comtrue_epu32
373 // CHECK: call <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, i8 7)
374 return _mm_comtrue_epu32(a, b);
375}
376
377__m128i test_mm_comtrue_epu64(__m128i a, __m128i b) {
378 // CHECK-LABEL: test_mm_comtrue_epu64
379 // CHECK: call <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i8 7)
380 return _mm_comtrue_epu64(a, b);
381}
382
383__m128i test_mm_comtrue_epi8(__m128i a, __m128i b) {
384 // CHECK-LABEL: test_mm_comtrue_epi8
385 // CHECK: call <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i8 7)
386 return _mm_comtrue_epi8(a, b);
387}
388
389__m128i test_mm_comtrue_epi16(__m128i a, __m128i b) {
390 // CHECK-LABEL: test_mm_comtrue_epi16
391 // CHECK: call <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, i8 7)
392 return _mm_comtrue_epi16(a, b);
393}
394
395__m128i test_mm_comtrue_epi32(__m128i a, __m128i b) {
396 // CHECK-LABEL: test_mm_comtrue_epi32
397 // CHECK: call <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, i8 7)
398 return _mm_comtrue_epi32(a, b);
399}
400
401__m128i test_mm_comtrue_epi64(__m128i a, __m128i b) {
402 // CHECK-LABEL: test_mm_comtrue_epi64
403 // CHECK: call <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i8 7)
404 return _mm_comtrue_epi64(a, b);
405}