[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / CodeGen / X86 / avx10_2_512convert-builtins.c
blobe71cc0c9ad6b020ca9ca18b59dd3dc5ee6798d59
1 // RUN: %clang_cc1 %s -flax-vector-conversions=none -ffreestanding -triple=x86_64 -target-feature +avx10.2-512 \
2 // RUN: -emit-llvm -o - -Wno-invalid-feature-combination -Wall -Werror | FileCheck %s
3 // RUN: %clang_cc1 %s -flax-vector-conversions=none -ffreestanding -triple=i386 -target-feature +avx10.2-512 \
4 // RUN: -emit-llvm -o - -Wno-invalid-feature-combination -Wall -Werror | FileCheck %s
6 #include <immintrin.h>
8 __m512h test_mm512_cvtx2ps_ph(__m512 __A, __m512 __B) {
9 // CHECK-LABEL: @test_mm512_cvtx2ps_ph(
10 // CHECK: call <32 x half> @llvm.x86.avx10.mask.vcvt2ps2phx.512
11 return _mm512_cvtx2ps_ph(__A, __B);
14 __m512h test_mm512_mask_cvtx2ps_ph(__m512h __W, __mmask32 __U, __m512 __A, __m512 __B) {
15 // CHECK-LABEL: @test_mm512_mask_cvtx2ps_ph(
16 // CHECK: call <32 x half> @llvm.x86.avx10.mask.vcvt2ps2phx.512
17 return _mm512_mask_cvtx2ps_ph(__W, __U, __A, __B);
20 __m512h test_mm512_maskz_cvtx2ps_ph(__mmask32 __U, __m512 __A, __m512 __B) {
21 // CHECK-LABEL: @test_mm512_maskz_cvtx2ps_ph(
22 // CHECK: call <32 x half> @llvm.x86.avx10.mask.vcvt2ps2phx.512
23 return _mm512_maskz_cvtx2ps_ph(__U, __A, __B);
26 __m512h test_mm512_cvtx_round2ps_ph(__m512 __A, __m512 __B) {
27 // CHECK-LABEL: @test_mm512_cvtx_round2ps_ph(
28 // CHECK: call <32 x half> @llvm.x86.avx10.mask.vcvt2ps2phx.512
29 return _mm512_cvtx_round2ps_ph(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
32 __m512h test_mm512_mask_cvtx_round2ps_ph(__m512h __W, __mmask32 __U, __m512 __A, __m512 __B) {
33 // CHECK-LABEL: @test_mm512_mask_cvtx_round2ps_ph(
34 // CHECK: call <32 x half> @llvm.x86.avx10.mask.vcvt2ps2phx.512
35 return _mm512_mask_cvtx_round2ps_ph(__W, __U, __A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
38 __m512h test_mm512_maskz_cvtx_round2ps_ph(__mmask32 __U, __m512 __A, __m512 __B) {
39 // CHECK-LABEL: @test_mm512_maskz_cvtx_round2ps_ph(
40 // CHECK: call <32 x half> @llvm.x86.avx10.mask.vcvt2ps2phx.512
41 return _mm512_maskz_cvtx_round2ps_ph(__U, __A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
44 __m256i test_mm512_cvtbiasph_pbf8(__m512i __A, __m512h __B) {
45 // CHECK-LABEL: @test_mm512_cvtbiasph_pbf8(
46 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2bf8512(
47 return _mm512_cvtbiasph_pbf8(__A, __B);
50 __m256i test_mm512_mask_cvtbiasph_pbf8(__m256i __W, __mmask32 __U, __m512i __A, __m512h __B) {
51 // CHECK-LABEL: @test_mm512_mask_cvtbiasph_pbf8(
52 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2bf8512(
53 return _mm512_mask_cvtbiasph_pbf8(__W, __U, __A, __B);
56 __m256i test_mm512_maskz_cvtbiasph_pbf8(__mmask32 __U, __m512i __A, __m512h __B) {
57 // CHECK-LABEL: @test_mm512_maskz_cvtbiasph_pbf8(
58 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2bf8512(
59 return _mm512_maskz_cvtbiasph_pbf8(__U, __A, __B);
62 __m256i test_mm512_cvtbiassph_pbf8(__m512i __A, __m512h __B) {
63 // CHECK-LABEL: @test_mm512_cvtbiassph_pbf8(
64 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2bf8s512(
65 return _mm512_cvtbiassph_pbf8(__A, __B);
68 __m256i test_mm512_mask_cvtbiassph_pbf8(__m256i __W, __mmask32 __U, __m512i __A, __m512h __B) {
69 // CHECK-LABEL: @test_mm512_mask_cvtbiassph_pbf8(
70 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2bf8s512(
71 return _mm512_mask_cvtbiassph_pbf8(__W, __U, __A, __B);
74 __m256i test_mm512_maskz_cvtbiassph_pbf8(__mmask32 __U, __m512i __A, __m512h __B) {
75 // CHECK-LABEL: @test_mm512_maskz_cvtbiassph_pbf8(
76 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2bf8s512(
77 return _mm512_maskz_cvtbiassph_pbf8(__U, __A, __B);
80 __m256i test_mm512_cvtbiasph_phf8(__m512i __A, __m512h __B) {
81 // CHECK-LABEL: @test_mm512_cvtbiasph_phf8(
82 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2hf8512(
83 return _mm512_cvtbiasph_phf8(__A, __B);
86 __m256i test_mm512_mask_cvtbiasph_phf8(__m256i __W, __mmask32 __U, __m512i __A, __m512h __B) {
87 // CHECK-LABEL: @test_mm512_mask_cvtbiasph_phf8(
88 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2hf8512(
89 return _mm512_mask_cvtbiasph_phf8(__W, __U, __A, __B);
92 __m256i test_mm512_maskz_cvtbiasph_phf8(__mmask32 __U, __m512i __A, __m512h __B) {
93 // CHECK-LABEL: @test_mm512_maskz_cvtbiasph_phf8(
94 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2hf8512(
95 return _mm512_maskz_cvtbiasph_phf8(__U, __A, __B);
98 __m256i test_mm512_cvtbiassph_phf8(__m512i __A, __m512h __B) {
99 // CHECK-LABEL: @test_mm512_cvtbiassph_phf8(
100 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2hf8s512(
101 return _mm512_cvtbiassph_phf8(__A, __B);
104 __m256i test_mm512_mask_cvtbiassph_phf8(__m256i __W, __mmask32 __U, __m512i __A, __m512h __B) {
105 // CHECK-LABEL: @test_mm512_mask_cvtbiassph_phf8(
106 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2hf8s512(
107 return _mm512_mask_cvtbiassph_phf8(__W, __U, __A, __B);
110 __m256i test_mm512_maskz_cvtbiassph_phf8(__mmask32 __U, __m512i __A, __m512h __B) {
111 // CHECK-LABEL: @test_mm512_maskz_cvtbiassph_phf8(
112 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2hf8s512(
113 return _mm512_maskz_cvtbiassph_phf8(__U, __A, __B);
116 __m512i test_mm512_cvtne2ph_pbf8(__m512h __A, __m512h __B) {
117 // CHECK-LABEL: @test_mm512_cvtne2ph_pbf8(
118 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvtne2ph2bf8512(
119 return _mm512_cvtne2ph_pbf8(__A, __B);
122 __m512i test_mm512_mask_cvtne2ph_pbf8(__m512i __W, __mmask32 __U, __m512h __A, __m512h __B) {
123 // CHECK-LABEL: @test_mm512_mask_cvtne2ph_pbf8(
124 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvtne2ph2bf8512(
125 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
126 // CHECK: ret <8 x i64> %{{.*}}
127 return _mm512_mask_cvtne2ph_pbf8(__W, __U, __A, __B);
130 __m512i test_mm512_maskz_cvtne2ph_pbf8(__mmask32 __U, __m512h __A, __m512h __B) {
131 // CHECK-LABEL: @test_mm512_maskz_cvtne2ph_pbf8(
132 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvtne2ph2bf8512(
133 // CHECK: zeroinitializer
134 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
135 return _mm512_maskz_cvtne2ph_pbf8(__U, __A, __B);
138 __m512i test_mm512_cvtnes2ph_pbf8(__m512h __A, __m512h __B) {
139 // CHECK-LABEL: @test_mm512_cvtnes2ph_pbf8(
140 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvtne2ph2bf8s512(
141 return _mm512_cvtnes2ph_pbf8(__A, __B);
144 __m512i test_mm512_mask_cvtnes2ph_pbf8(__m512i __W, __mmask64 __U, __m512h __A, __m512h __B) {
145 // CHECK-LABEL: @test_mm512_mask_cvtnes2ph_pbf8(
146 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvtne2ph2bf8s512(
147 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
148 // CHECK: ret <8 x i64> %{{.*}}
149 return _mm512_mask_cvtnes2ph_pbf8(__W, __U, __A, __B);
152 __m512i test_mm512_maskz_cvtnes2ph_pbf8(__mmask64 __U, __m512h __A, __m512h __B) {
153 // CHECK-LABEL: @test_mm512_maskz_cvtnes2ph_pbf8(
154 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvtne2ph2bf8s512(
155 // CHECK: zeroinitializer
156 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
157 return _mm512_maskz_cvtnes2ph_pbf8(__U, __A, __B);
160 __m512i test_mm512_cvtne2ph_phf8(__m512h __A, __m512h __B) {
161 // CHECK-LABEL: @test_mm512_cvtne2ph_phf8(
162 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvtne2ph2hf8512(
163 return _mm512_cvtne2ph_phf8(__A, __B);
166 __m512i test_mm512_mask_cvtne2ph_phf8(__m512i __W, __mmask64 __U, __m512h __A, __m512h __B) {
167 // CHECK-LABEL: @test_mm512_mask_cvtne2ph_phf8(
168 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvtne2ph2hf8512(
169 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
170 // CHECK: ret <8 x i64> %{{.*}}
171 return _mm512_mask_cvtne2ph_phf8(__W, __U, __A, __B);
174 __m512i test_mm512_maskz_cvtne2ph_phf8(__mmask64 __U, __m512h __A, __m512h __B) {
175 // CHECK-LABEL: @test_mm512_maskz_cvtne2ph_phf8(
176 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvtne2ph2hf8512(
177 // CHECK: zeroinitializer
178 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
179 return _mm512_maskz_cvtne2ph_phf8(__U, __A, __B);
182 __m512i test_mm512_cvtnes2ph_phf8(__m512h __A, __m512h __B) {
183 // CHECK-LABEL: @test_mm512_cvtnes2ph_phf8(
184 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvtne2ph2hf8s512(
185 return _mm512_cvtnes2ph_phf8(__A, __B);
188 __m512i test_mm512_mask_cvtnes2ph_phf8(__m512i __W, __mmask64 __U, __m512h __A, __m512h __B) {
189 // CHECK-LABEL: @test_mm512_mask_cvtnes2ph_phf8(
190 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvtne2ph2hf8s512(
191 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
192 // CHECK: ret <8 x i64> %{{.*}}
193 return _mm512_mask_cvtnes2ph_phf8(__W, __U, __A, __B);
196 __m512i test_mm512_maskz_cvtnes2ph_phf8(__mmask64 __U, __m512h __A, __m512h __B) {
197 // CHECK-LABEL: @test_mm512_maskz_cvtnes2ph_phf8(
198 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvtne2ph2hf8s512(
199 // CHECK: zeroinitializer
200 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}
201 return _mm512_maskz_cvtnes2ph_phf8(__U, __A, __B);
204 __m512h test_mm512_cvtnehf8_ph(__m256i __A) {
205 // CHECK-LABEL: @test_mm512_cvtnehf8_ph(
206 // CHECK: call <32 x half> @llvm.x86.avx10.mask.vcvthf82ph512(
207 return _mm512_cvtnehf8_ph(__A);
210 __m512h test_mm512_mask_cvtnehf8_ph(__m512h __A, __mmask32 __B, __m256i __C) {
211 // CHECK-LABEL: @test_mm512_mask_cvtnehf8_ph(
212 // CHECK: call <32 x half> @llvm.x86.avx10.mask.vcvthf82ph512(
213 return _mm512_mask_cvtnehf8_ph(__A, __B, __C);
216 __m512h test_mm512_maskz_cvtnehf8_ph(__mmask32 __A, __m256i __B) {
217 // CHECK-LABEL: @test_mm512_maskz_cvtnehf8_ph(
218 // CHECK: call <32 x half> @llvm.x86.avx10.mask.vcvthf82ph512(
219 return _mm512_maskz_cvtnehf8_ph(__A, __B);
222 __m256i test_mm512_cvtneph_pbf8(__m512h __A) {
223 // CHECK-LABEL: @test_mm512_cvtneph_pbf8(
224 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtneph2bf8512(
225 return _mm512_cvtneph_pbf8(__A);
228 __m256i test_mm512_mask_cvtneph_pbf8(__m256i __A, __mmask32 __B, __m512h __C) {
229 // CHECK-LABEL: @test_mm512_mask_cvtneph_pbf8(
230 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtneph2bf8512(
231 return _mm512_mask_cvtneph_pbf8(__A, __B, __C);
234 __m256i test_mm512_maskz_cvtneph_pbf8(__mmask32 __A, __m512h __B) {
235 // CHECK-LABEL: @test_mm512_maskz_cvtneph_pbf8(
236 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtneph2bf8512(
237 return _mm512_maskz_cvtneph_pbf8(__A, __B);
240 __m256i test_mm512_cvtnesph_pbf8(__m512h __A) {
241 // CHECK-LABEL: @test_mm512_cvtnesph_pbf8(
242 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtneph2bf8s512(
243 return _mm512_cvtnesph_pbf8(__A);
246 __m256i test_mm512_mask_cvtnesph_pbf8(__m256i __A, __mmask32 __B, __m512h __C) {
247 // CHECK-LABEL: @test_mm512_mask_cvtnesph_pbf8(
248 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtneph2bf8s512(
249 return _mm512_mask_cvtnesph_pbf8(__A, __B, __C);
252 __m256i test_mm512_maskz_cvtnesph_pbf8(__mmask32 __A, __m512h __B) {
253 // CHECK-LABEL: @test_mm512_maskz_cvtnesph_pbf8(
254 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtneph2bf8s512(
255 return _mm512_maskz_cvtnesph_pbf8(__A, __B);
258 __m256i test_mm512_cvtneph_phf8(__m512h __A) {
259 // CHECK-LABEL: @test_mm512_cvtneph_phf8(
260 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtneph2hf8512(
261 return _mm512_cvtneph_phf8(__A);
264 __m256i test_mm512_mask_cvtneph_phf8(__m256i __A, __mmask32 __B, __m512h __C) {
265 // CHECK-LABEL: @test_mm512_mask_cvtneph_phf8(
266 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtneph2hf8512(
267 return _mm512_mask_cvtneph_phf8(__A, __B, __C);
270 __m256i test_mm512_maskz_cvtneph_phf8(__mmask32 __A, __m512h __B) {
271 // CHECK-LABEL: @test_mm512_maskz_cvtneph_phf8(
272 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtneph2hf8512(
273 return _mm512_maskz_cvtneph_phf8(__A, __B);
276 __m256i test_mm512_cvtnesph_phf8(__m512h __A) {
277 // CHECK-LABEL: @test_mm512_cvtnesph_phf8(
278 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtneph2hf8s512(
279 return _mm512_cvtnesph_phf8(__A);
282 __m256i test_mm512_mask_cvtnesph_phf8(__m256i __A, __mmask32 __B, __m512h __C) {
283 // CHECK-LABEL: @test_mm512_mask_cvtnesph_phf8(
284 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtneph2hf8s512(
285 return _mm512_mask_cvtnesph_phf8(__A, __B, __C);
288 __m256i test_mm512_maskz_cvtnesph_phf8(__mmask32 __A, __m512h __B) {
289 // CHECK-LABEL: @test_mm512_maskz_cvtnesph_phf8(
290 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtneph2hf8s512(
291 return _mm512_maskz_cvtnesph_phf8(__A, __B);
294 __m512h test_mm512_cvtpbf8_ph(__m256i A) {
295 // CHECK-LABEL: @test_mm512_cvtpbf8_ph
296 // CHECK: sext <32 x i8> %{{.*}} to <32 x i16>
297 // CHECK: @llvm.x86.avx512.pslli.w.512
298 // CHECK: ret <32 x half> %{{.*}}
299 return _mm512_cvtpbf8_ph(A);
302 __m512h test_mm512_mask_cvtpbf8_ph(__m512h S, __mmask16 M, __m256i A) {
303 // CHECK-LABEL: @test_mm512_mask_cvtpbf8_ph
304 // CHECK: sext <32 x i8> %{{.*}} to <32 x i16>
305 // CHECK: @llvm.x86.avx512.pslli.w.512
306 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
307 // CHECK: ret <32 x half> %{{.*}}
308 return _mm512_mask_cvtpbf8_ph(S, M, A);
311 __m512h test_mm512_maskz_cvtpbf8_ph(__mmask16 M, __m256i A) {
312 // CHECK-LABEL: @test_mm512_maskz_cvtpbf8_ph
313 // CHECK: sext <32 x i8> %{{.*}} to <32 x i16>
314 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
315 // CHECK: @llvm.x86.avx512.pslli.w.512
316 // CHECK: ret <32 x half> %{{.*}}
317 return _mm512_maskz_cvtpbf8_ph(M, A);