Clang Project

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