Clang Project

clang_source_code/test/CodeGen/avx512vlcd-builtins.c
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