blob: e01d277be9ffad7b49e0563f4b2ff7517b77e2fc [file] [log] [blame]
Elad Cohenb107a222016-09-28 11:59:09 +00001// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512cd -emit-llvm -o - -Wall -Werror | FileCheck %s
Dimitry Andricb1aa87e2016-01-03 15:55:40 +00002
Dimitry Andricb1aa87e2016-01-03 15:55:40 +00003
4#include <immintrin.h>
5
6__m512i test_mm512_conflict_epi64(__m512i __A) {
7 // CHECK-LABEL: @test_mm512_conflict_epi64
8 // CHECK: @llvm.x86.avx512.mask.conflict.q.512
9 return _mm512_conflict_epi64(__A);
10}
11__m512i test_mm512_mask_conflict_epi64(__m512i __W, __mmask8 __U, __m512i __A) {
12 // CHECK-LABEL: @test_mm512_mask_conflict_epi64
13 // CHECK: @llvm.x86.avx512.mask.conflict.q.512
14 return _mm512_mask_conflict_epi64(__W,__U,__A);
15}
16__m512i test_mm512_maskz_conflict_epi64(__mmask8 __U, __m512i __A) {
17 // CHECK-LABEL: @test_mm512_maskz_conflict_epi64
18 // CHECK: @llvm.x86.avx512.mask.conflict.q.512
19 return _mm512_maskz_conflict_epi64(__U,__A);
20}
21__m512i test_mm512_conflict_epi32(__m512i __A) {
22 // CHECK-LABEL: @test_mm512_conflict_epi32
23 // CHECK: @llvm.x86.avx512.mask.conflict.d.512
24 return _mm512_conflict_epi32(__A);
25}
26__m512i test_mm512_mask_conflict_epi32(__m512i __W, __mmask16 __U, __m512i __A) {
27 // CHECK-LABEL: @test_mm512_mask_conflict_epi32
28 // CHECK: @llvm.x86.avx512.mask.conflict.d.512
29 return _mm512_mask_conflict_epi32(__W,__U,__A);
30}
31__m512i test_mm512_maskz_conflict_epi32(__mmask16 __U, __m512i __A) {
32 // CHECK-LABEL: @test_mm512_maskz_conflict_epi32
33 // CHECK: @llvm.x86.avx512.mask.conflict.d.512
34 return _mm512_maskz_conflict_epi32(__U,__A);
35}
36__m512i test_mm512_lzcnt_epi32(__m512i __A) {
37 // CHECK-LABEL: @test_mm512_lzcnt_epi32
Craig Topper46e75552016-07-06 04:24:29 +000038 // CHECK: call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %{{.*}}, i1 false)
Dimitry Andricb1aa87e2016-01-03 15:55:40 +000039 return _mm512_lzcnt_epi32(__A);
40}
41__m512i test_mm512_mask_lzcnt_epi32(__m512i __W, __mmask16 __U, __m512i __A) {
42 // CHECK-LABEL: @test_mm512_mask_lzcnt_epi32
Craig Topper46e75552016-07-06 04:24:29 +000043 // CHECK: call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %{{.*}}, i1 false)
44 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
Dimitry Andricb1aa87e2016-01-03 15:55:40 +000045 return _mm512_mask_lzcnt_epi32(__W,__U,__A);
46}
47__m512i test_mm512_maskz_lzcnt_epi32(__mmask16 __U, __m512i __A) {
48 // CHECK-LABEL: @test_mm512_maskz_lzcnt_epi32
Craig Topper46e75552016-07-06 04:24:29 +000049 // CHECK: call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %{{.*}}, i1 false)
50 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
Dimitry Andricb1aa87e2016-01-03 15:55:40 +000051 return _mm512_maskz_lzcnt_epi32(__U,__A);
52}
53__m512i test_mm512_lzcnt_epi64(__m512i __A) {
54 // CHECK-LABEL: @test_mm512_lzcnt_epi64
Craig Topper46e75552016-07-06 04:24:29 +000055 // CHECK: call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %{{.*}}, i1 false)
Dimitry Andricb1aa87e2016-01-03 15:55:40 +000056 return _mm512_lzcnt_epi64(__A);
57}
58__m512i test_mm512_mask_lzcnt_epi64(__m512i __W, __mmask8 __U, __m512i __A) {
59 // CHECK-LABEL: @test_mm512_mask_lzcnt_epi64
Craig Topper46e75552016-07-06 04:24:29 +000060 // CHECK: call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %{{.*}}, i1 false)
61 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
Dimitry Andricb1aa87e2016-01-03 15:55:40 +000062 return _mm512_mask_lzcnt_epi64(__W,__U,__A);
63}
64__m512i test_mm512_maskz_lzcnt_epi64(__mmask8 __U, __m512i __A) {
65 // CHECK-LABEL: @test_mm512_maskz_lzcnt_epi64
Craig Topper46e75552016-07-06 04:24:29 +000066 // CHECK: call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %{{.*}}, i1 false)
67 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
Dimitry Andricb1aa87e2016-01-03 15:55:40 +000068 return _mm512_maskz_lzcnt_epi64(__U,__A);
69}
Michael Zuckerman8c2900f2016-04-27 11:43:14 +000070
Jina Nahias48e298b2017-11-06 07:04:12 +000071__m512i test_mm512_broadcastmb_epi64(__m512i a, __m512i b) {
Michael Zuckerman8c2900f2016-04-27 11:43:14 +000072 // CHECK-LABEL: @test_mm512_broadcastmb_epi64
Jina Nahias48e298b2017-11-06 07:04:12 +000073 // CHECK: icmp eq <8 x i64> %{{.*}}, %{{.*}}
74 // CHECK: zext i8 %{{.*}} to i64
75 // CHECK: insertelement <8 x i64> undef, i64 %{{.*}}, i32 0
76 // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 1
77 // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 2
78 // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 3
79 // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 4
80 // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 5
81 // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 6
82 // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 7
83 return _mm512_broadcastmb_epi64(_mm512_cmpeq_epu64_mask ( a, b));
Michael Zuckerman8c2900f2016-04-27 11:43:14 +000084}
85
Jina Nahias48e298b2017-11-06 07:04:12 +000086__m512i test_mm512_broadcastmw_epi32(__m512i a, __m512i b) {
Michael Zuckerman8c2900f2016-04-27 11:43:14 +000087 // CHECK-LABEL: @test_mm512_broadcastmw_epi32
Jina Nahias48e298b2017-11-06 07:04:12 +000088 // CHECK: icmp eq <16 x i32> %{{.*}}, %{{.*}}
89 // CHECK: zext i16 %{{.*}} to i32
90 // CHECK: insertelement <16 x i32> undef, i32 %{{.*}}
91 // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}
92 // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}
93 // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}
94 // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}
95 // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}
96 // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}
97 // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}
98 // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}
99 // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}
100 // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}
101 // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}
102 // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}
103 // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}
104 // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}
105 // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}
106 return _mm512_broadcastmw_epi32(_mm512_cmpeq_epi32_mask ( a, b));
Michael Zuckerman8c2900f2016-04-27 11:43:14 +0000107}