Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / X86 / avx512fp16-cvt-ph-w-intrinsics.ll
blobcd455bf6d541fdedd47bdf818de7f113adcfe0bb
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unkown-unkown -mattr=+avx512bw -mattr=+avx512fp16 | FileCheck %s
4 declare <32 x half> @llvm.x86.avx512.sitofp.round.v32f16.v32i16(<32 x i16>, i32)
6 define <32 x half> @test_int_x86_avx512fp16_mask_cvtw2ph_512(<32 x i16> %arg0, <32 x half> %arg1, i32 %mask) {
7 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtw2ph_512:
8 ; CHECK:       # %bb.0:
9 ; CHECK-NEXT:    kmovd %edi, %k1
10 ; CHECK-NEXT:    vcvtw2ph %zmm0, %zmm1 {%k1}
11 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
12 ; CHECK-NEXT:    retq
13   %msk = bitcast i32 %mask to <32 x i1>
14   %res0 = call <32 x half> @llvm.x86.avx512.sitofp.round.v32f16.v32i16(<32 x i16> %arg0, i32 4)
15   %res = select <32 x i1> %msk, <32 x half> %res0, <32 x half> %arg1
16   ret <32 x half> %res
19 define <32 x half> @test_int_x86_avx512fp16_mask_cvtw2ph_512_2(<32 x i16> %arg0, <32 x half> %arg1, i32 %mask) {
20 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtw2ph_512_2:
21 ; CHECK:       # %bb.0:
22 ; CHECK-NEXT:    kmovd %edi, %k1
23 ; CHECK-NEXT:    vcvtw2ph %zmm0, %zmm1 {%k1}
24 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
25 ; CHECK-NEXT:    retq
26   %msk = bitcast i32 %mask to <32 x i1>
27   %res0 = sitofp <32 x i16> %arg0 to <32 x half>
28   %res = select <32 x i1> %msk, <32 x half> %res0, <32 x half> %arg1
29   ret <32 x half> %res
32 define <32 x half> @test_int_x86_avx512fp16_mask_cvtw2ph_512_b(ptr %arg0, <32 x half> %arg1, i32 %mask) {
33 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtw2ph_512_b:
34 ; CHECK:       # %bb.0:
35 ; CHECK-NEXT:    kmovd %esi, %k1
36 ; CHECK-NEXT:    vcvtw2ph (%rdi){1to32}, %zmm0 {%k1}
37 ; CHECK-NEXT:    retq
38   %msk = bitcast i32 %mask to <32 x i1>
39   %scalar = load i16, ptr %arg0
40   %scalar_in_vector = insertelement <32 x i16> undef, i16 %scalar, i32 0
41   %val = shufflevector <32 x i16> %scalar_in_vector, <32 x i16> undef, <32 x i32> zeroinitializer
42   %res0 = call <32 x half> @llvm.x86.avx512.sitofp.round.v32f16.v32i16(<32 x i16> %val, i32 4)
43   %res = select <32 x i1> %msk, <32 x half> %res0, <32 x half> %arg1
44   ret <32 x half> %res
47 define <32 x half> @test_int_x86_avx512fp16_mask_cvtw2ph_512_b_2(ptr %arg0, <32 x half> %arg1, i32 %mask) {
48 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtw2ph_512_b_2:
49 ; CHECK:       # %bb.0:
50 ; CHECK-NEXT:    kmovd %esi, %k1
51 ; CHECK-NEXT:    vcvtw2ph (%rdi){1to32}, %zmm0 {%k1}
52 ; CHECK-NEXT:    retq
53   %msk = bitcast i32 %mask to <32 x i1>
54   %scalar = load i16, ptr %arg0
55   %scalar_in_vector = insertelement <32 x i16> undef, i16 %scalar, i32 0
56   %val = shufflevector <32 x i16> %scalar_in_vector, <32 x i16> undef, <32 x i32> zeroinitializer
57   %res0 = sitofp <32 x i16> %val to <32 x half>
58   %res = select <32 x i1> %msk, <32 x half> %res0, <32 x half> %arg1
59   ret <32 x half> %res
62 define <32 x half> @test_int_x86_avx512fp16_mask_cvtw2ph_512_r(<32 x i16> %arg0, <32 x half> %arg1, i32 %mask) {
63 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtw2ph_512_r:
64 ; CHECK:       # %bb.0:
65 ; CHECK-NEXT:    kmovd %edi, %k1
66 ; CHECK-NEXT:    vcvtw2ph {ru-sae}, %zmm0, %zmm1 {%k1}
67 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
68 ; CHECK-NEXT:    retq
69   %msk = bitcast i32 %mask to <32 x i1>
70   %res0 = call <32 x half> @llvm.x86.avx512.sitofp.round.v32f16.v32i16(<32 x i16> %arg0, i32 10)
71   %res = select <32 x i1> %msk, <32 x half> %res0, <32 x half> %arg1
72   ret <32 x half> %res
75 define <32 x half> @test_int_x86_avx512fp16_mask_cvtw2ph_512_nomask(<32 x i16> %arg0) {
76 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtw2ph_512_nomask:
77 ; CHECK:       # %bb.0:
78 ; CHECK-NEXT:    vcvtw2ph %zmm0, %zmm0
79 ; CHECK-NEXT:    retq
80   %res = call <32 x half> @llvm.x86.avx512.sitofp.round.v32f16.v32i16(<32 x i16> %arg0, i32 4)
81   ret <32 x half> %res
84 define <32 x half> @test_int_x86_avx512fp16_mask_cvtw2ph_512_nomask_2(<32 x i16> %arg0) {
85 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtw2ph_512_nomask_2:
86 ; CHECK:       # %bb.0:
87 ; CHECK-NEXT:    vcvtw2ph %zmm0, %zmm0
88 ; CHECK-NEXT:    retq
89   %res = sitofp <32 x i16> %arg0 to <32 x half>
90   ret <32 x half> %res
93 define <32 x half> @test_int_x86_avx512fp16_mask_cvtw2ph_512_z(<32 x i16> %arg0, i32 %mask) {
94 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtw2ph_512_z:
95 ; CHECK:       # %bb.0:
96 ; CHECK-NEXT:    kmovd %edi, %k1
97 ; CHECK-NEXT:    vcvtw2ph %zmm0, %zmm0 {%k1} {z}
98 ; CHECK-NEXT:    retq
99   %msk = bitcast i32 %mask to <32 x i1>
100   %res0 = call <32 x half> @llvm.x86.avx512.sitofp.round.v32f16.v32i16(<32 x i16> %arg0, i32 4)
101   %res = select <32 x i1> %msk, <32 x half> %res0, <32 x half> zeroinitializer
102   ret <32 x half> %res
105 define <32 x half> @test_int_x86_avx512fp16_mask_cvtw2ph_512_z_2(<32 x i16> %arg0, i32 %mask) {
106 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtw2ph_512_z_2:
107 ; CHECK:       # %bb.0:
108 ; CHECK-NEXT:    kmovd %edi, %k1
109 ; CHECK-NEXT:    vcvtw2ph %zmm0, %zmm0 {%k1} {z}
110 ; CHECK-NEXT:    retq
111   %msk = bitcast i32 %mask to <32 x i1>
112   %res0 = sitofp <32 x i16> %arg0 to <32 x half>
113   %res = select <32 x i1> %msk, <32 x half> %res0, <32 x half> zeroinitializer
114   ret <32 x half> %res
117 define <32 x half> @test_int_x86_avx512fp16_mask_cvtw2ph_512_load(ptr %arg0, <32 x half> %arg1, i32 %mask) {
118 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtw2ph_512_load:
119 ; CHECK:       # %bb.0:
120 ; CHECK-NEXT:    kmovd %esi, %k1
121 ; CHECK-NEXT:    vcvtw2ph (%rdi), %zmm0 {%k1}
122 ; CHECK-NEXT:    retq
123   %msk = bitcast i32 %mask to <32 x i1>
124   %val = load <32 x i16>, ptr %arg0
125   %res0 = call <32 x half> @llvm.x86.avx512.sitofp.round.v32f16.v32i16(<32 x i16> %val, i32 4)
126   %res = select <32 x i1> %msk, <32 x half> %res0, <32 x half> %arg1
127   ret <32 x half> %res
130 define <32 x half> @test_int_x86_avx512fp16_mask_cvtw2ph_512_load_2(ptr %arg0, <32 x half> %arg1, i32 %mask) {
131 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtw2ph_512_load_2:
132 ; CHECK:       # %bb.0:
133 ; CHECK-NEXT:    kmovd %esi, %k1
134 ; CHECK-NEXT:    vcvtw2ph (%rdi), %zmm0 {%k1}
135 ; CHECK-NEXT:    retq
136   %msk = bitcast i32 %mask to <32 x i1>
137   %val = load <32 x i16>, ptr %arg0
138   %res0 = sitofp <32 x i16> %val to <32 x half>
139   %res = select <32 x i1> %msk, <32 x half> %res0, <32 x half> %arg1
140   ret <32 x half> %res
143 declare <32 x i16> @llvm.x86.avx512fp16.mask.vcvtph2w.512(<32 x half>, <32 x i16>, i32, i32)
145 define <32 x i16> @test_int_x86_avx512fp16_mask_cvtph2w_512(<32 x half> %arg0, <32 x i16> %arg1, i32 %mask) {
146 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtph2w_512:
147 ; CHECK:       # %bb.0:
148 ; CHECK-NEXT:    kmovd %edi, %k1
149 ; CHECK-NEXT:    vcvtph2w %zmm0, %zmm1 {%k1}
150 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
151 ; CHECK-NEXT:    retq
152   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvtph2w.512(<32 x half> %arg0, <32 x i16> %arg1, i32 %mask, i32 4)
153   ret <32 x i16> %res
156 define <32 x i16> @test_int_x86_avx512fp16_mask_cvtph2w_512_b(ptr %arg0, <32 x i16> %arg1, i32 %mask) {
157 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtph2w_512_b:
158 ; CHECK:       # %bb.0:
159 ; CHECK-NEXT:    kmovd %esi, %k1
160 ; CHECK-NEXT:    vcvtph2w (%rdi){1to32}, %zmm0 {%k1}
161 ; CHECK-NEXT:    retq
162   %scalar = load half, ptr %arg0
163   %scalar_in_vector = insertelement <32 x half> undef, half %scalar, i32 0
164   %val = shufflevector <32 x half> %scalar_in_vector, <32 x half> undef, <32 x i32> zeroinitializer
165   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvtph2w.512(<32 x half> %val, <32 x i16> %arg1, i32 %mask, i32 4)
166   ret <32 x i16> %res
169 define <32 x i16> @test_int_x86_avx512fp16_mask_cvtph2w_512_r(<32 x half> %arg0, <32 x i16> %arg1, i32 %mask) {
170 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtph2w_512_r:
171 ; CHECK:       # %bb.0:
172 ; CHECK-NEXT:    kmovd %edi, %k1
173 ; CHECK-NEXT:    vcvtph2w {rd-sae}, %zmm0, %zmm1 {%k1}
174 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
175 ; CHECK-NEXT:    retq
176   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvtph2w.512(<32 x half> %arg0, <32 x i16> %arg1, i32 %mask, i32 9)
177   ret <32 x i16> %res
180 define <32 x i16> @test_int_x86_avx512fp16_mask_cvtph2w_512_nomask(<32 x half> %arg0, <32 x i16> %arg1) {
181 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtph2w_512_nomask:
182 ; CHECK:       # %bb.0:
183 ; CHECK-NEXT:    vcvtph2w %zmm0, %zmm0
184 ; CHECK-NEXT:    retq
185   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvtph2w.512(<32 x half> %arg0, <32 x i16> %arg1, i32 -1, i32 4)
186   ret <32 x i16> %res
189 define <32 x i16> @test_int_x86_avx512fp16_mask_cvtph2w_512_z(<32 x half> %arg0, i32 %mask) {
190 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtph2w_512_z:
191 ; CHECK:       # %bb.0:
192 ; CHECK-NEXT:    kmovd %edi, %k1
193 ; CHECK-NEXT:    vcvtph2w %zmm0, %zmm0 {%k1} {z}
194 ; CHECK-NEXT:    retq
195   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvtph2w.512(<32 x half> %arg0, <32 x i16> zeroinitializer, i32 %mask, i32 4)
196   ret <32 x i16> %res
199 define <32 x i16> @test_int_x86_avx512fp16_mask_cvtph2w_512_load(ptr %arg0, <32 x i16> %arg1, i32 %mask) {
200 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtph2w_512_load:
201 ; CHECK:       # %bb.0:
202 ; CHECK-NEXT:    kmovd %esi, %k1
203 ; CHECK-NEXT:    vcvtph2w (%rdi), %zmm0 {%k1}
204 ; CHECK-NEXT:    retq
205   %val = load <32 x half>, ptr %arg0
206   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvtph2w.512(<32 x half> %val, <32 x i16> %arg1, i32 %mask, i32 4)
207   ret <32 x i16> %res
211 declare <32 x half> @llvm.x86.avx512.uitofp.round.v32f16.v32i16(<32 x i16>, i32)
213 define <32 x half> @test_int_x86_avx512fp16_mask_cvtuw2ph_512(<32 x i16> %arg0, <32 x half> %arg1, i32 %mask) {
214 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtuw2ph_512:
215 ; CHECK:       # %bb.0:
216 ; CHECK-NEXT:    kmovd %edi, %k1
217 ; CHECK-NEXT:    vcvtuw2ph %zmm0, %zmm1 {%k1}
218 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
219 ; CHECK-NEXT:    retq
220   %msk = bitcast i32 %mask to <32 x i1>
221   %res0 = call <32 x half> @llvm.x86.avx512.uitofp.round.v32f16.v32i16(<32 x i16> %arg0, i32 4)
222   %res = select <32 x i1> %msk, <32 x half> %res0, <32 x half> %arg1
223   ret <32 x half> %res
226 define <32 x half> @test_int_x86_avx512fp16_mask_cvtuw2ph_512_2(<32 x i16> %arg0, <32 x half> %arg1, i32 %mask) {
227 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtuw2ph_512_2:
228 ; CHECK:       # %bb.0:
229 ; CHECK-NEXT:    kmovd %edi, %k1
230 ; CHECK-NEXT:    vcvtuw2ph %zmm0, %zmm1 {%k1}
231 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
232 ; CHECK-NEXT:    retq
233   %msk = bitcast i32 %mask to <32 x i1>
234   %res0 = uitofp <32 x i16> %arg0 to <32 x half>
235   %res = select <32 x i1> %msk, <32 x half> %res0, <32 x half> %arg1
236   ret <32 x half> %res
239 define <32 x half> @test_int_x86_avx512fp16_mask_cvtuw2ph_512_b(ptr %arg0, <32 x half> %arg1, i32 %mask) {
240 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtuw2ph_512_b:
241 ; CHECK:       # %bb.0:
242 ; CHECK-NEXT:    kmovd %esi, %k1
243 ; CHECK-NEXT:    vcvtuw2ph (%rdi){1to32}, %zmm0 {%k1}
244 ; CHECK-NEXT:    retq
245   %msk = bitcast i32 %mask to <32 x i1>
246   %scalar = load i16, ptr %arg0
247   %scalar_in_vector = insertelement <32 x i16> undef, i16 %scalar, i32 0
248   %val = shufflevector <32 x i16> %scalar_in_vector, <32 x i16> undef, <32 x i32> zeroinitializer
249   %res0 = call <32 x half> @llvm.x86.avx512.uitofp.round.v32f16.v32i16(<32 x i16> %val, i32 4)
250   %res = select <32 x i1> %msk, <32 x half> %res0, <32 x half> %arg1
251   ret <32 x half> %res
254 define <32 x half> @test_int_x86_avx512fp16_mask_cvtuw2ph_512_b_2(ptr %arg0, <32 x half> %arg1, i32 %mask) {
255 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtuw2ph_512_b_2:
256 ; CHECK:       # %bb.0:
257 ; CHECK-NEXT:    kmovd %esi, %k1
258 ; CHECK-NEXT:    vcvtuw2ph (%rdi){1to32}, %zmm0 {%k1}
259 ; CHECK-NEXT:    retq
260   %msk = bitcast i32 %mask to <32 x i1>
261   %scalar = load i16, ptr %arg0
262   %scalar_in_vector = insertelement <32 x i16> undef, i16 %scalar, i32 0
263   %val = shufflevector <32 x i16> %scalar_in_vector, <32 x i16> undef, <32 x i32> zeroinitializer
264   %res0 = uitofp <32 x i16> %val to <32 x half>
265   %res = select <32 x i1> %msk, <32 x half> %res0, <32 x half> %arg1
266   ret <32 x half> %res
269 define <32 x half> @test_int_x86_avx512fp16_mask_cvtuw2ph_512_r(<32 x i16> %arg0, <32 x half> %arg1, i32 %mask) {
270 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtuw2ph_512_r:
271 ; CHECK:       # %bb.0:
272 ; CHECK-NEXT:    kmovd %edi, %k1
273 ; CHECK-NEXT:    vcvtuw2ph {ru-sae}, %zmm0, %zmm1 {%k1}
274 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
275 ; CHECK-NEXT:    retq
276   %msk = bitcast i32 %mask to <32 x i1>
277   %res0 = call <32 x half> @llvm.x86.avx512.uitofp.round.v32f16.v32i16(<32 x i16> %arg0, i32 10)
278   %res = select <32 x i1> %msk, <32 x half> %res0, <32 x half> %arg1
279   ret <32 x half> %res
282 define <32 x half> @test_int_x86_avx512fp16_mask_cvtuw2ph_512_nomask(<32 x i16> %arg0) {
283 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtuw2ph_512_nomask:
284 ; CHECK:       # %bb.0:
285 ; CHECK-NEXT:    vcvtuw2ph %zmm0, %zmm0
286 ; CHECK-NEXT:    retq
287   %res = call <32 x half> @llvm.x86.avx512.uitofp.round.v32f16.v32i16(<32 x i16> %arg0, i32 4)
288   ret <32 x half> %res
291 define <32 x half> @test_int_x86_avx512fp16_mask_cvtuw2ph_512_nomask_2(<32 x i16> %arg0) {
292 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtuw2ph_512_nomask_2:
293 ; CHECK:       # %bb.0:
294 ; CHECK-NEXT:    vcvtuw2ph %zmm0, %zmm0
295 ; CHECK-NEXT:    retq
296   %res = uitofp <32 x i16> %arg0 to <32 x half>
297   ret <32 x half> %res
300 define <32 x half> @test_int_x86_avx512fp16_mask_cvtuw2ph_512_z(<32 x i16> %arg0, i32 %mask) {
301 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtuw2ph_512_z:
302 ; CHECK:       # %bb.0:
303 ; CHECK-NEXT:    kmovd %edi, %k1
304 ; CHECK-NEXT:    vcvtuw2ph %zmm0, %zmm0 {%k1} {z}
305 ; CHECK-NEXT:    retq
306   %msk = bitcast i32 %mask to <32 x i1>
307   %res0 = call <32 x half> @llvm.x86.avx512.uitofp.round.v32f16.v32i16(<32 x i16> %arg0, i32 4)
308   %res = select <32 x i1> %msk, <32 x half> %res0, <32 x half> zeroinitializer
309   ret <32 x half> %res
312 define <32 x half> @test_int_x86_avx512fp16_mask_cvtuw2ph_512_z_2(<32 x i16> %arg0, i32 %mask) {
313 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtuw2ph_512_z_2:
314 ; CHECK:       # %bb.0:
315 ; CHECK-NEXT:    kmovd %edi, %k1
316 ; CHECK-NEXT:    vcvtuw2ph %zmm0, %zmm0 {%k1} {z}
317 ; CHECK-NEXT:    retq
318   %msk = bitcast i32 %mask to <32 x i1>
319   %res0 = uitofp <32 x i16> %arg0 to <32 x half>
320   %res = select <32 x i1> %msk, <32 x half> %res0, <32 x half> zeroinitializer
321   ret <32 x half> %res
324 define <32 x half> @test_int_x86_avx512fp16_mask_cvtuw2ph_512_load(ptr %arg0, <32 x half> %arg1, i32 %mask) {
325 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtuw2ph_512_load:
326 ; CHECK:       # %bb.0:
327 ; CHECK-NEXT:    kmovd %esi, %k1
328 ; CHECK-NEXT:    vcvtuw2ph (%rdi), %zmm0 {%k1}
329 ; CHECK-NEXT:    retq
330   %msk = bitcast i32 %mask to <32 x i1>
331   %val = load <32 x i16>, ptr %arg0
332   %res0 = call <32 x half> @llvm.x86.avx512.uitofp.round.v32f16.v32i16(<32 x i16> %val, i32 4)
333   %res = select <32 x i1> %msk, <32 x half> %res0, <32 x half> %arg1
334   ret <32 x half> %res
337 define <32 x half> @test_int_x86_avx512fp16_mask_cvtuw2ph_512_load_2(ptr %arg0, <32 x half> %arg1, i32 %mask) {
338 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtuw2ph_512_load_2:
339 ; CHECK:       # %bb.0:
340 ; CHECK-NEXT:    kmovd %esi, %k1
341 ; CHECK-NEXT:    vcvtuw2ph (%rdi), %zmm0 {%k1}
342 ; CHECK-NEXT:    retq
343   %msk = bitcast i32 %mask to <32 x i1>
344   %val = load <32 x i16>, ptr %arg0
345   %res0 = uitofp <32 x i16> %val to <32 x half>
346   %res = select <32 x i1> %msk, <32 x half> %res0, <32 x half> %arg1
347   ret <32 x half> %res
350 declare <32 x i16> @llvm.x86.avx512fp16.mask.vcvtph2uw.512(<32 x half>, <32 x i16>, i32, i32)
352 define <32 x i16> @test_int_x86_avx512fp16_mask_cvtph2uw_512(<32 x half> %arg0, <32 x i16> %arg1, i32 %mask) {
353 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtph2uw_512:
354 ; CHECK:       # %bb.0:
355 ; CHECK-NEXT:    kmovd %edi, %k1
356 ; CHECK-NEXT:    vcvtph2uw %zmm0, %zmm1 {%k1}
357 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
358 ; CHECK-NEXT:    retq
359   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvtph2uw.512(<32 x half> %arg0, <32 x i16> %arg1, i32 %mask, i32 4)
360   ret <32 x i16> %res
363 define <32 x i16> @test_int_x86_avx512fp16_mask_cvtph2uw_512_b(ptr %arg0, <32 x i16> %arg1, i32 %mask) {
364 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtph2uw_512_b:
365 ; CHECK:       # %bb.0:
366 ; CHECK-NEXT:    kmovd %esi, %k1
367 ; CHECK-NEXT:    vcvtph2uw (%rdi){1to32}, %zmm0 {%k1}
368 ; CHECK-NEXT:    retq
369   %scalar = load half, ptr %arg0
370   %scalar_in_vector = insertelement <32 x half> undef, half %scalar, i32 0
371   %val = shufflevector <32 x half> %scalar_in_vector, <32 x half> undef, <32 x i32> zeroinitializer
372   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvtph2uw.512(<32 x half> %val, <32 x i16> %arg1, i32 %mask, i32 4)
373   ret <32 x i16> %res
376 define <32 x i16> @test_int_x86_avx512fp16_mask_cvtph2uw_512_r(<32 x half> %arg0, <32 x i16> %arg1, i32 %mask) {
377 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtph2uw_512_r:
378 ; CHECK:       # %bb.0:
379 ; CHECK-NEXT:    kmovd %edi, %k1
380 ; CHECK-NEXT:    vcvtph2uw {rd-sae}, %zmm0, %zmm1 {%k1}
381 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
382 ; CHECK-NEXT:    retq
383   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvtph2uw.512(<32 x half> %arg0, <32 x i16> %arg1, i32 %mask, i32 9)
384   ret <32 x i16> %res
387 define <32 x i16> @test_int_x86_avx512fp16_mask_cvtph2uw_512_nomask(<32 x half> %arg0, <32 x i16> %arg1) {
388 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtph2uw_512_nomask:
389 ; CHECK:       # %bb.0:
390 ; CHECK-NEXT:    vcvtph2uw %zmm0, %zmm0
391 ; CHECK-NEXT:    retq
392   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvtph2uw.512(<32 x half> %arg0, <32 x i16> %arg1, i32 -1, i32 4)
393   ret <32 x i16> %res
396 define <32 x i16> @test_int_x86_avx512fp16_mask_cvtph2uw_512_z(<32 x half> %arg0, i32 %mask) {
397 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtph2uw_512_z:
398 ; CHECK:       # %bb.0:
399 ; CHECK-NEXT:    kmovd %edi, %k1
400 ; CHECK-NEXT:    vcvtph2uw %zmm0, %zmm0 {%k1} {z}
401 ; CHECK-NEXT:    retq
402   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvtph2uw.512(<32 x half> %arg0, <32 x i16> zeroinitializer, i32 %mask, i32 4)
403   ret <32 x i16> %res
406 define <32 x i16> @test_int_x86_avx512fp16_mask_cvtph2uw_512_load(ptr %arg0, <32 x i16> %arg1, i32 %mask) {
407 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvtph2uw_512_load:
408 ; CHECK:       # %bb.0:
409 ; CHECK-NEXT:    kmovd %esi, %k1
410 ; CHECK-NEXT:    vcvtph2uw (%rdi), %zmm0 {%k1}
411 ; CHECK-NEXT:    retq
412   %val = load <32 x half>, ptr %arg0
413   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvtph2uw.512(<32 x half> %val, <32 x i16> %arg1, i32 %mask, i32 4)
414   ret <32 x i16> %res
417 declare <32 x i16> @llvm.x86.avx512fp16.mask.vcvttph2w.512(<32 x half>, <32 x i16>, i32, i32)
419 define <32 x i16> @test_int_x86_avx512fp16_mask_cvttph2w_512(<32 x half> %arg0, <32 x i16> %arg1, i32 %mask) {
420 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvttph2w_512:
421 ; CHECK:       # %bb.0:
422 ; CHECK-NEXT:    kmovd %edi, %k1
423 ; CHECK-NEXT:    vcvttph2w %zmm0, %zmm1 {%k1}
424 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
425 ; CHECK-NEXT:    retq
426   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvttph2w.512(<32 x half> %arg0, <32 x i16> %arg1, i32 %mask, i32 4)
427   ret <32 x i16> %res
430 define <32 x i16> @test_int_x86_avx512fp16_mask_cvttph2w_512_b(ptr %arg0, <32 x i16> %arg1, i32 %mask) {
431 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvttph2w_512_b:
432 ; CHECK:       # %bb.0:
433 ; CHECK-NEXT:    kmovd %esi, %k1
434 ; CHECK-NEXT:    vcvttph2w (%rdi){1to32}, %zmm0 {%k1}
435 ; CHECK-NEXT:    retq
436   %scalar = load half, ptr %arg0
437   %scalar_in_vector = insertelement <32 x half> undef, half %scalar, i32 0
438   %val = shufflevector <32 x half> %scalar_in_vector, <32 x half> undef, <32 x i32> zeroinitializer
439   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvttph2w.512(<32 x half> %val, <32 x i16> %arg1, i32 %mask, i32 4)
440   ret <32 x i16> %res
443 define <32 x i16> @test_int_x86_avx512fp16_mask_cvttph2w_512_sae(<32 x half> %arg0, <32 x i16> %arg1, i32 %mask) {
444 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvttph2w_512_sae:
445 ; CHECK:       # %bb.0:
446 ; CHECK-NEXT:    kmovd %edi, %k1
447 ; CHECK-NEXT:    vcvttph2w {sae}, %zmm0, %zmm1 {%k1}
448 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
449 ; CHECK-NEXT:    retq
450   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvttph2w.512(<32 x half> %arg0, <32 x i16> %arg1, i32 %mask, i32 8)
451   ret <32 x i16> %res
454 define <32 x i16> @test_int_x86_avx512fp16_mask_cvttph2w_512_nomask(<32 x half> %arg0, <32 x i16> %arg1) {
455 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvttph2w_512_nomask:
456 ; CHECK:       # %bb.0:
457 ; CHECK-NEXT:    vcvttph2w %zmm0, %zmm0
458 ; CHECK-NEXT:    retq
459   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvttph2w.512(<32 x half> %arg0, <32 x i16> %arg1, i32 -1, i32 4)
460   ret <32 x i16> %res
463 define <32 x i16> @test_int_x86_avx512fp16_mask_cvttph2w_512_z(<32 x half> %arg0, i32 %mask) {
464 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvttph2w_512_z:
465 ; CHECK:       # %bb.0:
466 ; CHECK-NEXT:    kmovd %edi, %k1
467 ; CHECK-NEXT:    vcvttph2w %zmm0, %zmm0 {%k1} {z}
468 ; CHECK-NEXT:    retq
469   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvttph2w.512(<32 x half> %arg0, <32 x i16> zeroinitializer, i32 %mask, i32 4)
470   ret <32 x i16> %res
473 define <32 x i16> @test_int_x86_avx512fp16_mask_cvttph2w_512_load(ptr %arg0, <32 x i16> %arg1, i32 %mask) {
474 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvttph2w_512_load:
475 ; CHECK:       # %bb.0:
476 ; CHECK-NEXT:    kmovd %esi, %k1
477 ; CHECK-NEXT:    vcvttph2w (%rdi), %zmm0 {%k1}
478 ; CHECK-NEXT:    retq
479   %val = load <32 x half>, ptr %arg0
480   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvttph2w.512(<32 x half> %val, <32 x i16> %arg1, i32 %mask, i32 4)
481   ret <32 x i16> %res
484 declare <32 x i16> @llvm.x86.avx512fp16.mask.vcvttph2uw.512(<32 x half>, <32 x i16>, i32, i32)
486 define <32 x i16> @test_int_x86_avx512fp16_mask_cvttph2uw_512(<32 x half> %arg0, <32 x i16> %arg1, i32 %mask) {
487 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvttph2uw_512:
488 ; CHECK:       # %bb.0:
489 ; CHECK-NEXT:    kmovd %edi, %k1
490 ; CHECK-NEXT:    vcvttph2uw %zmm0, %zmm1 {%k1}
491 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
492 ; CHECK-NEXT:    retq
493   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvttph2uw.512(<32 x half> %arg0, <32 x i16> %arg1, i32 %mask, i32 4)
494   ret <32 x i16> %res
497 define <32 x i16> @test_int_x86_avx512fp16_mask_cvttph2uw_512_b(ptr %arg0, <32 x i16> %arg1, i32 %mask) {
498 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvttph2uw_512_b:
499 ; CHECK:       # %bb.0:
500 ; CHECK-NEXT:    kmovd %esi, %k1
501 ; CHECK-NEXT:    vcvttph2uw (%rdi){1to32}, %zmm0 {%k1}
502 ; CHECK-NEXT:    retq
503   %scalar = load half, ptr %arg0
504   %scalar_in_vector = insertelement <32 x half> undef, half %scalar, i32 0
505   %val = shufflevector <32 x half> %scalar_in_vector, <32 x half> undef, <32 x i32> zeroinitializer
506   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvttph2uw.512(<32 x half> %val, <32 x i16> %arg1, i32 %mask, i32 4)
507   ret <32 x i16> %res
510 define <32 x i16> @test_int_x86_avx512fp16_mask_cvttph2uw_512_sae(<32 x half> %arg0, <32 x i16> %arg1, i32 %mask) {
511 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvttph2uw_512_sae:
512 ; CHECK:       # %bb.0:
513 ; CHECK-NEXT:    kmovd %edi, %k1
514 ; CHECK-NEXT:    vcvttph2uw {sae}, %zmm0, %zmm1 {%k1}
515 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
516 ; CHECK-NEXT:    retq
517   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvttph2uw.512(<32 x half> %arg0, <32 x i16> %arg1, i32 %mask, i32 8)
518   ret <32 x i16> %res
521 define <32 x i16> @test_int_x86_avx512fp16_mask_cvttph2uw_512_nomask(<32 x half> %arg0, <32 x i16> %arg1) {
522 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvttph2uw_512_nomask:
523 ; CHECK:       # %bb.0:
524 ; CHECK-NEXT:    vcvttph2uw %zmm0, %zmm0
525 ; CHECK-NEXT:    retq
526   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvttph2uw.512(<32 x half> %arg0, <32 x i16> %arg1, i32 -1, i32 4)
527   ret <32 x i16> %res
530 define <32 x i16> @test_int_x86_avx512fp16_mask_cvttph2uw_512_z(<32 x half> %arg0, i32 %mask) {
531 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvttph2uw_512_z:
532 ; CHECK:       # %bb.0:
533 ; CHECK-NEXT:    kmovd %edi, %k1
534 ; CHECK-NEXT:    vcvttph2uw %zmm0, %zmm0 {%k1} {z}
535 ; CHECK-NEXT:    retq
536   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvttph2uw.512(<32 x half> %arg0, <32 x i16> zeroinitializer, i32 %mask, i32 4)
537   ret <32 x i16> %res
540 define <32 x i16> @test_int_x86_avx512fp16_mask_cvttph2uw_512_load(ptr %arg0, <32 x i16> %arg1, i32 %mask) {
541 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cvttph2uw_512_load:
542 ; CHECK:       # %bb.0:
543 ; CHECK-NEXT:    kmovd %esi, %k1
544 ; CHECK-NEXT:    vcvttph2uw (%rdi), %zmm0 {%k1}
545 ; CHECK-NEXT:    retq
546   %val = load <32 x half>, ptr %arg0
547   %res = call <32 x i16> @llvm.x86.avx512fp16.mask.vcvttph2uw.512(<32 x half> %val, <32 x i16> %arg1, i32 %mask, i32 4)
548   ret <32 x i16> %res