1 // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vl -target-feature +avx512cd -emit-llvm -o - -Wall -Werror | FileCheck %s
2
3
4 #include <immintrin.h>
5
test_mm_broadcastmb_epi64(__m128i a,__m128i b)6 __m128i test_mm_broadcastmb_epi64(__m128i a,__m128i b) {
7 // CHECK-LABEL: @test_mm_broadcastmb_epi64
8 // CHECK: icmp eq <4 x i32> %{{.*}}, %{{.*}}
9 // CHECK: shufflevector <4 x i1> %{{.*}}, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
10 // CHECK: bitcast <8 x i1> %{{.*}} to i8
11 // CHECK: zext i8 %{{.*}} to i64
12 // CHECK: insertelement <2 x i64> undef, i64 %{{.*}}, i32 0
13 // CHECK: insertelement <2 x i64> %{{.*}}, i64 %{{.*}}, i32 1
14 return _mm_broadcastmb_epi64(_mm_cmpeq_epi32_mask (a, b));
15 }
16
test_mm256_broadcastmb_epi64(__m256i a,__m256i b)17 __m256i test_mm256_broadcastmb_epi64(__m256i a, __m256i b) {
18 // CHECK-LABEL: @test_mm256_broadcastmb_epi64
19 // CHECK: icmp eq <4 x i64> %{{.*}}, %{{.*}}
20 // CHECK: shufflevector <4 x i1> %{{.*}}, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
21 // CHECK: bitcast <8 x i1> %{{.*}} to i8
22 // CHECK: zext i8 %{{.*}} to i64
23 // CHECK: insertelement <4 x i64> undef, i64 %{{.*}}, i32 0
24 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 1
25 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 2
26 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 3
27 return _mm256_broadcastmb_epi64(_mm256_cmpeq_epi64_mask ( a, b));
28 }
29
test_mm_broadcastmw_epi32(__m512i a,__m512i b)30 __m128i test_mm_broadcastmw_epi32(__m512i a, __m512i b) {
31 // CHECK-LABEL: @test_mm_broadcastmw_epi32
32 // CHECK: icmp eq <16 x i32> %{{.*}}, %{{.*}}
33 // CHECK: bitcast <16 x i1> %{{.*}} to i16
34 // CHECK: zext i16 %{{.*}} to i32
35 // CHECK: insertelement <4 x i32> undef, i32 %{{.*}}, i32 0
36 // CHECK: insertelement <4 x i32> %{{.*}}, i32 %{{.*}}, i32 1
37 // CHECK: insertelement <4 x i32> %{{.*}}, i32 %{{.*}}, i32 2
38 // CHECK: insertelement <4 x i32> %{{.*}}, i32 %{{.*}}, i32 3
39 return _mm_broadcastmw_epi32(_mm512_cmpeq_epi32_mask ( a, b));
40 }
41
test_mm256_broadcastmw_epi32(__m512i a,__m512i b)42 __m256i test_mm256_broadcastmw_epi32(__m512i a, __m512i b) {
43 // CHECK-LABEL: @test_mm256_broadcastmw_epi32
44 // CHECK: icmp eq <16 x i32> %{{.*}}, %{{.*}}
45 // CHECK: bitcast <16 x i1> %{{.*}} to i16
46 // CHECK: zext i16 %{{.*}} to i32
47 // CHECK: insertelement <8 x i32> undef, i32 %{{.*}}, i32 0
48 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 1
49 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 2
50 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 3
51 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 4
52 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 5
53 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 6
54 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 7
55 return _mm256_broadcastmw_epi32(_mm512_cmpeq_epi32_mask ( a, b));
56 }
57
test_mm_conflict_epi64(__m128i __A)58 __m128i test_mm_conflict_epi64(__m128i __A) {
59 // CHECK-LABEL: @test_mm_conflict_epi64
60 // CHECK: @llvm.x86.avx512.conflict.q.128
61 return _mm_conflict_epi64(__A);
62 }
63
test_mm_mask_conflict_epi64(__m128i __W,__mmask8 __U,__m128i __A)64 __m128i test_mm_mask_conflict_epi64(__m128i __W, __mmask8 __U, __m128i __A) {
65 // CHECK-LABEL: @test_mm_mask_conflict_epi64
66 // CHECK: @llvm.x86.avx512.conflict.q.128
67 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}
68 return _mm_mask_conflict_epi64(__W, __U, __A);
69 }
70
test_mm_maskz_conflict_epi64(__mmask8 __U,__m128i __A)71 __m128i test_mm_maskz_conflict_epi64(__mmask8 __U, __m128i __A) {
72 // CHECK-LABEL: @test_mm_maskz_conflict_epi64
73 // CHECK: @llvm.x86.avx512.conflict.q.128
74 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}
75 return _mm_maskz_conflict_epi64(__U, __A);
76 }
77
test_mm256_conflict_epi64(__m256i __A)78 __m256i test_mm256_conflict_epi64(__m256i __A) {
79 // CHECK-LABEL: @test_mm256_conflict_epi64
80 // CHECK: @llvm.x86.avx512.conflict.q.256
81 return _mm256_conflict_epi64(__A);
82 }
83
test_mm256_mask_conflict_epi64(__m256i __W,__mmask8 __U,__m256i __A)84 __m256i test_mm256_mask_conflict_epi64(__m256i __W, __mmask8 __U, __m256i __A) {
85 // CHECK-LABEL: @test_mm256_mask_conflict_epi64
86 // CHECK: @llvm.x86.avx512.conflict.q.256
87 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
88 return _mm256_mask_conflict_epi64(__W, __U, __A);
89 }
90
test_mm256_maskz_conflict_epi64(__mmask8 __U,__m256i __A)91 __m256i test_mm256_maskz_conflict_epi64(__mmask8 __U, __m256i __A) {
92 // CHECK-LABEL: @test_mm256_maskz_conflict_epi64
93 // CHECK: @llvm.x86.avx512.conflict.q.256
94 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
95 return _mm256_maskz_conflict_epi64(__U, __A);
96 }
97
test_mm_conflict_epi32(__m128i __A)98 __m128i test_mm_conflict_epi32(__m128i __A) {
99 // CHECK-LABEL: @test_mm_conflict_epi32
100 // CHECK: @llvm.x86.avx512.conflict.d.128
101 return _mm_conflict_epi32(__A);
102 }
103
test_mm_mask_conflict_epi32(__m128i __W,__mmask8 __U,__m128i __A)104 __m128i test_mm_mask_conflict_epi32(__m128i __W, __mmask8 __U, __m128i __A) {
105 // CHECK-LABEL: @test_mm_mask_conflict_epi32
106 // CHECK: @llvm.x86.avx512.conflict.d.128
107 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
108 return _mm_mask_conflict_epi32(__W, __U, __A);
109 }
110
test_mm_maskz_conflict_epi32(__mmask8 __U,__m128i __A)111 __m128i test_mm_maskz_conflict_epi32(__mmask8 __U, __m128i __A) {
112 // CHECK-LABEL: @test_mm_maskz_conflict_epi32
113 // CHECK: @llvm.x86.avx512.conflict.d.128
114 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
115 return _mm_maskz_conflict_epi32(__U, __A);
116 }
117
test_mm256_conflict_epi32(__m256i __A)118 __m256i test_mm256_conflict_epi32(__m256i __A) {
119 // CHECK-LABEL: @test_mm256_conflict_epi32
120 // CHECK: @llvm.x86.avx512.conflict.d.256
121 return _mm256_conflict_epi32(__A);
122 }
123
test_mm256_mask_conflict_epi32(__m256i __W,__mmask8 __U,__m256i __A)124 __m256i test_mm256_mask_conflict_epi32(__m256i __W, __mmask8 __U, __m256i __A) {
125 // CHECK-LABEL: @test_mm256_mask_conflict_epi32
126 // CHECK: @llvm.x86.avx512.conflict.d.256
127 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
128 return _mm256_mask_conflict_epi32(__W, __U, __A);
129 }
130
test_mm256_maskz_conflict_epi32(__mmask8 __U,__m256i __A)131 __m256i test_mm256_maskz_conflict_epi32(__mmask8 __U, __m256i __A) {
132 // CHECK-LABEL: @test_mm256_maskz_conflict_epi32
133 // CHECK: @llvm.x86.avx512.conflict.d.256
134 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
135 return _mm256_maskz_conflict_epi32(__U, __A);
136 }
137
test_mm_lzcnt_epi32(__m128i __A)138 __m128i test_mm_lzcnt_epi32(__m128i __A) {
139 // CHECK-LABEL: @test_mm_lzcnt_epi32
140 // CHECK: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.*}}, i1 false)
141 return _mm_lzcnt_epi32(__A);
142 }
143
test_mm_mask_lzcnt_epi32(__m128i __W,__mmask8 __U,__m128i __A)144 __m128i test_mm_mask_lzcnt_epi32(__m128i __W, __mmask8 __U, __m128i __A) {
145 // CHECK-LABEL: @test_mm_mask_lzcnt_epi32
146 // CHECK: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.*}}, i1 false)
147 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
148 return _mm_mask_lzcnt_epi32(__W, __U, __A);
149 }
150
test_mm_maskz_lzcnt_epi32(__mmask8 __U,__m128i __A)151 __m128i test_mm_maskz_lzcnt_epi32(__mmask8 __U, __m128i __A) {
152 // CHECK-LABEL: @test_mm_maskz_lzcnt_epi32
153 // CHECK: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.*}}, i1 false)
154 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
155 return _mm_maskz_lzcnt_epi32(__U, __A);
156 }
157
test_mm256_lzcnt_epi32(__m256i __A)158 __m256i test_mm256_lzcnt_epi32(__m256i __A) {
159 // CHECK-LABEL: @test_mm256_lzcnt_epi32
160 // CHECK: call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %{{.*}}, i1 false)
161 return _mm256_lzcnt_epi32(__A);
162 }
163
test_mm256_mask_lzcnt_epi32(__m256i __W,__mmask8 __U,__m256i __A)164 __m256i test_mm256_mask_lzcnt_epi32(__m256i __W, __mmask8 __U, __m256i __A) {
165 // CHECK-LABEL: @test_mm256_mask_lzcnt_epi32
166 // CHECK: call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %{{.*}}, i1 false)
167 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
168 return _mm256_mask_lzcnt_epi32(__W, __U, __A);
169 }
170
test_mm256_maskz_lzcnt_epi32(__mmask8 __U,__m256i __A)171 __m256i test_mm256_maskz_lzcnt_epi32(__mmask8 __U, __m256i __A) {
172 // CHECK-LABEL: @test_mm256_maskz_lzcnt_epi32
173 // CHECK: call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %{{.*}}, i1 false)
174 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
175 return _mm256_maskz_lzcnt_epi32(__U, __A);
176 }
177
test_mm_lzcnt_epi64(__m128i __A)178 __m128i test_mm_lzcnt_epi64(__m128i __A) {
179 // CHECK-LABEL: @test_mm_lzcnt_epi64
180 // CHECK: call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.*}}, i1 false)
181 return _mm_lzcnt_epi64(__A);
182 }
183
test_mm_mask_lzcnt_epi64(__m128i __W,__mmask8 __U,__m128i __A)184 __m128i test_mm_mask_lzcnt_epi64(__m128i __W, __mmask8 __U, __m128i __A) {
185 // CHECK-LABEL: @test_mm_mask_lzcnt_epi64
186 // CHECK: call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.*}}, i1 false)
187 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}
188 return _mm_mask_lzcnt_epi64(__W, __U, __A);
189 }
190
test_mm_maskz_lzcnt_epi64(__mmask8 __U,__m128i __A)191 __m128i test_mm_maskz_lzcnt_epi64(__mmask8 __U, __m128i __A) {
192 // CHECK-LABEL: @test_mm_maskz_lzcnt_epi64
193 // CHECK: call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.*}}, i1 false)
194 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}
195 return _mm_maskz_lzcnt_epi64(__U, __A);
196 }
197
test_mm256_lzcnt_epi64(__m256i __A)198 __m256i test_mm256_lzcnt_epi64(__m256i __A) {
199 // CHECK-LABEL: @test_mm256_lzcnt_epi64
200 // CHECK: call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %{{.*}}, i1 false)
201 return _mm256_lzcnt_epi64(__A);
202 }
203
test_mm256_mask_lzcnt_epi64(__m256i __W,__mmask8 __U,__m256i __A)204 __m256i test_mm256_mask_lzcnt_epi64(__m256i __W, __mmask8 __U, __m256i __A) {
205 // CHECK-LABEL: @test_mm256_mask_lzcnt_epi64
206 // CHECK: call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %{{.*}}, i1 false)
207 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
208 return _mm256_mask_lzcnt_epi64(__W, __U, __A);
209 }
210
test_mm256_maskz_lzcnt_epi64(__mmask8 __U,__m256i __A)211 __m256i test_mm256_maskz_lzcnt_epi64(__mmask8 __U, __m256i __A) {
212 // CHECK-LABEL: @test_mm256_maskz_lzcnt_epi64
213 // CHECK: call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %{{.*}}, i1 false)
214 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
215 return _mm256_maskz_lzcnt_epi64(__U, __A);
216 }
217