1 | // RUN: %clang_cc1 -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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |