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
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
);