1 // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +xop -emit-llvm -o - -Wall -Werror | FileCheck %s
2 // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +xop -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s
3 // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +xop -emit-llvm -o - -Wall -Werror | FileCheck %s
4 // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +xop -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s
11 __m128i
test_mm_comlt_epu8(__m128i a
, __m128i b
) {
12 // CHECK-LABEL: test_mm_comlt_epu8
13 // CHECK: icmp ult <16 x i8> %{{.*}}, %{{.*}}
14 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>
15 return _mm_comlt_epu8(a
, b
);
18 __m128i
test_mm_comlt_epu16(__m128i a
, __m128i b
) {
19 // CHECK-LABEL: test_mm_comlt_epu16
20 // CHECK: icmp ult <8 x i16> %{{.*}}, %{{.*}}
21 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>
22 return _mm_comlt_epu16(a
, b
);
25 __m128i
test_mm_comlt_epu32(__m128i a
, __m128i b
) {
26 // CHECK-LABEL: test_mm_comlt_epu32
27 // CHECK: icmp ult <4 x i32> %{{.*}}, %{{.*}}
28 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>
29 return _mm_comlt_epu32(a
, b
);
32 __m128i
test_mm_comlt_epu64(__m128i a
, __m128i b
) {
33 // CHECK-LABEL: test_mm_comlt_epu64
34 // CHECK: icmp ult <2 x i64> %{{.*}}, %{{.*}}
35 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>
36 return _mm_comlt_epu64(a
, b
);
39 __m128i
test_mm_comlt_epi8(__m128i a
, __m128i b
) {
40 // CHECK-LABEL: test_mm_comlt_epi8
41 // CHECK: icmp slt <16 x i8> %{{.*}}, %{{.*}}
42 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>
43 return _mm_comlt_epi8(a
, b
);
46 __m128i
test_mm_comlt_epi16(__m128i a
, __m128i b
) {
47 // CHECK-LABEL: test_mm_comlt_epi16
48 // CHECK: icmp slt <8 x i16> %{{.*}}, %{{.*}}
49 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>
50 return _mm_comlt_epi16(a
, b
);
53 __m128i
test_mm_comlt_epi32(__m128i a
, __m128i b
) {
54 // CHECK-LABEL: test_mm_comlt_epi32
55 // CHECK: icmp slt <4 x i32> %{{.*}}, %{{.*}}
56 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>
57 return _mm_comlt_epi32(a
, b
);
60 __m128i
test_mm_comlt_epi64(__m128i a
, __m128i b
) {
61 // CHECK-LABEL: test_mm_comlt_epi64
62 // CHECK: icmp slt <2 x i64> %{{.*}}, %{{.*}}
63 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>
64 return _mm_comlt_epi64(a
, b
);
69 __m128i
test_mm_comle_epu8(__m128i a
, __m128i b
) {
70 // CHECK-LABEL: test_mm_comle_epu8
71 // CHECK: icmp ule <16 x i8> %{{.*}}, %{{.*}}
72 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>
73 return _mm_comle_epu8(a
, b
);
76 __m128i
test_mm_comle_epu16(__m128i a
, __m128i b
) {
77 // CHECK-LABEL: test_mm_comle_epu16
78 // CHECK: icmp ule <8 x i16> %{{.*}}, %{{.*}}
79 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>
80 return _mm_comle_epu16(a
, b
);
83 __m128i
test_mm_comle_epu32(__m128i a
, __m128i b
) {
84 // CHECK-LABEL: test_mm_comle_epu32
85 // CHECK: icmp ule <4 x i32> %{{.*}}, %{{.*}}
86 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>
87 return _mm_comle_epu32(a
, b
);
90 __m128i
test_mm_comle_epu64(__m128i a
, __m128i b
) {
91 // CHECK-LABEL: test_mm_comle_epu64
92 // CHECK: icmp ule <2 x i64> %{{.*}}, %{{.*}}
93 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>
94 return _mm_comle_epu64(a
, b
);
97 __m128i
test_mm_comle_epi8(__m128i a
, __m128i b
) {
98 // CHECK-LABEL: test_mm_comle_epi8
99 // CHECK: icmp sle <16 x i8> %{{.*}}, %{{.*}}
100 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>
101 return _mm_comle_epi8(a
, b
);
104 __m128i
test_mm_comle_epi16(__m128i a
, __m128i b
) {
105 // CHECK-LABEL: test_mm_comle_epi16
106 // CHECK: icmp sle <8 x i16> %{{.*}}, %{{.*}}
107 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>
108 return _mm_comle_epi16(a
, b
);
111 __m128i
test_mm_comle_epi32(__m128i a
, __m128i b
) {
112 // CHECK-LABEL: test_mm_comle_epi32
113 // CHECK: icmp sle <4 x i32> %{{.*}}, %{{.*}}
114 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>
115 return _mm_comle_epi32(a
, b
);
118 __m128i
test_mm_comle_epi64(__m128i a
, __m128i b
) {
119 // CHECK-LABEL: test_mm_comle_epi64
120 // CHECK: icmp sle <2 x i64> %{{.*}}, %{{.*}}
121 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>
122 return _mm_comle_epi64(a
, b
);
127 __m128i
test_mm_comgt_epu8(__m128i a
, __m128i b
) {
128 // CHECK-LABEL: test_mm_comgt_epu8
129 // CHECK: icmp ugt <16 x i8> %{{.*}}, %{{.*}}
130 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>
131 return _mm_comgt_epu8(a
, b
);
134 __m128i
test_mm_comgt_epu16(__m128i a
, __m128i b
) {
135 // CHECK-LABEL: test_mm_comgt_epu16
136 // CHECK: icmp ugt <8 x i16> %{{.*}}, %{{.*}}
137 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>
138 return _mm_comgt_epu16(a
, b
);
141 __m128i
test_mm_comgt_epu32(__m128i a
, __m128i b
) {
142 // CHECK-LABEL: test_mm_comgt_epu32
143 // CHECK: icmp ugt <4 x i32> %{{.*}}, %{{.*}}
144 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>
145 return _mm_comgt_epu32(a
, b
);
148 __m128i
test_mm_comgt_epu64(__m128i a
, __m128i b
) {
149 // CHECK-LABEL: test_mm_comgt_epu64
150 // CHECK: icmp ugt <2 x i64> %{{.*}}, %{{.*}}
151 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>
152 return _mm_comgt_epu64(a
, b
);
155 __m128i
test_mm_comgt_epi8(__m128i a
, __m128i b
) {
156 // CHECK-LABEL: test_mm_comgt_epi8
157 // CHECK: icmp sgt <16 x i8> %{{.*}}, %{{.*}}
158 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>
159 return _mm_comgt_epi8(a
, b
);
162 __m128i
test_mm_comgt_epi16(__m128i a
, __m128i b
) {
163 // CHECK-LABEL: test_mm_comgt_epi16
164 // CHECK: icmp sgt <8 x i16> %{{.*}}, %{{.*}}
165 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>
166 return _mm_comgt_epi16(a
, b
);
169 __m128i
test_mm_comgt_epi32(__m128i a
, __m128i b
) {
170 // CHECK-LABEL: test_mm_comgt_epi32
171 // CHECK: icmp sgt <4 x i32> %{{.*}}, %{{.*}}
172 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>
173 return _mm_comgt_epi32(a
, b
);
176 __m128i
test_mm_comgt_epi64(__m128i a
, __m128i b
) {
177 // CHECK-LABEL: test_mm_comgt_epi64
178 // CHECK: icmp sgt <2 x i64> %{{.*}}, %{{.*}}
179 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>
180 return _mm_comgt_epi64(a
, b
);
185 __m128i
test_mm_comge_epu8(__m128i a
, __m128i b
) {
186 // CHECK-LABEL: test_mm_comge_epu8
187 // CHECK: icmp uge <16 x i8> %{{.*}}, %{{.*}}
188 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>
189 return _mm_comge_epu8(a
, b
);
192 __m128i
test_mm_comge_epu16(__m128i a
, __m128i b
) {
193 // CHECK-LABEL: test_mm_comge_epu16
194 // CHECK: icmp uge <8 x i16> %{{.*}}, %{{.*}}
195 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>
196 return _mm_comge_epu16(a
, b
);
199 __m128i
test_mm_comge_epu32(__m128i a
, __m128i b
) {
200 // CHECK-LABEL: test_mm_comge_epu32
201 // CHECK: icmp uge <4 x i32> %{{.*}}, %{{.*}}
202 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>
203 return _mm_comge_epu32(a
, b
);
206 __m128i
test_mm_comge_epu64(__m128i a
, __m128i b
) {
207 // CHECK-LABEL: test_mm_comge_epu64
208 // CHECK: icmp uge <2 x i64> %{{.*}}, %{{.*}}
209 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>
210 return _mm_comge_epu64(a
, b
);
213 __m128i
test_mm_comge_epi8(__m128i a
, __m128i b
) {
214 // CHECK-LABEL: test_mm_comge_epi8
215 // CHECK: icmp sge <16 x i8> %{{.*}}, %{{.*}}
216 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>
217 return _mm_comge_epi8(a
, b
);
220 __m128i
test_mm_comge_epi16(__m128i a
, __m128i b
) {
221 // CHECK-LABEL: test_mm_comge_epi16
222 // CHECK: icmp sge <8 x i16> %{{.*}}, %{{.*}}
223 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>
224 return _mm_comge_epi16(a
, b
);
227 __m128i
test_mm_comge_epi32(__m128i a
, __m128i b
) {
228 // CHECK-LABEL: test_mm_comge_epi32
229 // CHECK: icmp sge <4 x i32> %{{.*}}, %{{.*}}
230 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>
231 return _mm_comge_epi32(a
, b
);
234 __m128i
test_mm_comge_epi64(__m128i a
, __m128i b
) {
235 // CHECK-LABEL: test_mm_comge_epi64
236 // CHECK: icmp sge <2 x i64> %{{.*}}, %{{.*}}
237 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>
238 return _mm_comge_epi64(a
, b
);
243 __m128i
test_mm_comeq_epu8(__m128i a
, __m128i b
) {
244 // CHECK-LABEL: test_mm_comeq_epu8
245 // CHECK: icmp eq <16 x i8> %{{.*}}, %{{.*}}
246 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>
247 return _mm_comeq_epu8(a
, b
);
250 __m128i
test_mm_comeq_epu16(__m128i a
, __m128i b
) {
251 // CHECK-LABEL: test_mm_comeq_epu16
252 // CHECK: icmp eq <8 x i16> %{{.*}}, %{{.*}}
253 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>
254 return _mm_comeq_epu16(a
, b
);
257 __m128i
test_mm_comeq_epu32(__m128i a
, __m128i b
) {
258 // CHECK-LABEL: test_mm_comeq_epu32
259 // CHECK: icmp eq <4 x i32> %{{.*}}, %{{.*}}
260 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>
261 return _mm_comeq_epu32(a
, b
);
264 __m128i
test_mm_comeq_epu64(__m128i a
, __m128i b
) {
265 // CHECK-LABEL: test_mm_comeq_epu64
266 // CHECK: icmp eq <2 x i64> %{{.*}}, %{{.*}}
267 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>
268 return _mm_comeq_epu64(a
, b
);
271 __m128i
test_mm_comeq_epi8(__m128i a
, __m128i b
) {
272 // CHECK-LABEL: test_mm_comeq_epi8
273 // CHECK: icmp eq <16 x i8> %{{.*}}, %{{.*}}
274 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>
275 return _mm_comeq_epi8(a
, b
);
278 __m128i
test_mm_comeq_epi16(__m128i a
, __m128i b
) {
279 // CHECK-LABEL: test_mm_comeq_epi16
280 // CHECK: icmp eq <8 x i16> %{{.*}}, %{{.*}}
281 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>
282 return _mm_comeq_epi16(a
, b
);
285 __m128i
test_mm_comeq_epi32(__m128i a
, __m128i b
) {
286 // CHECK-LABEL: test_mm_comeq_epi32
287 // CHECK: icmp eq <4 x i32> %{{.*}}, %{{.*}}
288 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>
289 return _mm_comeq_epi32(a
, b
);
292 __m128i
test_mm_comeq_epi64(__m128i a
, __m128i b
) {
293 // CHECK-LABEL: test_mm_comeq_epi64
294 // CHECK: icmp eq <2 x i64> %{{.*}}, %{{.*}}
295 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>
296 return _mm_comeq_epi64(a
, b
);
301 __m128i
test_mm_comneq_epu8(__m128i a
, __m128i b
) {
302 // CHECK-LABEL: test_mm_comneq_epu8
303 // CHECK: icmp ne <16 x i8> %{{.*}}, %{{.*}}
304 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>
305 return _mm_comneq_epu8(a
, b
);
308 __m128i
test_mm_comneq_epu16(__m128i a
, __m128i b
) {
309 // CHECK-LABEL: test_mm_comneq_epu16
310 // CHECK: icmp ne <8 x i16> %{{.*}}, %{{.*}}
311 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>
312 return _mm_comneq_epu16(a
, b
);
315 __m128i
test_mm_comneq_epu32(__m128i a
, __m128i b
) {
316 // CHECK-LABEL: test_mm_comneq_epu32
317 // CHECK: icmp ne <4 x i32> %{{.*}}, %{{.*}}
318 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>
319 return _mm_comneq_epu32(a
, b
);
322 __m128i
test_mm_comneq_epu64(__m128i a
, __m128i b
) {
323 // CHECK-LABEL: test_mm_comneq_epu64
324 // CHECK: icmp ne <2 x i64> %{{.*}}, %{{.*}}
325 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>
326 return _mm_comneq_epu64(a
, b
);
329 __m128i
test_mm_comneq_epi8(__m128i a
, __m128i b
) {
330 // CHECK-LABEL: test_mm_comneq_epi8
331 // CHECK: icmp ne <16 x i8> %{{.*}}, %{{.*}}
332 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>
333 return _mm_comneq_epi8(a
, b
);
336 __m128i
test_mm_comneq_epi16(__m128i a
, __m128i b
) {
337 // CHECK-LABEL: test_mm_comneq_epi16
338 // CHECK: icmp ne <8 x i16> %{{.*}}, %{{.*}}
339 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>
340 return _mm_comneq_epi16(a
, b
);
343 __m128i
test_mm_comneq_epi32(__m128i a
, __m128i b
) {
344 // CHECK-LABEL: test_mm_comneq_epi32
345 // CHECK: icmp ne <4 x i32> %{{.*}}, %{{.*}}
346 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>
347 return _mm_comneq_epi32(a
, b
);
350 __m128i
test_mm_comneq_epi64(__m128i a
, __m128i b
) {
351 // CHECK-LABEL: test_mm_comneq_epi64
352 // CHECK: icmp ne <2 x i64> %{{.*}}, %{{.*}}
353 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>
354 return _mm_comneq_epi64(a
, b
);
357 // _MM_PCOMCTRL_FALSE
359 __m128i
test_mm_comfalse_epu8(__m128i a
, __m128i b
) {
360 // CHECK-LABEL: test_mm_comfalse_epu8
361 // CHECK: ret <2 x i64> zeroinitializer
362 return _mm_comfalse_epu8(a
, b
);
365 __m128i
test_mm_comfalse_epu16(__m128i a
, __m128i b
) {
366 // CHECK-LABEL: test_mm_comfalse_epu16
367 // CHECK: ret <2 x i64> zeroinitializer
368 return _mm_comfalse_epu16(a
, b
);
371 __m128i
test_mm_comfalse_epu32(__m128i a
, __m128i b
) {
372 // CHECK-LABEL: test_mm_comfalse_epu32
373 // CHECK: ret <2 x i64> zeroinitializer
374 return _mm_comfalse_epu32(a
, b
);
377 __m128i
test_mm_comfalse_epu64(__m128i a
, __m128i b
) {
378 // CHECK-LABEL: test_mm_comfalse_epu64
379 // CHECK: ret <2 x i64> zeroinitializer
380 return _mm_comfalse_epu64(a
, b
);
383 __m128i
test_mm_comfalse_epi8(__m128i a
, __m128i b
) {
384 // CHECK-LABEL: test_mm_comfalse_epi8
385 // CHECK: ret <2 x i64> zeroinitializer
386 return _mm_comfalse_epi8(a
, b
);
389 __m128i
test_mm_comfalse_epi16(__m128i a
, __m128i b
) {
390 // CHECK-LABEL: test_mm_comfalse_epi16
391 // CHECK: ret <2 x i64> zeroinitializer
392 return _mm_comfalse_epi16(a
, b
);
395 __m128i
test_mm_comfalse_epi32(__m128i a
, __m128i b
) {
396 // CHECK-LABEL: test_mm_comfalse_epi32
397 // CHECK: ret <2 x i64> zeroinitializer
398 return _mm_comfalse_epi32(a
, b
);
401 __m128i
test_mm_comfalse_epi64(__m128i a
, __m128i b
) {
402 // CHECK-LABEL: test_mm_comfalse_epi64
403 // CHECK: ret <2 x i64> zeroinitializer
404 return _mm_comfalse_epi64(a
, b
);
409 __m128i
test_mm_comtrue_epu8(__m128i a
, __m128i b
) {
410 // CHECK-LABEL: test_mm_comtrue_epu8
411 // CHECK: ret <2 x i64> splat (i64 -1)
412 return _mm_comtrue_epu8(a
, b
);
415 __m128i
test_mm_comtrue_epu16(__m128i a
, __m128i b
) {
416 // CHECK-LABEL: test_mm_comtrue_epu16
417 // CHECK: ret <2 x i64> splat (i64 -1)
418 return _mm_comtrue_epu16(a
, b
);
421 __m128i
test_mm_comtrue_epu32(__m128i a
, __m128i b
) {
422 // CHECK-LABEL: test_mm_comtrue_epu32
423 // CHECK: ret <2 x i64> splat (i64 -1)
424 return _mm_comtrue_epu32(a
, b
);
427 __m128i
test_mm_comtrue_epu64(__m128i a
, __m128i b
) {
428 // CHECK-LABEL: test_mm_comtrue_epu64
429 // CHECK: ret <2 x i64> splat (i64 -1)
430 return _mm_comtrue_epu64(a
, b
);
433 __m128i
test_mm_comtrue_epi8(__m128i a
, __m128i b
) {
434 // CHECK-LABEL: test_mm_comtrue_epi8
435 // CHECK: ret <2 x i64> splat (i64 -1)
436 return _mm_comtrue_epi8(a
, b
);
439 __m128i
test_mm_comtrue_epi16(__m128i a
, __m128i b
) {
440 // CHECK-LABEL: test_mm_comtrue_epi16
441 // CHECK: ret <2 x i64> splat (i64 -1)
442 return _mm_comtrue_epi16(a
, b
);
445 __m128i
test_mm_comtrue_epi32(__m128i a
, __m128i b
) {
446 // CHECK-LABEL: test_mm_comtrue_epi32
447 // CHECK: ret <2 x i64> splat (i64 -1)
448 return _mm_comtrue_epi32(a
, b
);
451 __m128i
test_mm_comtrue_epi64(__m128i a
, __m128i b
) {
452 // CHECK-LABEL: test_mm_comtrue_epi64
453 // CHECK: ret <2 x i64> splat (i64 -1)
454 return _mm_comtrue_epi64(a
, b
);