xref: /llvm-project/clang/test/CodeGen/X86/avx512fp16-builtins.c (revision a3d2d34e844ac3b9186d9ebc7696b48e717ecb76)
1 // RUN: %clang_cc1 -ffreestanding -flax-vector-conversions=none %s -triple=x86_64-unknown-unknown -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror | FileCheck %s
2 
3 #include <immintrin.h>
4 
test_mm512_cvtsh_h(__m512h __A)5 _Float16 test_mm512_cvtsh_h(__m512h __A) {
6   // CHECK-LABEL: @test_mm512_cvtsh_h
7   // CHECK: extractelement <32 x half> %{{.*}}, i32 0
8   return _mm512_cvtsh_h(__A);
9 }
10 
test_mm_setzero_ph(void)11 __m128h test_mm_setzero_ph(void) {
12   // CHECK-LABEL: @test_mm_setzero_ph
13   // CHECK: zeroinitializer
14   return _mm_setzero_ph();
15 }
16 
test_mm256_setzero_ph(void)17 __m256h test_mm256_setzero_ph(void) {
18   // CHECK-LABEL: @test_mm256_setzero_ph
19   // CHECK: zeroinitializer
20   return _mm256_setzero_ph();
21 }
22 
test_mm256_undefined_ph(void)23 __m256h test_mm256_undefined_ph(void) {
24   // CHECK-LABEL: @test_mm256_undefined_ph
25   // CHECK: ret <16 x half> zeroinitializer
26   return _mm256_undefined_ph();
27 }
28 
test_mm512_setzero_ph(void)29 __m512h test_mm512_setzero_ph(void) {
30   // CHECK-LABEL: @test_mm512_setzero_ph
31   // CHECK: zeroinitializer
32   return _mm512_setzero_ph();
33 }
34 
test_mm_undefined_ph(void)35 __m128h test_mm_undefined_ph(void) {
36   // CHECK-LABEL: @test_mm_undefined_ph
37   // CHECK: ret <8 x half> zeroinitializer
38   return _mm_undefined_ph();
39 }
40 
test_mm512_undefined_ph(void)41 __m512h test_mm512_undefined_ph(void) {
42   // CHECK-LABEL: @test_mm512_undefined_ph
43   // CHECK: ret <32 x half> zeroinitializer
44   return _mm512_undefined_ph();
45 }
46 
test_mm512_set1_ph(_Float16 h)47 __m512h test_mm512_set1_ph(_Float16 h) {
48   // CHECK-LABEL: @test_mm512_set1_ph
49   // CHECK: insertelement <32 x half> {{.*}}, i32 0
50   // CHECK: insertelement <32 x half> {{.*}}, i32 1
51   // CHECK: insertelement <32 x half> {{.*}}, i32 2
52   // CHECK: insertelement <32 x half> {{.*}}, i32 3
53   // CHECK: insertelement <32 x half> {{.*}}, i32 4
54   // CHECK: insertelement <32 x half> {{.*}}, i32 5
55   // CHECK: insertelement <32 x half> {{.*}}, i32 6
56   // CHECK: insertelement <32 x half> {{.*}}, i32 7
57   // CHECK: insertelement <32 x half> {{.*}}, i32 8
58   // CHECK: insertelement <32 x half> {{.*}}, i32 9
59   // CHECK: insertelement <32 x half> {{.*}}, i32 10
60   // CHECK: insertelement <32 x half> {{.*}}, i32 11
61   // CHECK: insertelement <32 x half> {{.*}}, i32 12
62   // CHECK: insertelement <32 x half> {{.*}}, i32 13
63   // CHECK: insertelement <32 x half> {{.*}}, i32 14
64   // CHECK: insertelement <32 x half> {{.*}}, i32 15
65   // CHECK: insertelement <32 x half> {{.*}}, i32 16
66   // CHECK: insertelement <32 x half> {{.*}}, i32 17
67   // CHECK: insertelement <32 x half> {{.*}}, i32 18
68   // CHECK: insertelement <32 x half> {{.*}}, i32 19
69   // CHECK: insertelement <32 x half> {{.*}}, i32 20
70   // CHECK: insertelement <32 x half> {{.*}}, i32 21
71   // CHECK: insertelement <32 x half> {{.*}}, i32 22
72   // CHECK: insertelement <32 x half> {{.*}}, i32 23
73   // CHECK: insertelement <32 x half> {{.*}}, i32 24
74   // CHECK: insertelement <32 x half> {{.*}}, i32 25
75   // CHECK: insertelement <32 x half> {{.*}}, i32 26
76   // CHECK: insertelement <32 x half> {{.*}}, i32 27
77   // CHECK: insertelement <32 x half> {{.*}}, i32 28
78   // CHECK: insertelement <32 x half> {{.*}}, i32 29
79   // CHECK: insertelement <32 x half> {{.*}}, i32 30
80   // CHECK: insertelement <32 x half> {{.*}}, i32 31
81   return _mm512_set1_ph(h);
82 }
83 
test_mm512_set1_pch(_Float16 _Complex h)84 __m512h test_mm512_set1_pch(_Float16 _Complex h) {
85   // CHECK-LABEL: @test_mm512_set1_pch
86   // CHECK: insertelement <16 x float> {{.*}}, i32 0
87   // CHECK: insertelement <16 x float> {{.*}}, i32 1
88   // CHECK: insertelement <16 x float> {{.*}}, i32 2
89   // CHECK: insertelement <16 x float> {{.*}}, i32 3
90   // CHECK: insertelement <16 x float> {{.*}}, i32 4
91   // CHECK: insertelement <16 x float> {{.*}}, i32 5
92   // CHECK: insertelement <16 x float> {{.*}}, i32 6
93   // CHECK: insertelement <16 x float> {{.*}}, i32 7
94   // CHECK: insertelement <16 x float> {{.*}}, i32 8
95   // CHECK: insertelement <16 x float> {{.*}}, i32 9
96   // CHECK: insertelement <16 x float> {{.*}}, i32 10
97   // CHECK: insertelement <16 x float> {{.*}}, i32 11
98   // CHECK: insertelement <16 x float> {{.*}}, i32 12
99   // CHECK: insertelement <16 x float> {{.*}}, i32 13
100   // CHECK: insertelement <16 x float> {{.*}}, i32 14
101   // CHECK: insertelement <16 x float> {{.*}}, i32 15
102   // CHECK: bitcast <16 x float>{{.*}} to <32 x half>
103   return _mm512_set1_pch(h);
104 }
105 
test_mm512_set_ph(_Float16 __h1,_Float16 __h2,_Float16 __h3,_Float16 __h4,_Float16 __h5,_Float16 __h6,_Float16 __h7,_Float16 __h8,_Float16 __h9,_Float16 __h10,_Float16 __h11,_Float16 __h12,_Float16 __h13,_Float16 __h14,_Float16 __h15,_Float16 __h16,_Float16 __h17,_Float16 __h18,_Float16 __h19,_Float16 __h20,_Float16 __h21,_Float16 __h22,_Float16 __h23,_Float16 __h24,_Float16 __h25,_Float16 __h26,_Float16 __h27,_Float16 __h28,_Float16 __h29,_Float16 __h30,_Float16 __h31,_Float16 __h32)106 __m512h test_mm512_set_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 __h4,
107                           _Float16 __h5, _Float16 __h6, _Float16 __h7, _Float16 __h8,
108                           _Float16 __h9, _Float16 __h10, _Float16 __h11, _Float16 __h12,
109                           _Float16 __h13, _Float16 __h14, _Float16 __h15, _Float16 __h16,
110                           _Float16 __h17, _Float16 __h18, _Float16 __h19, _Float16 __h20,
111                           _Float16 __h21, _Float16 __h22, _Float16 __h23, _Float16 __h24,
112                           _Float16 __h25, _Float16 __h26, _Float16 __h27, _Float16 __h28,
113                           _Float16 __h29, _Float16 __h30, _Float16 __h31, _Float16 __h32) {
114   // CHECK-LABEL: @test_mm512_set_ph
115   // CHECK: insertelement <32 x half> {{.*}}, i32 0
116   // CHECK: insertelement <32 x half> {{.*}}, i32 1
117   // CHECK: insertelement <32 x half> {{.*}}, i32 2
118   // CHECK: insertelement <32 x half> {{.*}}, i32 3
119   // CHECK: insertelement <32 x half> {{.*}}, i32 4
120   // CHECK: insertelement <32 x half> {{.*}}, i32 5
121   // CHECK: insertelement <32 x half> {{.*}}, i32 6
122   // CHECK: insertelement <32 x half> {{.*}}, i32 7
123   // CHECK: insertelement <32 x half> {{.*}}, i32 8
124   // CHECK: insertelement <32 x half> {{.*}}, i32 9
125   // CHECK: insertelement <32 x half> {{.*}}, i32 10
126   // CHECK: insertelement <32 x half> {{.*}}, i32 11
127   // CHECK: insertelement <32 x half> {{.*}}, i32 12
128   // CHECK: insertelement <32 x half> {{.*}}, i32 13
129   // CHECK: insertelement <32 x half> {{.*}}, i32 14
130   // CHECK: insertelement <32 x half> {{.*}}, i32 15
131   // CHECK: insertelement <32 x half> {{.*}}, i32 16
132   // CHECK: insertelement <32 x half> {{.*}}, i32 17
133   // CHECK: insertelement <32 x half> {{.*}}, i32 18
134   // CHECK: insertelement <32 x half> {{.*}}, i32 19
135   // CHECK: insertelement <32 x half> {{.*}}, i32 20
136   // CHECK: insertelement <32 x half> {{.*}}, i32 21
137   // CHECK: insertelement <32 x half> {{.*}}, i32 22
138   // CHECK: insertelement <32 x half> {{.*}}, i32 23
139   // CHECK: insertelement <32 x half> {{.*}}, i32 24
140   // CHECK: insertelement <32 x half> {{.*}}, i32 25
141   // CHECK: insertelement <32 x half> {{.*}}, i32 26
142   // CHECK: insertelement <32 x half> {{.*}}, i32 27
143   // CHECK: insertelement <32 x half> {{.*}}, i32 28
144   // CHECK: insertelement <32 x half> {{.*}}, i32 29
145   // CHECK: insertelement <32 x half> {{.*}}, i32 30
146   // CHECK: insertelement <32 x half> {{.*}}, i32 31
147   return _mm512_set_ph(__h1, __h2, __h3, __h4, __h5, __h6, __h7, __h8,
148                        __h9, __h10, __h11, __h12, __h13, __h14, __h15, __h16,
149                        __h17, __h18, __h19, __h20, __h21, __h22, __h23, __h24,
150                        __h25, __h26, __h27, __h28, __h29, __h30, __h31, __h32);
151 }
152 
test_mm512_setr_ph(_Float16 __h1,_Float16 __h2,_Float16 __h3,_Float16 __h4,_Float16 __h5,_Float16 __h6,_Float16 __h7,_Float16 __h8,_Float16 __h9,_Float16 __h10,_Float16 __h11,_Float16 __h12,_Float16 __h13,_Float16 __h14,_Float16 __h15,_Float16 __h16,_Float16 __h17,_Float16 __h18,_Float16 __h19,_Float16 __h20,_Float16 __h21,_Float16 __h22,_Float16 __h23,_Float16 __h24,_Float16 __h25,_Float16 __h26,_Float16 __h27,_Float16 __h28,_Float16 __h29,_Float16 __h30,_Float16 __h31,_Float16 __h32)153 __m512h test_mm512_setr_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 __h4,
154                            _Float16 __h5, _Float16 __h6, _Float16 __h7, _Float16 __h8,
155                            _Float16 __h9, _Float16 __h10, _Float16 __h11, _Float16 __h12,
156                            _Float16 __h13, _Float16 __h14, _Float16 __h15, _Float16 __h16,
157                            _Float16 __h17, _Float16 __h18, _Float16 __h19, _Float16 __h20,
158                            _Float16 __h21, _Float16 __h22, _Float16 __h23, _Float16 __h24,
159                            _Float16 __h25, _Float16 __h26, _Float16 __h27, _Float16 __h28,
160                            _Float16 __h29, _Float16 __h30, _Float16 __h31, _Float16 __h32) {
161   // CHECK-LABEL: @test_mm512_setr_ph
162   // CHECK: insertelement <32 x half> {{.*}}, i32 0
163   // CHECK: insertelement <32 x half> {{.*}}, i32 1
164   // CHECK: insertelement <32 x half> {{.*}}, i32 2
165   // CHECK: insertelement <32 x half> {{.*}}, i32 3
166   // CHECK: insertelement <32 x half> {{.*}}, i32 4
167   // CHECK: insertelement <32 x half> {{.*}}, i32 5
168   // CHECK: insertelement <32 x half> {{.*}}, i32 6
169   // CHECK: insertelement <32 x half> {{.*}}, i32 7
170   // CHECK: insertelement <32 x half> {{.*}}, i32 8
171   // CHECK: insertelement <32 x half> {{.*}}, i32 9
172   // CHECK: insertelement <32 x half> {{.*}}, i32 10
173   // CHECK: insertelement <32 x half> {{.*}}, i32 11
174   // CHECK: insertelement <32 x half> {{.*}}, i32 12
175   // CHECK: insertelement <32 x half> {{.*}}, i32 13
176   // CHECK: insertelement <32 x half> {{.*}}, i32 14
177   // CHECK: insertelement <32 x half> {{.*}}, i32 15
178   // CHECK: insertelement <32 x half> {{.*}}, i32 16
179   // CHECK: insertelement <32 x half> {{.*}}, i32 17
180   // CHECK: insertelement <32 x half> {{.*}}, i32 18
181   // CHECK: insertelement <32 x half> {{.*}}, i32 19
182   // CHECK: insertelement <32 x half> {{.*}}, i32 20
183   // CHECK: insertelement <32 x half> {{.*}}, i32 21
184   // CHECK: insertelement <32 x half> {{.*}}, i32 22
185   // CHECK: insertelement <32 x half> {{.*}}, i32 23
186   // CHECK: insertelement <32 x half> {{.*}}, i32 24
187   // CHECK: insertelement <32 x half> {{.*}}, i32 25
188   // CHECK: insertelement <32 x half> {{.*}}, i32 26
189   // CHECK: insertelement <32 x half> {{.*}}, i32 27
190   // CHECK: insertelement <32 x half> {{.*}}, i32 28
191   // CHECK: insertelement <32 x half> {{.*}}, i32 29
192   // CHECK: insertelement <32 x half> {{.*}}, i32 30
193   // CHECK: insertelement <32 x half> {{.*}}, i32 31
194   return _mm512_setr_ph(__h1, __h2, __h3, __h4, __h5, __h6, __h7, __h8,
195                         __h9, __h10, __h11, __h12, __h13, __h14, __h15, __h16,
196                         __h17, __h18, __h19, __h20, __h21, __h22, __h23, __h24,
197                         __h25, __h26, __h27, __h28, __h29, __h30, __h31, __h32);
198 }
199 
test_mm_castph_ps(__m128h A)200 __m128 test_mm_castph_ps(__m128h A) {
201   // CHECK-LABEL: test_mm_castph_ps
202   // CHECK: bitcast <8 x half> %{{.*}} to <4 x float>
203   return _mm_castph_ps(A);
204 }
205 
test_mm256_castph_ps(__m256h A)206 __m256 test_mm256_castph_ps(__m256h A) {
207   // CHECK-LABEL: test_mm256_castph_ps
208   // CHECK: bitcast <16 x half> %{{.*}} to <8 x float>
209   return _mm256_castph_ps(A);
210 }
211 
test_mm512_castph_ps(__m512h A)212 __m512 test_mm512_castph_ps(__m512h A) {
213   // CHECK-LABEL: test_mm512_castph_ps
214   // CHECK: bitcast <32 x half> %{{.*}} to <16 x float>
215   return _mm512_castph_ps(A);
216 }
217 
test_mm_castph_pd(__m128h A)218 __m128d test_mm_castph_pd(__m128h A) {
219   // CHECK-LABEL: test_mm_castph_pd
220   // CHECK: bitcast <8 x half> %{{.*}} to <2 x double>
221   return _mm_castph_pd(A);
222 }
223 
test_mm256_castph_pd(__m256h A)224 __m256d test_mm256_castph_pd(__m256h A) {
225   // CHECK-LABEL: test_mm256_castph_pd
226   // CHECK: bitcast <16 x half> %{{.*}} to <4 x double>
227   return _mm256_castph_pd(A);
228 }
229 
test_mm512_castph_pd(__m512h A)230 __m512d test_mm512_castph_pd(__m512h A) {
231   // CHECK-LABEL: test_mm512_castph_pd
232   // CHECK: bitcast <32 x half> %{{.*}} to <8 x double>
233   return _mm512_castph_pd(A);
234 }
235 
test_mm_castph_si128(__m128h A)236 __m128i test_mm_castph_si128(__m128h A) {
237   // CHECK-LABEL: test_mm_castph_si128
238   // CHECK: bitcast <8 x half> %{{.*}} to <2 x i64>
239   return _mm_castph_si128(A);
240 }
241 
test_mm256_castph_si256(__m256h A)242 __m256i test_mm256_castph_si256(__m256h A) {
243   // CHECK-LABEL: test_mm256_castph_si256
244   // CHECK: bitcast <16 x half> %{{.*}} to <4 x i64>
245   return _mm256_castph_si256(A);
246 }
247 
test_mm512_castph_si512(__m512h A)248 __m512i test_mm512_castph_si512(__m512h A) {
249   // CHECK-LABEL: test_mm512_castph_si512
250   // CHECK: bitcast <32 x half> %{{.*}} to <8 x i64>
251   return _mm512_castph_si512(A);
252 }
253 
test_mm_castps_ph(__m128 A)254 __m128h test_mm_castps_ph(__m128 A) {
255   // CHECK-LABEL: test_mm_castps_ph
256   // CHECK: bitcast <4 x float> %{{.*}} to <8 x half>
257   return _mm_castps_ph(A);
258 }
259 
test_mm256_castps_ph(__m256 A)260 __m256h test_mm256_castps_ph(__m256 A) {
261   // CHECK-LABEL: test_mm256_castps_ph
262   // CHECK: bitcast <8 x float> %{{.*}} to <16 x half>
263   return _mm256_castps_ph(A);
264 }
265 
test_mm512_castps_ph(__m512 A)266 __m512h test_mm512_castps_ph(__m512 A) {
267   // CHECK-LABEL: test_mm512_castps_ph
268   // CHECK: bitcast <16 x float> %{{.*}} to <32 x half>
269   return _mm512_castps_ph(A);
270 }
271 
test_mm_castpd_ph(__m128d A)272 __m128h test_mm_castpd_ph(__m128d A) {
273   // CHECK-LABEL: test_mm_castpd_ph
274   // CHECK: bitcast <2 x double> %{{.*}} to <8 x half>
275   return _mm_castpd_ph(A);
276 }
277 
test_mm256_castpd_ph(__m256d A)278 __m256h test_mm256_castpd_ph(__m256d A) {
279   // CHECK-LABEL: test_mm256_castpd_ph
280   // CHECK: bitcast <4 x double> %{{.*}} to <16 x half>
281   return _mm256_castpd_ph(A);
282 }
283 
test_mm512_castpd_ph(__m512d A)284 __m512h test_mm512_castpd_ph(__m512d A) {
285   // CHECK-LABEL: test_mm512_castpd_ph
286   // CHECK: bitcast <8 x double> %{{.*}} to <32 x half>
287   return _mm512_castpd_ph(A);
288 }
289 
test_mm_castsi128_ph(__m128i A)290 __m128h test_mm_castsi128_ph(__m128i A) {
291   // CHECK-LABEL: test_mm_castsi128_ph
292   // CHECK: bitcast <2 x i64> %{{.*}} to <8 x half>
293   return _mm_castsi128_ph(A);
294 }
295 
test_mm256_castsi256_ph(__m256i A)296 __m256h test_mm256_castsi256_ph(__m256i A) {
297   // CHECK-LABEL: test_mm256_castsi256_ph
298   // CHECK: bitcast <4 x i64> %{{.*}} to <16 x half>
299   return _mm256_castsi256_ph(A);
300 }
301 
test_mm512_castsi512_ph(__m512i A)302 __m512h test_mm512_castsi512_ph(__m512i A) {
303   // CHECK-LABEL: test_mm512_castsi512_ph
304   // CHECK: bitcast <8 x i64> %{{.*}} to <32 x half>
305   return _mm512_castsi512_ph(A);
306 }
307 
test_mm256_castph256_ph128(__m256h __a)308 __m128h test_mm256_castph256_ph128(__m256h __a) {
309   // CHECK-LABEL: test_mm256_castph256_ph128
310   // CHECK: shufflevector <16 x half> %{{.*}}, <16 x half> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
311   return _mm256_castph256_ph128(__a);
312 }
313 
test_mm512_castph512_ph128(__m512h __a)314 __m128h test_mm512_castph512_ph128(__m512h __a) {
315   // CHECK-LABEL: test_mm512_castph512_ph128
316   // CHECK: shufflevector <32 x half> %{{.*}}, <32 x half> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
317   return _mm512_castph512_ph128(__a);
318 }
319 
test_mm512_castph512_ph256(__m512h __a)320 __m256h test_mm512_castph512_ph256(__m512h __a) {
321   // CHECK-LABEL: test_mm512_castph512_ph256
322   // CHECK: shufflevector <32 x half> %{{.*}}, <32 x half> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
323   return _mm512_castph512_ph256(__a);
324 }
325 
test_mm256_castph128_ph256(__m128h __a)326 __m256h test_mm256_castph128_ph256(__m128h __a) {
327   // CHECK-LABEL: test_mm256_castph128_ph256
328   // CHECK: [[A:%.*]] = freeze <8 x half> poison
329   // CHECK: shufflevector <8 x half> %{{.*}}, <8 x half> [[A]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
330   return _mm256_castph128_ph256(__a);
331 }
332 
test_mm512_castph128_ph512(__m128h __a)333 __m512h test_mm512_castph128_ph512(__m128h __a) {
334   // CHECK-LABEL: test_mm512_castph128_ph512
335   // CHECK: [[B:%.*]] = freeze <16 x half> poison
336   // CHECK: store <16 x half> [[B]], ptr [[BA:%.*]]
337   // CHECK: [[A:%.*]] = freeze <8 x half> poison
338   // CHECK: [[SV:%.*]] = shufflevector <8 x half> %{{.*}}, <8 x half> [[A]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
339   // CHECK: [[C:%.*]] = load <16 x half>, ptr [[BA]]
340   // CHECK: shufflevector <16 x half> [[SV]], <16 x half> [[C]], <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
341   return _mm512_castph128_ph512(__a);
342 }
343 
test_mm512_castph256_ph512(__m256h __a)344 __m512h test_mm512_castph256_ph512(__m256h __a) {
345   // CHECK-LABEL: test_mm512_castph256_ph512
346   // CHECK: [[A:%.*]] = freeze <16 x half> poison
347   // CHECK: shufflevector <16 x half> %{{.*}}, <16 x half> [[A]], <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
348   return _mm512_castph256_ph512(__a);
349 }
350 
test_mm256_zextph128_ph256(__m128h __a)351 __m256h test_mm256_zextph128_ph256(__m128h __a) {
352   // CHECK-LABEL: test_mm256_zextph128_ph256
353   // CHECK: shufflevector <8 x half> %{{.*}}, <8 x half> {{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
354   return _mm256_zextph128_ph256(__a);
355 }
356 
test_mm512_zextph128_ph512(__m128h __a)357 __m512h test_mm512_zextph128_ph512(__m128h __a) {
358   // CHECK-LABEL: test_mm512_zextph128_ph512
359   // CHECK: shufflevector <8 x half> %{{.*}}, <8 x half> {{.*}}, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
360   return _mm512_zextph128_ph512(__a);
361 }
362 
test_mm512_zextph256_ph512(__m256h __a)363 __m512h test_mm512_zextph256_ph512(__m256h __a) {
364   // CHECK-LABEL: test_mm512_zextph256_ph512
365   // CHECK: shufflevector <16 x half> %{{.*}}, <16 x half> {{.*}}, <32 x i32>
366   return _mm512_zextph256_ph512(__a);
367 }
368 
test_mm_comi_round_sh(__m128h __A,__m128h __B)369 int test_mm_comi_round_sh(__m128h __A, __m128h __B) {
370   // CHECK-LABEL: test_mm_comi_round_sh
371   // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 0, i32 8)
372   return _mm_comi_round_sh(__A, __B, 0, _MM_FROUND_NO_EXC);
373 }
374 
test_mm_comi_sh(__m128h __A,__m128h __B)375 int test_mm_comi_sh(__m128h __A, __m128h __B) {
376   // CHECK-LABEL: test_mm_comi_sh
377   // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 0, i32 4)
378   return _mm_comi_sh(__A, __B, 0);
379 }
380 
test_mm_comieq_sh(__m128h __A,__m128h __B)381 int test_mm_comieq_sh(__m128h __A, __m128h __B) {
382   // CHECK-LABEL: test_mm_comieq_sh
383   // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 16, i32 4)
384   return _mm_comieq_sh(__A, __B);
385 }
386 
test_mm_comilt_sh(__m128h __A,__m128h __B)387 int test_mm_comilt_sh(__m128h __A, __m128h __B) {
388   // CHECK-LABEL: test_mm_comilt_sh
389   // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 1, i32 4)
390   return _mm_comilt_sh(__A, __B);
391 }
392 
test_mm_comile_sh(__m128h __A,__m128h __B)393 int test_mm_comile_sh(__m128h __A, __m128h __B) {
394   // CHECK-LABEL: test_mm_comile_sh
395   // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 2, i32 4)
396   return _mm_comile_sh(__A, __B);
397 }
398 
test_mm_comigt_sh(__m128h __A,__m128h __B)399 int test_mm_comigt_sh(__m128h __A, __m128h __B) {
400   // CHECK-LABEL: test_mm_comigt_sh
401   // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 14, i32 4)
402   return _mm_comigt_sh(__A, __B);
403 }
404 
test_mm_comige_sh(__m128h __A,__m128h __B)405 int test_mm_comige_sh(__m128h __A, __m128h __B) {
406   // CHECK-LABEL: test_mm_comige_sh
407   // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 13, i32 4)
408   return _mm_comige_sh(__A, __B);
409 }
410 
test_mm_comineq_sh(__m128h __A,__m128h __B)411 int test_mm_comineq_sh(__m128h __A, __m128h __B) {
412   // CHECK-LABEL: test_mm_comineq_sh
413   // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 20, i32 4)
414   return _mm_comineq_sh(__A, __B);
415 }
416 
test_mm_ucomieq_sh(__m128h __A,__m128h __B)417 int test_mm_ucomieq_sh(__m128h __A, __m128h __B) {
418   // CHECK-LABEL: test_mm_ucomieq_sh
419   // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 0, i32 4)
420   return _mm_ucomieq_sh(__A, __B);
421 }
422 
test_mm_ucomilt_sh(__m128h __A,__m128h __B)423 int test_mm_ucomilt_sh(__m128h __A, __m128h __B) {
424   // CHECK-LABEL: test_mm_ucomilt_sh
425   // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 17, i32 4)
426   return _mm_ucomilt_sh(__A, __B);
427 }
428 
test_mm_ucomile_sh(__m128h __A,__m128h __B)429 int test_mm_ucomile_sh(__m128h __A, __m128h __B) {
430   // CHECK-LABEL: test_mm_ucomile_sh
431   // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 18, i32 4)
432   return _mm_ucomile_sh(__A, __B);
433 }
434 
test_mm_ucomigt_sh(__m128h __A,__m128h __B)435 int test_mm_ucomigt_sh(__m128h __A, __m128h __B) {
436   // CHECK-LABEL: test_mm_ucomigt_sh
437   // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 30, i32 4)
438   return _mm_ucomigt_sh(__A, __B);
439 }
440 
test_mm_ucomige_sh(__m128h __A,__m128h __B)441 int test_mm_ucomige_sh(__m128h __A, __m128h __B) {
442   // CHECK-LABEL: test_mm_ucomige_sh
443   // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 29, i32 4)
444   return _mm_ucomige_sh(__A, __B);
445 }
446 
test_mm_ucomineq_sh(__m128h __A,__m128h __B)447 int test_mm_ucomineq_sh(__m128h __A, __m128h __B) {
448   // CHECK-LABEL: test_mm_ucomineq_sh
449   // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 4, i32 4)
450   return _mm_ucomineq_sh(__A, __B);
451 }
452 
test_mm512_add_ph(__m512h __A,__m512h __B)453 __m512h test_mm512_add_ph(__m512h __A, __m512h __B) {
454   // CHECK-LABEL: @test_mm512_add_ph
455   // CHECK: %{{.*}} = fadd <32 x half> %{{.*}}, %{{.*}}
456   return _mm512_add_ph(__A, __B);
457 }
458 
test_mm512_mask_add_ph(__m512h __W,__mmask32 __U,__m512h __A,__m512h __B)459 __m512h test_mm512_mask_add_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) {
460   // CHECK-LABEL: @test_mm512_mask_add_ph
461   // CHECK: %{{.*}} = fadd <32 x half> %{{.*}}, %{{.*}}
462   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
463   return (__m512h)_mm512_mask_add_ph(__W, __U, __A, __B);
464 }
465 
test_mm512_maskz_add_ph(__mmask32 __U,__m512h __A,__m512h __B)466 __m512h test_mm512_maskz_add_ph(__mmask32 __U, __m512h __A, __m512h __B) {
467   // CHECK-LABEL: @test_mm512_maskz_add_ph
468   // CHECK: %{{.*}} = fadd <32 x half> %{{.*}}, %{{.*}}
469   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
470   return _mm512_maskz_add_ph(__U, __A, __B);
471 }
472 
test_mm512_add_round_ph(__m512h __A,__m512h __B)473 __m512h test_mm512_add_round_ph(__m512h __A, __m512h __B) {
474   // CHECK-LABEL: @test_mm512_add_round_ph
475   // CHECK: @llvm.x86.avx512fp16.add.ph.512
476   return _mm512_add_round_ph(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
477 }
test_mm512_mask_add_round_ph(__m512h __W,__mmask32 __U,__m512h __A,__m512h __B)478 __m512h test_mm512_mask_add_round_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) {
479   // CHECK-LABEL: @test_mm512_mask_add_round_ph
480   // CHECK: @llvm.x86.avx512fp16.add.ph.512
481   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
482   return _mm512_mask_add_round_ph(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
483 }
test_mm512_maskz_add_round_ph(__mmask32 __U,__m512h __A,__m512h __B)484 __m512h test_mm512_maskz_add_round_ph(__mmask32 __U, __m512h __A, __m512h __B) {
485   // CHECK-LABEL: @test_mm512_maskz_add_round_ph
486   // CHECK: @llvm.x86.avx512fp16.add.ph.512
487   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
488   return _mm512_maskz_add_round_ph(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
489 }
490 
test_mm512_sub_ph(__m512h __A,__m512h __B)491 __m512h test_mm512_sub_ph(__m512h __A, __m512h __B) {
492   // CHECK-LABEL: @test_mm512_sub_ph
493   // CHECK: %{{.*}} = fsub <32 x half> %{{.*}}, %{{.*}}
494   return _mm512_sub_ph(__A, __B);
495 }
496 
test_mm512_mask_sub_ph(__m512h __W,__mmask32 __U,__m512h __A,__m512h __B)497 __m512h test_mm512_mask_sub_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) {
498   // CHECK-LABEL: @test_mm512_mask_sub_ph
499   // CHECK: %{{.*}} = fsub <32 x half> %{{.*}}, %{{.*}}
500   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
501   return (__m512h)_mm512_mask_sub_ph(__W, __U, __A, __B);
502 }
503 
test_mm512_maskz_sub_ph(__mmask32 __U,__m512h __A,__m512h __B)504 __m512h test_mm512_maskz_sub_ph(__mmask32 __U, __m512h __A, __m512h __B) {
505   // CHECK-LABEL: @test_mm512_maskz_sub_ph
506   // CHECK: %{{.*}} = fsub <32 x half> %{{.*}}, %{{.*}}
507   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
508   return _mm512_maskz_sub_ph(__U, __A, __B);
509 }
510 
test_mm512_sub_round_ph(__m512h __A,__m512h __B)511 __m512h test_mm512_sub_round_ph(__m512h __A, __m512h __B) {
512   // CHECK-LABEL: @test_mm512_sub_round_ph
513   // CHECK: @llvm.x86.avx512fp16.sub.ph.512
514   return _mm512_sub_round_ph(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
515 }
test_mm512_mask_sub_round_ph(__m512h __W,__mmask32 __U,__m512h __A,__m512h __B)516 __m512h test_mm512_mask_sub_round_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) {
517   // CHECK-LABEL: @test_mm512_mask_sub_round_ph
518   // CHECK: @llvm.x86.avx512fp16.sub.ph.512
519   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
520   return _mm512_mask_sub_round_ph(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
521 }
test_mm512_maskz_sub_round_ph(__mmask32 __U,__m512h __A,__m512h __B)522 __m512h test_mm512_maskz_sub_round_ph(__mmask32 __U, __m512h __A, __m512h __B) {
523   // CHECK-LABEL: @test_mm512_maskz_sub_round_ph
524   // CHECK: @llvm.x86.avx512fp16.sub.ph.512
525   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
526   return _mm512_maskz_sub_round_ph(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
527 }
528 
test_mm512_mul_ph(__m512h __A,__m512h __B)529 __m512h test_mm512_mul_ph(__m512h __A, __m512h __B) {
530   // CHECK-LABEL: @test_mm512_mul_ph
531   // CHECK: %{{.*}} = fmul <32 x half> %{{.*}}, %{{.*}}
532   return _mm512_mul_ph(__A, __B);
533 }
534 
test_mm512_mask_mul_ph(__m512h __W,__mmask32 __U,__m512h __A,__m512h __B)535 __m512h test_mm512_mask_mul_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) {
536   // CHECK-LABEL: @test_mm512_mask_mul_ph
537   // CHECK: %{{.*}} = fmul <32 x half> %{{.*}}, %{{.*}}
538   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
539   return (__m512h)_mm512_mask_mul_ph(__W, __U, __A, __B);
540 }
541 
test_mm512_maskz_mul_ph(__mmask32 __U,__m512h __A,__m512h __B)542 __m512h test_mm512_maskz_mul_ph(__mmask32 __U, __m512h __A, __m512h __B) {
543   // CHECK-LABEL: @test_mm512_maskz_mul_ph
544   // CHECK: %{{.*}} = fmul <32 x half> %{{.*}}, %{{.*}}
545   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
546   return _mm512_maskz_mul_ph(__U, __A, __B);
547 }
548 
test_mm512_mul_round_ph(__m512h __A,__m512h __B)549 __m512h test_mm512_mul_round_ph(__m512h __A, __m512h __B) {
550   // CHECK-LABEL: @test_mm512_mul_round_ph
551   // CHECK: @llvm.x86.avx512fp16.mul.ph.512
552   return _mm512_mul_round_ph(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
553 }
test_mm512_mask_mul_round_ph(__m512h __W,__mmask32 __U,__m512h __A,__m512h __B)554 __m512h test_mm512_mask_mul_round_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) {
555   // CHECK-LABEL: @test_mm512_mask_mul_round_ph
556   // CHECK: @llvm.x86.avx512fp16.mul.ph.512
557   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
558   return _mm512_mask_mul_round_ph(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
559 }
test_mm512_maskz_mul_round_ph(__mmask32 __U,__m512h __A,__m512h __B)560 __m512h test_mm512_maskz_mul_round_ph(__mmask32 __U, __m512h __A, __m512h __B) {
561   // CHECK-LABEL: @test_mm512_maskz_mul_round_ph
562   // CHECK: @llvm.x86.avx512fp16.mul.ph.512
563   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
564   return _mm512_maskz_mul_round_ph(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
565 }
566 
test_mm512_div_ph(__m512h __A,__m512h __B)567 __m512h test_mm512_div_ph(__m512h __A, __m512h __B) {
568   // CHECK-LABEL: @test_mm512_div_ph
569   // CHECK: %{{.*}} = fdiv <32 x half> %{{.*}}, %{{.*}}
570   return _mm512_div_ph(__A, __B);
571 }
572 
test_mm512_mask_div_ph(__m512h __W,__mmask32 __U,__m512h __A,__m512h __B)573 __m512h test_mm512_mask_div_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) {
574   // CHECK-LABEL: @test_mm512_mask_div_ph
575   // CHECK: %{{.*}} = fdiv <32 x half> %{{.*}}, %{{.*}}
576   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
577   return (__m512h)_mm512_mask_div_ph(__W, __U, __A, __B);
578 }
579 
test_mm512_maskz_div_ph(__mmask32 __U,__m512h __A,__m512h __B)580 __m512h test_mm512_maskz_div_ph(__mmask32 __U, __m512h __A, __m512h __B) {
581   // CHECK-LABEL: @test_mm512_maskz_div_ph
582   // CHECK: %{{.*}} = fdiv <32 x half> %{{.*}}, %{{.*}}
583   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
584   return _mm512_maskz_div_ph(__U, __A, __B);
585 }
586 
test_mm512_div_round_ph(__m512h __A,__m512h __B)587 __m512h test_mm512_div_round_ph(__m512h __A, __m512h __B) {
588   // CHECK-LABEL: @test_mm512_div_round_ph
589   // CHECK: @llvm.x86.avx512fp16.div.ph.512
590   return _mm512_div_round_ph(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
591 }
test_mm512_mask_div_round_ph(__m512h __W,__mmask32 __U,__m512h __A,__m512h __B)592 __m512h test_mm512_mask_div_round_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) {
593   // CHECK-LABEL: @test_mm512_mask_div_round_ph
594   // CHECK: @llvm.x86.avx512fp16.div.ph.512
595   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
596   return _mm512_mask_div_round_ph(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
597 }
test_mm512_maskz_div_round_ph(__mmask32 __U,__m512h __A,__m512h __B)598 __m512h test_mm512_maskz_div_round_ph(__mmask32 __U, __m512h __A, __m512h __B) {
599   // CHECK-LABEL: @test_mm512_maskz_div_round_ph
600   // CHECK: @llvm.x86.avx512fp16.div.ph.512
601   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
602   return _mm512_maskz_div_round_ph(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
603 }
604 
test_mm512_min_ph(__m512h __A,__m512h __B)605 __m512h test_mm512_min_ph(__m512h __A, __m512h __B) {
606   // CHECK-LABEL: @test_mm512_min_ph
607   // CHECK: @llvm.x86.avx512fp16.min.ph.512
608   return _mm512_min_ph(__A, __B);
609 }
610 
test_mm512_mask_min_ph(__m512h __W,__mmask32 __U,__m512h __A,__m512h __B)611 __m512h test_mm512_mask_min_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) {
612   // CHECK-LABEL: @test_mm512_mask_min_ph
613   // CHECK: @llvm.x86.avx512fp16.min.ph.512
614   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
615   return (__m512h)_mm512_mask_min_ph(__W, __U, __A, __B);
616 }
617 
test_mm512_maskz_min_ph(__mmask32 __U,__m512h __A,__m512h __B)618 __m512h test_mm512_maskz_min_ph(__mmask32 __U, __m512h __A, __m512h __B) {
619   // CHECK-LABEL: @test_mm512_maskz_min_ph
620   // CHECK: @llvm.x86.avx512fp16.min.ph.512
621   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
622   return _mm512_maskz_min_ph(__U, __A, __B);
623 }
624 
test_mm512_min_round_ph(__m512h __A,__m512h __B)625 __m512h test_mm512_min_round_ph(__m512h __A, __m512h __B) {
626   // CHECK-LABEL: @test_mm512_min_round_ph
627   // CHECK: @llvm.x86.avx512fp16.min.ph.512
628   return _mm512_min_round_ph(__A, __B, _MM_FROUND_NO_EXC);
629 }
test_mm512_mask_min_round_ph(__m512h __W,__mmask32 __U,__m512h __A,__m512h __B)630 __m512h test_mm512_mask_min_round_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) {
631   // CHECK-LABEL: @test_mm512_mask_min_round_ph
632   // CHECK: @llvm.x86.avx512fp16.min.ph.512
633   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
634   return _mm512_mask_min_round_ph(__W, __U, __A, __B, _MM_FROUND_NO_EXC);
635 }
test_mm512_maskz_min_round_ph(__mmask32 __U,__m512h __A,__m512h __B)636 __m512h test_mm512_maskz_min_round_ph(__mmask32 __U, __m512h __A, __m512h __B) {
637   // CHECK-LABEL: @test_mm512_maskz_min_round_ph
638   // CHECK: @llvm.x86.avx512fp16.min.ph.512
639   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
640   return _mm512_maskz_min_round_ph(__U, __A, __B, _MM_FROUND_NO_EXC);
641 }
642 
test_mm512_max_ph(__m512h __A,__m512h __B)643 __m512h test_mm512_max_ph(__m512h __A, __m512h __B) {
644   // CHECK-LABEL: @test_mm512_max_ph
645   // CHECK: @llvm.x86.avx512fp16.max.ph.512
646 
647   return _mm512_max_ph(__A, __B);
648 }
649 
test_mm512_mask_max_ph(__m512h __W,__mmask32 __U,__m512h __A,__m512h __B)650 __m512h test_mm512_mask_max_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) {
651   // CHECK-LABEL: @test_mm512_mask_max_ph
652   // CHECK: @llvm.x86.avx512fp16.max.ph.512
653   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
654   return (__m512h)_mm512_mask_max_ph(__W, __U, __A, __B);
655 }
656 
test_mm512_maskz_max_ph(__mmask32 __U,__m512h __A,__m512h __B)657 __m512h test_mm512_maskz_max_ph(__mmask32 __U, __m512h __A, __m512h __B) {
658   // CHECK-LABEL: @test_mm512_maskz_max_ph
659   // CHECK: @llvm.x86.avx512fp16.max.ph.512
660   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
661   return _mm512_maskz_max_ph(__U, __A, __B);
662 }
663 
test_mm512_max_round_ph(__m512h __A,__m512h __B)664 __m512h test_mm512_max_round_ph(__m512h __A, __m512h __B) {
665   // CHECK-LABEL: @test_mm512_max_round_ph
666   // CHECK: @llvm.x86.avx512fp16.max.ph.512
667   return _mm512_max_round_ph(__A, __B, _MM_FROUND_NO_EXC);
668 }
669 
test_mm512_mask_max_round_ph(__m512h __W,__mmask32 __U,__m512h __A,__m512h __B)670 __m512h test_mm512_mask_max_round_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) {
671   // CHECK-LABEL: @test_mm512_mask_max_round_ph
672   // CHECK: @llvm.x86.avx512fp16.max.ph.512
673   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
674   return _mm512_mask_max_round_ph(__W, __U, __A, __B, _MM_FROUND_NO_EXC);
675 }
676 
test_mm512_maskz_max_round_ph(__mmask32 __U,__m512h __A,__m512h __B)677 __m512h test_mm512_maskz_max_round_ph(__mmask32 __U, __m512h __A, __m512h __B) {
678   // CHECK-LABEL: @test_mm512_maskz_max_round_ph
679   // CHECK: @llvm.x86.avx512fp16.max.ph.512
680   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
681   return _mm512_maskz_max_round_ph(__U, __A, __B, _MM_FROUND_NO_EXC);
682 }
683 
test_mm512_abs_ph(__m512h a)684 __m512h test_mm512_abs_ph(__m512h a) {
685   // CHECK-LABEL: @test_mm512_abs_ph
686   // CHECK: and <16 x i32>
687   return _mm512_abs_ph(a);
688 }
689 
test_mm512_conj_pch(__m512h __A)690 __m512h test_mm512_conj_pch(__m512h __A) {
691   // CHECK-LABEL: @test_mm512_conj_pch
692   // CHECK:  %{{.*}} = bitcast <32 x half> %{{.*}} to <16 x float>
693   // CHECK:  %{{.*}} = bitcast <16 x float> %{{.*}} to <16 x i32>
694   // CHECK:  %{{.*}} = bitcast <16 x float> %{{.*}} to <16 x i32>
695   // CHECK:  %{{.*}} = xor <16 x i32> %{{.*}}, %{{.*}}
696   // CHECK:  %{{.*}} = bitcast <16 x i32> %{{.*}} to <16 x float>
697   // CHECK:  %{{.*}} = bitcast <16 x float> %{{.*}} to <32 x half>
698   return _mm512_conj_pch(__A);
699 }
700 
test_mm512_mask_conj_pch(__m512h __W,__mmask32 __U,__m512h __A)701 __m512h test_mm512_mask_conj_pch(__m512h __W, __mmask32 __U, __m512h __A) {
702   // CHECK-LABEL: @test_mm512_mask_conj_pch
703   // CHECK:  %{{.*}} = trunc i32 %{{.*}} to i16
704   // CHECK:  %{{.*}} = bitcast <32 x half> %{{.*}} to <16 x float>
705   // CHECK:  %{{.*}} = bitcast <16 x float> %{{.*}} to <16 x i32>
706   // CHECK:  %{{.*}} = bitcast <16 x float> %{{.*}} to <16 x i32>
707   // CHECK:  %{{.*}} = xor <16 x i32> %{{.*}}, %{{.*}}
708   // CHECK:  %{{.*}} = bitcast <16 x i32> %{{.*}} to <16 x float>
709   // CHECK:  %{{.*}} = bitcast <16 x float> %{{.*}} to <32 x half>
710   // CHECK:  %{{.*}} = bitcast <32 x half> %{{.*}} to <16 x float>
711   // CHECK:  %{{.*}} = bitcast i16 %{{.*}} to <16 x i1>
712   // CHECK:  %{{.*}} = select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
713   // CHECK:  %{{.*}} = bitcast <16 x float> %{{.*}} to <32 x half>
714   return _mm512_mask_conj_pch(__W, __U, __A);
715 }
716 
test_mm512_maskz_conj_pch(__mmask32 __U,__m512h __A)717 __m512h test_mm512_maskz_conj_pch(__mmask32 __U, __m512h __A) {
718   // CHECK-LABEL: @test_mm512_maskz_conj_pch
719   // CHECK:  %{{.*}} = trunc i32 %{{.*}} to i16
720   // CHECK:  %{{.*}} = bitcast <32 x half> %{{.*}} to <16 x float>
721   // CHECK:  %{{.*}} = bitcast <16 x float> %{{.*}} to <16 x i32>
722   // CHECK:  %{{.*}} = bitcast <16 x float> %{{.*}} to <16 x i32>
723   // CHECK:  %{{.*}} = xor <16 x i32> %{{.*}}, %{{.*}}
724   // CHECK:  %{{.*}} = bitcast <16 x i32> %{{.*}} to <16 x float>
725   // CHECK:  %{{.*}} = bitcast <16 x float> %{{.*}} to <32 x half>
726   // CHECK:  %{{.*}} = bitcast i16 %{{.*}} to <16 x i1>
727   // CHECK:  %{{.*}} = select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
728   // CHECK:  %{{.*}} = bitcast <16 x float> %{{.*}} to <32 x half>
729   return _mm512_maskz_conj_pch(__U, __A);
730 }
731 
test_mm_add_round_sh(__m128h __A,__m128h __B)732 __m128h test_mm_add_round_sh(__m128h __A, __m128h __B) {
733   // CHECK-LABEL: @test_mm_add_round_sh
734   // CHECK: @llvm.x86.avx512fp16.mask.add.sh.round
735   return _mm_add_round_sh(__A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO);
736 }
test_mm_mask_add_round_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)737 __m128h test_mm_mask_add_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
738   // CHECK-LABEL: @test_mm_mask_add_round_sh
739   // CHECK: @llvm.x86.avx512fp16.mask.add.sh.round
740   return _mm_mask_add_round_sh(__W, __U, __A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO);
741 }
test_mm_maskz_add_round_sh(__mmask8 __U,__m128h __A,__m128h __B)742 __m128h test_mm_maskz_add_round_sh(__mmask8 __U, __m128h __A, __m128h __B) {
743   // CHECK-LABEL: @test_mm_maskz_add_round_sh
744   // CHECK: @llvm.x86.avx512fp16.mask.add.sh.round
745   return _mm_maskz_add_round_sh(__U, __A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO);
746 }
test_mm_mask_add_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)747 __m128h test_mm_mask_add_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
748   // CHECK-LABEL: @test_mm_mask_add_sh
749   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
750   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
751   // CHECK: %{{.*}} = fadd half %{{.*}}, %{{.*}}
752   // CHECK: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i32 0
753   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
754   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
755   // CHECK-NEXT: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>
756   // CHECK-NEXT: %{{.*}} = extractelement <8 x i1> %{{.*}}, i64 0
757   // CHECK-NEXT: %{{.*}} = select i1 %{{.*}}, half %{{.*}}, half %{{.*}}
758   // CHECK-NEXT: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i64 0
759   return _mm_mask_add_sh(__W, __U, __A, __B);
760 }
test_mm_maskz_add_sh(__mmask8 __U,__m128h __A,__m128h __B)761 __m128h test_mm_maskz_add_sh(__mmask8 __U, __m128h __A, __m128h __B) {
762   // CHECK-LABEL: @test_mm_maskz_add_sh
763   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
764   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
765   // CHECK: %{{.*}} = fadd half %{{.*}}, %{{.*}}
766   // CHECK: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i32 0
767   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
768   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
769   // CHECK-NEXT: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>
770   // CHECK-NEXT: %{{.*}} = extractelement <8 x i1> %{{.*}}, i64 0
771   // CHECK-NEXT: %{{.*}} = select i1 %{{.*}}, half %{{.*}}, half %{{.*}}
772   // CHECK-NEXT: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i64 0
773   return _mm_maskz_add_sh(__U, __A, __B);
774 }
775 
test_mm_add_sh(__m128h __A,__m128h __B)776 __m128h test_mm_add_sh(__m128h __A, __m128h __B) {
777   // CHECK-LABEL: @test_mm_add_sh
778   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
779   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
780   // CHECK: %{{.*}} = fadd half %{{.*}}, %{{.*}}
781   // CHECK: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i32 0
782   return _mm_add_sh(__A, __B);
783 }
784 
test_mm_sub_round_sh(__m128h __A,__m128h __B)785 __m128h test_mm_sub_round_sh(__m128h __A, __m128h __B) {
786   // CHECK-LABEL: @test_mm_sub_round_sh
787   // CHECK: @llvm.x86.avx512fp16.mask.sub.sh.round
788   return _mm_sub_round_sh(__A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO);
789 }
test_mm_mask_sub_round_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)790 __m128h test_mm_mask_sub_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
791   // CHECK-LABEL: @test_mm_mask_sub_round_sh
792   // CHECK: @llvm.x86.avx512fp16.mask.sub.sh.round
793   return _mm_mask_sub_round_sh(__W, __U, __A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO);
794 }
test_mm_maskz_sub_round_sh(__mmask8 __U,__m128h __A,__m128h __B)795 __m128h test_mm_maskz_sub_round_sh(__mmask8 __U, __m128h __A, __m128h __B) {
796   // CHECK-LABEL: @test_mm_maskz_sub_round_sh
797   // CHECK: @llvm.x86.avx512fp16.mask.sub.sh.round
798   return _mm_maskz_sub_round_sh(__U, __A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO);
799 }
test_mm_mask_sub_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)800 __m128h test_mm_mask_sub_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
801   // CHECK-LABEL: @test_mm_mask_sub_sh
802   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
803   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
804   // CHECK: %{{.*}} = fsub half %{{.*}}, %{{.*}}
805   // CHECK: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i32 0
806   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
807   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
808   // CHECK-NEXT: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>
809   // CHECK-NEXT: %{{.*}} = extractelement <8 x i1> %{{.*}}, i64 0
810   // CHECK-NEXT: %{{.*}} = select i1 %{{.*}}, half %{{.*}}, half %{{.*}}
811   // CHECK-NEXT: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i64 0
812   return _mm_mask_sub_sh(__W, __U, __A, __B);
813 }
test_mm_maskz_sub_sh(__mmask8 __U,__m128h __A,__m128h __B)814 __m128h test_mm_maskz_sub_sh(__mmask8 __U, __m128h __A, __m128h __B) {
815   // CHECK-LABEL: @test_mm_maskz_sub_sh
816   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
817   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
818   // CHECK: %{{.*}} = fsub half %{{.*}}, %{{.*}}
819   // CHECK: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i32 0
820   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
821   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
822   // CHECK-NEXT: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>
823   // CHECK-NEXT: %{{.*}} = extractelement <8 x i1> %{{.*}}, i64 0
824   // CHECK-NEXT: %{{.*}} = select i1 %{{.*}}, half %{{.*}}, half %{{.*}}
825   // CHECK-NEXT: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i64 0
826   return _mm_maskz_sub_sh(__U, __A, __B);
827 }
828 
test_mm_sub_sh(__m128h __A,__m128h __B)829 __m128h test_mm_sub_sh(__m128h __A, __m128h __B) {
830   // CHECK-LABEL: @test_mm_sub_sh
831   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
832   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
833   // CHECK: %{{.*}} = fsub half %{{.*}}, %{{.*}}
834   // CHECK: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i32 0
835   return _mm_sub_sh(__A, __B);
836 }
837 
test_mm_mul_round_sh(__m128h __A,__m128h __B)838 __m128h test_mm_mul_round_sh(__m128h __A, __m128h __B) {
839   // CHECK-LABEL: @test_mm_mul_round_sh
840   // CHECK: @llvm.x86.avx512fp16.mask.mul.sh.round
841   return _mm_mul_round_sh(__A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO);
842 }
test_mm_mask_mul_round_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)843 __m128h test_mm_mask_mul_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
844   // CHECK-LABEL: @test_mm_mask_mul_round_sh
845   // CHECK: @llvm.x86.avx512fp16.mask.mul.sh.round
846   return _mm_mask_mul_round_sh(__W, __U, __A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO);
847 }
test_mm_maskz_mul_round_sh(__mmask8 __U,__m128h __A,__m128h __B)848 __m128h test_mm_maskz_mul_round_sh(__mmask8 __U, __m128h __A, __m128h __B) {
849   // CHECK-LABEL: @test_mm_maskz_mul_round_sh
850   // CHECK: @llvm.x86.avx512fp16.mask.mul.sh.round
851   return _mm_maskz_mul_round_sh(__U, __A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO);
852 }
test_mm_mask_mul_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)853 __m128h test_mm_mask_mul_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
854   // CHECK-LABEL: @test_mm_mask_mul_sh
855   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
856   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
857   // CHECK: %{{.*}} = fmul half %{{.*}}, %{{.*}}
858   // CHECK: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i32 0
859   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
860   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
861   // CHECK-NEXT: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>
862   // CHECK-NEXT: %{{.*}} = extractelement <8 x i1> %{{.*}}, i64 0
863   // CHECK-NEXT: %{{.*}} = select i1 %{{.*}}, half %{{.*}}, half %{{.*}}
864   // CHECK-NEXT: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i64 0
865   return _mm_mask_mul_sh(__W, __U, __A, __B);
866 }
test_mm_maskz_mul_sh(__mmask8 __U,__m128h __A,__m128h __B)867 __m128h test_mm_maskz_mul_sh(__mmask8 __U, __m128h __A, __m128h __B) {
868   // CHECK-LABEL: @test_mm_maskz_mul_sh
869   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
870   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
871   // CHECK: %{{.*}} = fmul half %{{.*}}, %{{.*}}
872   // CHECK: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i32 0
873   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
874   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
875   // CHECK-NEXT: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>
876   // CHECK-NEXT: %{{.*}} = extractelement <8 x i1> %{{.*}}, i64 0
877   // CHECK-NEXT: %{{.*}} = select i1 %{{.*}}, half %{{.*}}, half %{{.*}}
878   // CHECK-NEXT: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i64 0
879   return _mm_maskz_mul_sh(__U, __A, __B);
880 }
881 
test_mm_mul_sh(__m128h __A,__m128h __B)882 __m128h test_mm_mul_sh(__m128h __A, __m128h __B) {
883   // CHECK-LABEL: @test_mm_mul_sh
884   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
885   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
886   // CHECK: %{{.*}} = fmul half %{{.*}}, %{{.*}}
887   // CHECK: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i32 0
888   return _mm_mul_sh(__A, __B);
889 }
890 
test_mm_div_round_sh(__m128h __A,__m128h __B)891 __m128h test_mm_div_round_sh(__m128h __A, __m128h __B) {
892   // CHECK-LABEL: @test_mm_div_round_sh
893   // CHECK: @llvm.x86.avx512fp16.mask.div.sh.round
894   return _mm_div_round_sh(__A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO);
895 }
test_mm_mask_div_round_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)896 __m128h test_mm_mask_div_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
897   // CHECK-LABEL: @test_mm_mask_div_round_sh
898   // CHECK: @llvm.x86.avx512fp16.mask.div.sh.round
899   return _mm_mask_div_round_sh(__W, __U, __A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO);
900 }
test_mm_maskz_div_round_sh(__mmask8 __U,__m128h __A,__m128h __B)901 __m128h test_mm_maskz_div_round_sh(__mmask8 __U, __m128h __A, __m128h __B) {
902   // CHECK-LABEL: @test_mm_maskz_div_round_sh
903   // CHECK: @llvm.x86.avx512fp16.mask.div.sh.round
904   return _mm_maskz_div_round_sh(__U, __A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO);
905 }
test_mm_mask_div_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)906 __m128h test_mm_mask_div_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
907   // CHECK-LABEL: @test_mm_mask_div_sh
908   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
909   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
910   // CHECK: %{{.*}} = fdiv half %{{.*}}, %{{.*}}
911   // CHECK: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i32 0
912   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
913   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
914   // CHECK-NEXT: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>
915   // CHECK-NEXT: %{{.*}} = extractelement <8 x i1> %{{.*}}, i64 0
916   // CHECK-NEXT: %{{.*}} = select i1 %{{.*}}, half %{{.*}}, half %{{.*}}
917   // CHECK-NEXT: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i64 0
918   return _mm_mask_div_sh(__W, __U, __A, __B);
919 }
test_mm_maskz_div_sh(__mmask8 __U,__m128h __A,__m128h __B)920 __m128h test_mm_maskz_div_sh(__mmask8 __U, __m128h __A, __m128h __B) {
921   // CHECK-LABEL: @test_mm_maskz_div_sh
922   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
923   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
924   // CHECK: %{{.*}} = fdiv half %{{.*}}, %{{.*}}
925   // CHECK: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i32 0
926   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
927   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
928   // CHECK-NEXT: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>
929   // CHECK-NEXT: %{{.*}} = extractelement <8 x i1> %{{.*}}, i64 0
930   // CHECK-NEXT: %{{.*}} = select i1 %{{.*}}, half %{{.*}}, half %{{.*}}
931   // CHECK-NEXT: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i64 0
932   return _mm_maskz_div_sh(__U, __A, __B);
933 }
934 
test_mm_div_sh(__m128h __A,__m128h __B)935 __m128h test_mm_div_sh(__m128h __A, __m128h __B) {
936   // CHECK-LABEL: @test_mm_div_sh
937   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
938   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0
939   // CHECK: %{{.*}} = fdiv half %{{.*}}, %{{.*}}
940   // CHECK: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i32 0
941   return _mm_div_sh(__A, __B);
942 }
943 
test_mm_min_round_sh(__m128h __A,__m128h __B)944 __m128h test_mm_min_round_sh(__m128h __A, __m128h __B) {
945   // CHECK-LABEL: @test_mm_min_round_sh
946   // CHECK: @llvm.x86.avx512fp16.mask.min.sh.round
947   return _mm_min_round_sh(__A, __B, 0x08);
948 }
test_mm_mask_min_round_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)949 __m128h test_mm_mask_min_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
950   // CHECK-LABEL: @test_mm_mask_min_round_sh
951   // CHECK: @llvm.x86.avx512fp16.mask.min.sh.round
952   return _mm_mask_min_round_sh(__W, __U, __A, __B, 0x08);
953 }
test_mm_maskz_min_round_sh(__mmask8 __U,__m128h __A,__m128h __B)954 __m128h test_mm_maskz_min_round_sh(__mmask8 __U, __m128h __A, __m128h __B) {
955   // CHECK-LABEL: @test_mm_maskz_min_round_sh
956   // CHECK: @llvm.x86.avx512fp16.mask.min.sh.round
957   return _mm_maskz_min_round_sh(__U, __A, __B, 0x08);
958 }
test_mm_mask_min_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)959 __m128h test_mm_mask_min_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
960   // CHECK-LABEL: @test_mm_mask_min_sh
961   // CHECK: @llvm.x86.avx512fp16.mask.min.sh.round
962   return _mm_mask_min_sh(__W, __U, __A, __B);
963 }
test_mm_maskz_min_sh(__mmask8 __U,__m128h __A,__m128h __B)964 __m128h test_mm_maskz_min_sh(__mmask8 __U, __m128h __A, __m128h __B) {
965   // CHECK-LABEL: @test_mm_maskz_min_sh
966   // CHECK: @llvm.x86.avx512fp16.mask.min.sh.round
967   return _mm_maskz_min_sh(__U, __A, __B);
968 }
969 
test_mm_min_sh(__m128h __A,__m128h __B)970 __m128h test_mm_min_sh(__m128h __A, __m128h __B) {
971   // CHECK-LABEL: @test_mm_min_sh
972   // CHECK: @llvm.x86.avx512fp16.mask.min.sh.round
973   return _mm_min_sh(__A, __B);
974 }
975 
test_mm_max_round_sh(__m128h __A,__m128h __B)976 __m128h test_mm_max_round_sh(__m128h __A, __m128h __B) {
977   // CHECK-LABEL: @test_mm_max_round_sh
978   // CHECK: @llvm.x86.avx512fp16.mask.max.sh.round
979   return _mm_max_round_sh(__A, __B, 0x08);
980 }
test_mm_mask_max_round_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)981 __m128h test_mm_mask_max_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
982   // CHECK-LABEL: @test_mm_mask_max_round_sh
983   // CHECK: @llvm.x86.avx512fp16.mask.max.sh.round
984   return _mm_mask_max_round_sh(__W, __U, __A, __B, 0x08);
985 }
test_mm_maskz_max_round_sh(__mmask8 __U,__m128h __A,__m128h __B)986 __m128h test_mm_maskz_max_round_sh(__mmask8 __U, __m128h __A, __m128h __B) {
987   // CHECK-LABEL: @test_mm_maskz_max_round_sh
988   // CHECK: @llvm.x86.avx512fp16.mask.max.sh.round
989   return _mm_maskz_max_round_sh(__U, __A, __B, 0x08);
990 }
test_mm_mask_max_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)991 __m128h test_mm_mask_max_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
992   // CHECK-LABEL: @test_mm_mask_max_sh
993   // CHECK: @llvm.x86.avx512fp16.mask.max.sh.round
994   return _mm_mask_max_sh(__W, __U, __A, __B);
995 }
test_mm_maskz_max_sh(__mmask8 __U,__m128h __A,__m128h __B)996 __m128h test_mm_maskz_max_sh(__mmask8 __U, __m128h __A, __m128h __B) {
997   // CHECK-LABEL: @test_mm_maskz_max_sh
998   // CHECK: @llvm.x86.avx512fp16.mask.max.sh.round
999   return _mm_maskz_max_sh(__U, __A, __B);
1000 }
1001 
test_mm_max_sh(__m128h __A,__m128h __B)1002 __m128h test_mm_max_sh(__m128h __A, __m128h __B) {
1003   // CHECK-LABEL: @test_mm_max_sh
1004   // CHECK: @llvm.x86.avx512fp16.mask.max.sh.round
1005   return _mm_max_sh(__A, __B);
1006 }
test_mm512_cmp_round_ph_mask(__m512h a,__m512h b)1007 __mmask32 test_mm512_cmp_round_ph_mask(__m512h a, __m512h b) {
1008   // CHECK-LABEL: @test_mm512_cmp_round_ph_mask
1009   // CHECK: fcmp oeq <32 x half> %{{.*}}, %{{.*}}
1010   return _mm512_cmp_round_ph_mask(a, b, 0, _MM_FROUND_NO_EXC);
1011 }
1012 
test_mm512_mask_cmp_round_ph_mask(__mmask32 m,__m512h a,__m512h b)1013 __mmask32 test_mm512_mask_cmp_round_ph_mask(__mmask32 m, __m512h a, __m512h b) {
1014   // CHECK-LABEL: @test_mm512_mask_cmp_round_ph_mask
1015   // CHECK: [[CMP:%.*]] = fcmp oeq <32 x half> %{{.*}}, %{{.*}}
1016   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1017   return _mm512_mask_cmp_round_ph_mask(m, a, b, 0, _MM_FROUND_NO_EXC);
1018 }
1019 
test_mm512_cmp_ph_mask_eq_oq(__m512h a,__m512h b)1020 __mmask32 test_mm512_cmp_ph_mask_eq_oq(__m512h a, __m512h b) {
1021   // CHECK-LABEL: @test_mm512_cmp_ph_mask_eq_oq
1022   // CHECK: fcmp oeq <32 x half> %{{.*}}, %{{.*}}
1023   return _mm512_cmp_ph_mask(a, b, _CMP_EQ_OQ);
1024 }
1025 
test_mm512_cmp_ph_mask_lt_os(__m512h a,__m512h b)1026 __mmask32 test_mm512_cmp_ph_mask_lt_os(__m512h a, __m512h b) {
1027   // CHECK-LABEL: test_mm512_cmp_ph_mask_lt_os
1028   // CHECK: fcmp olt <32 x half> %{{.*}}, %{{.*}}
1029   return _mm512_cmp_ph_mask(a, b, _CMP_LT_OS);
1030 }
1031 
test_mm512_cmp_ph_mask_le_os(__m512h a,__m512h b)1032 __mmask32 test_mm512_cmp_ph_mask_le_os(__m512h a, __m512h b) {
1033   // CHECK-LABEL: test_mm512_cmp_ph_mask_le_os
1034   // CHECK: fcmp ole <32 x half> %{{.*}}, %{{.*}}
1035   return _mm512_cmp_ph_mask(a, b, _CMP_LE_OS);
1036 }
1037 
test_mm512_cmp_ph_mask_unord_q(__m512h a,__m512h b)1038 __mmask32 test_mm512_cmp_ph_mask_unord_q(__m512h a, __m512h b) {
1039   // CHECK-LABEL: test_mm512_cmp_ph_mask_unord_q
1040   // CHECK: fcmp uno <32 x half> %{{.*}}, %{{.*}}
1041   return _mm512_cmp_ph_mask(a, b, _CMP_UNORD_Q);
1042 }
1043 
test_mm512_cmp_ph_mask_neq_uq(__m512h a,__m512h b)1044 __mmask32 test_mm512_cmp_ph_mask_neq_uq(__m512h a, __m512h b) {
1045   // CHECK-LABEL: test_mm512_cmp_ph_mask_neq_uq
1046   // CHECK: fcmp une <32 x half> %{{.*}}, %{{.*}}
1047   return _mm512_cmp_ph_mask(a, b, _CMP_NEQ_UQ);
1048 }
1049 
test_mm512_cmp_ph_mask_nlt_us(__m512h a,__m512h b)1050 __mmask32 test_mm512_cmp_ph_mask_nlt_us(__m512h a, __m512h b) {
1051   // CHECK-LABEL: test_mm512_cmp_ph_mask_nlt_us
1052   // CHECK: fcmp uge <32 x half> %{{.*}}, %{{.*}}
1053   return _mm512_cmp_ph_mask(a, b, _CMP_NLT_US);
1054 }
1055 
test_mm512_cmp_ph_mask_nle_us(__m512h a,__m512h b)1056 __mmask32 test_mm512_cmp_ph_mask_nle_us(__m512h a, __m512h b) {
1057   // CHECK-LABEL: test_mm512_cmp_ph_mask_nle_us
1058   // CHECK: fcmp ugt <32 x half> %{{.*}}, %{{.*}}
1059   return _mm512_cmp_ph_mask(a, b, _CMP_NLE_US);
1060 }
1061 
test_mm512_cmp_ph_mask_ord_q(__m512h a,__m512h b)1062 __mmask32 test_mm512_cmp_ph_mask_ord_q(__m512h a, __m512h b) {
1063   // CHECK-LABEL: test_mm512_cmp_ph_mask_ord_q
1064   // CHECK: fcmp ord <32 x half> %{{.*}}, %{{.*}}
1065   return _mm512_cmp_ph_mask(a, b, _CMP_ORD_Q);
1066 }
1067 
test_mm512_cmp_ph_mask_eq_uq(__m512h a,__m512h b)1068 __mmask32 test_mm512_cmp_ph_mask_eq_uq(__m512h a, __m512h b) {
1069   // CHECK-LABEL: test_mm512_cmp_ph_mask_eq_uq
1070   // CHECK: fcmp ueq <32 x half> %{{.*}}, %{{.*}}
1071   return _mm512_cmp_ph_mask(a, b, _CMP_EQ_UQ);
1072 }
1073 
test_mm512_cmp_ph_mask_nge_us(__m512h a,__m512h b)1074 __mmask32 test_mm512_cmp_ph_mask_nge_us(__m512h a, __m512h b) {
1075   // CHECK-LABEL: test_mm512_cmp_ph_mask_nge_us
1076   // CHECK: fcmp ult <32 x half> %{{.*}}, %{{.*}}
1077   return _mm512_cmp_ph_mask(a, b, _CMP_NGE_US);
1078 }
1079 
test_mm512_cmp_ph_mask_ngt_us(__m512h a,__m512h b)1080 __mmask32 test_mm512_cmp_ph_mask_ngt_us(__m512h a, __m512h b) {
1081   // CHECK-LABEL: test_mm512_cmp_ph_mask_ngt_us
1082   // CHECK: fcmp ule <32 x half> %{{.*}}, %{{.*}}
1083   return _mm512_cmp_ph_mask(a, b, _CMP_NGT_US);
1084 }
1085 
test_mm512_cmp_ph_mask_false_oq(__m512h a,__m512h b)1086 __mmask32 test_mm512_cmp_ph_mask_false_oq(__m512h a, __m512h b) {
1087   // CHECK-LABEL: test_mm512_cmp_ph_mask_false_oq
1088   // CHECK: fcmp false <32 x half> %{{.*}}, %{{.*}}
1089   return _mm512_cmp_ph_mask(a, b, _CMP_FALSE_OQ);
1090 }
1091 
test_mm512_cmp_ph_mask_neq_oq(__m512h a,__m512h b)1092 __mmask32 test_mm512_cmp_ph_mask_neq_oq(__m512h a, __m512h b) {
1093   // CHECK-LABEL: test_mm512_cmp_ph_mask_neq_oq
1094   // CHECK: fcmp one <32 x half> %{{.*}}, %{{.*}}
1095   return _mm512_cmp_ph_mask(a, b, _CMP_NEQ_OQ);
1096 }
1097 
test_mm512_cmp_ph_mask_ge_os(__m512h a,__m512h b)1098 __mmask32 test_mm512_cmp_ph_mask_ge_os(__m512h a, __m512h b) {
1099   // CHECK-LABEL: test_mm512_cmp_ph_mask_ge_os
1100   // CHECK: fcmp oge <32 x half> %{{.*}}, %{{.*}}
1101   return _mm512_cmp_ph_mask(a, b, _CMP_GE_OS);
1102 }
1103 
test_mm512_cmp_ph_mask_gt_os(__m512h a,__m512h b)1104 __mmask32 test_mm512_cmp_ph_mask_gt_os(__m512h a, __m512h b) {
1105   // CHECK-LABEL: test_mm512_cmp_ph_mask_gt_os
1106   // CHECK: fcmp ogt <32 x half> %{{.*}}, %{{.*}}
1107   return _mm512_cmp_ph_mask(a, b, _CMP_GT_OS);
1108 }
1109 
test_mm512_cmp_ph_mask_true_uq(__m512h a,__m512h b)1110 __mmask32 test_mm512_cmp_ph_mask_true_uq(__m512h a, __m512h b) {
1111   // CHECK-LABEL: test_mm512_cmp_ph_mask_true_uq
1112   // CHECK: fcmp true <32 x half> %{{.*}}, %{{.*}}
1113   return _mm512_cmp_ph_mask(a, b, _CMP_TRUE_UQ);
1114 }
1115 
test_mm512_cmp_ph_mask_eq_os(__m512h a,__m512h b)1116 __mmask32 test_mm512_cmp_ph_mask_eq_os(__m512h a, __m512h b) {
1117   // CHECK-LABEL: test_mm512_cmp_ph_mask_eq_os
1118   // CHECK: fcmp oeq <32 x half> %{{.*}}, %{{.*}}
1119   return _mm512_cmp_ph_mask(a, b, _CMP_EQ_OS);
1120 }
1121 
test_mm512_cmp_ph_mask_lt_oq(__m512h a,__m512h b)1122 __mmask32 test_mm512_cmp_ph_mask_lt_oq(__m512h a, __m512h b) {
1123   // CHECK-LABEL: test_mm512_cmp_ph_mask_lt_oq
1124   // CHECK: fcmp olt <32 x half> %{{.*}}, %{{.*}}
1125   return _mm512_cmp_ph_mask(a, b, _CMP_LT_OQ);
1126 }
1127 
test_mm512_cmp_ph_mask_le_oq(__m512h a,__m512h b)1128 __mmask32 test_mm512_cmp_ph_mask_le_oq(__m512h a, __m512h b) {
1129   // CHECK-LABEL: test_mm512_cmp_ph_mask_le_oq
1130   // CHECK: fcmp ole <32 x half> %{{.*}}, %{{.*}}
1131   return _mm512_cmp_ph_mask(a, b, _CMP_LE_OQ);
1132 }
1133 
test_mm512_cmp_ph_mask_unord_s(__m512h a,__m512h b)1134 __mmask32 test_mm512_cmp_ph_mask_unord_s(__m512h a, __m512h b) {
1135   // CHECK-LABEL: test_mm512_cmp_ph_mask_unord_s
1136   // CHECK: fcmp uno <32 x half> %{{.*}}, %{{.*}}
1137   return _mm512_cmp_ph_mask(a, b, _CMP_UNORD_S);
1138 }
1139 
test_mm512_cmp_ph_mask_neq_us(__m512h a,__m512h b)1140 __mmask32 test_mm512_cmp_ph_mask_neq_us(__m512h a, __m512h b) {
1141   // CHECK-LABEL: test_mm512_cmp_ph_mask_neq_us
1142   // CHECK: fcmp une <32 x half> %{{.*}}, %{{.*}}
1143   return _mm512_cmp_ph_mask(a, b, _CMP_NEQ_US);
1144 }
1145 
test_mm512_cmp_ph_mask_nlt_uq(__m512h a,__m512h b)1146 __mmask32 test_mm512_cmp_ph_mask_nlt_uq(__m512h a, __m512h b) {
1147   // CHECK-LABEL: test_mm512_cmp_ph_mask_nlt_uq
1148   // CHECK: fcmp uge <32 x half> %{{.*}}, %{{.*}}
1149   return _mm512_cmp_ph_mask(a, b, _CMP_NLT_UQ);
1150 }
1151 
test_mm512_cmp_ph_mask_nle_uq(__m512h a,__m512h b)1152 __mmask32 test_mm512_cmp_ph_mask_nle_uq(__m512h a, __m512h b) {
1153   // CHECK-LABEL: test_mm512_cmp_ph_mask_nle_uq
1154   // CHECK: fcmp ugt <32 x half> %{{.*}}, %{{.*}}
1155   return _mm512_cmp_ph_mask(a, b, _CMP_NLE_UQ);
1156 }
1157 
test_mm512_cmp_ph_mask_ord_s(__m512h a,__m512h b)1158 __mmask32 test_mm512_cmp_ph_mask_ord_s(__m512h a, __m512h b) {
1159   // CHECK-LABEL: test_mm512_cmp_ph_mask_ord_s
1160   // CHECK: fcmp ord <32 x half> %{{.*}}, %{{.*}}
1161   return _mm512_cmp_ph_mask(a, b, _CMP_ORD_S);
1162 }
1163 
test_mm512_cmp_ph_mask_eq_us(__m512h a,__m512h b)1164 __mmask32 test_mm512_cmp_ph_mask_eq_us(__m512h a, __m512h b) {
1165   // CHECK-LABEL: test_mm512_cmp_ph_mask_eq_us
1166   // CHECK: fcmp ueq <32 x half> %{{.*}}, %{{.*}}
1167   return _mm512_cmp_ph_mask(a, b, _CMP_EQ_US);
1168 }
1169 
test_mm512_cmp_ph_mask_nge_uq(__m512h a,__m512h b)1170 __mmask32 test_mm512_cmp_ph_mask_nge_uq(__m512h a, __m512h b) {
1171   // CHECK-LABEL: test_mm512_cmp_ph_mask_nge_uq
1172   // CHECK: fcmp ult <32 x half> %{{.*}}, %{{.*}}
1173   return _mm512_cmp_ph_mask(a, b, _CMP_NGE_UQ);
1174 }
1175 
test_mm512_cmp_ph_mask_ngt_uq(__m512h a,__m512h b)1176 __mmask32 test_mm512_cmp_ph_mask_ngt_uq(__m512h a, __m512h b) {
1177   // CHECK-LABEL: test_mm512_cmp_ph_mask_ngt_uq
1178   // CHECK: fcmp ule <32 x half> %{{.*}}, %{{.*}}
1179   return _mm512_cmp_ph_mask(a, b, _CMP_NGT_UQ);
1180 }
1181 
test_mm512_cmp_ph_mask_false_os(__m512h a,__m512h b)1182 __mmask32 test_mm512_cmp_ph_mask_false_os(__m512h a, __m512h b) {
1183   // CHECK-LABEL: test_mm512_cmp_ph_mask_false_os
1184   // CHECK: fcmp false <32 x half> %{{.*}}, %{{.*}}
1185   return _mm512_cmp_ph_mask(a, b, _CMP_FALSE_OS);
1186 }
1187 
test_mm512_cmp_ph_mask_neq_os(__m512h a,__m512h b)1188 __mmask32 test_mm512_cmp_ph_mask_neq_os(__m512h a, __m512h b) {
1189   // CHECK-LABEL: test_mm512_cmp_ph_mask_neq_os
1190   // CHECK: fcmp one <32 x half> %{{.*}}, %{{.*}}
1191   return _mm512_cmp_ph_mask(a, b, _CMP_NEQ_OS);
1192 }
1193 
test_mm512_cmp_ph_mask_ge_oq(__m512h a,__m512h b)1194 __mmask32 test_mm512_cmp_ph_mask_ge_oq(__m512h a, __m512h b) {
1195   // CHECK-LABEL: test_mm512_cmp_ph_mask_ge_oq
1196   // CHECK: fcmp oge <32 x half> %{{.*}}, %{{.*}}
1197   return _mm512_cmp_ph_mask(a, b, _CMP_GE_OQ);
1198 }
1199 
test_mm512_cmp_ph_mask_gt_oq(__m512h a,__m512h b)1200 __mmask32 test_mm512_cmp_ph_mask_gt_oq(__m512h a, __m512h b) {
1201   // CHECK-LABEL: test_mm512_cmp_ph_mask_gt_oq
1202   // CHECK: fcmp ogt <32 x half> %{{.*}}, %{{.*}}
1203   return _mm512_cmp_ph_mask(a, b, _CMP_GT_OQ);
1204 }
1205 
test_mm512_cmp_ph_mask_true_us(__m512h a,__m512h b)1206 __mmask32 test_mm512_cmp_ph_mask_true_us(__m512h a, __m512h b) {
1207   // CHECK-LABEL: test_mm512_cmp_ph_mask_true_us
1208   // CHECK: fcmp true <32 x half> %{{.*}}, %{{.*}}
1209   return _mm512_cmp_ph_mask(a, b, _CMP_TRUE_US);
1210 }
1211 
test_mm512_mask_cmp_ph_mask_eq_oq(__mmask32 m,__m512h a,__m512h b)1212 __mmask32 test_mm512_mask_cmp_ph_mask_eq_oq(__mmask32 m, __m512h a, __m512h b) {
1213   // CHECK-LABEL: @test_mm512_mask_cmp_ph_mask_eq_oq
1214   // CHECK: [[CMP:%.*]] = fcmp oeq <32 x half> %{{.*}}, %{{.*}}
1215   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1216   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_EQ_OQ);
1217 }
1218 
test_mm512_mask_cmp_ph_mask_lt_os(__mmask32 m,__m512h a,__m512h b)1219 __mmask32 test_mm512_mask_cmp_ph_mask_lt_os(__mmask32 m, __m512h a, __m512h b) {
1220   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_lt_os
1221   // CHECK: [[CMP:%.*]] = fcmp olt <32 x half> %{{.*}}, %{{.*}}
1222   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1223   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_LT_OS);
1224 }
1225 
test_mm512_mask_cmp_ph_mask_le_os(__mmask32 m,__m512h a,__m512h b)1226 __mmask32 test_mm512_mask_cmp_ph_mask_le_os(__mmask32 m, __m512h a, __m512h b) {
1227   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_le_os
1228   // CHECK: [[CMP:%.*]] = fcmp ole <32 x half> %{{.*}}, %{{.*}}
1229   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1230   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_LE_OS);
1231 }
1232 
test_mm512_mask_cmp_ph_mask_unord_q(__mmask32 m,__m512h a,__m512h b)1233 __mmask32 test_mm512_mask_cmp_ph_mask_unord_q(__mmask32 m, __m512h a, __m512h b) {
1234   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_unord_q
1235   // CHECK: [[CMP:%.*]] = fcmp uno <32 x half> %{{.*}}, %{{.*}}
1236   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1237   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_UNORD_Q);
1238 }
1239 
test_mm512_mask_cmp_ph_mask_neq_uq(__mmask32 m,__m512h a,__m512h b)1240 __mmask32 test_mm512_mask_cmp_ph_mask_neq_uq(__mmask32 m, __m512h a, __m512h b) {
1241   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_neq_uq
1242   // CHECK: [[CMP:%.*]] = fcmp une <32 x half> %{{.*}}, %{{.*}}
1243   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1244   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_NEQ_UQ);
1245 }
1246 
test_mm512_mask_cmp_ph_mask_nlt_us(__mmask32 m,__m512h a,__m512h b)1247 __mmask32 test_mm512_mask_cmp_ph_mask_nlt_us(__mmask32 m, __m512h a, __m512h b) {
1248   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_nlt_us
1249   // CHECK: [[CMP:%.*]] = fcmp uge <32 x half> %{{.*}}, %{{.*}}
1250   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1251   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_NLT_US);
1252 }
1253 
test_mm512_mask_cmp_ph_mask_nle_us(__mmask32 m,__m512h a,__m512h b)1254 __mmask32 test_mm512_mask_cmp_ph_mask_nle_us(__mmask32 m, __m512h a, __m512h b) {
1255   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_nle_us
1256   // CHECK: [[CMP:%.*]] = fcmp ugt <32 x half> %{{.*}}, %{{.*}}
1257   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1258   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_NLE_US);
1259 }
1260 
test_mm512_mask_cmp_ph_mask_ord_q(__mmask32 m,__m512h a,__m512h b)1261 __mmask32 test_mm512_mask_cmp_ph_mask_ord_q(__mmask32 m, __m512h a, __m512h b) {
1262   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_ord_q
1263   // CHECK: [[CMP:%.*]] = fcmp ord <32 x half> %{{.*}}, %{{.*}}
1264   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1265   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_ORD_Q);
1266 }
1267 
test_mm512_mask_cmp_ph_mask_eq_uq(__mmask32 m,__m512h a,__m512h b)1268 __mmask32 test_mm512_mask_cmp_ph_mask_eq_uq(__mmask32 m, __m512h a, __m512h b) {
1269   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_eq_uq
1270   // CHECK: [[CMP:%.*]] = fcmp ueq <32 x half> %{{.*}}, %{{.*}}
1271   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1272   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_EQ_UQ);
1273 }
1274 
test_mm512_mask_cmp_ph_mask_nge_us(__mmask32 m,__m512h a,__m512h b)1275 __mmask32 test_mm512_mask_cmp_ph_mask_nge_us(__mmask32 m, __m512h a, __m512h b) {
1276   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_nge_us
1277   // CHECK: [[CMP:%.*]] = fcmp ult <32 x half> %{{.*}}, %{{.*}}
1278   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1279   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_NGE_US);
1280 }
1281 
test_mm512_mask_cmp_ph_mask_ngt_us(__mmask32 m,__m512h a,__m512h b)1282 __mmask32 test_mm512_mask_cmp_ph_mask_ngt_us(__mmask32 m, __m512h a, __m512h b) {
1283   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_ngt_us
1284   // CHECK: [[CMP:%.*]] = fcmp ule <32 x half> %{{.*}}, %{{.*}}
1285   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1286   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_NGT_US);
1287 }
1288 
test_mm512_mask_cmp_ph_mask_false_oq(__mmask32 m,__m512h a,__m512h b)1289 __mmask32 test_mm512_mask_cmp_ph_mask_false_oq(__mmask32 m, __m512h a, __m512h b) {
1290   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_false_oq
1291   // CHECK: [[CMP:%.*]] = fcmp false <32 x half> %{{.*}}, %{{.*}}
1292   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1293   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_FALSE_OQ);
1294 }
1295 
test_mm512_mask_cmp_ph_mask_neq_oq(__mmask32 m,__m512h a,__m512h b)1296 __mmask32 test_mm512_mask_cmp_ph_mask_neq_oq(__mmask32 m, __m512h a, __m512h b) {
1297   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_neq_oq
1298   // CHECK: [[CMP:%.*]] = fcmp one <32 x half> %{{.*}}, %{{.*}}
1299   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1300   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_NEQ_OQ);
1301 }
1302 
test_mm512_mask_cmp_ph_mask_ge_os(__mmask32 m,__m512h a,__m512h b)1303 __mmask32 test_mm512_mask_cmp_ph_mask_ge_os(__mmask32 m, __m512h a, __m512h b) {
1304   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_ge_os
1305   // CHECK: [[CMP:%.*]] = fcmp oge <32 x half> %{{.*}}, %{{.*}}
1306   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1307   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_GE_OS);
1308 }
1309 
test_mm512_mask_cmp_ph_mask_gt_os(__mmask32 m,__m512h a,__m512h b)1310 __mmask32 test_mm512_mask_cmp_ph_mask_gt_os(__mmask32 m, __m512h a, __m512h b) {
1311   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_gt_os
1312   // CHECK: [[CMP:%.*]] = fcmp ogt <32 x half> %{{.*}}, %{{.*}}
1313   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1314   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_GT_OS);
1315 }
1316 
test_mm512_mask_cmp_ph_mask_true_uq(__mmask32 m,__m512h a,__m512h b)1317 __mmask32 test_mm512_mask_cmp_ph_mask_true_uq(__mmask32 m, __m512h a, __m512h b) {
1318   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_true_uq
1319   // CHECK: [[CMP:%.*]] = fcmp true <32 x half> %{{.*}}, %{{.*}}
1320   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1321   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_TRUE_UQ);
1322 }
1323 
test_mm512_mask_cmp_ph_mask_eq_os(__mmask32 m,__m512h a,__m512h b)1324 __mmask32 test_mm512_mask_cmp_ph_mask_eq_os(__mmask32 m, __m512h a, __m512h b) {
1325   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_eq_os
1326   // CHECK: [[CMP:%.*]] = fcmp oeq <32 x half> %{{.*}}, %{{.*}}
1327   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1328   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_EQ_OS);
1329 }
1330 
test_mm512_mask_cmp_ph_mask_lt_oq(__mmask32 m,__m512h a,__m512h b)1331 __mmask32 test_mm512_mask_cmp_ph_mask_lt_oq(__mmask32 m, __m512h a, __m512h b) {
1332   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_lt_oq
1333   // CHECK: [[CMP:%.*]] = fcmp olt <32 x half> %{{.*}}, %{{.*}}
1334   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1335   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_LT_OQ);
1336 }
1337 
test_mm512_mask_cmp_ph_mask_le_oq(__mmask32 m,__m512h a,__m512h b)1338 __mmask32 test_mm512_mask_cmp_ph_mask_le_oq(__mmask32 m, __m512h a, __m512h b) {
1339   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_le_oq
1340   // CHECK: [[CMP:%.*]] = fcmp ole <32 x half> %{{.*}}, %{{.*}}
1341   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1342   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_LE_OQ);
1343 }
1344 
test_mm512_mask_cmp_ph_mask_unord_s(__mmask32 m,__m512h a,__m512h b)1345 __mmask32 test_mm512_mask_cmp_ph_mask_unord_s(__mmask32 m, __m512h a, __m512h b) {
1346   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_unord_s
1347   // CHECK: [[CMP:%.*]] = fcmp uno <32 x half> %{{.*}}, %{{.*}}
1348   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1349   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_UNORD_S);
1350 }
1351 
test_mm512_mask_cmp_ph_mask_neq_us(__mmask32 m,__m512h a,__m512h b)1352 __mmask32 test_mm512_mask_cmp_ph_mask_neq_us(__mmask32 m, __m512h a, __m512h b) {
1353   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_neq_us
1354   // CHECK: [[CMP:%.*]] = fcmp une <32 x half> %{{.*}}, %{{.*}}
1355   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1356   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_NEQ_US);
1357 }
1358 
test_mm512_mask_cmp_ph_mask_nlt_uq(__mmask32 m,__m512h a,__m512h b)1359 __mmask32 test_mm512_mask_cmp_ph_mask_nlt_uq(__mmask32 m, __m512h a, __m512h b) {
1360   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_nlt_uq
1361   // CHECK: [[CMP:%.*]] = fcmp uge <32 x half> %{{.*}}, %{{.*}}
1362   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1363   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_NLT_UQ);
1364 }
1365 
test_mm512_mask_cmp_ph_mask_nle_uq(__mmask32 m,__m512h a,__m512h b)1366 __mmask32 test_mm512_mask_cmp_ph_mask_nle_uq(__mmask32 m, __m512h a, __m512h b) {
1367   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_nle_uq
1368   // CHECK: [[CMP:%.*]] = fcmp ugt <32 x half> %{{.*}}, %{{.*}}
1369   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1370   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_NLE_UQ);
1371 }
1372 
test_mm512_mask_cmp_ph_mask_ord_s(__mmask32 m,__m512h a,__m512h b)1373 __mmask32 test_mm512_mask_cmp_ph_mask_ord_s(__mmask32 m, __m512h a, __m512h b) {
1374   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_ord_s
1375   // CHECK: [[CMP:%.*]] = fcmp ord <32 x half> %{{.*}}, %{{.*}}
1376   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1377   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_ORD_S);
1378 }
1379 
test_mm512_mask_cmp_ph_mask_eq_us(__mmask32 m,__m512h a,__m512h b)1380 __mmask32 test_mm512_mask_cmp_ph_mask_eq_us(__mmask32 m, __m512h a, __m512h b) {
1381   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_eq_us
1382   // CHECK: [[CMP:%.*]] = fcmp ueq <32 x half> %{{.*}}, %{{.*}}
1383   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1384   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_EQ_US);
1385 }
1386 
test_mm512_mask_cmp_ph_mask_nge_uq(__mmask32 m,__m512h a,__m512h b)1387 __mmask32 test_mm512_mask_cmp_ph_mask_nge_uq(__mmask32 m, __m512h a, __m512h b) {
1388   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_nge_uq
1389   // CHECK: [[CMP:%.*]] = fcmp ult <32 x half> %{{.*}}, %{{.*}}
1390   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1391   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_NGE_UQ);
1392 }
1393 
test_mm512_mask_cmp_ph_mask_ngt_uq(__mmask32 m,__m512h a,__m512h b)1394 __mmask32 test_mm512_mask_cmp_ph_mask_ngt_uq(__mmask32 m, __m512h a, __m512h b) {
1395   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_ngt_uq
1396   // CHECK: [[CMP:%.*]] = fcmp ule <32 x half> %{{.*}}, %{{.*}}
1397   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1398   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_NGT_UQ);
1399 }
1400 
test_mm512_mask_cmp_ph_mask_false_os(__mmask32 m,__m512h a,__m512h b)1401 __mmask32 test_mm512_mask_cmp_ph_mask_false_os(__mmask32 m, __m512h a, __m512h b) {
1402   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_false_os
1403   // CHECK: [[CMP:%.*]] = fcmp false <32 x half> %{{.*}}, %{{.*}}
1404   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1405   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_FALSE_OS);
1406 }
1407 
test_mm512_mask_cmp_ph_mask_neq_os(__mmask32 m,__m512h a,__m512h b)1408 __mmask32 test_mm512_mask_cmp_ph_mask_neq_os(__mmask32 m, __m512h a, __m512h b) {
1409   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_neq_os
1410   // CHECK: [[CMP:%.*]] = fcmp one <32 x half> %{{.*}}, %{{.*}}
1411   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1412   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_NEQ_OS);
1413 }
1414 
test_mm512_mask_cmp_ph_mask_ge_oq(__mmask32 m,__m512h a,__m512h b)1415 __mmask32 test_mm512_mask_cmp_ph_mask_ge_oq(__mmask32 m, __m512h a, __m512h b) {
1416   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_ge_oq
1417   // CHECK: [[CMP:%.*]] = fcmp oge <32 x half> %{{.*}}, %{{.*}}
1418   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1419   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_GE_OQ);
1420 }
1421 
test_mm512_mask_cmp_ph_mask_gt_oq(__mmask32 m,__m512h a,__m512h b)1422 __mmask32 test_mm512_mask_cmp_ph_mask_gt_oq(__mmask32 m, __m512h a, __m512h b) {
1423   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_gt_oq
1424   // CHECK: [[CMP:%.*]] = fcmp ogt <32 x half> %{{.*}}, %{{.*}}
1425   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1426   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_GT_OQ);
1427 }
1428 
test_mm512_mask_cmp_ph_mask_true_us(__mmask32 m,__m512h a,__m512h b)1429 __mmask32 test_mm512_mask_cmp_ph_mask_true_us(__mmask32 m, __m512h a, __m512h b) {
1430   // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_true_us
1431   // CHECK: [[CMP:%.*]] = fcmp true <32 x half> %{{.*}}, %{{.*}}
1432   // CHECK: and <32 x i1> [[CMP]], {{.*}}
1433   return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_TRUE_US);
1434 }
1435 
test_mm_cmp_round_sh_mask(__m128h __X,__m128h __Y)1436 __mmask8 test_mm_cmp_round_sh_mask(__m128h __X, __m128h __Y) {
1437   // CHECK-LABEL: @test_mm_cmp_round_sh_mask
1438   // CHECK: @llvm.x86.avx512fp16.mask.cmp.sh
1439   return _mm_cmp_round_sh_mask(__X, __Y, _CMP_NLT_US, _MM_FROUND_NO_EXC);
1440 }
1441 
test_mm_mask_cmp_round_sh_mask(__mmask8 __M,__m128h __X,__m128h __Y)1442 __mmask8 test_mm_mask_cmp_round_sh_mask(__mmask8 __M, __m128h __X, __m128h __Y) {
1443   // CHECK-LABEL: @test_mm_mask_cmp_round_sh_mask
1444   // CHECK: @llvm.x86.avx512fp16.mask.cmp.sh
1445   return _mm_mask_cmp_round_sh_mask(__M, __X, __Y, _CMP_NLT_US, _MM_FROUND_NO_EXC);
1446 }
1447 
test_mm_cmp_sh_mask(__m128h __X,__m128h __Y)1448 __mmask8 test_mm_cmp_sh_mask(__m128h __X, __m128h __Y) {
1449   // CHECK-LABEL: @test_mm_cmp_sh_mask
1450   // CHECK: @llvm.x86.avx512fp16.mask.cmp.sh
1451   return _mm_cmp_sh_mask(__X, __Y, _CMP_NLT_US);
1452 }
1453 
test_mm_mask_cmp_sh_mask(__mmask8 __M,__m128h __X,__m128h __Y)1454 __mmask8 test_mm_mask_cmp_sh_mask(__mmask8 __M, __m128h __X, __m128h __Y) {
1455   // CHECK-LABEL: @test_mm_mask_cmp_sh_mask
1456   // CHECK: @llvm.x86.avx512fp16.mask.cmp.sh
1457   return _mm_mask_cmp_sh_mask(__M, __X, __Y, _CMP_NLT_US);
1458 }
1459 
1460 // VMOVSH
1461 
test_mm_load_sh(void const * A)1462 __m128h test_mm_load_sh(void const *A) {
1463   // CHECK-LABEL: test_mm_load_sh
1464   // CHECK: load half, ptr %{{.*}}, align 1{{$}}
1465   return _mm_load_sh(A);
1466 }
1467 
test_mm_mask_load_sh(__m128h __A,__mmask8 __U,const void * __W)1468 __m128h test_mm_mask_load_sh(__m128h __A, __mmask8 __U, const void *__W) {
1469   // CHECK-LABEL: @test_mm_mask_load_sh
1470   // CHECK: %{{.*}} = call <8 x half> @llvm.masked.load.v8f16.p0(ptr %{{.*}}, i32 1, <8 x i1> %{{.*}}, <8 x half> %{{.*}})
1471   return _mm_mask_load_sh(__A, __U, __W);
1472 }
1473 
test_mm_maskz_load_sh(__mmask8 __U,const void * __W)1474 __m128h test_mm_maskz_load_sh(__mmask8 __U, const void *__W) {
1475   // CHECK-LABEL: @test_mm_maskz_load_sh
1476   // CHECK: %{{.*}} = call <8 x half> @llvm.masked.load.v8f16.p0(ptr %{{.*}}, i32 1, <8 x i1> %{{.*}}, <8 x half> %{{.*}})
1477   return _mm_maskz_load_sh(__U, __W);
1478 }
1479 
test_mm512_load_ph(void * p)1480 __m512h test_mm512_load_ph(void *p) {
1481   // CHECK-LABEL: @test_mm512_load_ph
1482   // CHECK: load <32 x half>, ptr %{{.*}}, align 64{{$}}
1483   return _mm512_load_ph(p);
1484 }
1485 
test_mm256_load_ph(void * p)1486 __m256h test_mm256_load_ph(void *p) {
1487   // CHECK-LABEL: @test_mm256_load_ph
1488   // CHECK: load <16 x half>, ptr %{{.*}}, align 32{{$}}
1489   return _mm256_load_ph(p);
1490 }
1491 
test_mm_load_ph(void * p)1492 __m128h test_mm_load_ph(void *p) {
1493   // CHECK-LABEL: @test_mm_load_ph
1494   // CHECK: load <8 x half>, ptr %{{.*}}, align 16{{$}}
1495   return _mm_load_ph(p);
1496 }
1497 
test_mm512_loadu_ph(void * p)1498 __m512h test_mm512_loadu_ph(void *p) {
1499   // CHECK-LABEL: @test_mm512_loadu_ph
1500   // CHECK: load <32 x half>, ptr {{.*}}, align 1{{$}}
1501   return _mm512_loadu_ph(p);
1502 }
1503 
test_mm256_loadu_ph(void * p)1504 __m256h test_mm256_loadu_ph(void *p) {
1505   // CHECK-LABEL: @test_mm256_loadu_ph
1506   // CHECK: load <16 x half>, ptr {{.*}}, align 1{{$}}
1507   return _mm256_loadu_ph(p);
1508 }
1509 
test_mm_loadu_ph(void * p)1510 __m128h test_mm_loadu_ph(void *p) {
1511   // CHECK-LABEL: @test_mm_loadu_ph
1512   // CHECK: load <8 x half>, ptr {{.*}}, align 1{{$}}
1513   return _mm_loadu_ph(p);
1514 }
1515 
test_mm_store_sh(void * A,__m128h B)1516 void test_mm_store_sh(void *A, __m128h B) {
1517   // CHECK-LABEL: test_mm_store_sh
1518   // CHECK: extractelement <8 x half> %{{.*}}, i32 0
1519   // CHECK: store half %{{.*}}, ptr %{{.*}}, align 1{{$}}
1520   _mm_store_sh(A, B);
1521 }
1522 
test_mm_mask_store_sh(void * __P,__mmask8 __U,__m128h __A)1523 void test_mm_mask_store_sh(void *__P, __mmask8 __U, __m128h __A) {
1524   // CHECK-LABEL: @test_mm_mask_store_sh
1525   // CHECK: call void @llvm.masked.store.v8f16.p0(<8 x half> %{{.*}}, ptr %{{.*}}, i32 1, <8 x i1> %{{.*}})
1526   _mm_mask_store_sh(__P, __U, __A);
1527 }
1528 
test_mm512_store_ph(void * p,__m512h a)1529 void test_mm512_store_ph(void *p, __m512h a) {
1530   // CHECK-LABEL: @test_mm512_store_ph
1531   // CHECK: store <32 x half> %{{.*}}, ptr %{{.*}}, align 64
1532   _mm512_store_ph(p, a);
1533 }
1534 
test_mm256_store_ph(void * p,__m256h a)1535 void test_mm256_store_ph(void *p, __m256h a) {
1536   // CHECK-LABEL: @test_mm256_store_ph
1537   // CHECK: store <16 x half> %{{.*}}, ptr %{{.*}}, align 32
1538   _mm256_store_ph(p, a);
1539 }
1540 
test_mm_store_ph(void * p,__m128h a)1541 void test_mm_store_ph(void *p, __m128h a) {
1542   // CHECK-LABEL: @test_mm_store_ph
1543   // CHECK: store <8 x half> %{{.*}}, ptr %{{.*}}, align 16
1544   _mm_store_ph(p, a);
1545 }
1546 
test_mm512_storeu_ph(void * p,__m512h a)1547 void test_mm512_storeu_ph(void *p, __m512h a) {
1548   // CHECK-LABEL: @test_mm512_storeu_ph
1549   // CHECK: store <32 x half> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1550   // CHECK-NEXT: ret void
1551   _mm512_storeu_ph(p, a);
1552 }
1553 
test_mm256_storeu_ph(void * p,__m256h a)1554 void test_mm256_storeu_ph(void *p, __m256h a) {
1555   // CHECK-LABEL: @test_mm256_storeu_ph
1556   // CHECK: store <16 x half> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1557   // CHECK-NEXT: ret void
1558   _mm256_storeu_ph(p, a);
1559 }
1560 
test_mm_storeu_ph(void * p,__m128h a)1561 void test_mm_storeu_ph(void *p, __m128h a) {
1562   // CHECK-LABEL: @test_mm_storeu_ph
1563   // CHECK: store <8 x half> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1564   // CHECK-NEXT: ret void
1565   _mm_storeu_ph(p, a);
1566 }
1567 
test_mm_move_sh(__m128h A,__m128h B)1568 __m128h test_mm_move_sh(__m128h A, __m128h B) {
1569   // CHECK-LABEL: test_mm_move_sh
1570   // CHECK: extractelement <8 x half> %{{.*}}, i32 0
1571   // CHECK: insertelement <8 x half> %{{.*}}, half %{{.*}}, i32 0
1572   return _mm_move_sh(A, B);
1573 }
1574 
test_mm_mask_move_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)1575 __m128h test_mm_mask_move_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
1576   // CHECK-LABEL: @test_mm_mask_move_sh
1577   // CHECK: [[EXT:%.*]] = extractelement <8 x half> %{{.*}}, i32 0
1578   // CHECK: insertelement <8 x half> %{{.*}}, half [[EXT]], i32 0
1579   // CHECK: [[A:%.*]] = extractelement <8 x half> [[VEC:%.*]], i64 0
1580   // CHECK-NEXT: [[B:%.*]] = extractelement <8 x half> %{{.*}}, i64 0
1581   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
1582   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
1583   // CHECK-NEXT: [[SEL:%.*]] = select i1 %{{.*}}, half [[A]], half [[B]]
1584   // CHECK-NEXT: insertelement <8 x half> [[VEC]], half [[SEL]], i64 0
1585   return _mm_mask_move_sh(__W, __U, __A, __B);
1586 }
1587 
test_mm_maskz_move_sh(__mmask8 __U,__m128h __A,__m128h __B)1588 __m128h test_mm_maskz_move_sh(__mmask8 __U, __m128h __A, __m128h __B) {
1589   // CHECK-LABEL: @test_mm_maskz_move_sh
1590   // CHECK: [[EXT:%.*]] = extractelement <8 x half> %{{.*}}, i32 0
1591   // CHECK: insertelement <8 x half> %{{.*}}, half [[EXT]], i32 0
1592   // CHECK: [[A:%.*]] = extractelement <8 x half> [[VEC:%.*]], i64 0
1593   // CHECK-NEXT: [[B:%.*]] = extractelement <8 x half> %{{.*}}, i64 0
1594   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
1595   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
1596   // CHECK-NEXT: [[SEL:%.*]] = select i1 %{{.*}}, half [[A]], half [[B]]
1597   // CHECK-NEXT: insertelement <8 x half> [[VEC]], half [[SEL]], i64 0
1598   return _mm_maskz_move_sh(__U, __A, __B);
1599 }
1600 
test_mm_cvtsi128_si16(__m128i A)1601 short test_mm_cvtsi128_si16(__m128i A) {
1602   // CHECK-LABEL: test_mm_cvtsi128_si16
1603   // CHECK: extractelement <8 x i16> %{{.*}}, i32 0
1604   return _mm_cvtsi128_si16(A);
1605 }
1606 
test_mm_cvtsi16_si128(short A)1607 __m128i test_mm_cvtsi16_si128(short A) {
1608   // CHECK-LABEL: test_mm_cvtsi16_si128
1609   // CHECK: insertelement <8 x i16> poison, i16 %{{.*}}, i32 0
1610   // CHECK: insertelement <8 x i16> %{{.*}}, i16 0, i32 1
1611   // CHECK: insertelement <8 x i16> %{{.*}}, i16 0, i32 2
1612   // CHECK: insertelement <8 x i16> %{{.*}}, i16 0, i32 3
1613   return _mm_cvtsi16_si128(A);
1614 }
1615 
test_mm512_rcp_ph(__m512h __A)1616 __m512h test_mm512_rcp_ph(__m512h __A) {
1617   // CHECK-LABEL: @test_mm512_rcp_ph
1618   // CHECK: @llvm.x86.avx512fp16.mask.rcp.ph.512
1619   return _mm512_rcp_ph(__A);
1620 }
1621 
test_mm512_mask_rcp_ph(__m512h __W,__mmask32 __U,__m512h __A)1622 __m512h test_mm512_mask_rcp_ph(__m512h __W, __mmask32 __U, __m512h __A) {
1623   // CHECK-LABEL: @test_mm512_mask_rcp_ph
1624   // CHECK: @llvm.x86.avx512fp16.mask.rcp.ph.512
1625   return (__m512h)_mm512_mask_rcp_ph(__W, __U, __A);
1626 }
1627 
test_mm512_maskz_rcp_ph(__mmask32 __U,__m512h __A)1628 __m512h test_mm512_maskz_rcp_ph(__mmask32 __U, __m512h __A) {
1629   // CHECK-LABEL: @test_mm512_maskz_rcp_ph
1630   // CHECK: @llvm.x86.avx512fp16.mask.rcp.ph.512
1631   return _mm512_maskz_rcp_ph(__U, __A);
1632 }
1633 
test_mm512_rsqrt_ph(__m512h __A)1634 __m512h test_mm512_rsqrt_ph(__m512h __A) {
1635   // CHECK-LABEL: @test_mm512_rsqrt_ph
1636   // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.ph.512
1637   return _mm512_rsqrt_ph(__A);
1638 }
1639 
test_mm512_mask_rsqrt_ph(__m512h __W,__mmask32 __U,__m512h __A)1640 __m512h test_mm512_mask_rsqrt_ph(__m512h __W, __mmask32 __U, __m512h __A) {
1641   // CHECK-LABEL: @test_mm512_mask_rsqrt_ph
1642   // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.ph.512
1643   return (__m512h)_mm512_mask_rsqrt_ph(__W, __U, __A);
1644 }
1645 
test_mm512_maskz_rsqrt_ph(__mmask32 __U,__m512h __A)1646 __m512h test_mm512_maskz_rsqrt_ph(__mmask32 __U, __m512h __A) {
1647   // CHECK-LABEL: @test_mm512_maskz_rsqrt_ph
1648   // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.ph.512
1649   return _mm512_maskz_rsqrt_ph(__U, __A);
1650 }
1651 
test_mm512_getmant_round_ph(__m512h __A)1652 __m512h test_mm512_getmant_round_ph(__m512h __A) {
1653   // CHECK-LABEL: @test_mm512_getmant_round_ph
1654   // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.512
1655   return _mm512_getmant_round_ph(__A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan, _MM_FROUND_NO_EXC);
1656 }
1657 
test_mm512_mask_getmant_round_ph(__m512h __W,__mmask32 __U,__m512h __A)1658 __m512h test_mm512_mask_getmant_round_ph(__m512h __W, __mmask32 __U, __m512h __A) {
1659   // CHECK-LABEL: @test_mm512_mask_getmant_round_ph
1660   // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.512
1661   return _mm512_mask_getmant_round_ph(__W, __U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan, _MM_FROUND_NO_EXC);
1662 }
1663 
test_mm512_maskz_getmant_round_ph(__mmask32 __U,__m512h __A)1664 __m512h test_mm512_maskz_getmant_round_ph(__mmask32 __U, __m512h __A) {
1665   // CHECK-LABEL: @test_mm512_maskz_getmant_round_ph
1666   // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.512
1667   return _mm512_maskz_getmant_round_ph(__U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan, _MM_FROUND_NO_EXC);
1668 }
1669 
test_mm512_getmant_ph(__m512h __A)1670 __m512h test_mm512_getmant_ph(__m512h __A) {
1671   // CHECK-LABEL: @test_mm512_getmant_ph
1672   // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.512
1673   return _mm512_getmant_ph(__A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan);
1674 }
1675 
test_mm512_mask_getmant_ph(__m512h __W,__mmask32 __U,__m512h __A)1676 __m512h test_mm512_mask_getmant_ph(__m512h __W, __mmask32 __U, __m512h __A) {
1677   // CHECK-LABEL: @test_mm512_mask_getmant_ph
1678   // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.512
1679   return _mm512_mask_getmant_ph(__W, __U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan);
1680 }
1681 
test_mm512_maskz_getmant_ph(__mmask32 __U,__m512h __A)1682 __m512h test_mm512_maskz_getmant_ph(__mmask32 __U, __m512h __A) {
1683   // CHECK-LABEL: @test_mm512_maskz_getmant_ph
1684   // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.512
1685   return _mm512_maskz_getmant_ph(__U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan);
1686 }
1687 
test_mm512_scalef_round_ph(__m512h __A,__m512h __B)1688 __m512h test_mm512_scalef_round_ph(__m512h __A, __m512h __B) {
1689   // CHECK-LABEL: @test_mm512_scalef_round_ph
1690   // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.512
1691   return _mm512_scalef_round_ph(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
1692 }
1693 
test_mm512_mask_scalef_round_ph(__m512h __W,__mmask32 __U,__m512h __A,__m512h __B)1694 __m512h test_mm512_mask_scalef_round_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) {
1695   // CHECK-LABEL: @test_mm512_mask_scalef_round_ph
1696   // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.512
1697   return _mm512_mask_scalef_round_ph(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
1698 }
1699 
test_mm512_maskz_scalef_round_ph(__mmask32 __U,__m512h __A,__m512h __B)1700 __m512h test_mm512_maskz_scalef_round_ph(__mmask32 __U, __m512h __A, __m512h __B) {
1701   // CHECK-LABEL: @test_mm512_maskz_scalef_round_ph
1702   // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.512
1703   return _mm512_maskz_scalef_round_ph(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
1704 }
1705 
test_mm512_scalef_ph(__m512h __A,__m512h __B)1706 __m512h test_mm512_scalef_ph(__m512h __A, __m512h __B) {
1707   // CHECK-LABEL: @test_mm512_scalef_ph
1708   // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.512
1709   return _mm512_scalef_ph(__A, __B);
1710 }
1711 
test_mm512_mask_scalef_ph(__m512h __W,__mmask32 __U,__m512h __A,__m512h __B)1712 __m512h test_mm512_mask_scalef_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) {
1713   // CHECK-LABEL: @test_mm512_mask_scalef_ph
1714   // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.512
1715   return _mm512_mask_scalef_ph(__W, __U, __A, __B);
1716 }
1717 
test_mm512_maskz_scalef_ph(__mmask32 __U,__m512h __A,__m512h __B)1718 __m512h test_mm512_maskz_scalef_ph(__mmask32 __U, __m512h __A, __m512h __B) {
1719   // CHECK-LABEL: @test_mm512_maskz_scalef_ph
1720   // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.512
1721   return _mm512_maskz_scalef_ph(__U, __A, __B);
1722 }
1723 
test_mm512_mask_roundscale_ph(__m512h __W,__mmask16 __U,__m512h __A)1724 __m512h test_mm512_mask_roundscale_ph(__m512h __W, __mmask16 __U, __m512h __A) {
1725   // CHECK-LABEL: @test_mm512_mask_roundscale_ph
1726   // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.512
1727   return _mm512_mask_roundscale_ph(__W, __U, __A, 1);
1728 }
1729 
test_mm512_maskz_roundscale_ph(__mmask16 __U,__m512h __A)1730 __m512h test_mm512_maskz_roundscale_ph(__mmask16 __U, __m512h __A) {
1731   // CHECK-LABEL: @test_mm512_maskz_roundscale_ph
1732   // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.512
1733   return _mm512_maskz_roundscale_ph(__U, __A, 1);
1734 }
1735 
test_mm512_mask_roundscale_round_ph(__m512h __A,__mmask16 __U,__m512h __C)1736 __m512h test_mm512_mask_roundscale_round_ph(__m512h __A, __mmask16 __U, __m512h __C) {
1737   // CHECK-LABEL: @test_mm512_mask_roundscale_round_ph
1738   // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.512
1739   return _mm512_mask_roundscale_round_ph(__A, __U, __C, 3, _MM_FROUND_NO_EXC);
1740 }
1741 
test_mm512_maskz_roundscale_round_ph(__m512h __A,__mmask16 __U)1742 __m512h test_mm512_maskz_roundscale_round_ph(__m512h __A, __mmask16 __U) {
1743   // CHECK-LABEL: @test_mm512_maskz_roundscale_round_ph
1744   // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.512
1745   return _mm512_maskz_roundscale_round_ph(__U, __A, 3, _MM_FROUND_NO_EXC);
1746 }
1747 
test_mm512_roundscale_round_ph(__m512h __A)1748 __m512h test_mm512_roundscale_round_ph(__m512h __A) {
1749   // CHECK-LABEL: @test_mm512_roundscale_round_ph
1750   // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.512
1751   return _mm512_roundscale_round_ph(__A, 3, _MM_FROUND_NO_EXC);
1752 }
1753 
test_mm512_roundscale_ph(__m512h __A)1754 __m512h test_mm512_roundscale_ph(__m512h __A) {
1755   // CHECK-LABEL: @test_mm512_roundscale_ph
1756   // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.512
1757   return _mm512_roundscale_ph(__A, 3);
1758 }
1759 
test_mm512_getexp_round_ph(__m512h __A)1760 __m512h test_mm512_getexp_round_ph(__m512h __A) {
1761   // CHECK-LABEL: @test_mm512_getexp_round_ph
1762   // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.512
1763   return _mm512_getexp_round_ph(__A, _MM_FROUND_NO_EXC);
1764 }
1765 
test_mm512_mask_getexp_round_ph(__m512h __W,__mmask32 __U,__m512h __A)1766 __m512h test_mm512_mask_getexp_round_ph(__m512h __W, __mmask32 __U, __m512h __A) {
1767   // CHECK-LABEL: @test_mm512_mask_getexp_round_ph
1768   // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.512
1769   return _mm512_mask_getexp_round_ph(__W, __U, __A, _MM_FROUND_NO_EXC);
1770 }
1771 
test_mm512_maskz_getexp_round_ph(__mmask32 __U,__m512h __A)1772 __m512h test_mm512_maskz_getexp_round_ph(__mmask32 __U, __m512h __A) {
1773   // CHECK-LABEL: @test_mm512_maskz_getexp_round_ph
1774   // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.512
1775   return _mm512_maskz_getexp_round_ph(__U, __A, _MM_FROUND_NO_EXC);
1776 }
1777 
test_mm512_getexp_ph(__m512h __A)1778 __m512h test_mm512_getexp_ph(__m512h __A) {
1779   // CHECK-LABEL: @test_mm512_getexp_ph
1780   // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.512
1781   return _mm512_getexp_ph(__A);
1782 }
1783 
test_mm512_mask_getexp_ph(__m512h __W,__mmask32 __U,__m512h __A)1784 __m512h test_mm512_mask_getexp_ph(__m512h __W, __mmask32 __U, __m512h __A) {
1785   // CHECK-LABEL: @test_mm512_mask_getexp_ph
1786   // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.512
1787   return _mm512_mask_getexp_ph(__W, __U, __A);
1788 }
1789 
test_mm512_maskz_getexp_ph(__mmask32 __U,__m512h __A)1790 __m512h test_mm512_maskz_getexp_ph(__mmask32 __U, __m512h __A) {
1791   // CHECK-LABEL: @test_mm512_maskz_getexp_ph
1792   // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.512
1793   return _mm512_maskz_getexp_ph(__U, __A);
1794 }
1795 
test_mm512_mask_reduce_ph(__m512h __W,__mmask16 __U,__m512h __A)1796 __m512h test_mm512_mask_reduce_ph(__m512h __W, __mmask16 __U, __m512h __A) {
1797   // CHECK-LABEL: @test_mm512_mask_reduce_ph
1798   // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.512
1799   return _mm512_mask_reduce_ph(__W, __U, __A, 1);
1800 }
1801 
test_mm512_maskz_reduce_ph(__mmask16 __U,__m512h __A)1802 __m512h test_mm512_maskz_reduce_ph(__mmask16 __U, __m512h __A) {
1803   // CHECK-LABEL: @test_mm512_maskz_reduce_ph
1804   // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.512
1805   return _mm512_maskz_reduce_ph(__U, __A, 1);
1806 }
1807 
test_mm512_mask_reduce_round_ph(__m512h __A,__mmask16 __U,__m512h __C)1808 __m512h test_mm512_mask_reduce_round_ph(__m512h __A, __mmask16 __U, __m512h __C) {
1809   // CHECK-LABEL: @test_mm512_mask_reduce_round_ph
1810   // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.512
1811   return _mm512_mask_reduce_round_ph(__A, __U, __C, 3, _MM_FROUND_NO_EXC);
1812 }
1813 
test_mm512_maskz_reduce_round_ph(__m512h __A,__mmask16 __U)1814 __m512h test_mm512_maskz_reduce_round_ph(__m512h __A, __mmask16 __U) {
1815   // CHECK-LABEL: @test_mm512_maskz_reduce_round_ph
1816   // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.512
1817   return _mm512_maskz_reduce_round_ph(__U, __A, 3, _MM_FROUND_NO_EXC);
1818 }
1819 
test_mm512_reduce_round_ph(__m512h __A)1820 __m512h test_mm512_reduce_round_ph(__m512h __A) {
1821   // CHECK-LABEL: @test_mm512_reduce_round_ph
1822   // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.512
1823   return _mm512_reduce_round_ph(__A, 3, _MM_FROUND_NO_EXC);
1824 }
1825 
test_mm512_reduce_ph(__m512h __A)1826 __m512h test_mm512_reduce_ph(__m512h __A) {
1827   // CHECK-LABEL: @test_mm512_reduce_ph
1828   // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.512
1829   return _mm512_reduce_ph(__A, 3);
1830 }
test_mm_rcp_sh(__m128h __A,__m128h __B)1831 __m128h test_mm_rcp_sh(__m128h __A, __m128h __B) {
1832   // CHECK-LABEL: @test_mm_rcp_sh
1833   // CHECK: @llvm.x86.avx512fp16.mask.rcp.sh
1834   return _mm_rcp_sh(__A, __B);
1835 }
1836 
test_mm_mask_rcp_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)1837 __m128h test_mm_mask_rcp_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
1838   // CHECK-LABEL: @test_mm_mask_rcp_sh
1839   // CHECK: @llvm.x86.avx512fp16.mask.rcp.sh
1840   return _mm_mask_rcp_sh(__W, __U, __A, __B);
1841 }
1842 
test_mm_maskz_rcp_sh(__mmask8 __U,__m128h __A,__m128h __B)1843 __m128h test_mm_maskz_rcp_sh(__mmask8 __U, __m128h __A, __m128h __B) {
1844   // CHECK-LABEL: @test_mm_maskz_rcp_sh
1845   // CHECK: @llvm.x86.avx512fp16.mask.rcp.sh
1846   return _mm_maskz_rcp_sh(__U, __A, __B);
1847 }
1848 
test_mm_rsqrt_sh(__m128h __A,__m128h __B)1849 __m128h test_mm_rsqrt_sh(__m128h __A, __m128h __B) {
1850   // CHECK-LABEL: @test_mm_rsqrt_sh
1851   // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.sh
1852   return _mm_rsqrt_sh(__A, __B);
1853 }
1854 
test_mm_mask_rsqrt_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)1855 __m128h test_mm_mask_rsqrt_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
1856   // CHECK-LABEL: @test_mm_mask_rsqrt_sh
1857   // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.sh
1858   return _mm_mask_rsqrt_sh(__W, __U, __A, __B);
1859 }
1860 
test_mm_maskz_rsqrt_sh(__mmask8 __U,__m128h __A,__m128h __B)1861 __m128h test_mm_maskz_rsqrt_sh(__mmask8 __U, __m128h __A, __m128h __B) {
1862   // CHECK-LABEL: @test_mm_maskz_rsqrt_sh
1863   // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.sh
1864   return _mm_maskz_rsqrt_sh(__U, __A, __B);
1865 }
1866 
test_mm_getmant_round_sh(__m128h __A,__m128h __B)1867 __m128h test_mm_getmant_round_sh(__m128h __A, __m128h __B) {
1868   // CHECK-LABEL: @test_mm_getmant_round_sh
1869   // CHECK: @llvm.x86.avx512fp16.mask.getmant.sh
1870   return _mm_getmant_round_sh(__A, __B, _MM_MANT_NORM_1_2, _MM_MANT_SIGN_src, 8);
1871 }
1872 
test_mm_getmant_sh(__m128h __A,__m128h __B)1873 __m128h test_mm_getmant_sh(__m128h __A, __m128h __B) {
1874   // CHECK-LABEL: @test_mm_getmant_sh
1875   // CHECK: @llvm.x86.avx512fp16.mask.getmant.sh
1876   return _mm_getmant_sh(__A, __B, _MM_MANT_NORM_1_2, _MM_MANT_SIGN_src);
1877 }
1878 
test_mm_mask_getmant_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)1879 __m128h test_mm_mask_getmant_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
1880   // CHECK-LABEL: @test_mm_mask_getmant_sh
1881   // CHECK: @llvm.x86.avx512fp16.mask.getmant.sh
1882   return _mm_mask_getmant_sh(__W, __U, __A, __B, 1, 2);
1883 }
1884 
test_mm_mask_getmant_round_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)1885 __m128h test_mm_mask_getmant_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
1886   // CHECK-LABEL: @test_mm_mask_getmant_round_sh
1887   // CHECK: @llvm.x86.avx512fp16.mask.getmant.sh
1888   return _mm_mask_getmant_round_sh(__W, __U, __A, __B, 1, 2, _MM_FROUND_NO_EXC);
1889 }
1890 
test_mm_maskz_getmant_sh(__mmask8 __U,__m128h __A,__m128h __B)1891 __m128h test_mm_maskz_getmant_sh(__mmask8 __U, __m128h __A, __m128h __B) {
1892   // CHECK-LABEL: @test_mm_maskz_getmant_sh
1893   // CHECK: @llvm.x86.avx512fp16.mask.getmant.sh
1894   return _mm_maskz_getmant_sh(__U, __A, __B, 1, 2);
1895 }
1896 
test_mm_maskz_getmant_round_sh(__mmask8 __U,__m128h __A,__m128h __B)1897 __m128h test_mm_maskz_getmant_round_sh(__mmask8 __U, __m128h __A, __m128h __B) {
1898   // CHECK-LABEL: @test_mm_maskz_getmant_round_sh
1899   // CHECK: @llvm.x86.avx512fp16.mask.getmant.sh
1900   return _mm_maskz_getmant_round_sh(__U, __A, __B, 1, 2, _MM_FROUND_NO_EXC);
1901 }
1902 
test_mm_getexp_round_sh(__m128h __A,__m128h __B)1903 __m128h test_mm_getexp_round_sh(__m128h __A, __m128h __B) {
1904   // CHECK-LABEL: @test_mm_getexp_round_sh
1905   // CHECK: @llvm.x86.avx512fp16.mask.getexp.sh
1906   return _mm_getexp_round_sh(__A, __B, 8);
1907 }
1908 
test_mm_getexp_sh(__m128h __A,__m128h __B)1909 __m128h test_mm_getexp_sh(__m128h __A, __m128h __B) {
1910   // CHECK-LABEL: @test_mm_getexp_sh
1911   // CHECK: @llvm.x86.avx512fp16.mask.getexp.sh
1912   return _mm_getexp_sh(__A, __B);
1913 }
1914 
test_mm_mask_getexp_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)1915 __m128h test_mm_mask_getexp_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
1916   // CHECK-LABEL: @test_mm_mask_getexp_sh
1917   // CHECK: @llvm.x86.avx512fp16.mask.getexp.sh
1918   return _mm_mask_getexp_sh(__W, __U, __A, __B);
1919 }
1920 
test_mm_mask_getexp_round_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)1921 __m128h test_mm_mask_getexp_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
1922   // CHECK-LABEL: @test_mm_mask_getexp_round_sh
1923   // CHECK: @llvm.x86.avx512fp16.mask.getexp.sh
1924   return _mm_mask_getexp_round_sh(__W, __U, __A, __B, _MM_FROUND_NO_EXC);
1925 }
1926 
test_mm_maskz_getexp_sh(__mmask8 __U,__m128h __A,__m128h __B)1927 __m128h test_mm_maskz_getexp_sh(__mmask8 __U, __m128h __A, __m128h __B) {
1928   // CHECK-LABEL: @test_mm_maskz_getexp_sh
1929   // CHECK: @llvm.x86.avx512fp16.mask.getexp.sh
1930   return _mm_maskz_getexp_sh(__U, __A, __B);
1931 }
1932 
test_mm_maskz_getexp_round_sh(__mmask8 __U,__m128h __A,__m128h __B)1933 __m128h test_mm_maskz_getexp_round_sh(__mmask8 __U, __m128h __A, __m128h __B) {
1934   // CHECK-LABEL: @test_mm_maskz_getexp_round_sh
1935   // CHECK: @llvm.x86.avx512fp16.mask.getexp.sh
1936   return _mm_maskz_getexp_round_sh(__U, __A, __B, _MM_FROUND_NO_EXC);
1937 }
1938 
test_mm_scalef_round_sh(__m128h __A,__m128h __B)1939 __m128h test_mm_scalef_round_sh(__m128h __A, __m128h __B) {
1940   // CHECK-LABEL: @test_mm_scalef_round_sh
1941   // CHECK: @llvm.x86.avx512fp16.mask.scalef.sh(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}, i8 -1, i32 11)
1942   return _mm_scalef_round_sh(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
1943 }
1944 
test_mm_scalef_sh(__m128h __A,__m128h __B)1945 __m128h test_mm_scalef_sh(__m128h __A, __m128h __B) {
1946   // CHECK-LABEL: @test_mm_scalef_sh
1947   // CHECK: @llvm.x86.avx512fp16.mask.scalef.sh
1948   return _mm_scalef_sh(__A, __B);
1949 }
1950 
test_mm_mask_scalef_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)1951 __m128h test_mm_mask_scalef_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
1952   // CHECK-LABEL: @test_mm_mask_scalef_sh
1953   // CHECK: @llvm.x86.avx512fp16.mask.scalef.sh
1954   return _mm_mask_scalef_sh(__W, __U, __A, __B);
1955 }
1956 
test_mm_mask_scalef_round_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)1957 __m128h test_mm_mask_scalef_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
1958   // CHECK-LABEL: @test_mm_mask_scalef_round_sh
1959   // CHECK: @llvm.x86.avx512fp16.mask.scalef.sh(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}, i8 %{{.*}}, i32 11)
1960   return _mm_mask_scalef_round_sh(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
1961 }
1962 
test_mm_maskz_scalef_sh(__mmask8 __U,__m128h __A,__m128h __B)1963 __m128h test_mm_maskz_scalef_sh(__mmask8 __U, __m128h __A, __m128h __B) {
1964   // CHECK-LABEL: @test_mm_maskz_scalef_sh
1965   // CHECK: @llvm.x86.avx512fp16.mask.scalef.sh
1966   return _mm_maskz_scalef_sh(__U, __A, __B);
1967 }
1968 
test_mm_maskz_scalef_round_sh(__mmask8 __U,__m128h __A,__m128h __B)1969 __m128h test_mm_maskz_scalef_round_sh(__mmask8 __U, __m128h __A, __m128h __B) {
1970   // CHECK-LABEL: @test_mm_maskz_scalef_round_sh
1971   // CHECK: @llvm.x86.avx512fp16.mask.scalef.sh(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}, i8 %{{.*}}, i32 11)
1972   return _mm_maskz_scalef_round_sh(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
1973 }
1974 
test_mm_roundscale_round_sh(__m128h __A,__m128h __B)1975 __m128h test_mm_roundscale_round_sh(__m128h __A, __m128h __B) {
1976   // CHECK-LABEL: @test_mm_roundscale_round_sh
1977   // CHECK: @llvm.x86.avx512fp16.mask.rndscale.sh
1978   return _mm_roundscale_round_sh(__A, __B, 3, _MM_FROUND_NO_EXC);
1979 }
1980 
test_mm_roundscale_sh(__m128h __A,__m128h __B)1981 __m128h test_mm_roundscale_sh(__m128h __A, __m128h __B) {
1982   // CHECK-LABEL: @test_mm_roundscale_sh
1983   // CHECK: @llvm.x86.avx512fp16.mask.rndscale.sh
1984   return _mm_roundscale_sh(__A, __B, 3);
1985 }
1986 
test_mm_mask_roundscale_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)1987 __m128h test_mm_mask_roundscale_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
1988   // CHECK-LABEL: @test_mm_mask_roundscale_sh
1989   // CHECK: @llvm.x86.avx512fp16.mask.rndscale.sh
1990   return _mm_mask_roundscale_sh(__W, __U, __A, __B, 3);
1991 }
1992 
test_mm_mask_roundscale_round_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)1993 __m128h test_mm_mask_roundscale_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
1994   // CHECK-LABEL: @test_mm_mask_roundscale_round_sh
1995   // CHECK: @llvm.x86.avx512fp16.mask.rndscale.sh
1996   return _mm_mask_roundscale_round_sh(__W, __U, __A, __B, 3, _MM_FROUND_NO_EXC);
1997 }
1998 
test_mm_maskz_roundscale_round_sh(__mmask8 __U,__m128h __A,__m128h __B)1999 __m128h test_mm_maskz_roundscale_round_sh(__mmask8 __U, __m128h __A, __m128h __B) {
2000   // CHECK-LABEL: @test_mm_maskz_roundscale_round_sh
2001   // CHECK: @llvm.x86.avx512fp16.mask.rndscale.sh
2002   return _mm_maskz_roundscale_round_sh(__U, __A, __B, 3, _MM_FROUND_NO_EXC);
2003 }
2004 
test_mm_maskz_roundscale_sh(__mmask8 __U,__m128h __A,__m128h __B)2005 __m128h test_mm_maskz_roundscale_sh(__mmask8 __U, __m128h __A, __m128h __B) {
2006   // CHECK-LABEL: @test_mm_maskz_roundscale_sh
2007   // CHECK: @llvm.x86.avx512fp16.mask.rndscale.sh
2008   return _mm_maskz_roundscale_sh(__U, __A, __B, 3);
2009 }
2010 
test_mm_reduce_sh(__m128h __A,__m128h __B)2011 __m128h test_mm_reduce_sh(__m128h __A, __m128h __B) {
2012   // CHECK-LABEL: @test_mm_reduce_sh
2013   // CHECK: @llvm.x86.avx512fp16.mask.reduce.sh
2014   return _mm_reduce_sh(__A, __B, 4);
2015 }
2016 
test_mm_mask_reduce_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)2017 __m128h test_mm_mask_reduce_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
2018   // CHECK-LABEL: @test_mm_mask_reduce_sh
2019   // CHECK: @llvm.x86.avx512fp16.mask.reduce.sh
2020   return _mm_mask_reduce_sh(__W, __U, __A, __B, 4);
2021 }
2022 
test_mm_maskz_reduce_sh(__mmask8 __U,__m128h __A,__m128h __B)2023 __m128h test_mm_maskz_reduce_sh(__mmask8 __U, __m128h __A, __m128h __B) {
2024   // CHECK-LABEL: @test_mm_maskz_reduce_sh
2025   // CHECK: @llvm.x86.avx512fp16.mask.reduce.sh
2026   return _mm_maskz_reduce_sh(__U, __A, __B, 4);
2027 }
2028 
test_mm_reduce_round_sh(__m128h __A,__m128h __B)2029 __m128h test_mm_reduce_round_sh(__m128h __A, __m128h __B) {
2030   // CHECK-LABEL: @test_mm_reduce_round_sh
2031   // CHECK: @llvm.x86.avx512fp16.mask.reduce.sh
2032   return _mm_reduce_round_sh(__A, __B, 4, 8);
2033 }
2034 
test_mm_mask_reduce_round_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)2035 __m128h test_mm_mask_reduce_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
2036   // CHECK-LABEL: @test_mm_mask_reduce_round_sh
2037   // CHECK: @llvm.x86.avx512fp16.mask.reduce.sh
2038   return _mm_mask_reduce_round_sh(__W, __U, __A, __B, 4, 8);
2039 }
2040 
test_mm_maskz_reduce_round_sh(__mmask8 __U,__m128h __A,__m128h __B)2041 __m128h test_mm_maskz_reduce_round_sh(__mmask8 __U, __m128h __A, __m128h __B) {
2042   // CHECK-LABEL: @test_mm_maskz_reduce_round_sh
2043   // CHECK: @llvm.x86.avx512fp16.mask.reduce.sh
2044   return _mm_maskz_reduce_round_sh(__U, __A, __B, 4, 8);
2045 }
2046 
test_mm512_sqrt_round_ph(__m512h __A)2047 __m512h test_mm512_sqrt_round_ph(__m512h __A) {
2048   // CHECK-LABEL: @test_mm512_sqrt_round_ph
2049   // CHECK: call <32 x half> @llvm.x86.avx512fp16.sqrt.ph.512(<32 x half> %{{.*}}, i32 11)
2050   return _mm512_sqrt_round_ph(__A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2051 }
2052 
test_mm512_mask_sqrt_round_ph(__m512h __W,__mmask32 __U,__m512h __A)2053 __m512h test_mm512_mask_sqrt_round_ph(__m512h __W, __mmask32 __U, __m512h __A) {
2054   // CHECK-LABEL: @test_mm512_mask_sqrt_round_ph
2055   // CHECK: call <32 x half> @llvm.x86.avx512fp16.sqrt.ph.512(<32 x half> %{{.*}}, i32 11)
2056   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
2057   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
2058   return _mm512_mask_sqrt_round_ph(__W, __U, __A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2059 }
2060 
test_mm512_maskz_sqrt_round_ph(__mmask32 __U,__m512h __A)2061 __m512h test_mm512_maskz_sqrt_round_ph(__mmask32 __U, __m512h __A) {
2062   // CHECK-LABEL: @test_mm512_maskz_sqrt_round_ph
2063   // CHECK: call <32 x half> @llvm.x86.avx512fp16.sqrt.ph.512(<32 x half> %{{.*}}, i32 11)
2064   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
2065   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> {{.*}}
2066   return _mm512_maskz_sqrt_round_ph(__U, __A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2067 }
2068 
test_mm512_sqrt_ph(__m512h __A)2069 __m512h test_mm512_sqrt_ph(__m512h __A) {
2070   // CHECK-LABEL: @test_mm512_sqrt_ph
2071   // CHECK: %{{.*}} = call <32 x half> @llvm.sqrt.v32f16(<32 x half> %{{.*}})
2072   return _mm512_sqrt_ph(__A);
2073 }
test_mm512_mask_sqrt_ph(__m512h __W,__mmask32 __U,__m512h __A)2074 __m512h test_mm512_mask_sqrt_ph(__m512h __W, __mmask32 __U, __m512h __A) {
2075   // CHECK-LABEL: @test_mm512_mask_sqrt_ph
2076   // CHECK: %{{.*}} = call <32 x half> @llvm.sqrt.v32f16(<32 x half> %{{.*}})
2077   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
2078   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
2079   return _mm512_mask_sqrt_ph(__W, __U, __A);
2080 }
test_mm512_maskz_sqrt_ph(__mmask32 __U,__m512h __A)2081 __m512h test_mm512_maskz_sqrt_ph(__mmask32 __U, __m512h __A) {
2082   // CHECK-LABEL: @test_mm512_maskz_sqrt_ph
2083   // CHECK: %{{.*}} = call <32 x half> @llvm.sqrt.v32f16(<32 x half> %{{.*}})
2084   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
2085   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> {{.*}}
2086   return _mm512_maskz_sqrt_ph(__U, __A);
2087 }
2088 
test_mm_sqrt_round_sh(__m128h __A,__m128h __B)2089 __m128h test_mm_sqrt_round_sh(__m128h __A, __m128h __B) {
2090   // CHECK-LABEL: @test_mm_sqrt_round_sh
2091   // CHECK: call <8 x half> @llvm.x86.avx512fp16.mask.sqrt.sh(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}, i8 -1, i32 11)
2092   return _mm_sqrt_round_sh(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2093 }
2094 
test_mm_mask_sqrt_round_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)2095 __m128h test_mm_mask_sqrt_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
2096   // CHECK-LABEL: @test_mm_mask_sqrt_round_sh
2097   // CHECK: call <8 x half> @llvm.x86.avx512fp16.mask.sqrt.sh(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}, i8 {{.*}}, i32 11)
2098   return _mm_mask_sqrt_round_sh(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2099 }
2100 
test_mm_maskz_sqrt_round_sh(__mmask8 __U,__m128h __A,__m128h __B)2101 __m128h test_mm_maskz_sqrt_round_sh(__mmask8 __U, __m128h __A, __m128h __B) {
2102   // CHECK-LABEL: @test_mm_maskz_sqrt_round_sh
2103   // CHECK: call <8 x half> @llvm.x86.avx512fp16.mask.sqrt.sh(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}, i8 {{.*}}, i32 11)
2104   return _mm_maskz_sqrt_round_sh(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2105 }
2106 
test_mm_sqrt_sh(__m128h __A,__m128h __B)2107 __m128h test_mm_sqrt_sh(__m128h __A, __m128h __B) {
2108   // CHECK-LABEL: @test_mm_sqrt_sh
2109   // CHECK: %{{.*}} = call half @llvm.sqrt.f16(half %{{.*}})
2110   return _mm_sqrt_sh(__A, __B);
2111 }
test_mm_mask_sqrt_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)2112 __m128h test_mm_mask_sqrt_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
2113   // CHECK-LABEL: @test_mm_mask_sqrt_sh
2114   // CHECK: %{{.*}} = call half @llvm.sqrt.f16(half %{{.*}})
2115   return _mm_mask_sqrt_sh(__W, __U, __A, __B);
2116 }
test_mm_maskz_sqrt_sh(__mmask8 __U,__m128h __A,__m128h __B)2117 __m128h test_mm_maskz_sqrt_sh(__mmask8 __U, __m128h __A, __m128h __B) {
2118   // CHECK-LABEL: @test_mm_maskz_sqrt_sh
2119   // CHECK: %{{.*}} = call half @llvm.sqrt.f16(half %{{.*}})
2120   return _mm_maskz_sqrt_sh(__U, __A, __B);
2121 }
2122 
test_mm512_mask_fpclass_ph_mask(__mmask32 __U,__m512h __A)2123 __mmask32 test_mm512_mask_fpclass_ph_mask(__mmask32 __U, __m512h __A) {
2124   // CHECK-LABEL: @test_mm512_mask_fpclass_ph_mask
2125   // CHECK: @llvm.x86.avx512fp16.fpclass.ph.512
2126   return _mm512_mask_fpclass_ph_mask(__U, __A, 4);
2127 }
2128 
test_mm512_fpclass_ph_mask(__m512h __A)2129 __mmask32 test_mm512_fpclass_ph_mask(__m512h __A) {
2130   // CHECK-LABEL: @test_mm512_fpclass_ph_mask
2131   // CHECK: @llvm.x86.avx512fp16.fpclass.ph.512
2132   return _mm512_fpclass_ph_mask(__A, 4);
2133 }
2134 
test_mm_fpclash_sh_mask(__m128 __A)2135 __mmask8 test_mm_fpclash_sh_mask(__m128 __A) {
2136   // CHECK-LABEL: @test_mm_fpclash_sh_mask
2137   // CHECK: @llvm.x86.avx512fp16.mask.fpclass.sh
2138   return _mm_fpclass_sh_mask(__A, 2);
2139 }
2140 
test_mm_mask_fpclash_sh_mask(__mmask8 __U,__m128 __A)2141 __mmask8 test_mm_mask_fpclash_sh_mask(__mmask8 __U, __m128 __A) {
2142   // CHECK-LABEL: @test_mm_mask_fpclash_sh_mask
2143   // CHECK: @llvm.x86.avx512fp16.mask.fpclass.sh
2144   return _mm_mask_fpclass_sh_mask(__U, __A, 2);
2145 }
2146 
test_mm512_cvt_roundpd_ph(__m512d A)2147 __m128h test_mm512_cvt_roundpd_ph(__m512d A) {
2148   // CHECK-LABEL: test_mm512_cvt_roundpd_ph
2149   // CHECK: @llvm.x86.avx512fp16.mask.vcvtpd2ph.512
2150   return _mm512_cvt_roundpd_ph(A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2151 }
2152 
test_mm512_mask_cvt_roundpd_ph(__m128h A,__mmask8 B,__m512d C)2153 __m128h test_mm512_mask_cvt_roundpd_ph(__m128h A, __mmask8 B, __m512d C) {
2154   // CHECK-LABEL: test_mm512_mask_cvt_roundpd_ph
2155   // CHECK: @llvm.x86.avx512fp16.mask.vcvtpd2ph.512
2156   return _mm512_mask_cvt_roundpd_ph(A, B, C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2157 }
2158 
test_mm512_maskz_cvt_roundpd_ph(__mmask8 A,__m512d B)2159 __m128h test_mm512_maskz_cvt_roundpd_ph(__mmask8 A, __m512d B) {
2160   // CHECK-LABEL: test_mm512_maskz_cvt_roundpd_ph
2161   // CHECK: @llvm.x86.avx512fp16.mask.vcvtpd2ph.512
2162   return _mm512_maskz_cvt_roundpd_ph(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2163 }
2164 
test_mm512_cvtpd_ph(__m512d A)2165 __m128h test_mm512_cvtpd_ph(__m512d A) {
2166   // CHECK-LABEL: test_mm512_cvtpd_ph
2167   // CHECK: @llvm.x86.avx512fp16.mask.vcvtpd2ph.512
2168   return _mm512_cvtpd_ph(A);
2169 }
2170 
test_mm512_mask_cvtpd_ph(__m128h A,__mmask8 B,__m512d C)2171 __m128h test_mm512_mask_cvtpd_ph(__m128h A, __mmask8 B, __m512d C) {
2172   // CHECK-LABEL: test_mm512_mask_cvtpd_ph
2173   // CHECK: @llvm.x86.avx512fp16.mask.vcvtpd2ph.512
2174   return _mm512_mask_cvtpd_ph(A, B, C);
2175 }
2176 
test_mm512_maskz_cvtpd_ph(__mmask8 A,__m512d B)2177 __m128h test_mm512_maskz_cvtpd_ph(__mmask8 A, __m512d B) {
2178   // CHECK-LABEL: test_mm512_maskz_cvtpd_ph
2179   // CHECK: @llvm.x86.avx512fp16.mask.vcvtpd2ph.512
2180   return _mm512_maskz_cvtpd_ph(A, B);
2181 }
2182 
test_mm512_cvt_roundph_pd(__m128h A)2183 __m512d test_mm512_cvt_roundph_pd(__m128h A) {
2184   // CHECK-LABEL: test_mm512_cvt_roundph_pd
2185   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2pd.512
2186   return _mm512_cvt_roundph_pd(A, _MM_FROUND_NO_EXC);
2187 }
2188 
test_mm512_mask_cvt_roundph_pd(__m512d A,__mmask8 B,__m128h C)2189 __m512d test_mm512_mask_cvt_roundph_pd(__m512d A, __mmask8 B, __m128h C) {
2190   // CHECK-LABEL: test_mm512_mask_cvt_roundph_pd
2191   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2pd.512
2192   return _mm512_mask_cvt_roundph_pd(A, B, C, _MM_FROUND_NO_EXC);
2193 }
2194 
test_mm512_maskz_cvt_roundph_pd(__mmask8 A,__m128h B)2195 __m512d test_mm512_maskz_cvt_roundph_pd(__mmask8 A, __m128h B) {
2196   // CHECK-LABEL: test_mm512_maskz_cvt_roundph_pd
2197   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2pd.512
2198   return _mm512_maskz_cvt_roundph_pd(A, B, _MM_FROUND_NO_EXC);
2199 }
2200 
test_mm512_cvtph_pd(__m128h A)2201 __m512d test_mm512_cvtph_pd(__m128h A) {
2202   // CHECK-LABEL: test_mm512_cvtph_pd
2203   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2pd.512
2204   return _mm512_cvtph_pd(A);
2205 }
2206 
test_mm512_mask_cvtph_pd(__m512d A,__mmask8 B,__m128h C)2207 __m512d test_mm512_mask_cvtph_pd(__m512d A, __mmask8 B, __m128h C) {
2208   // CHECK-LABEL: test_mm512_mask_cvtph_pd
2209   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2pd.512
2210   return _mm512_mask_cvtph_pd(A, B, C);
2211 }
2212 
test_mm512_maskz_cvtph_pd(__mmask8 A,__m128h B)2213 __m512d test_mm512_maskz_cvtph_pd(__mmask8 A, __m128h B) {
2214   // CHECK-LABEL: test_mm512_maskz_cvtph_pd
2215   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2pd.512
2216   return _mm512_maskz_cvtph_pd(A, B);
2217 }
2218 
test_mm_cvt_roundsh_ss(__m128 A,__m128h B)2219 __m128 test_mm_cvt_roundsh_ss(__m128 A, __m128h B) {
2220   // CHECK-LABEL: test_mm_cvt_roundsh_ss
2221   // CHECK: @llvm.x86.avx512fp16.mask.vcvtsh2ss.round
2222   return _mm_cvt_roundsh_ss(A, B, _MM_FROUND_NO_EXC);
2223 }
2224 
test_mm_mask_cvt_roundsh_ss(__m128 A,__mmask8 B,__m128 C,__m128h D)2225 __m128 test_mm_mask_cvt_roundsh_ss(__m128 A, __mmask8 B, __m128 C, __m128h D) {
2226   // CHECK-LABEL: test_mm_mask_cvt_roundsh_ss
2227   // CHECK: @llvm.x86.avx512fp16.mask.vcvtsh2ss.round
2228   return _mm_mask_cvt_roundsh_ss(A, B, C, D, _MM_FROUND_NO_EXC);
2229 }
2230 
test_mm_maskz_cvt_roundsh_ss(__mmask8 A,__m128 B,__m128h C)2231 __m128 test_mm_maskz_cvt_roundsh_ss(__mmask8 A, __m128 B, __m128h C) {
2232   // CHECK-LABEL: test_mm_maskz_cvt_roundsh_ss
2233   // CHECK: @llvm.x86.avx512fp16.mask.vcvtsh2ss.round
2234   return _mm_maskz_cvt_roundsh_ss(A, B, C, _MM_FROUND_NO_EXC);
2235 }
2236 
test_mm_cvtsh_ss(__m128 A,__m128h B)2237 __m128 test_mm_cvtsh_ss(__m128 A, __m128h B) {
2238   // CHECK-LABEL: test_mm_cvtsh_ss
2239   // CHECK: @llvm.x86.avx512fp16.mask.vcvtsh2ss.round
2240   return _mm_cvtsh_ss(A, B);
2241 }
2242 
test_mm_mask_cvtsh_ss(__m128 A,__mmask8 B,__m128 C,__m128h D)2243 __m128 test_mm_mask_cvtsh_ss(__m128 A, __mmask8 B, __m128 C, __m128h D) {
2244   // CHECK-LABEL: test_mm_mask_cvtsh_ss
2245   // CHECK: @llvm.x86.avx512fp16.mask.vcvtsh2ss.round
2246   return _mm_mask_cvtsh_ss(A, B, C, D);
2247 }
2248 
test_mm_maskz_cvtsh_ss(__mmask8 A,__m128 B,__m128h C)2249 __m128 test_mm_maskz_cvtsh_ss(__mmask8 A, __m128 B, __m128h C) {
2250   // CHECK-LABEL: test_mm_maskz_cvtsh_ss
2251   // CHECK: @llvm.x86.avx512fp16.mask.vcvtsh2ss.round
2252   return _mm_maskz_cvtsh_ss(A, B, C);
2253 }
2254 
test_mm_cvt_roundss_sh(__m128h A,__m128 B)2255 __m128h test_mm_cvt_roundss_sh(__m128h A, __m128 B) {
2256   // CHECK-LABEL: test_mm_cvt_roundss_sh
2257   // CHECK: @llvm.x86.avx512fp16.mask.vcvtss2sh.round
2258   return _mm_cvt_roundss_sh(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2259 }
2260 
test_mm_mask_cvt_roundss_sh(__m128h A,__mmask8 B,__m128h C,__m128 D)2261 __m128h test_mm_mask_cvt_roundss_sh(__m128h A, __mmask8 B, __m128h C, __m128 D) {
2262   // CHECK-LABEL: test_mm_mask_cvt_roundss_sh
2263   // CHECK: @llvm.x86.avx512fp16.mask.vcvtss2sh.round
2264   return _mm_mask_cvt_roundss_sh(A, B, C, D, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2265 }
2266 
test_mm_maskz_cvt_roundss_sh(__mmask8 A,__m128h B,__m128 C)2267 __m128h test_mm_maskz_cvt_roundss_sh(__mmask8 A, __m128h B, __m128 C) {
2268   // CHECK-LABEL: test_mm_maskz_cvt_roundss_sh
2269   // CHECK: @llvm.x86.avx512fp16.mask.vcvtss2sh.round
2270   return _mm_maskz_cvt_roundss_sh(A, B, C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2271 }
2272 
test_mm_cvtss_sh(__m128h A,__m128 B)2273 __m128h test_mm_cvtss_sh(__m128h A, __m128 B) {
2274   // CHECK-LABEL: test_mm_cvtss_sh
2275   // CHECK: @llvm.x86.avx512fp16.mask.vcvtss2sh.round
2276   return _mm_cvtss_sh(A, B);
2277 }
2278 
test_mm_mask_cvtss_sh(__m128h A,__mmask8 B,__m128h C,__m128 D)2279 __m128h test_mm_mask_cvtss_sh(__m128h A, __mmask8 B, __m128h C, __m128 D) {
2280   // CHECK-LABEL: test_mm_mask_cvtss_sh
2281   // CHECK: @llvm.x86.avx512fp16.mask.vcvtss2sh.round
2282   return _mm_mask_cvtss_sh(A, B, C, D);
2283 }
2284 
test_mm_maskz_cvtss_sh(__mmask8 A,__m128h B,__m128 C)2285 __m128h test_mm_maskz_cvtss_sh(__mmask8 A, __m128h B, __m128 C) {
2286   // CHECK-LABEL: test_mm_maskz_cvtss_sh
2287   // CHECK: @llvm.x86.avx512fp16.mask.vcvtss2sh.round
2288   return _mm_maskz_cvtss_sh(A, B, C);
2289 }
2290 
test_mm_cvt_roundsd_sh(__m128h A,__m128d B)2291 __m128h test_mm_cvt_roundsd_sh(__m128h A, __m128d B) {
2292   // CHECK-LABEL: test_mm_cvt_roundsd_sh
2293   // CHECK: @llvm.x86.avx512fp16.mask.vcvtsd2sh.round
2294   return _mm_cvt_roundsd_sh(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2295 }
2296 
test_mm_mask_cvt_roundsd_sh(__m128h A,__mmask8 B,__m128h C,__m128d D)2297 __m128h test_mm_mask_cvt_roundsd_sh(__m128h A, __mmask8 B, __m128h C, __m128d D) {
2298   // CHECK-LABEL: test_mm_mask_cvt_roundsd_sh
2299   // CHECK: @llvm.x86.avx512fp16.mask.vcvtsd2sh.round
2300   return _mm_mask_cvt_roundsd_sh(A, B, C, D, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2301 }
2302 
test_mm_maskz_cvt_roundsd_sh(__mmask8 A,__m128h B,__m128d C)2303 __m128h test_mm_maskz_cvt_roundsd_sh(__mmask8 A, __m128h B, __m128d C) {
2304   // CHECK-LABEL: test_mm_maskz_cvt_roundsd_sh
2305   // CHECK: @llvm.x86.avx512fp16.mask.vcvtsd2sh.round
2306   return _mm_maskz_cvt_roundsd_sh(A, B, C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2307 }
2308 
test_mm_cvtsd_sh(__m128h A,__m128d B)2309 __m128h test_mm_cvtsd_sh(__m128h A, __m128d B) {
2310   // CHECK-LABEL: test_mm_cvtsd_sh
2311   // CHECK: @llvm.x86.avx512fp16.mask.vcvtsd2sh.round
2312   return _mm_cvtsd_sh(A, B);
2313 }
2314 
test_mm_mask_cvtsd_sh(__m128h A,__mmask8 B,__m128h C,__m128d D)2315 __m128h test_mm_mask_cvtsd_sh(__m128h A, __mmask8 B, __m128h C, __m128d D) {
2316   // CHECK-LABEL: test_mm_mask_cvtsd_sh
2317   // CHECK: @llvm.x86.avx512fp16.mask.vcvtsd2sh.round
2318   return _mm_mask_cvtsd_sh(A, B, C, D);
2319 }
2320 
test_mm_maskz_cvtsd_sh(__mmask8 A,__m128h B,__m128d C)2321 __m128h test_mm_maskz_cvtsd_sh(__mmask8 A, __m128h B, __m128d C) {
2322   // CHECK-LABEL: test_mm_maskz_cvtsd_sh
2323   // CHECK: @llvm.x86.avx512fp16.mask.vcvtsd2sh.round
2324   return _mm_maskz_cvtsd_sh(A, B, C);
2325 }
2326 
test_mm_cvt_roundsh_sd(__m128d A,__m128h B)2327 __m128d test_mm_cvt_roundsh_sd(__m128d A, __m128h B) {
2328   // CHECK-LABEL: test_mm_cvt_roundsh_sd
2329   // CHECK: @llvm.x86.avx512fp16.mask.vcvtsh2sd.round
2330   return _mm_cvt_roundsh_sd(A, B, _MM_FROUND_NO_EXC);
2331 }
2332 
test_mm_mask_cvt_roundsh_sd(__m128d A,__mmask8 B,__m128d C,__m128h D)2333 __m128d test_mm_mask_cvt_roundsh_sd(__m128d A, __mmask8 B, __m128d C, __m128h D) {
2334   // CHECK-LABEL: test_mm_mask_cvt_roundsh_sd
2335   // CHECK: @llvm.x86.avx512fp16.mask.vcvtsh2sd.round
2336   return _mm_mask_cvt_roundsh_sd(A, B, C, D, _MM_FROUND_NO_EXC);
2337 }
2338 
test_mm_maskz_cvt_roundsh_sd(__mmask8 A,__m128d B,__m128h C)2339 __m128d test_mm_maskz_cvt_roundsh_sd(__mmask8 A, __m128d B, __m128h C) {
2340   // CHECK-LABEL: test_mm_maskz_cvt_roundsh_sd
2341   // CHECK: @llvm.x86.avx512fp16.mask.vcvtsh2sd.round
2342   return _mm_maskz_cvt_roundsh_sd(A, B, C, _MM_FROUND_NO_EXC);
2343 }
2344 
test_mm_cvtsh_sd(__m128d A,__m128h B)2345 __m128d test_mm_cvtsh_sd(__m128d A, __m128h B) {
2346   // CHECK-LABEL: test_mm_cvtsh_sd
2347   // CHECK: @llvm.x86.avx512fp16.mask.vcvtsh2sd.round
2348   return _mm_cvtsh_sd(A, B);
2349 }
2350 
test_mm_mask_cvtsh_sd(__m128d A,__mmask8 B,__m128d C,__m128h D)2351 __m128d test_mm_mask_cvtsh_sd(__m128d A, __mmask8 B, __m128d C, __m128h D) {
2352   // CHECK-LABEL: test_mm_mask_cvtsh_sd
2353   // CHECK: @llvm.x86.avx512fp16.mask.vcvtsh2sd.round
2354   return _mm_mask_cvtsh_sd(A, B, C, D);
2355 }
2356 
test_mm_maskz_cvtsh_sd(__mmask8 A,__m128d B,__m128h C)2357 __m128d test_mm_maskz_cvtsh_sd(__mmask8 A, __m128d B, __m128h C) {
2358   // CHECK-LABEL: test_mm_maskz_cvtsh_sd
2359   // CHECK: @llvm.x86.avx512fp16.mask.vcvtsh2sd.round
2360   return _mm_maskz_cvtsh_sd(A, B, C);
2361 }
2362 
test_mm512_cvt_roundph_epi16(__m512h A)2363 __m512i test_mm512_cvt_roundph_epi16(__m512h A) {
2364   // CHECK-LABEL: test_mm512_cvt_roundph_epi16
2365   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2w.512
2366   return _mm512_cvt_roundph_epi16(A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2367 }
2368 
test_mm512_mask_cvt_roundph_epi16(__m512i A,__mmask32 B,__m512h C)2369 __m512i test_mm512_mask_cvt_roundph_epi16(__m512i A, __mmask32 B, __m512h C) {
2370   // CHECK-LABEL: test_mm512_mask_cvt_roundph_epi16
2371   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2w.512
2372   return _mm512_mask_cvt_roundph_epi16(A, B, C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2373 }
2374 
test_mm512_maskz_cvt_roundph_epi16(__mmask32 A,__m512h B)2375 __m512i test_mm512_maskz_cvt_roundph_epi16(__mmask32 A, __m512h B) {
2376   // CHECK-LABEL: test_mm512_maskz_cvt_roundph_epi16
2377   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2w.512
2378   return _mm512_maskz_cvt_roundph_epi16(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2379 }
2380 
test_mm512_cvtph_epi16(__m512h A)2381 __m512i test_mm512_cvtph_epi16(__m512h A) {
2382   // CHECK-LABEL: test_mm512_cvtph_epi16
2383   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2w.512
2384   return _mm512_cvtph_epi16(A);
2385 }
2386 
test_mm512_mask_cvtph_epi16(__m512i A,__mmask32 B,__m512h C)2387 __m512i test_mm512_mask_cvtph_epi16(__m512i A, __mmask32 B, __m512h C) {
2388   // CHECK-LABEL: test_mm512_mask_cvtph_epi16
2389   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2w.512
2390   return _mm512_mask_cvtph_epi16(A, B, C);
2391 }
2392 
test_mm512_maskz_cvtph_epi16(__mmask32 A,__m512h B)2393 __m512i test_mm512_maskz_cvtph_epi16(__mmask32 A, __m512h B) {
2394   // CHECK-LABEL: test_mm512_maskz_cvtph_epi16
2395   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2w.512
2396   return _mm512_maskz_cvtph_epi16(A, B);
2397 }
2398 
test_mm512_cvtt_roundph_epi16(__m512h A)2399 __m512i test_mm512_cvtt_roundph_epi16(__m512h A) {
2400   // CHECK-LABEL: test_mm512_cvtt_roundph_epi16
2401   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2w.512
2402   return _mm512_cvtt_roundph_epi16(A, _MM_FROUND_NO_EXC);
2403 }
2404 
test_mm512_mask_cvtt_roundph_epi16(__m512i A,__mmask32 B,__m512h C)2405 __m512i test_mm512_mask_cvtt_roundph_epi16(__m512i A, __mmask32 B, __m512h C) {
2406   // CHECK-LABEL: test_mm512_mask_cvtt_roundph_epi16
2407   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2w.512
2408   return _mm512_mask_cvtt_roundph_epi16(A, B, C, _MM_FROUND_NO_EXC);
2409 }
2410 
test_mm512_maskz_cvtt_roundph_epi16(__mmask32 A,__m512h B)2411 __m512i test_mm512_maskz_cvtt_roundph_epi16(__mmask32 A, __m512h B) {
2412   // CHECK-LABEL: test_mm512_maskz_cvtt_roundph_epi16
2413   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2w.512
2414   return _mm512_maskz_cvtt_roundph_epi16(A, B, _MM_FROUND_NO_EXC);
2415 }
2416 
test_mm512_cvttph_epi16(__m512h A)2417 __m512i test_mm512_cvttph_epi16(__m512h A) {
2418   // CHECK-LABEL: test_mm512_cvttph_epi16
2419   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2w.512
2420   return _mm512_cvttph_epi16(A);
2421 }
2422 
test_mm512_mask_cvttph_epi16(__m512i A,__mmask32 B,__m512h C)2423 __m512i test_mm512_mask_cvttph_epi16(__m512i A, __mmask32 B, __m512h C) {
2424   // CHECK-LABEL: test_mm512_mask_cvttph_epi16
2425   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2w.512
2426   return _mm512_mask_cvttph_epi16(A, B, C);
2427 }
2428 
test_mm512_maskz_cvttph_epi16(__mmask32 A,__m512h B)2429 __m512i test_mm512_maskz_cvttph_epi16(__mmask32 A, __m512h B) {
2430   // CHECK-LABEL: test_mm512_maskz_cvttph_epi16
2431   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2w.512
2432   return _mm512_maskz_cvttph_epi16(A, B);
2433 }
2434 
test_mm512_cvt_roundepi16_ph(__m512i A)2435 __m512h test_mm512_cvt_roundepi16_ph(__m512i A) {
2436   // CHECK-LABEL: test_mm512_cvt_roundepi16_ph
2437   // CHECK:   @llvm.x86.avx512.sitofp.round.v32f16.v32i16
2438   return _mm512_cvt_roundepi16_ph(A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2439 }
2440 
test_mm512_mask_cvt_roundepi16_ph(__m512h A,__mmask32 B,__m512i C)2441 __m512h test_mm512_mask_cvt_roundepi16_ph(__m512h A, __mmask32 B, __m512i C) {
2442   // CHECK-LABEL: test_mm512_mask_cvt_roundepi16_ph
2443   // CHECK: @llvm.x86.avx512.sitofp.round.v32f16.v32i16
2444   return _mm512_mask_cvt_roundepi16_ph(A, B, C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2445 }
2446 
test_mm512_maskz_cvt_roundepi16_ph(__mmask32 A,__m512i B)2447 __m512h test_mm512_maskz_cvt_roundepi16_ph(__mmask32 A, __m512i B) {
2448   // CHECK-LABEL: test_mm512_maskz_cvt_roundepi16_ph
2449   // CHECK: @llvm.x86.avx512.sitofp.round.v32f16.v32i16
2450   return _mm512_maskz_cvt_roundepi16_ph(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2451 }
2452 
test_mm512_cvtepi16_ph(__m512i A)2453 __m512h test_mm512_cvtepi16_ph(__m512i A) {
2454   // CHECK-LABEL: test_mm512_cvtepi16_ph
2455   // CHECK: %{{.*}} = sitofp <32 x i16> %{{.*}} to <32 x half>
2456   return _mm512_cvtepi16_ph(A);
2457 }
2458 
test_mm512_mask_cvtepi16_ph(__m512h A,__mmask32 B,__m512i C)2459 __m512h test_mm512_mask_cvtepi16_ph(__m512h A, __mmask32 B, __m512i C) {
2460   // CHECK-LABEL: test_mm512_mask_cvtepi16_ph
2461   // CHECK: %{{.*}} = sitofp <32 x i16> %{{.*}} to <32 x half>
2462   return _mm512_mask_cvtepi16_ph(A, B, C);
2463 }
2464 
test_mm512_maskz_cvtepi16_ph(__mmask32 A,__m512i B)2465 __m512h test_mm512_maskz_cvtepi16_ph(__mmask32 A, __m512i B) {
2466   // CHECK-LABEL: test_mm512_maskz_cvtepi16_ph
2467   // CHECK: %{{.*}} = sitofp <32 x i16> %{{.*}} to <32 x half>
2468   return _mm512_maskz_cvtepi16_ph(A, B);
2469 }
2470 
test_mm512_cvt_roundph_epu16(__m512h A)2471 __m512i test_mm512_cvt_roundph_epu16(__m512h A) {
2472   // CHECK-LABEL: test_mm512_cvt_roundph_epu16
2473   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uw.512
2474   return _mm512_cvt_roundph_epu16(A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2475 }
2476 
test_mm512_mask_cvt_roundph_epu16(__m512i A,__mmask32 B,__m512h C)2477 __m512i test_mm512_mask_cvt_roundph_epu16(__m512i A, __mmask32 B, __m512h C) {
2478   // CHECK-LABEL: test_mm512_mask_cvt_roundph_epu16
2479   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uw.512
2480   return _mm512_mask_cvt_roundph_epu16(A, B, C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2481 }
2482 
test_mm512_maskz_cvt_roundph_epu16(__mmask32 A,__m512h B)2483 __m512i test_mm512_maskz_cvt_roundph_epu16(__mmask32 A, __m512h B) {
2484   // CHECK-LABEL: test_mm512_maskz_cvt_roundph_epu16
2485   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uw.512
2486   return _mm512_maskz_cvt_roundph_epu16(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2487 }
2488 
test_mm512_cvtph_epu16(__m512h A)2489 __m512i test_mm512_cvtph_epu16(__m512h A) {
2490   // CHECK-LABEL: test_mm512_cvtph_epu16
2491   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uw.512
2492   return _mm512_cvtph_epu16(A);
2493 }
2494 
test_mm512_mask_cvtph_epu16(__m512i A,__mmask32 B,__m512h C)2495 __m512i test_mm512_mask_cvtph_epu16(__m512i A, __mmask32 B, __m512h C) {
2496   // CHECK-LABEL: test_mm512_mask_cvtph_epu16
2497   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uw.512
2498   return _mm512_mask_cvtph_epu16(A, B, C);
2499 }
2500 
test_mm512_maskz_cvtph_epu16(__mmask32 A,__m512h B)2501 __m512i test_mm512_maskz_cvtph_epu16(__mmask32 A, __m512h B) {
2502   // CHECK-LABEL: test_mm512_maskz_cvtph_epu16
2503   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uw.512
2504   return _mm512_maskz_cvtph_epu16(A, B);
2505 }
2506 
test_mm512_cvtt_roundph_epu16(__m512h A)2507 __m512i test_mm512_cvtt_roundph_epu16(__m512h A) {
2508   // CHECK-LABEL: test_mm512_cvtt_roundph_epu16
2509   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uw.512
2510   return _mm512_cvtt_roundph_epu16(A, _MM_FROUND_NO_EXC);
2511 }
2512 
test_mm512_mask_cvtt_roundph_epu16(__m512i A,__mmask32 B,__m512h C)2513 __m512i test_mm512_mask_cvtt_roundph_epu16(__m512i A, __mmask32 B, __m512h C) {
2514   // CHECK-LABEL: test_mm512_mask_cvtt_roundph_epu16
2515   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uw.512
2516   return _mm512_mask_cvtt_roundph_epu16(A, B, C, _MM_FROUND_NO_EXC);
2517 }
2518 
test_mm512_maskz_cvtt_roundph_epu16(__mmask32 A,__m512h B)2519 __m512i test_mm512_maskz_cvtt_roundph_epu16(__mmask32 A, __m512h B) {
2520   // CHECK-LABEL: test_mm512_maskz_cvtt_roundph_epu16
2521   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uw.512
2522   return _mm512_maskz_cvtt_roundph_epu16(A, B, _MM_FROUND_NO_EXC);
2523 }
2524 
test_mm512_cvttph_epu16(__m512h A)2525 __m512i test_mm512_cvttph_epu16(__m512h A) {
2526   // CHECK-LABEL: test_mm512_cvttph_epu16
2527   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uw.512
2528   return _mm512_cvttph_epu16(A);
2529 }
2530 
test_mm512_mask_cvttph_epu16(__m512i A,__mmask32 B,__m512h C)2531 __m512i test_mm512_mask_cvttph_epu16(__m512i A, __mmask32 B, __m512h C) {
2532   // CHECK-LABEL: test_mm512_mask_cvttph_epu16
2533   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uw.512
2534   return _mm512_mask_cvttph_epu16(A, B, C);
2535 }
2536 
test_mm512_maskz_cvttph_epu16(__mmask32 A,__m512h B)2537 __m512i test_mm512_maskz_cvttph_epu16(__mmask32 A, __m512h B) {
2538   // CHECK-LABEL: test_mm512_maskz_cvttph_epu16
2539   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uw.512
2540   return _mm512_maskz_cvttph_epu16(A, B);
2541 }
2542 
test_mm512_cvt_roundepu16_ph(__m512i A)2543 __m512h test_mm512_cvt_roundepu16_ph(__m512i A) {
2544   // CHECK-LABEL: test_mm512_cvt_roundepu16_ph
2545   // CHECK: @llvm.x86.avx512.uitofp.round.v32f16.v32i16
2546   return _mm512_cvt_roundepu16_ph(A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2547 }
2548 
test_mm512_mask_cvt_roundepu16_ph(__m512h A,__mmask32 B,__m512i C)2549 __m512h test_mm512_mask_cvt_roundepu16_ph(__m512h A, __mmask32 B, __m512i C) {
2550   // CHECK-LABEL: test_mm512_mask_cvt_roundepu16_ph
2551   // CHECK: @llvm.x86.avx512.uitofp.round.v32f16.v32i16
2552   return _mm512_mask_cvt_roundepu16_ph(A, B, C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2553 }
2554 
test_mm512_maskz_cvt_roundepu16_ph(__mmask32 A,__m512i B)2555 __m512h test_mm512_maskz_cvt_roundepu16_ph(__mmask32 A, __m512i B) {
2556   // CHECK-LABEL: test_mm512_maskz_cvt_roundepu16_ph
2557   // CHECK: @llvm.x86.avx512.uitofp.round.v32f16.v32i16
2558   return _mm512_maskz_cvt_roundepu16_ph(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2559 }
2560 
test_mm512_cvtepu16_ph(__m512i A)2561 __m512h test_mm512_cvtepu16_ph(__m512i A) {
2562   // CHECK-LABEL: test_mm512_cvtepu16_ph
2563   // CHECK: %{{.*}} = uitofp <32 x i16> %{{.*}} to <32 x half>
2564   return _mm512_cvtepu16_ph(A);
2565 }
2566 
test_mm512_mask_cvtepu16_ph(__m512h A,__mmask32 B,__m512i C)2567 __m512h test_mm512_mask_cvtepu16_ph(__m512h A, __mmask32 B, __m512i C) {
2568   // CHECK-LABEL: test_mm512_mask_cvtepu16_ph
2569   // CHECK: %{{.*}} = uitofp <32 x i16> %{{.*}} to <32 x half>
2570   return _mm512_mask_cvtepu16_ph(A, B, C);
2571 }
2572 
test_mm512_maskz_cvtepu16_ph(__mmask32 A,__m512i B)2573 __m512h test_mm512_maskz_cvtepu16_ph(__mmask32 A, __m512i B) {
2574   // CHECK-LABEL: test_mm512_maskz_cvtepu16_ph
2575   // CHECK: %{{.*}} = uitofp <32 x i16> %{{.*}} to <32 x half>
2576   return _mm512_maskz_cvtepu16_ph(A, B);
2577 }
2578 
test_mm512_cvt_roundph_epi32(__m256h A)2579 __m512i test_mm512_cvt_roundph_epi32(__m256h A) {
2580   // CHECK-LABEL: test_mm512_cvt_roundph_epi32
2581   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2dq.512
2582   return _mm512_cvt_roundph_epi32(A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2583 }
2584 
test_mm512_mask_cvt_roundph_epi32(__m512i A,__mmask16 B,__m256h C)2585 __m512i test_mm512_mask_cvt_roundph_epi32(__m512i A, __mmask16 B, __m256h C) {
2586   // CHECK-LABEL: test_mm512_mask_cvt_roundph_epi32
2587   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2dq.512
2588   return _mm512_mask_cvt_roundph_epi32(A, B, C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2589 }
2590 
test_mm512_maskz_cvt_roundph_epi32(__mmask16 A,__m256h B)2591 __m512i test_mm512_maskz_cvt_roundph_epi32(__mmask16 A, __m256h B) {
2592   // CHECK-LABEL: test_mm512_maskz_cvt_roundph_epi32
2593   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2dq.512
2594   return _mm512_maskz_cvt_roundph_epi32(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2595 }
2596 
test_mm512_cvtph_epi32(__m256h A)2597 __m512i test_mm512_cvtph_epi32(__m256h A) {
2598   // CHECK-LABEL: test_mm512_cvtph_epi32
2599   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2dq.512
2600   return _mm512_cvtph_epi32(A);
2601 }
2602 
test_mm512_mask_cvtph_epi32(__m512i A,__mmask16 B,__m256h C)2603 __m512i test_mm512_mask_cvtph_epi32(__m512i A, __mmask16 B, __m256h C) {
2604   // CHECK-LABEL: test_mm512_mask_cvtph_epi32
2605   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2dq.512
2606   return _mm512_mask_cvtph_epi32(A, B, C);
2607 }
2608 
test_mm512_maskz_cvtph_epi32(__mmask16 A,__m256h B)2609 __m512i test_mm512_maskz_cvtph_epi32(__mmask16 A, __m256h B) {
2610   // CHECK-LABEL: test_mm512_maskz_cvtph_epi32
2611   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2dq.512
2612   return _mm512_maskz_cvtph_epi32(A, B);
2613 }
2614 
test_mm512_cvt_roundph_epu32(__m256h A)2615 __m512i test_mm512_cvt_roundph_epu32(__m256h A) {
2616   // CHECK-LABEL: test_mm512_cvt_roundph_epu32
2617   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2udq.512
2618   return _mm512_cvt_roundph_epu32(A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2619 }
2620 
test_mm512_mask_cvt_roundph_epu32(__m512i A,__mmask16 B,__m256h C)2621 __m512i test_mm512_mask_cvt_roundph_epu32(__m512i A, __mmask16 B, __m256h C) {
2622   // CHECK-LABEL: test_mm512_mask_cvt_roundph_epu32
2623   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2udq.512
2624   return _mm512_mask_cvt_roundph_epu32(A, B, C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2625 }
2626 
test_mm512_maskz_cvt_roundph_epu32(__mmask16 A,__m256h B)2627 __m512i test_mm512_maskz_cvt_roundph_epu32(__mmask16 A, __m256h B) {
2628   // CHECK-LABEL: test_mm512_maskz_cvt_roundph_epu32
2629   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2udq.512
2630   return _mm512_maskz_cvt_roundph_epu32(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2631 }
2632 
test_mm512_cvtph_epu32(__m256h A)2633 __m512i test_mm512_cvtph_epu32(__m256h A) {
2634   // CHECK-LABEL: test_mm512_cvtph_epu32
2635   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2udq.512
2636   return _mm512_cvtph_epu32(A);
2637 }
2638 
test_mm512_mask_cvtph_epu32(__m512i A,__mmask16 B,__m256h C)2639 __m512i test_mm512_mask_cvtph_epu32(__m512i A, __mmask16 B, __m256h C) {
2640   // CHECK-LABEL: test_mm512_mask_cvtph_epu32
2641   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2udq.512
2642   return _mm512_mask_cvtph_epu32(A, B, C);
2643 }
2644 
test_mm512_maskz_cvtph_epu32(__mmask16 A,__m256h B)2645 __m512i test_mm512_maskz_cvtph_epu32(__mmask16 A, __m256h B) {
2646   // CHECK-LABEL: test_mm512_maskz_cvtph_epu32
2647   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2udq.512
2648   return _mm512_maskz_cvtph_epu32(A, B);
2649 }
2650 
test_mm512_cvt_roundepi32_ph(__m512i A)2651 __m256h test_mm512_cvt_roundepi32_ph(__m512i A) {
2652   // CHECK-LABEL: test_mm512_cvt_roundepi32_ph
2653   // CHECK: @llvm.x86.avx512.sitofp.round.v16f16.v16i32
2654   return _mm512_cvt_roundepi32_ph(A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2655 }
2656 
test_mm512_mask_cvt_roundepi32_ph(__m256h A,__mmask16 B,__m512i C)2657 __m256h test_mm512_mask_cvt_roundepi32_ph(__m256h A, __mmask16 B, __m512i C) {
2658   // CHECK-LABEL: test_mm512_mask_cvt_roundepi32_ph
2659   // CHECK: @llvm.x86.avx512.sitofp.round.v16f16.v16i32
2660   return _mm512_mask_cvt_roundepi32_ph(A, B, C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2661 }
2662 
test_mm512_maskz_cvt_roundepi32_ph(__mmask16 A,__m512i B)2663 __m256h test_mm512_maskz_cvt_roundepi32_ph(__mmask16 A, __m512i B) {
2664   // CHECK-LABEL: test_mm512_maskz_cvt_roundepi32_ph
2665   // CHECK: @llvm.x86.avx512.sitofp.round.v16f16.v16i32
2666   return _mm512_maskz_cvt_roundepi32_ph(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2667 }
2668 
test_mm512_cvtepi32_ph(__m512i A)2669 __m256h test_mm512_cvtepi32_ph(__m512i A) {
2670   // CHECK-LABEL: test_mm512_cvtepi32_ph
2671   // CHECK: %{{.*}} = sitofp <16 x i32> %{{.*}} to <16 x half>
2672   return _mm512_cvtepi32_ph(A);
2673 }
2674 
test_mm512_mask_cvtepi32_ph(__m256h A,__mmask16 B,__m512i C)2675 __m256h test_mm512_mask_cvtepi32_ph(__m256h A, __mmask16 B, __m512i C) {
2676   // CHECK-LABEL: test_mm512_mask_cvtepi32_ph
2677   // CHECK: %{{.*}} = sitofp <16 x i32> %{{.*}} to <16 x half>
2678   return _mm512_mask_cvtepi32_ph(A, B, C);
2679 }
2680 
test_mm512_maskz_cvtepi32_ph(__mmask16 A,__m512i B)2681 __m256h test_mm512_maskz_cvtepi32_ph(__mmask16 A, __m512i B) {
2682   // CHECK-LABEL: test_mm512_maskz_cvtepi32_ph
2683   // CHECK: %{{.*}} = sitofp <16 x i32> %{{.*}} to <16 x half>
2684   return _mm512_maskz_cvtepi32_ph(A, B);
2685 }
2686 
test_mm512_cvt_roundepu32_ph(__m512i A)2687 __m256h test_mm512_cvt_roundepu32_ph(__m512i A) {
2688   // CHECK-LABEL: test_mm512_cvt_roundepu32_ph
2689   // CHECK: @llvm.x86.avx512.uitofp.round.v16f16.v16i32
2690   return _mm512_cvt_roundepu32_ph(A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2691 }
2692 
test_mm512_mask_cvt_roundepu32_ph(__m256h A,__mmask16 B,__m512i C)2693 __m256h test_mm512_mask_cvt_roundepu32_ph(__m256h A, __mmask16 B, __m512i C) {
2694   // CHECK-LABEL: test_mm512_mask_cvt_roundepu32_ph
2695   // CHECK: @llvm.x86.avx512.uitofp.round.v16f16.v16i32
2696   return _mm512_mask_cvt_roundepu32_ph(A, B, C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2697 }
2698 
test_mm512_maskz_cvt_roundepu32_ph(__mmask16 A,__m512i B)2699 __m256h test_mm512_maskz_cvt_roundepu32_ph(__mmask16 A, __m512i B) {
2700   // CHECK-LABEL: test_mm512_maskz_cvt_roundepu32_ph
2701   // CHECK: @llvm.x86.avx512.uitofp.round.v16f16.v16i32
2702   return _mm512_maskz_cvt_roundepu32_ph(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2703 }
2704 
test_mm512_cvtepu32_ph(__m512i A)2705 __m256h test_mm512_cvtepu32_ph(__m512i A) {
2706   // CHECK-LABEL: test_mm512_cvtepu32_ph
2707   // CHECK: %{{.*}} = uitofp <16 x i32> %{{.*}} to <16 x half>
2708   return _mm512_cvtepu32_ph(A);
2709 }
2710 
test_mm512_mask_cvtepu32_ph(__m256h A,__mmask16 B,__m512i C)2711 __m256h test_mm512_mask_cvtepu32_ph(__m256h A, __mmask16 B, __m512i C) {
2712   // CHECK-LABEL: test_mm512_mask_cvtepu32_ph
2713   // CHECK: %{{.*}} = uitofp <16 x i32> %{{.*}} to <16 x half>
2714   return _mm512_mask_cvtepu32_ph(A, B, C);
2715 }
2716 
test_mm512_maskz_cvtepu32_ph(__mmask16 A,__m512i B)2717 __m256h test_mm512_maskz_cvtepu32_ph(__mmask16 A, __m512i B) {
2718   // CHECK-LABEL: test_mm512_maskz_cvtepu32_ph
2719   // CHECK: %{{.*}} = uitofp <16 x i32> %{{.*}} to <16 x half>
2720   return _mm512_maskz_cvtepu32_ph(A, B);
2721 }
2722 
test_mm512_cvtt_roundph_epi32(__m256h A)2723 __m512i test_mm512_cvtt_roundph_epi32(__m256h A) {
2724   // CHECK-LABEL: test_mm512_cvtt_roundph_epi32
2725   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2dq.512
2726   return _mm512_cvtt_roundph_epi32(A, _MM_FROUND_NO_EXC);
2727 }
2728 
test_mm512_mask_cvtt_roundph_epi32(__m512i A,__mmask16 B,__m256h C)2729 __m512i test_mm512_mask_cvtt_roundph_epi32(__m512i A, __mmask16 B, __m256h C) {
2730   // CHECK-LABEL: test_mm512_mask_cvtt_roundph_epi32
2731   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2dq.512
2732   return _mm512_mask_cvtt_roundph_epi32(A, B, C, _MM_FROUND_NO_EXC);
2733 }
2734 
test_mm512_maskz_cvtt_roundph_epi32(__mmask16 A,__m256h B)2735 __m512i test_mm512_maskz_cvtt_roundph_epi32(__mmask16 A, __m256h B) {
2736   // CHECK-LABEL: test_mm512_maskz_cvtt_roundph_epi32
2737   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2dq.512
2738   return _mm512_maskz_cvtt_roundph_epi32(A, B, _MM_FROUND_NO_EXC);
2739 }
2740 
test_mm512_cvttph_epi32(__m256h A)2741 __m512i test_mm512_cvttph_epi32(__m256h A) {
2742   // CHECK-LABEL: test_mm512_cvttph_epi32
2743   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2dq.512
2744   return _mm512_cvttph_epi32(A);
2745 }
2746 
test_mm512_mask_cvttph_epi32(__m512i A,__mmask16 B,__m256h C)2747 __m512i test_mm512_mask_cvttph_epi32(__m512i A, __mmask16 B, __m256h C) {
2748   // CHECK-LABEL: test_mm512_mask_cvttph_epi32
2749   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2dq.512
2750   return _mm512_mask_cvttph_epi32(A, B, C);
2751 }
2752 
test_mm512_maskz_cvttph_epi32(__mmask16 A,__m256h B)2753 __m512i test_mm512_maskz_cvttph_epi32(__mmask16 A, __m256h B) {
2754   // CHECK-LABEL: test_mm512_maskz_cvttph_epi32
2755   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2dq.512
2756   return _mm512_maskz_cvttph_epi32(A, B);
2757 }
2758 
test_mm512_cvtt_roundph_epu32(__m256h A)2759 __m512i test_mm512_cvtt_roundph_epu32(__m256h A) {
2760   // CHECK-LABEL: test_mm512_cvtt_roundph_epu32
2761   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2udq.512
2762   return _mm512_cvtt_roundph_epu32(A, _MM_FROUND_NO_EXC);
2763 }
2764 
test_mm512_mask_cvtt_roundph_epu32(__m512i A,__mmask16 B,__m256h C)2765 __m512i test_mm512_mask_cvtt_roundph_epu32(__m512i A, __mmask16 B, __m256h C) {
2766   // CHECK-LABEL: test_mm512_mask_cvtt_roundph_epu32
2767   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2udq.512
2768   return _mm512_mask_cvtt_roundph_epu32(A, B, C, _MM_FROUND_NO_EXC);
2769 }
2770 
test_mm512_maskz_cvtt_roundph_epu32(__mmask16 A,__m256h B)2771 __m512i test_mm512_maskz_cvtt_roundph_epu32(__mmask16 A, __m256h B) {
2772   // CHECK-LABEL: test_mm512_maskz_cvtt_roundph_epu32
2773   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2udq.512
2774   return _mm512_maskz_cvtt_roundph_epu32(A, B, _MM_FROUND_NO_EXC);
2775 }
2776 
test_mm512_cvttph_epu32(__m256h A)2777 __m512i test_mm512_cvttph_epu32(__m256h A) {
2778   // CHECK-LABEL: test_mm512_cvttph_epu32
2779   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2udq.512
2780   return _mm512_cvttph_epu32(A);
2781 }
2782 
test_mm512_mask_cvttph_epu32(__m512i A,__mmask16 B,__m256h C)2783 __m512i test_mm512_mask_cvttph_epu32(__m512i A, __mmask16 B, __m256h C) {
2784   // CHECK-LABEL: test_mm512_mask_cvttph_epu32
2785   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2udq.512
2786   return _mm512_mask_cvttph_epu32(A, B, C);
2787 }
2788 
test_mm512_maskz_cvttph_epu32(__mmask16 A,__m256h B)2789 __m512i test_mm512_maskz_cvttph_epu32(__mmask16 A, __m256h B) {
2790   // CHECK-LABEL: test_mm512_maskz_cvttph_epu32
2791   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2udq.512
2792   return _mm512_maskz_cvttph_epu32(A, B);
2793 }
2794 
test_mm512_cvt_roundepi64_ph(__m512i A)2795 __m128h test_mm512_cvt_roundepi64_ph(__m512i A) {
2796   // CHECK-LABEL: test_mm512_cvt_roundepi64_ph
2797   // CHECK: @llvm.x86.avx512.sitofp.round.v8f16.v8i64
2798   return _mm512_cvt_roundepi64_ph(A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2799 }
2800 
test_mm512_mask_cvt_roundepi64_ph(__m128h A,__mmask8 B,__m512i C)2801 __m128h test_mm512_mask_cvt_roundepi64_ph(__m128h A, __mmask8 B, __m512i C) {
2802   // CHECK-LABEL: test_mm512_mask_cvt_roundepi64_ph
2803   // CHECK: @llvm.x86.avx512.sitofp.round.v8f16.v8i64
2804   return _mm512_mask_cvt_roundepi64_ph(A, B, C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2805 }
2806 
test_mm512_maskz_cvt_roundepi64_ph(__mmask8 A,__m512i B)2807 __m128h test_mm512_maskz_cvt_roundepi64_ph(__mmask8 A, __m512i B) {
2808   // CHECK-LABEL: test_mm512_maskz_cvt_roundepi64_ph
2809   // CHECK: @llvm.x86.avx512.sitofp.round.v8f16.v8i64
2810   return _mm512_maskz_cvt_roundepi64_ph(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2811 }
2812 
test_mm512_cvtepi64_ph(__m512i A)2813 __m128h test_mm512_cvtepi64_ph(__m512i A) {
2814   // CHECK-LABEL: test_mm512_cvtepi64_ph
2815   // CHECK: %{{.*}} = sitofp <8 x i64> %{{.*}} to <8 x half>
2816   return _mm512_cvtepi64_ph(A);
2817 }
2818 
test_mm512_mask_cvtepi64_ph(__m128h A,__mmask8 B,__m512i C)2819 __m128h test_mm512_mask_cvtepi64_ph(__m128h A, __mmask8 B, __m512i C) {
2820   // CHECK-LABEL: test_mm512_mask_cvtepi64_ph
2821   // CHECK: %{{.*}} = sitofp <8 x i64> %{{.*}} to <8 x half>
2822   return _mm512_mask_cvtepi64_ph(A, B, C);
2823 }
2824 
test_mm512_maskz_cvtepi64_ph(__mmask8 A,__m512i B)2825 __m128h test_mm512_maskz_cvtepi64_ph(__mmask8 A, __m512i B) {
2826   // CHECK-LABEL: test_mm512_maskz_cvtepi64_ph
2827   // CHECK: %{{.*}} = sitofp <8 x i64> %{{.*}} to <8 x half>
2828   return _mm512_maskz_cvtepi64_ph(A, B);
2829 }
2830 
test_mm512_cvt_roundph_epi64(__m128h A)2831 __m512i test_mm512_cvt_roundph_epi64(__m128h A) {
2832   // CHECK-LABEL: test_mm512_cvt_roundph_epi64
2833   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2qq.512
2834   return _mm512_cvt_roundph_epi64(A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2835 }
2836 
test_mm512_mask_cvt_roundph_epi64(__m512i A,__mmask8 B,__m128h C)2837 __m512i test_mm512_mask_cvt_roundph_epi64(__m512i A, __mmask8 B, __m128h C) {
2838   // CHECK-LABEL: test_mm512_mask_cvt_roundph_epi64
2839   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2qq.512
2840   return _mm512_mask_cvt_roundph_epi64(A, B, C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2841 }
2842 
test_mm512_maskz_cvt_roundph_epi64(__mmask8 A,__m128h B)2843 __m512i test_mm512_maskz_cvt_roundph_epi64(__mmask8 A, __m128h B) {
2844   // CHECK-LABEL: test_mm512_maskz_cvt_roundph_epi64
2845   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2qq.512
2846   return _mm512_maskz_cvt_roundph_epi64(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2847 }
2848 
test_mm512_cvtph_epi64(__m128h A)2849 __m512i test_mm512_cvtph_epi64(__m128h A) {
2850   // CHECK-LABEL: test_mm512_cvtph_epi64
2851   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2qq.512
2852   return _mm512_cvtph_epi64(A);
2853 }
2854 
test_mm512_mask_cvtph_epi64(__m512i A,__mmask8 B,__m128h C)2855 __m512i test_mm512_mask_cvtph_epi64(__m512i A, __mmask8 B, __m128h C) {
2856   // CHECK-LABEL: test_mm512_mask_cvtph_epi64
2857   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2qq.512
2858   return _mm512_mask_cvtph_epi64(A, B, C);
2859 }
2860 
test_mm512_maskz_cvtph_epi64(__mmask8 A,__m128h B)2861 __m512i test_mm512_maskz_cvtph_epi64(__mmask8 A, __m128h B) {
2862   // CHECK-LABEL: test_mm512_maskz_cvtph_epi64
2863   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2qq.512
2864   return _mm512_maskz_cvtph_epi64(A, B);
2865 }
2866 
test_mm512_cvt_roundepu64_ph(__m512i A)2867 __m128h test_mm512_cvt_roundepu64_ph(__m512i A) {
2868   // CHECK-LABEL: test_mm512_cvt_roundepu64_ph
2869   // CHECK: @llvm.x86.avx512.uitofp.round.v8f16.v8i64
2870   return _mm512_cvt_roundepu64_ph(A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2871 }
2872 
test_mm512_mask_cvt_roundepu64_ph(__m128h A,__mmask8 B,__m512i C)2873 __m128h test_mm512_mask_cvt_roundepu64_ph(__m128h A, __mmask8 B, __m512i C) {
2874   // CHECK-LABEL: test_mm512_mask_cvt_roundepu64_ph
2875   // CHECK: @llvm.x86.avx512.uitofp.round.v8f16.v8i64
2876   return _mm512_mask_cvt_roundepu64_ph(A, B, C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2877 }
2878 
test_mm512_maskz_cvt_roundepu64_ph(__mmask8 A,__m512i B)2879 __m128h test_mm512_maskz_cvt_roundepu64_ph(__mmask8 A, __m512i B) {
2880   // CHECK-LABEL: test_mm512_maskz_cvt_roundepu64_ph
2881   // CHECK: @llvm.x86.avx512.uitofp.round.v8f16.v8i64
2882   return _mm512_maskz_cvt_roundepu64_ph(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2883 }
2884 
test_mm512_cvtepu64_ph(__m512i A)2885 __m128h test_mm512_cvtepu64_ph(__m512i A) {
2886   // CHECK-LABEL: test_mm512_cvtepu64_ph
2887   // CHECK: %{{.*}} = uitofp <8 x i64> %{{.*}} to <8 x half>
2888   return _mm512_cvtepu64_ph(A);
2889 }
2890 
test_mm512_mask_cvtepu64_ph(__m128h A,__mmask8 B,__m512i C)2891 __m128h test_mm512_mask_cvtepu64_ph(__m128h A, __mmask8 B, __m512i C) {
2892   // CHECK-LABEL: test_mm512_mask_cvtepu64_ph
2893   // CHECK: %{{.*}} = uitofp <8 x i64> %{{.*}} to <8 x half>
2894   return _mm512_mask_cvtepu64_ph(A, B, C);
2895 }
2896 
test_mm512_maskz_cvtepu64_ph(__mmask8 A,__m512i B)2897 __m128h test_mm512_maskz_cvtepu64_ph(__mmask8 A, __m512i B) {
2898   // CHECK-LABEL: test_mm512_maskz_cvtepu64_ph
2899   // CHECK: %{{.*}} = uitofp <8 x i64> %{{.*}} to <8 x half>
2900   return _mm512_maskz_cvtepu64_ph(A, B);
2901 }
2902 
test_mm512_cvt_roundph_epu64(__m128h A)2903 __m512i test_mm512_cvt_roundph_epu64(__m128h A) {
2904   // CHECK-LABEL: test_mm512_cvt_roundph_epu64
2905   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uqq.512
2906   return _mm512_cvt_roundph_epu64(A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2907 }
2908 
test_mm512_mask_cvt_roundph_epu64(__m512i A,__mmask8 B,__m128h C)2909 __m512i test_mm512_mask_cvt_roundph_epu64(__m512i A, __mmask8 B, __m128h C) {
2910   // CHECK-LABEL: test_mm512_mask_cvt_roundph_epu64
2911   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uqq.512
2912   return _mm512_mask_cvt_roundph_epu64(A, B, C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2913 }
2914 
test_mm512_maskz_cvt_roundph_epu64(__mmask8 A,__m128h B)2915 __m512i test_mm512_maskz_cvt_roundph_epu64(__mmask8 A, __m128h B) {
2916   // CHECK-LABEL: test_mm512_maskz_cvt_roundph_epu64
2917   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uqq.512
2918   return _mm512_maskz_cvt_roundph_epu64(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
2919 }
2920 
test_mm512_cvtph_epu64(__m128h A)2921 __m512i test_mm512_cvtph_epu64(__m128h A) {
2922   // CHECK-LABEL: test_mm512_cvtph_epu64
2923   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uqq.512
2924   return _mm512_cvtph_epu64(A);
2925 }
2926 
test_mm512_mask_cvtph_epu64(__m512i A,__mmask8 B,__m128h C)2927 __m512i test_mm512_mask_cvtph_epu64(__m512i A, __mmask8 B, __m128h C) {
2928   // CHECK-LABEL: test_mm512_mask_cvtph_epu64
2929   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uqq.512
2930   return _mm512_mask_cvtph_epu64(A, B, C);
2931 }
2932 
test_mm512_maskz_cvtph_epu64(__mmask8 A,__m128h B)2933 __m512i test_mm512_maskz_cvtph_epu64(__mmask8 A, __m128h B) {
2934   // CHECK-LABEL: test_mm512_maskz_cvtph_epu64
2935   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uqq.512
2936   return _mm512_maskz_cvtph_epu64(A, B);
2937 }
2938 
test_mm512_cvtt_roundph_epi64(__m128h A)2939 __m512i test_mm512_cvtt_roundph_epi64(__m128h A) {
2940   // CHECK-LABEL: test_mm512_cvtt_roundph_epi64
2941   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2qq.512
2942   return _mm512_cvtt_roundph_epi64(A, _MM_FROUND_NO_EXC);
2943 }
2944 
test_mm512_mask_cvtt_roundph_epi64(__m512i A,__mmask8 B,__m128h C)2945 __m512i test_mm512_mask_cvtt_roundph_epi64(__m512i A, __mmask8 B, __m128h C) {
2946   // CHECK-LABEL: test_mm512_mask_cvtt_roundph_epi64
2947   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2qq.512
2948   return _mm512_mask_cvtt_roundph_epi64(A, B, C, _MM_FROUND_NO_EXC);
2949 }
2950 
test_mm512_maskz_cvtt_roundph_epi64(__mmask8 A,__m128h B)2951 __m512i test_mm512_maskz_cvtt_roundph_epi64(__mmask8 A, __m128h B) {
2952   // CHECK-LABEL: test_mm512_maskz_cvtt_roundph_epi64
2953   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2qq.512
2954   return _mm512_maskz_cvtt_roundph_epi64(A, B, _MM_FROUND_NO_EXC);
2955 }
2956 
test_mm512_cvttph_epi64(__m128h A)2957 __m512i test_mm512_cvttph_epi64(__m128h A) {
2958   // CHECK-LABEL: test_mm512_cvttph_epi64
2959   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2qq.512
2960   return _mm512_cvttph_epi64(A);
2961 }
2962 
test_mm512_mask_cvttph_epi64(__m512i A,__mmask8 B,__m128h C)2963 __m512i test_mm512_mask_cvttph_epi64(__m512i A, __mmask8 B, __m128h C) {
2964   // CHECK-LABEL: test_mm512_mask_cvttph_epi64
2965   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2qq.512
2966   return _mm512_mask_cvttph_epi64(A, B, C);
2967 }
2968 
test_mm512_maskz_cvttph_epi64(__mmask8 A,__m128h B)2969 __m512i test_mm512_maskz_cvttph_epi64(__mmask8 A, __m128h B) {
2970   // CHECK-LABEL: test_mm512_maskz_cvttph_epi64
2971   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2qq.512
2972   return _mm512_maskz_cvttph_epi64(A, B);
2973 }
2974 
test_mm512_cvtt_roundph_epu64(__m128h A)2975 __m512i test_mm512_cvtt_roundph_epu64(__m128h A) {
2976   // CHECK-LABEL: test_mm512_cvtt_roundph_epu64
2977   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uqq.512
2978   return _mm512_cvtt_roundph_epu64(A, _MM_FROUND_NO_EXC);
2979 }
2980 
test_mm512_mask_cvtt_roundph_epu64(__m512i A,__mmask8 B,__m128h C)2981 __m512i test_mm512_mask_cvtt_roundph_epu64(__m512i A, __mmask8 B, __m128h C) {
2982   // CHECK-LABEL: test_mm512_mask_cvtt_roundph_epu64
2983   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uqq.512
2984   return _mm512_mask_cvtt_roundph_epu64(A, B, C, _MM_FROUND_NO_EXC);
2985 }
2986 
test_mm512_maskz_cvtt_roundph_epu64(__mmask8 A,__m128h B)2987 __m512i test_mm512_maskz_cvtt_roundph_epu64(__mmask8 A, __m128h B) {
2988   // CHECK-LABEL: test_mm512_maskz_cvtt_roundph_epu64
2989   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uqq.512
2990   return _mm512_maskz_cvtt_roundph_epu64(A, B, _MM_FROUND_NO_EXC);
2991 }
2992 
test_mm512_cvttph_epu64(__m128h A)2993 __m512i test_mm512_cvttph_epu64(__m128h A) {
2994   // CHECK-LABEL: test_mm512_cvttph_epu64
2995   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uqq.512
2996   return _mm512_cvttph_epu64(A);
2997 }
2998 
test_mm512_mask_cvttph_epu64(__m512i A,__mmask8 B,__m128h C)2999 __m512i test_mm512_mask_cvttph_epu64(__m512i A, __mmask8 B, __m128h C) {
3000   // CHECK-LABEL: test_mm512_mask_cvttph_epu64
3001   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uqq.512
3002   return _mm512_mask_cvttph_epu64(A, B, C);
3003 }
3004 
test_mm512_maskz_cvttph_epu64(__mmask8 A,__m128h B)3005 __m512i test_mm512_maskz_cvttph_epu64(__mmask8 A, __m128h B) {
3006   // CHECK-LABEL: test_mm512_maskz_cvttph_epu64
3007   // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uqq.512
3008   return _mm512_maskz_cvttph_epu64(A, B);
3009 }
3010 
test_mm_cvt_roundsh_i32(__m128h A)3011 int test_mm_cvt_roundsh_i32(__m128h A) {
3012   // CHECK-LABEL: test_mm_cvt_roundsh_i32
3013   // CHECK: @llvm.x86.avx512fp16.vcvtsh2si32
3014   return _mm_cvt_roundsh_i32(A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3015 }
3016 
test_mm_cvtsh_i32(__m128h A)3017 int test_mm_cvtsh_i32(__m128h A) {
3018   // CHECK-LABEL: test_mm_cvtsh_i32
3019   // CHECK: @llvm.x86.avx512fp16.vcvtsh2si32
3020   return _mm_cvtsh_i32(A);
3021 }
3022 
test_mm_cvt_roundsh_u32(__m128h A)3023 unsigned int test_mm_cvt_roundsh_u32(__m128h A) {
3024   // CHECK-LABEL: test_mm_cvt_roundsh_u32
3025   // CHECK: @llvm.x86.avx512fp16.vcvtsh2usi32
3026   return _mm_cvt_roundsh_u32(A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3027 }
3028 
test_mm_cvtsh_u32(__m128h A)3029 unsigned int test_mm_cvtsh_u32(__m128h A) {
3030   // CHECK-LABEL: test_mm_cvtsh_u32
3031   // CHECK: @llvm.x86.avx512fp16.vcvtsh2usi32
3032   return _mm_cvtsh_u32(A);
3033 }
3034 
3035 #ifdef __x86_64__
test_mm_cvt_roundsh_i64(__m128h A)3036 long long test_mm_cvt_roundsh_i64(__m128h A) {
3037   // CHECK-LABEL: test_mm_cvt_roundsh_i64
3038   // CHECK: @llvm.x86.avx512fp16.vcvtsh2si64
3039   return _mm_cvt_roundsh_i64(A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3040 }
3041 
test_mm_cvtsh_i64(__m128h A)3042 long long test_mm_cvtsh_i64(__m128h A) {
3043   // CHECK-LABEL: test_mm_cvtsh_i64
3044   // CHECK: @llvm.x86.avx512fp16.vcvtsh2si64
3045   return _mm_cvtsh_i64(A);
3046 }
3047 
test_mm_cvt_roundsh_u64(__m128h A)3048 unsigned long long test_mm_cvt_roundsh_u64(__m128h A) {
3049   // CHECK-LABEL: test_mm_cvt_roundsh_u64
3050   // CHECK: @llvm.x86.avx512fp16.vcvtsh2usi64
3051   return _mm_cvt_roundsh_u64(A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3052 }
3053 
test_mm_cvtsh_u64(__m128h A)3054 unsigned long long test_mm_cvtsh_u64(__m128h A) {
3055   // CHECK-LABEL: test_mm_cvtsh_u64
3056   // CHECK: @llvm.x86.avx512fp16.vcvtsh2usi64
3057   return _mm_cvtsh_u64(A);
3058 }
3059 #endif
3060 
test_mm_cvt_roundu32_sh(__m128h A,unsigned int B)3061 __m128h test_mm_cvt_roundu32_sh(__m128h A, unsigned int B) {
3062   // CHECK-LABEL: test_mm_cvt_roundu32_sh
3063   // CHECK: @llvm.x86.avx512fp16.vcvtusi2sh
3064   return _mm_cvt_roundu32_sh(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3065 }
3066 
test_mm_cvtu32_sh(__m128h A,unsigned int B)3067 __m128h test_mm_cvtu32_sh(__m128h A, unsigned int B) {
3068   // CHECK-LABEL: test_mm_cvtu32_sh
3069   // CHECK: %{{.*}} = uitofp i32 %{{.*}} to half
3070   return _mm_cvtu32_sh(A, B);
3071 }
3072 
3073 #ifdef __x86_64__
test_mm_cvt_roundu64_sh(__m128h A,unsigned long long B)3074 __m128h test_mm_cvt_roundu64_sh(__m128h A, unsigned long long B) {
3075   // CHECK-LABEL: test_mm_cvt_roundu64_sh
3076   // CHECK: @llvm.x86.avx512fp16.vcvtusi642sh
3077   return _mm_cvt_roundu64_sh(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3078 }
3079 
test_mm_cvtu64_sh(__m128h A,unsigned long long B)3080 __m128h test_mm_cvtu64_sh(__m128h A, unsigned long long B) {
3081   // CHECK-LABEL: test_mm_cvtu64_sh
3082   // CHECK: %{{.*}} = uitofp i64 %{{.*}} to half
3083   return _mm_cvtu64_sh(A, B);
3084 }
3085 #endif
3086 
test_mm_cvt_roundi32_sh(__m128h A,int B)3087 __m128h test_mm_cvt_roundi32_sh(__m128h A, int B) {
3088   // CHECK-LABEL: test_mm_cvt_roundi32_sh
3089   // CHECK: @llvm.x86.avx512fp16.vcvtsi2sh
3090   return _mm_cvt_roundi32_sh(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3091 }
3092 
test_mm_cvti32_sh(__m128h A,int B)3093 __m128h test_mm_cvti32_sh(__m128h A, int B) {
3094   // CHECK-LABEL: test_mm_cvti32_sh
3095   // CHECK: %{{.*}} = sitofp i32 %{{.*}} to half
3096   return _mm_cvti32_sh(A, B);
3097 }
3098 
3099 #ifdef __x86_64__
test_mm_cvt_roundi64_sh(__m128h A,long long B)3100 __m128h test_mm_cvt_roundi64_sh(__m128h A, long long B) {
3101   // CHECK-LABEL: test_mm_cvt_roundi64_sh
3102   // CHECK: @llvm.x86.avx512fp16.vcvtsi642sh
3103   return _mm_cvt_roundi64_sh(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3104 }
3105 
test_mm_cvti64_sh(__m128h A,long long B)3106 __m128h test_mm_cvti64_sh(__m128h A, long long B) {
3107   // CHECK-LABEL: test_mm_cvti64_sh
3108   // CHECK: %{{.*}} = sitofp i64 %{{.*}} to half
3109   return _mm_cvti64_sh(A, B);
3110 }
3111 #endif
3112 
test_mm_cvtt_roundsh_i32(__m128h A)3113 int test_mm_cvtt_roundsh_i32(__m128h A) {
3114   // CHECK-LABEL: test_mm_cvtt_roundsh_i32
3115   // CHECK: @llvm.x86.avx512fp16.vcvttsh2si32
3116   return _mm_cvtt_roundsh_i32(A, _MM_FROUND_NO_EXC);
3117 }
3118 
test_mm_cvttsh_i32(__m128h A)3119 int test_mm_cvttsh_i32(__m128h A) {
3120   // CHECK-LABEL: test_mm_cvttsh_i32
3121   // CHECK: @llvm.x86.avx512fp16.vcvttsh2si32
3122   return _mm_cvttsh_i32(A);
3123 }
3124 
3125 #ifdef __x86_64__
test_mm_cvtt_roundsh_i64(__m128h A)3126 long long test_mm_cvtt_roundsh_i64(__m128h A) {
3127   // CHECK-LABEL: test_mm_cvtt_roundsh_i64
3128   // CHECK: @llvm.x86.avx512fp16.vcvttsh2si64
3129   return _mm_cvtt_roundsh_i64(A, _MM_FROUND_NO_EXC);
3130 }
3131 
test_mm_cvttsh_i64(__m128h A)3132 long long test_mm_cvttsh_i64(__m128h A) {
3133   // CHECK-LABEL: test_mm_cvttsh_i64
3134   // CHECK: @llvm.x86.avx512fp16.vcvttsh2si64
3135   return _mm_cvttsh_i64(A);
3136 }
3137 #endif
3138 
test_mm_cvtt_roundsh_u32(__m128h A)3139 unsigned int test_mm_cvtt_roundsh_u32(__m128h A) {
3140   // CHECK-LABEL: test_mm_cvtt_roundsh_u32
3141   // CHECK: @llvm.x86.avx512fp16.vcvttsh2usi32
3142   return _mm_cvtt_roundsh_u32(A, _MM_FROUND_NO_EXC);
3143 }
3144 
test_mm_cvttsh_u32(__m128h A)3145 unsigned int test_mm_cvttsh_u32(__m128h A) {
3146   // CHECK-LABEL: test_mm_cvttsh_u32
3147   // CHECK: @llvm.x86.avx512fp16.vcvttsh2usi32
3148   return _mm_cvttsh_u32(A);
3149 }
3150 
3151 #ifdef __x86_64__
test_mm_cvtt_roundsh_u64(__m128h A)3152 unsigned long long test_mm_cvtt_roundsh_u64(__m128h A) {
3153   // CHECK-LABEL: test_mm_cvtt_roundsh_u64
3154   // CHECK: @llvm.x86.avx512fp16.vcvttsh2usi64
3155   return _mm_cvtt_roundsh_u64(A, _MM_FROUND_NO_EXC);
3156 }
3157 
test_mm_cvttsh_u64(__m128h A)3158 unsigned long long test_mm_cvttsh_u64(__m128h A) {
3159   // CHECK-LABEL: test_mm_cvttsh_u64
3160   // CHECK: @llvm.x86.avx512fp16.vcvttsh2usi64
3161   return _mm_cvttsh_u64(A);
3162 }
3163 #endif
3164 
test_mm512_cvtx_roundph_ps(__m256h A)3165 __m512 test_mm512_cvtx_roundph_ps(__m256h A) {
3166   // CHECK-LABEL: test_mm512_cvtx_roundph_ps
3167   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2psx.512
3168   return _mm512_cvtx_roundph_ps(A, _MM_FROUND_NO_EXC);
3169 }
3170 
test_mm512_mask_cvtx_roundph_ps(__m512 A,__mmask16 B,__m256h C)3171 __m512 test_mm512_mask_cvtx_roundph_ps(__m512 A, __mmask16 B, __m256h C) {
3172   // CHECK-LABEL: test_mm512_mask_cvtx_roundph_ps
3173   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2psx.512
3174   return _mm512_mask_cvtx_roundph_ps(A, B, C, _MM_FROUND_NO_EXC);
3175 }
3176 
test_mm512_maskz_cvtx_roundph_ps(__mmask16 A,__m256h B)3177 __m512 test_mm512_maskz_cvtx_roundph_ps(__mmask16 A, __m256h B) {
3178   // CHECK-LABEL: test_mm512_maskz_cvtx_roundph_ps
3179   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2psx.512
3180   return _mm512_maskz_cvtx_roundph_ps(A, B, _MM_FROUND_NO_EXC);
3181 }
3182 
test_mm512_cvtxph_ps(__m256h A)3183 __m512 test_mm512_cvtxph_ps(__m256h A) {
3184   // CHECK-LABEL: test_mm512_cvtxph_ps
3185   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2psx.512
3186   return _mm512_cvtxph_ps(A);
3187 }
3188 
test_mm512_mask_cvtxph_ps(__m512 A,__mmask16 B,__m256h C)3189 __m512 test_mm512_mask_cvtxph_ps(__m512 A, __mmask16 B, __m256h C) {
3190   // CHECK-LABEL: test_mm512_mask_cvtxph_ps
3191   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2psx.512
3192   return _mm512_mask_cvtxph_ps(A, B, C);
3193 }
3194 
test_mm512_maskz_cvtxph_ps(__mmask16 A,__m256h B)3195 __m512 test_mm512_maskz_cvtxph_ps(__mmask16 A, __m256h B) {
3196   // CHECK-LABEL: test_mm512_maskz_cvtxph_ps
3197   // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2psx.512
3198   return _mm512_maskz_cvtxph_ps(A, B);
3199 }
3200 
test_mm512_cvtx_roundps_ph(__m512 A)3201 __m256h test_mm512_cvtx_roundps_ph(__m512 A) {
3202   // CHECK-LABEL: test_mm512_cvtx_roundps_ph
3203   // CHECK: @llvm.x86.avx512fp16.mask.vcvtps2phx.512
3204   return _mm512_cvtx_roundps_ph(A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3205 }
3206 
test_mm512_mask_cvtx_roundps_ph(__m256h A,__mmask16 B,__m512 C)3207 __m256h test_mm512_mask_cvtx_roundps_ph(__m256h A, __mmask16 B, __m512 C) {
3208   // CHECK-LABEL: test_mm512_mask_cvtx_roundps_ph
3209   // CHECK: @llvm.x86.avx512fp16.mask.vcvtps2phx.512
3210   return _mm512_mask_cvtx_roundps_ph(A, B, C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3211 }
3212 
test_mm512_maskz_cvtx_roundps_ph(__mmask16 A,__m512 B)3213 __m256h test_mm512_maskz_cvtx_roundps_ph(__mmask16 A, __m512 B) {
3214   // CHECK-LABEL: test_mm512_maskz_cvtx_roundps_ph
3215   // CHECK: @llvm.x86.avx512fp16.mask.vcvtps2phx.512
3216   return _mm512_maskz_cvtx_roundps_ph(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3217 }
3218 
test_mm512_cvtxps_ph(__m512 A)3219 __m256h test_mm512_cvtxps_ph(__m512 A) {
3220   // CHECK-LABEL: test_mm512_cvtxps_ph
3221   // CHECK: @llvm.x86.avx512fp16.mask.vcvtps2phx.512
3222   return _mm512_cvtxps_ph(A);
3223 }
3224 
test_mm512_mask_cvtxps_ph(__m256h A,__mmask16 B,__m512 C)3225 __m256h test_mm512_mask_cvtxps_ph(__m256h A, __mmask16 B, __m512 C) {
3226   // CHECK-LABEL: test_mm512_mask_cvtxps_ph
3227   // CHECK: @llvm.x86.avx512fp16.mask.vcvtps2phx.512
3228   return _mm512_mask_cvtxps_ph(A, B, C);
3229 }
3230 
test_mm512_maskz_cvtxps_ph(__mmask16 A,__m512 B)3231 __m256h test_mm512_maskz_cvtxps_ph(__mmask16 A, __m512 B) {
3232   // CHECK-LABEL: test_mm512_maskz_cvtxps_ph
3233   // CHECK: @llvm.x86.avx512fp16.mask.vcvtps2phx.512
3234   return _mm512_maskz_cvtxps_ph(A, B);
3235 }
3236 
test_mm512_fmadd_round_ph(__m512h __A,__m512h __B,__m512h __C)3237 __m512h test_mm512_fmadd_round_ph(__m512h __A, __m512h __B, __m512h __C) {
3238   // CHECK-LABEL: @test_mm512_fmadd_round_ph
3239   // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512
3240   return _mm512_fmadd_round_ph(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3241 }
3242 
test_mm512_mask_fmadd_round_ph(__m512h __A,__mmask32 __U,__m512h __B,__m512h __C)3243 __m512h test_mm512_mask_fmadd_round_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) {
3244   // CHECK-LABEL: @test_mm512_mask_fmadd_round_ph
3245   // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512
3246   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3247   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3248   return _mm512_mask_fmadd_round_ph(__A, __U, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3249 }
3250 
test_mm512_mask3_fmadd_round_ph(__m512h __A,__m512h __B,__m512h __C,__mmask32 __U)3251 __m512h test_mm512_mask3_fmadd_round_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) {
3252   // CHECK-LABEL: @test_mm512_mask3_fmadd_round_ph
3253   // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512
3254   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3255   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3256   return _mm512_mask3_fmadd_round_ph(__A, __B, __C, __U, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3257 }
3258 
test_mm512_maskz_fmadd_round_ph(__mmask32 __U,__m512h __A,__m512h __B,__m512h __C)3259 __m512h test_mm512_maskz_fmadd_round_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) {
3260   // CHECK-LABEL: @test_mm512_maskz_fmadd_round_ph
3261   // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512
3262   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3263   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> zeroinitializer
3264   return _mm512_maskz_fmadd_round_ph(__U, __A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3265 }
3266 
test_mm512_fmsub_round_ph(__m512h __A,__m512h __B,__m512h __C)3267 __m512h test_mm512_fmsub_round_ph(__m512h __A, __m512h __B, __m512h __C) {
3268   // CHECK-LABEL: @test_mm512_fmsub_round_ph
3269   // CHECK: fneg
3270   // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512
3271   return _mm512_fmsub_round_ph(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3272 }
3273 
test_mm512_mask_fmsub_round_ph(__m512h __A,__mmask32 __U,__m512h __B,__m512h __C)3274 __m512h test_mm512_mask_fmsub_round_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) {
3275   // CHECK-LABEL: @test_mm512_mask_fmsub_round_ph
3276   // CHECK: fneg
3277   // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512
3278   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3279   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3280   return _mm512_mask_fmsub_round_ph(__A, __U, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3281 }
3282 
test_mm512_maskz_fmsub_round_ph(__mmask32 __U,__m512h __A,__m512h __B,__m512h __C)3283 __m512h test_mm512_maskz_fmsub_round_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) {
3284   // CHECK-LABEL: @test_mm512_maskz_fmsub_round_ph
3285   // CHECK: fneg
3286   // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512
3287   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3288   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> zeroinitializer
3289   return _mm512_maskz_fmsub_round_ph(__U, __A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3290 }
3291 
test_mm512_fnmadd_round_ph(__m512h __A,__m512h __B,__m512h __C)3292 __m512h test_mm512_fnmadd_round_ph(__m512h __A, __m512h __B, __m512h __C) {
3293   // CHECK-LABEL: @test_mm512_fnmadd_round_ph
3294   // CHECK: fneg
3295   // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512
3296   return _mm512_fnmadd_round_ph(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3297 }
3298 
test_mm512_mask3_fnmadd_round_ph(__m512h __A,__m512h __B,__m512h __C,__mmask32 __U)3299 __m512h test_mm512_mask3_fnmadd_round_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) {
3300   // CHECK-LABEL: @test_mm512_mask3_fnmadd_round_ph
3301   // CHECK: fneg
3302   // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512
3303   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3304   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3305   return _mm512_mask3_fnmadd_round_ph(__A, __B, __C, __U, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3306 }
3307 
test_mm512_maskz_fnmadd_round_ph(__mmask32 __U,__m512h __A,__m512h __B,__m512h __C)3308 __m512h test_mm512_maskz_fnmadd_round_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) {
3309   // CHECK-LABEL: @test_mm512_maskz_fnmadd_round_ph
3310   // CHECK: fneg
3311   // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512
3312   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3313   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> zeroinitializer
3314   return _mm512_maskz_fnmadd_round_ph(__U, __A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3315 }
3316 
test_mm512_fnmsub_round_ph(__m512h __A,__m512h __B,__m512h __C)3317 __m512h test_mm512_fnmsub_round_ph(__m512h __A, __m512h __B, __m512h __C) {
3318   // CHECK-LABEL: @test_mm512_fnmsub_round_ph
3319   // CHECK: fneg
3320   // CHECK: fneg
3321   // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512
3322   return _mm512_fnmsub_round_ph(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3323 }
3324 
test_mm512_maskz_fnmsub_round_ph(__mmask32 __U,__m512h __A,__m512h __B,__m512h __C)3325 __m512h test_mm512_maskz_fnmsub_round_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) {
3326   // CHECK-LABEL: @test_mm512_maskz_fnmsub_round_ph
3327   // CHECK: fneg
3328   // CHECK: fneg
3329   // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512
3330   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3331   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> zeroinitializer
3332   return _mm512_maskz_fnmsub_round_ph(__U, __A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3333 }
3334 
test_mm512_fmadd_ph(__m512h __A,__m512h __B,__m512h __C)3335 __m512h test_mm512_fmadd_ph(__m512h __A, __m512h __B, __m512h __C) {
3336   // CHECK-LABEL: @test_mm512_fmadd_ph
3337   // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}})
3338   return _mm512_fmadd_ph(__A, __B, __C);
3339 }
3340 
test_mm512_mask_fmadd_ph(__m512h __A,__mmask32 __U,__m512h __B,__m512h __C)3341 __m512h test_mm512_mask_fmadd_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) {
3342   // CHECK-LABEL: @test_mm512_mask_fmadd_ph
3343   // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}})
3344   return _mm512_mask_fmadd_ph(__A, __U, __B, __C);
3345 }
3346 
test_mm512_mask3_fmadd_ph(__m512h __A,__m512h __B,__m512h __C,__mmask32 __U)3347 __m512h test_mm512_mask3_fmadd_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) {
3348   // CHECK-LABEL: @test_mm512_mask3_fmadd_ph
3349   // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}})
3350   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3351   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3352   return _mm512_mask3_fmadd_ph(__A, __B, __C, __U);
3353 }
3354 
test_mm512_maskz_fmadd_ph(__mmask32 __U,__m512h __A,__m512h __B,__m512h __C)3355 __m512h test_mm512_maskz_fmadd_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) {
3356   // CHECK-LABEL: @test_mm512_maskz_fmadd_ph
3357   // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}})
3358   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3359   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> zeroinitializer
3360   return _mm512_maskz_fmadd_ph(__U, __A, __B, __C);
3361 }
3362 
test_mm512_fmsub_ph(__m512h __A,__m512h __B,__m512h __C)3363 __m512h test_mm512_fmsub_ph(__m512h __A, __m512h __B, __m512h __C) {
3364   // CHECK-LABEL: @test_mm512_fmsub_ph
3365   // CHECK: fneg
3366   // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}})
3367   return _mm512_fmsub_ph(__A, __B, __C);
3368 }
3369 
test_mm512_mask_fmsub_ph(__m512h __A,__mmask32 __U,__m512h __B,__m512h __C)3370 __m512h test_mm512_mask_fmsub_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) {
3371   // CHECK-LABEL: @test_mm512_mask_fmsub_ph
3372   // CHECK: fneg
3373   // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}})
3374   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3375   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3376   return _mm512_mask_fmsub_ph(__A, __U, __B, __C);
3377 }
3378 
test_mm512_maskz_fmsub_ph(__mmask32 __U,__m512h __A,__m512h __B,__m512h __C)3379 __m512h test_mm512_maskz_fmsub_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) {
3380   // CHECK-LABEL: @test_mm512_maskz_fmsub_ph
3381   // CHECK: fneg
3382   // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}})
3383   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3384   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> zeroinitializer
3385   return _mm512_maskz_fmsub_ph(__U, __A, __B, __C);
3386 }
3387 
test_mm512_fnmadd_ph(__m512h __A,__m512h __B,__m512h __C)3388 __m512h test_mm512_fnmadd_ph(__m512h __A, __m512h __B, __m512h __C) {
3389   // CHECK-LABEL: @test_mm512_fnmadd_ph
3390   // CHECK: fneg
3391   // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}})
3392   return _mm512_fnmadd_ph(__A, __B, __C);
3393 }
3394 
test_mm512_mask3_fnmadd_ph(__m512h __A,__m512h __B,__m512h __C,__mmask32 __U)3395 __m512h test_mm512_mask3_fnmadd_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) {
3396   // CHECK-LABEL: @test_mm512_mask3_fnmadd_ph
3397   // CHECK: fneg
3398   // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}})
3399   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3400   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3401   return _mm512_mask3_fnmadd_ph(__A, __B, __C, __U);
3402 }
3403 
test_mm512_maskz_fnmadd_ph(__mmask32 __U,__m512h __A,__m512h __B,__m512h __C)3404 __m512h test_mm512_maskz_fnmadd_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) {
3405   // CHECK-LABEL: @test_mm512_maskz_fnmadd_ph
3406   // CHECK: fneg
3407   // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}})
3408   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3409   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> zeroinitializer
3410   return _mm512_maskz_fnmadd_ph(__U, __A, __B, __C);
3411 }
3412 
test_mm512_fnmsub_ph(__m512h __A,__m512h __B,__m512h __C)3413 __m512h test_mm512_fnmsub_ph(__m512h __A, __m512h __B, __m512h __C) {
3414   // CHECK-LABEL: @test_mm512_fnmsub_ph
3415   // CHECK: fneg
3416   // CHECK: fneg
3417   // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}})
3418   return _mm512_fnmsub_ph(__A, __B, __C);
3419 }
3420 
test_mm512_maskz_fnmsub_ph(__mmask32 __U,__m512h __A,__m512h __B,__m512h __C)3421 __m512h test_mm512_maskz_fnmsub_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) {
3422   // CHECK-LABEL: @test_mm512_maskz_fnmsub_ph
3423   // CHECK: fneg
3424   // CHECK: fneg
3425   // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}})
3426   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3427   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> zeroinitializer
3428   return _mm512_maskz_fnmsub_ph(__U, __A, __B, __C);
3429 }
3430 
test_mm512_fmaddsub_round_ph(__m512h __A,__m512h __B,__m512h __C)3431 __m512h test_mm512_fmaddsub_round_ph(__m512h __A, __m512h __B, __m512h __C) {
3432   // CHECK-LABEL: @test_mm512_fmaddsub_round_ph
3433   // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512
3434   return _mm512_fmaddsub_round_ph(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3435 }
3436 
test_mm512_mask_fmaddsub_round_ph(__m512h __A,__mmask32 __U,__m512h __B,__m512h __C)3437 __m512h test_mm512_mask_fmaddsub_round_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) {
3438   // CHECK-LABEL: @test_mm512_mask_fmaddsub_round_ph
3439   // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512
3440   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3441   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3442   return _mm512_mask_fmaddsub_round_ph(__A, __U, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3443 }
3444 
test_mm512_mask3_fmaddsub_round_ph(__m512h __A,__m512h __B,__m512h __C,__mmask32 __U)3445 __m512h test_mm512_mask3_fmaddsub_round_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) {
3446   // CHECK-LABEL: @test_mm512_mask3_fmaddsub_round_ph
3447   // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512
3448   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3449   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3450   return _mm512_mask3_fmaddsub_round_ph(__A, __B, __C, __U, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3451 }
3452 
test_mm512_maskz_fmaddsub_round_ph(__mmask32 __U,__m512h __A,__m512h __B,__m512h __C)3453 __m512h test_mm512_maskz_fmaddsub_round_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) {
3454   // CHECK-LABEL: @test_mm512_maskz_fmaddsub_round_ph
3455   // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512
3456   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3457   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> zeroinitializer
3458   return _mm512_maskz_fmaddsub_round_ph(__U, __A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3459 }
3460 
test_mm512_fmsubadd_round_ph(__m512h __A,__m512h __B,__m512h __C)3461 __m512h test_mm512_fmsubadd_round_ph(__m512h __A, __m512h __B, __m512h __C) {
3462   // CHECK-LABEL: @test_mm512_fmsubadd_round_ph
3463   // CHECK: fneg
3464   // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512
3465   return _mm512_fmsubadd_round_ph(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3466 }
3467 
test_mm512_mask_fmsubadd_round_ph(__m512h __A,__mmask32 __U,__m512h __B,__m512h __C)3468 __m512h test_mm512_mask_fmsubadd_round_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) {
3469   // CHECK-LABEL: @test_mm512_mask_fmsubadd_round_ph
3470   // CHECK: fneg
3471   // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512
3472   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3473   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3474   return _mm512_mask_fmsubadd_round_ph(__A, __U, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3475 }
3476 
test_mm512_maskz_fmsubadd_round_ph(__mmask32 __U,__m512h __A,__m512h __B,__m512h __C)3477 __m512h test_mm512_maskz_fmsubadd_round_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) {
3478   // CHECK-LABEL: @test_mm512_maskz_fmsubadd_round_ph
3479   // CHECK: fneg
3480   // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512
3481   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3482   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> zeroinitializer
3483   return _mm512_maskz_fmsubadd_round_ph(__U, __A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3484 }
3485 
test_mm512_fmaddsub_ph(__m512h __A,__m512h __B,__m512h __C)3486 __m512h test_mm512_fmaddsub_ph(__m512h __A, __m512h __B, __m512h __C) {
3487   // CHECK-LABEL: @test_mm512_fmaddsub_ph
3488   // CHECK-NOT: fneg
3489   // CHECK: call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}, i32 4)
3490   return _mm512_fmaddsub_ph(__A, __B, __C);
3491 }
3492 
test_mm512_mask_fmaddsub_ph(__m512h __A,__mmask32 __U,__m512h __B,__m512h __C)3493 __m512h test_mm512_mask_fmaddsub_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) {
3494   // CHECK-LABEL: @test_mm512_mask_fmaddsub_ph
3495   // CHECK-NOT: fneg
3496   // CHECK: call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}, i32 4)
3497   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3498   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3499   return _mm512_mask_fmaddsub_ph(__A, __U, __B, __C);
3500 }
3501 
test_mm512_mask3_fmaddsub_ph(__m512h __A,__m512h __B,__m512h __C,__mmask32 __U)3502 __m512h test_mm512_mask3_fmaddsub_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) {
3503   // CHECK-LABEL: @test_mm512_mask3_fmaddsub_ph
3504   // CHECK-NOT: fneg
3505   // CHECK: call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}, i32 4)
3506   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3507   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3508   return _mm512_mask3_fmaddsub_ph(__A, __B, __C, __U);
3509 }
3510 
test_mm512_maskz_fmaddsub_ph(__mmask32 __U,__m512h __A,__m512h __B,__m512h __C)3511 __m512h test_mm512_maskz_fmaddsub_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) {
3512   // CHECK-LABEL: @test_mm512_maskz_fmaddsub_ph
3513   // CHECK-NOT: fneg
3514   // CHECK: call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}, i32 4)
3515   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3516   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> zeroinitializer
3517   return _mm512_maskz_fmaddsub_ph(__U, __A, __B, __C);
3518 }
3519 
test_mm512_fmsubadd_ph(__m512h __A,__m512h __B,__m512h __C)3520 __m512h test_mm512_fmsubadd_ph(__m512h __A, __m512h __B, __m512h __C) {
3521   // CHECK-LABEL: @test_mm512_fmsubadd_ph
3522   // CHECK: [[NEG:%.+]] = fneg
3523   // CHECK: call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> [[NEG]], i32 4)
3524   return _mm512_fmsubadd_ph(__A, __B, __C);
3525 }
3526 
test_mm512_mask_fmsubadd_ph(__m512h __A,__mmask32 __U,__m512h __B,__m512h __C)3527 __m512h test_mm512_mask_fmsubadd_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) {
3528   // CHECK-LABEL: @test_mm512_mask_fmsubadd_ph
3529   // CHECK: [[NEG:%.+]] = fneg
3530   // CHECK: call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> [[NEG]], i32 4)
3531   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3532   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3533   return _mm512_mask_fmsubadd_ph(__A, __U, __B, __C);
3534 }
3535 
test_mm512_maskz_fmsubadd_ph(__mmask32 __U,__m512h __A,__m512h __B,__m512h __C)3536 __m512h test_mm512_maskz_fmsubadd_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) {
3537   // CHECK-LABEL: @test_mm512_maskz_fmsubadd_ph
3538   // CHECK: [[NEG:%.+]] = fneg
3539   // CHECK: call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> [[NEG]], i32 4)
3540   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3541   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> zeroinitializer
3542   return _mm512_maskz_fmsubadd_ph(__U, __A, __B, __C);
3543 }
3544 
test_mm512_mask3_fmsub_round_ph(__m512h __A,__m512h __B,__m512h __C,__mmask32 __U)3545 __m512h test_mm512_mask3_fmsub_round_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) {
3546   // CHECK-LABEL: @test_mm512_mask3_fmsub_round_ph
3547   // CHECK: fneg
3548   // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512
3549   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3550   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3551   return _mm512_mask3_fmsub_round_ph(__A, __B, __C, __U, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3552 }
3553 
test_mm512_mask3_fmsub_ph(__m512h __A,__m512h __B,__m512h __C,__mmask32 __U)3554 __m512h test_mm512_mask3_fmsub_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) {
3555   // CHECK-LABEL: @test_mm512_mask3_fmsub_ph
3556   // CHECK: fneg
3557   // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}})
3558   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3559   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3560   return _mm512_mask3_fmsub_ph(__A, __B, __C, __U);
3561 }
3562 
test_mm512_mask3_fmsubadd_round_ph(__m512h __A,__m512h __B,__m512h __C,__mmask32 __U)3563 __m512h test_mm512_mask3_fmsubadd_round_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) {
3564   // CHECK-LABEL: @test_mm512_mask3_fmsubadd_round_ph
3565   // CHECK: fneg
3566   // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512
3567   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3568   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3569   return _mm512_mask3_fmsubadd_round_ph(__A, __B, __C, __U, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3570 }
3571 
test_mm512_mask3_fmsubadd_ph(__m512h __A,__m512h __B,__m512h __C,__mmask32 __U)3572 __m512h test_mm512_mask3_fmsubadd_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) {
3573   // CHECK-LABEL: @test_mm512_mask3_fmsubadd_ph
3574   // CHECK: [[NEG:%.+]] = fneg
3575   // CHECK: call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> [[NEG]], i32 4)
3576   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3577   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3578   return _mm512_mask3_fmsubadd_ph(__A, __B, __C, __U);
3579 }
3580 
test_mm512_mask_fnmadd_round_ph(__m512h __A,__mmask32 __U,__m512h __B,__m512h __C)3581 __m512h test_mm512_mask_fnmadd_round_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) {
3582   // CHECK-LABEL: @test_mm512_mask_fnmadd_round_ph
3583   // CHECK: fneg
3584   // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512
3585   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3586   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3587   return _mm512_mask_fnmadd_round_ph(__A, __U, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3588 }
3589 
test_mm512_mask_fnmadd_ph(__m512h __A,__mmask32 __U,__m512h __B,__m512h __C)3590 __m512h test_mm512_mask_fnmadd_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) {
3591   // CHECK-LABEL: @test_mm512_mask_fnmadd_ph
3592   // CHECK: fneg
3593   // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}})
3594   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3595   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3596   return _mm512_mask_fnmadd_ph(__A, __U, __B, __C);
3597 }
3598 
test_mm512_mask_fnmsub_round_ph(__m512h __A,__mmask32 __U,__m512h __B,__m512h __C)3599 __m512h test_mm512_mask_fnmsub_round_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) {
3600   // CHECK-LABEL: @test_mm512_mask_fnmsub_round_ph
3601   // CHECK: fneg
3602   // CHECK: fneg
3603   // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512
3604   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3605   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3606   return _mm512_mask_fnmsub_round_ph(__A, __U, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3607 }
3608 
test_mm512_mask3_fnmsub_round_ph(__m512h __A,__m512h __B,__m512h __C,__mmask32 __U)3609 __m512h test_mm512_mask3_fnmsub_round_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) {
3610   // CHECK-LABEL: @test_mm512_mask3_fnmsub_round_ph
3611   // CHECK: fneg
3612   // CHECK: fneg
3613   // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512
3614   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3615   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3616   return _mm512_mask3_fnmsub_round_ph(__A, __B, __C, __U, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3617 }
3618 
test_mm512_mask_fnmsub_ph(__m512h __A,__mmask32 __U,__m512h __B,__m512h __C)3619 __m512h test_mm512_mask_fnmsub_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) {
3620   // CHECK-LABEL: @test_mm512_mask_fnmsub_ph
3621   // CHECK: fneg
3622   // CHECK: fneg
3623   // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}})
3624   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3625   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3626   return _mm512_mask_fnmsub_ph(__A, __U, __B, __C);
3627 }
3628 
test_mm512_mask3_fnmsub_ph(__m512h __A,__m512h __B,__m512h __C,__mmask32 __U)3629 __m512h test_mm512_mask3_fnmsub_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) {
3630   // CHECK-LABEL: @test_mm512_mask3_fnmsub_ph
3631   // CHECK: fneg
3632   // CHECK: fneg
3633   // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}})
3634   // CHECK: bitcast i32 %{{.*}} to <32 x i1>
3635   // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
3636   return _mm512_mask3_fnmsub_ph(__A, __B, __C, __U);
3637 }
3638 
test_mm_fmadd_sh(__m128h __W,__m128h __A,__m128h __B)3639 __m128h test_mm_fmadd_sh(__m128h __W, __m128h __A, __m128h __B) {
3640   // CHECK-LABEL: @test_mm_fmadd_sh
3641   // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0
3642   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3643   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3644   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.fma.f16(half [[A]], half [[B]], half [[C]])
3645   return _mm_fmadd_sh(__W, __A, __B);
3646 }
3647 
test_mm_mask_fmadd_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)3648 __m128h test_mm_mask_fmadd_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
3649   // CHECK-LABEL: @test_mm_mask_fmadd_sh
3650   // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0
3651   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3652   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3653   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.fma.f16(half [[A]], half [[B]], half [[C]])
3654   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3655   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3656   // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, half [[FMA]], half [[A]]
3657   // CHECK-NEXT: insertelement <8 x half> [[ORIGA]], half [[SEL]], i64 0
3658   return _mm_mask_fmadd_sh(__W, __U, __A, __B);
3659 }
3660 
test_mm_fmadd_round_sh(__m128h __A,__m128h __B,__m128h __C)3661 __m128h test_mm_fmadd_round_sh(__m128h __A, __m128h __B, __m128h __C) {
3662   // CHECK-LABEL: @test_mm_fmadd_round_sh
3663   // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0
3664   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3665   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3666   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.x86.avx512fp16.vfmadd.f16(half [[A]], half [[B]], half [[C]], i32 11)
3667   // CHECK-NEXT: insertelement <8 x half> [[ORIGA]], half [[FMA]], i64 0
3668   return _mm_fmadd_round_sh(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3669 }
3670 
test_mm_mask_fmadd_round_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)3671 __m128h test_mm_mask_fmadd_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
3672   // CHECK-LABEL: @test_mm_mask_fmadd_round_sh
3673   // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0
3674   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3675   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3676   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.x86.avx512fp16.vfmadd.f16(half [[A]], half [[B]], half [[C]], i32 11)
3677   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3678   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3679   // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, half [[FMA]], half [[A]]
3680   // CHECK-NEXT: insertelement <8 x half> [[ORIGA]], half [[SEL]], i64 0
3681   return _mm_mask_fmadd_round_sh(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3682 }
3683 
test_mm_maskz_fmadd_sh(__mmask8 __U,__m128h __A,__m128h __B,__m128h __C)3684 __m128h test_mm_maskz_fmadd_sh(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) {
3685   // CHECK-LABEL: @test_mm_maskz_fmadd_sh
3686   // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0
3687   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3688   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3689   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.fma.f16(half [[A]], half [[B]], half [[C]])
3690   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3691   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3692   // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, half [[FMA]], half 0xH0000
3693   // CHECK-NEXT: insertelement <8 x half> [[ORIGA]], half [[SEL]], i64 0
3694   return _mm_maskz_fmadd_sh(__U, __A, __B, __C);
3695 }
3696 
test_mm_maskz_fmadd_round_sh(__mmask8 __U,__m128h __A,__m128h __B,__m128h __C)3697 __m128h test_mm_maskz_fmadd_round_sh(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) {
3698   // CHECK-LABEL: @test_mm_maskz_fmadd_round_sh
3699   // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0
3700   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3701   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3702   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.x86.avx512fp16.vfmadd.f16(half [[A]], half [[B]], half [[C]], i32 11)
3703   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3704   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3705   // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, half [[FMA]], half 0xH0000
3706   // CHECK-NEXT: insertelement <8 x half> [[ORIGA]], half [[SEL]], i64 0
3707   return _mm_maskz_fmadd_round_sh(__U, __A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3708 }
3709 
test_mm_mask3_fmadd_sh(__m128h __W,__m128h __X,__m128h __Y,__mmask8 __U)3710 __m128h test_mm_mask3_fmadd_sh(__m128h __W, __m128h __X, __m128h __Y, __mmask8 __U) {
3711   // CHECK-LABEL: @test_mm_mask3_fmadd_sh
3712   // CHECK: [[A:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3713   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3714   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> [[ORIGC:%.+]], i64 0
3715   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.fma.f16(half [[A]], half [[B]], half [[C]])
3716   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3717   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3718   // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, half [[FMA]], half [[C]]
3719   // CHECK-NEXT: insertelement <8 x half> [[ORIGC]], half [[SEL]], i64 0
3720   return _mm_mask3_fmadd_sh(__W, __X, __Y, __U);
3721 }
3722 
test_mm_mask3_fmadd_round_sh(__m128h __W,__m128h __X,__m128h __Y,__mmask8 __U)3723 __m128h test_mm_mask3_fmadd_round_sh(__m128h __W, __m128h __X, __m128h __Y, __mmask8 __U) {
3724   // CHECK-LABEL: @test_mm_mask3_fmadd_round_sh
3725   // CHECK: [[A:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3726   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3727   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> [[ORIGC:%.+]], i64 0
3728   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.x86.avx512fp16.vfmadd.f16(half [[A]], half [[B]], half [[C]], i32 11)
3729   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3730   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3731   // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, half [[FMA]], half [[C]]
3732   // CHECK-NEXT: insertelement <8 x half> [[ORIGC]], half [[SEL]], i64 0
3733   return _mm_mask3_fmadd_round_sh(__W, __X, __Y, __U, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3734 }
3735 
test_mm_fmsub_sh(__m128h __W,__m128h __A,__m128h __B)3736 __m128h test_mm_fmsub_sh(__m128h __W, __m128h __A, __m128h __B) {
3737   // CHECK-LABEL: @test_mm_fmsub_sh
3738   // CHECK: %{{.*}} = fneg <8 x half> %{{.*}}
3739   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
3740   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
3741   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
3742   // CHECK-NEXT: %{{.*}} = call half @llvm.fma.f16(half %{{.*}}, half %{{.*}}, half %{{.*}})
3743   // CHECK-NEXT: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i64 0
3744   // CHECK-NEXT: ret <8 x half> %{{.*}}
3745   return _mm_fmsub_sh(__W, __A, __B);
3746 }
3747 
test_mm_mask_fmsub_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)3748 __m128h test_mm_mask_fmsub_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
3749   // CHECK-LABEL: @test_mm_mask_fmsub_sh
3750   // CHECK: %{{.*}} = fneg <8 x half> %{{.*}}
3751   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
3752   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
3753   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
3754   // CHECK-NEXT: %{{.*}} = call half @llvm.fma.f16(half %{{.*}}, half %{{.*}}, half %{{.*}})
3755   // CHECK-NEXT: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>
3756   // CHECK-NEXT: %{{.*}} = extractelement <8 x i1> %{{.*}}, i64 0
3757   // CHECK-NEXT: %{{.*}} = select i1 %{{.*}}, half %{{.*}}, half %{{.*}}
3758   // CHECK-NEXT: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i64 0
3759   // CHECK-NEXT: ret <8 x half> %{{.*}}
3760   return _mm_mask_fmsub_sh(__W, __U, __A, __B);
3761 }
3762 
test_mm_fmsub_round_sh(__m128h __A,__m128h __B,__m128h __C)3763 __m128h test_mm_fmsub_round_sh(__m128h __A, __m128h __B, __m128h __C) {
3764   // CHECK-LABEL: @test_mm_fmsub_round_sh
3765   // CHECK: %{{.*}} = fneg <8 x half> %{{.*}}
3766   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
3767   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
3768   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
3769   // CHECK-NEXT: %{{.*}} = call half @llvm.x86.avx512fp16.vfmadd.f16(half %{{.*}}, half %{{.*}}, half %{{.*}}, i32 11)
3770   // CHECK-NEXT: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i64 0
3771   // CHECK-NEXT: ret <8 x half> %{{.*}}
3772   return _mm_fmsub_round_sh(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3773 }
3774 
test_mm_mask_fmsub_round_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)3775 __m128h test_mm_mask_fmsub_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
3776   // CHECK-LABEL: @test_mm_mask_fmsub_round_sh
3777   // CHECK: %{{.*}} = fneg <8 x half> %{{.*}}
3778   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
3779   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
3780   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
3781   // CHECK-NEXT: %{{.*}} = call half @llvm.x86.avx512fp16.vfmadd.f16(half %{{.*}}, half %{{.*}}, half %{{.*}}, i32 11)
3782   // CHECK-NEXT: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>
3783   // CHECK-NEXT: %{{.*}} = extractelement <8 x i1> %{{.*}}, i64 0
3784   // CHECK-NEXT: %{{.*}} = select i1 %{{.*}}, half %{{.*}}, half %{{.*}}
3785   // CHECK-NEXT: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i64 0
3786   // CHECK-NEXT: ret <8 x half> %{{.*}}
3787   return _mm_mask_fmsub_round_sh(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3788 }
3789 
test_mm_maskz_fmsub_sh(__mmask8 __U,__m128h __A,__m128h __B,__m128h __C)3790 __m128h test_mm_maskz_fmsub_sh(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) {
3791   // CHECK-LABEL: @test_mm_maskz_fmsub_sh
3792   // CHECK: %{{.*}} = fneg <8 x half> %{{.*}}
3793   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
3794   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
3795   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
3796   // CHECK-NEXT: %{{.*}} = call half @llvm.fma.f16(half %{{.*}}, half %{{.*}}, half %{{.*}})
3797   // CHECK-NEXT: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>
3798   // CHECK-NEXT: %{{.*}} = extractelement <8 x i1> %{{.*}}, i64 0
3799   // CHECK-NEXT: %{{.*}} = select i1 %{{.*}}, half %{{.*}}, half 0xH0000
3800   // CHECK-NEXT: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i64 0
3801   // CHECK-NEXT: ret <8 x half> %{{.*}}
3802   return _mm_maskz_fmsub_sh(__U, __A, __B, __C);
3803 }
3804 
test_mm_maskz_fmsub_round_sh(__mmask8 __U,__m128h __A,__m128h __B,__m128h __C)3805 __m128h test_mm_maskz_fmsub_round_sh(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) {
3806   // CHECK-LABEL: @test_mm_maskz_fmsub_round_sh
3807   // CHECK: %{{.*}} = fneg <8 x half> %{{.*}}
3808   // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
3809   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
3810   // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0
3811   // CHECK-NEXT: %{{.*}} = call half @llvm.x86.avx512fp16.vfmadd.f16(half %{{.*}}, half %{{.*}}, half %{{.*}}, i32 11)
3812   // CHECK-NEXT: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>
3813   // CHECK-NEXT: %{{.*}} = extractelement <8 x i1> %{{.*}}, i64 0
3814   // CHECK-NEXT: %{{.*}} = select i1 %{{.*}}, half %{{.*}}, half 0xH0000
3815   // CHECK-NEXT: %{{.*}} = insertelement <8 x half> %{{.*}}, half %{{.*}}, i64 0
3816   // CHECK-NEXT: ret <8 x half> %{{.*}}
3817   return _mm_maskz_fmsub_round_sh(__U, __A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3818 }
3819 
test_mm_mask3_fmsub_sh(__m128h __W,__m128h __X,__m128h __Y,__mmask8 __U)3820 __m128h test_mm_mask3_fmsub_sh(__m128h __W, __m128h __X, __m128h __Y, __mmask8 __U) {
3821   // CHECK-LABEL: @test_mm_mask3_fmsub_sh
3822   // CHECK: [[NEG:%.+]] = fneg
3823   // CHECK: [[A:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3824   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3825   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3826   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.fma.f16(half [[A]], half [[B]], half [[C]])
3827   // CHECK-NEXT: [[C2:%.+]] = extractelement <8 x half> [[ORIGC:%.+]], i64 0
3828   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3829   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3830   // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, half [[FMA]], half [[C2]]
3831   // CHECK-NEXT: insertelement <8 x half> [[ORIGC]], half [[SEL]], i64 0
3832   return _mm_mask3_fmsub_sh(__W, __X, __Y, __U);
3833 }
3834 
test_mm_mask3_fmsub_round_sh(__m128h __W,__m128h __X,__m128h __Y,__mmask8 __U)3835 __m128h test_mm_mask3_fmsub_round_sh(__m128h __W, __m128h __X, __m128h __Y, __mmask8 __U) {
3836   // CHECK-LABEL: @test_mm_mask3_fmsub_round_sh
3837   // CHECK: [[NEG:%.+]] = fneg
3838   // CHECK: [[A:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3839   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3840   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3841   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.x86.avx512fp16.vfmadd.f16(half [[A]], half [[B]], half [[C]], i32 11)
3842   // CHECK-NEXT: [[C2:%.+]] = extractelement <8 x half> [[ORIGC:%.+]], i64 0
3843   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3844   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3845   // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, half [[FMA]], half [[C2]]
3846   // CHECK-NEXT: insertelement <8 x half> [[ORIGC]], half [[SEL]], i64 0
3847   return _mm_mask3_fmsub_round_sh(__W, __X, __Y, __U, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3848 }
3849 
test_mm_fnmadd_sh(__m128h __W,__m128h __A,__m128h __B)3850 __m128h test_mm_fnmadd_sh(__m128h __W, __m128h __A, __m128h __B) {
3851   // CHECK-LABEL: @test_mm_fnmadd_sh
3852   // CHECK: [[NEG:%.+]] = fneg
3853   // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0
3854   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3855   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3856   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.fma.f16(half [[A]], half [[B]], half [[C]])
3857   return _mm_fnmadd_sh(__W, __A, __B);
3858 }
3859 
test_mm_mask_fnmadd_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)3860 __m128h test_mm_mask_fnmadd_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
3861   // CHECK-LABEL: @test_mm_mask_fnmadd_sh
3862   // CHECK: [[NEG:%.+]] = fneg
3863   // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0
3864   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3865   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3866   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.fma.f16(half [[A]], half [[B]], half [[C]])
3867   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3868   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3869   // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, half [[FMA]], half [[A]]
3870   // CHECK-NEXT: insertelement <8 x half> [[ORIGA]], half [[SEL]], i64 0
3871   return _mm_mask_fnmadd_sh(__W, __U, __A, __B);
3872 }
3873 
test_mm_fnmadd_round_sh(__m128h __A,__m128h __B,__m128h __C)3874 __m128h test_mm_fnmadd_round_sh(__m128h __A, __m128h __B, __m128h __C) {
3875   // CHECK-LABEL: @test_mm_fnmadd_round_sh
3876   // CHECK: [[NEG:%.+]] = fneg
3877   // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0
3878   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3879   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3880   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.x86.avx512fp16.vfmadd.f16(half [[A]], half [[B]], half [[C]], i32 11)
3881   // CHECK-NEXT: insertelement <8 x half> [[ORIGA]], half [[FMA]], i64 0
3882   return _mm_fnmadd_round_sh(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3883 }
3884 
test_mm_mask_fnmadd_round_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)3885 __m128h test_mm_mask_fnmadd_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
3886   // CHECK-LABEL: @test_mm_mask_fnmadd_round_sh
3887   // CHECK: [[NEG:%.+]] = fneg
3888   // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0
3889   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3890   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3891   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.x86.avx512fp16.vfmadd.f16(half [[A]], half [[B]], half [[C]], i32 11)
3892   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3893   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3894   // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, half [[FMA]], half [[A]]
3895   // CHECK-NEXT: insertelement <8 x half> [[ORIGA]], half [[SEL]], i64 0
3896   return _mm_mask_fnmadd_round_sh(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3897 }
3898 
test_mm_maskz_fnmadd_sh(__mmask8 __U,__m128h __A,__m128h __B,__m128h __C)3899 __m128h test_mm_maskz_fnmadd_sh(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) {
3900   // CHECK-LABEL: @test_mm_maskz_fnmadd_sh
3901   // CHECK: [[NEG:%.+]] = fneg
3902   // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0
3903   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3904   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3905   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.fma.f16(half [[A]], half [[B]], half [[C]])
3906   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3907   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3908   // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, half [[FMA]], half 0xH0000
3909   // CHECK-NEXT: insertelement <8 x half> [[ORIGA]], half [[SEL]], i64 0
3910   return _mm_maskz_fnmadd_sh(__U, __A, __B, __C);
3911 }
3912 
test_mm_maskz_fnmadd_round_sh(__mmask8 __U,__m128h __A,__m128h __B,__m128h __C)3913 __m128h test_mm_maskz_fnmadd_round_sh(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) {
3914   // CHECK-LABEL: @test_mm_maskz_fnmadd_round_sh
3915   // CHECK: [[NEG:%.+]] = fneg
3916   // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0
3917   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3918   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3919   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.x86.avx512fp16.vfmadd.f16(half [[A]], half [[B]], half [[C]], i32 11)
3920   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3921   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3922   // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, half [[FMA]], half 0xH0000
3923   // CHECK-NEXT: insertelement <8 x half> [[ORIGA]], half [[SEL]], i64 0
3924   return _mm_maskz_fnmadd_round_sh(__U, __A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3925 }
3926 
test_mm_mask3_fnmadd_sh(__m128h __W,__m128h __X,__m128h __Y,__mmask8 __U)3927 __m128h test_mm_mask3_fnmadd_sh(__m128h __W, __m128h __X, __m128h __Y, __mmask8 __U) {
3928   // CHECK-LABEL: @test_mm_mask3_fnmadd_sh
3929   // CHECK: [[NEG:%.+]] = fneg
3930   // CHECK: [[A:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3931   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3932   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> [[ORIGC:%.+]], i64 0
3933   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.fma.f16(half [[A]], half [[B]], half [[C]])
3934   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3935   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3936   // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, half [[FMA]], half [[C]]
3937   // CHECK-NEXT: insertelement <8 x half> [[ORIGC]], half [[SEL]], i64 0
3938   return _mm_mask3_fnmadd_sh(__W, __X, __Y, __U);
3939 }
3940 
test_mm_mask3_fnmadd_round_sh(__m128h __W,__m128h __X,__m128h __Y,__mmask8 __U)3941 __m128h test_mm_mask3_fnmadd_round_sh(__m128h __W, __m128h __X, __m128h __Y, __mmask8 __U) {
3942   // CHECK-LABEL: @test_mm_mask3_fnmadd_round_sh
3943   // CHECK: [[NEG:%.+]] = fneg
3944   // CHECK: [[A:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3945   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3946   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> [[ORIGC:%.+]], i64 0
3947   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.x86.avx512fp16.vfmadd.f16(half [[A]], half [[B]], half [[C]], i32 11)
3948   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3949   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3950   // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, half [[FMA]], half [[C]]
3951   // CHECK-NEXT: insertelement <8 x half> [[ORIGC]], half [[SEL]], i64 0
3952   return _mm_mask3_fnmadd_round_sh(__W, __X, __Y, __U, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3953 }
3954 
test_mm_fnmsub_sh(__m128h __W,__m128h __A,__m128h __B)3955 __m128h test_mm_fnmsub_sh(__m128h __W, __m128h __A, __m128h __B) {
3956   // CHECK-LABEL: @test_mm_fnmsub_sh
3957   // CHECK: [[NEG:%.+]] = fneg
3958   // CHECK: [[NEG2:%.+]] = fneg
3959   // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0
3960   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3961   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3962   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.fma.f16(half [[A]], half [[B]], half [[C]])
3963   return _mm_fnmsub_sh(__W, __A, __B);
3964 }
3965 
test_mm_mask_fnmsub_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)3966 __m128h test_mm_mask_fnmsub_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
3967   // CHECK-LABEL: @test_mm_mask_fnmsub_sh
3968   // CHECK: [[NEG:%.+]] = fneg
3969   // CHECK: [[NEG2:%.+]] = fneg
3970   // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0
3971   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3972   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3973   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.fma.f16(half [[A]], half [[B]], half [[C]])
3974   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
3975   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
3976   // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, half [[FMA]], half [[A]]
3977   // CHECK-NEXT: insertelement <8 x half> [[ORIGA]], half [[SEL]], i64 0
3978   return _mm_mask_fnmsub_sh(__W, __U, __A, __B);
3979 }
3980 
test_mm_fnmsub_round_sh(__m128h __A,__m128h __B,__m128h __C)3981 __m128h test_mm_fnmsub_round_sh(__m128h __A, __m128h __B, __m128h __C) {
3982   // CHECK-LABEL: @test_mm_fnmsub_round_sh
3983   // CHECK: [[NEG:%.+]] = fneg
3984   // CHECK: [[NEG2:%.+]] = fneg
3985   // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0
3986   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3987   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3988   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.x86.avx512fp16.vfmadd.f16(half [[A]], half [[B]], half [[C]], i32 11)
3989   // CHECK-NEXT: insertelement <8 x half> [[ORIGA]], half [[FMA]], i64 0
3990   return _mm_fnmsub_round_sh(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
3991 }
3992 
test_mm_mask_fnmsub_round_sh(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)3993 __m128h test_mm_mask_fnmsub_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
3994   // CHECK-LABEL: @test_mm_mask_fnmsub_round_sh
3995   // CHECK: [[NEG:%.+]] = fneg
3996   // CHECK: [[NEG2:%.+]] = fneg
3997   // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0
3998   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
3999   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
4000   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.x86.avx512fp16.vfmadd.f16(half [[A]], half [[B]], half [[C]], i32 11)
4001   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
4002   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
4003   // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, half [[FMA]], half [[A]]
4004   // CHECK-NEXT: insertelement <8 x half> [[ORIGA]], half [[SEL]], i64 0
4005   return _mm_mask_fnmsub_round_sh(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4006 }
4007 
test_mm_maskz_fnmsub_sh(__mmask8 __U,__m128h __A,__m128h __B,__m128h __C)4008 __m128h test_mm_maskz_fnmsub_sh(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) {
4009   // CHECK-LABEL: @test_mm_maskz_fnmsub_sh
4010   // CHECK: [[NEG:%.+]] = fneg
4011   // CHECK: [[NEG2:%.+]] = fneg
4012   // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0
4013   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
4014   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
4015   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.fma.f16(half [[A]], half [[B]], half [[C]])
4016   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
4017   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
4018   // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, half [[FMA]], half 0xH0000
4019   // CHECK-NEXT: insertelement <8 x half> [[ORIGA]], half [[SEL]], i64 0
4020   return _mm_maskz_fnmsub_sh(__U, __A, __B, __C);
4021 }
4022 
test_mm_maskz_fnmsub_round_sh(__mmask8 __U,__m128h __A,__m128h __B,__m128h __C)4023 __m128h test_mm_maskz_fnmsub_round_sh(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) {
4024   // CHECK-LABEL: @test_mm_maskz_fnmsub_round_sh
4025   // CHECK: [[NEG:%.+]] = fneg
4026   // CHECK: [[NEG2:%.+]] = fneg
4027   // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0
4028   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
4029   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
4030   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.x86.avx512fp16.vfmadd.f16(half [[A]], half [[B]], half [[C]], i32 11)
4031   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
4032   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
4033   // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, half [[FMA]], half 0xH0000
4034   // CHECK-NEXT: insertelement <8 x half> [[ORIGA]], half [[SEL]], i64 0
4035   return _mm_maskz_fnmsub_round_sh(__U, __A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4036 }
4037 
test_mm_mask3_fnmsub_sh(__m128h __W,__m128h __X,__m128h __Y,__mmask8 __U)4038 __m128h test_mm_mask3_fnmsub_sh(__m128h __W, __m128h __X, __m128h __Y, __mmask8 __U) {
4039   // CHECK-LABEL: @test_mm_mask3_fnmsub_sh
4040   // CHECK: [[NEG:%.+]] = fneg
4041   // CHECK: [[NEG2:%.+]] = fneg
4042   // CHECK: [[A:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
4043   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
4044   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
4045   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.fma.f16(half [[A]], half [[B]], half [[C]])
4046   // CHECK-NEXT: [[C2:%.+]] = extractelement <8 x half> [[ORIGC:%.+]], i64 0
4047   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
4048   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
4049   // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, half [[FMA]], half [[C2]]
4050   // CHECK-NEXT: insertelement <8 x half> [[ORIGC]], half [[SEL]], i64 0
4051   return _mm_mask3_fnmsub_sh(__W, __X, __Y, __U);
4052 }
4053 
test_mm_mask3_fnmsub_round_sh(__m128h __W,__m128h __X,__m128h __Y,__mmask8 __U)4054 __m128h test_mm_mask3_fnmsub_round_sh(__m128h __W, __m128h __X, __m128h __Y, __mmask8 __U) {
4055   // CHECK-LABEL: @test_mm_mask3_fnmsub_round_sh
4056   // CHECK: [[NEG:%.+]] = fneg
4057   // CHECK: [[NEG2:%.+]] = fneg
4058   // CHECK: [[A:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
4059   // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
4060   // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0
4061   // CHECK-NEXT: [[FMA:%.+]] = call half @llvm.x86.avx512fp16.vfmadd.f16(half [[A]], half [[B]], half [[C]], i32 11)
4062   // CHECK-NEXT: [[C2:%.+]] = extractelement <8 x half> [[ORIGC:%.+]], i64 0
4063   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
4064   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
4065   // CHECK-NEXT: [[SEL:%.+]] = select i1 %{{.*}}, half [[FMA]], half [[C2]]
4066   // CHECK-NEXT: insertelement <8 x half> [[ORIGC]], half [[SEL]], i64 0
4067   return _mm_mask3_fnmsub_round_sh(__W, __X, __Y, __U, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4068 }
4069 
test_mm_fcmadd_sch(__m128h __A,__m128h __B,__m128h __C)4070 __m128h test_mm_fcmadd_sch(__m128h __A, __m128h __B, __m128h __C) {
4071   // CHECK-LABEL: @test_mm_fcmadd_sch
4072   // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.csh
4073   return _mm_fcmadd_sch(__A, __B, __C);
4074 }
4075 
test_mm_mask_fcmadd_sch(__m128h __A,__mmask8 __U,__m128h __B,__m128h __C)4076 __m128h test_mm_mask_fcmadd_sch(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) {
4077   // CHECK-LABEL: @test_mm_mask_fcmadd_sch
4078   // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.csh
4079   // CHECK:  %{{.*}} = shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
4080   // CHECK:  %{{.*}} = select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
4081   return _mm_mask_fcmadd_sch(__A, __U, __B, __C);
4082 }
4083 
test_mm_maskz_fcmadd_sch(__mmask8 __U,__m128h __A,__m128h __B,__m128h __C)4084 __m128h test_mm_maskz_fcmadd_sch(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) {
4085   // CHECK-LABEL: @test_mm_maskz_fcmadd_sch
4086   // CHECK: @llvm.x86.avx512fp16.maskz.vfcmadd.csh
4087   return _mm_maskz_fcmadd_sch(__U, __A, __B, __C);
4088 }
4089 
test_mm_mask3_fcmadd_sch(__m128h __A,__m128h __B,__m128h __C,__mmask8 __U)4090 __m128h test_mm_mask3_fcmadd_sch(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) {
4091   // CHECK-LABEL: @test_mm_mask3_fcmadd_sch
4092   // CHECK:  %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float>
4093   // CHECK:  %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float>
4094   // CHECK:  %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float>
4095   // CHECK:  %{{.*}} = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.csh(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 %{{.*}}, i32 4)
4096   // CHECK:  %{{.*}} = shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 0, i32 5, i32 6, i32 7>
4097   // CHECK:  %{{.*}} = bitcast <4 x float> %{{.*}} to <8 x half>
4098   return _mm_mask3_fcmadd_sch(__A, __B, __C, __U);
4099 }
4100 
test_mm_fcmadd_round_sch(__m128h __A,__m128h __B,__m128h __C)4101 __m128h test_mm_fcmadd_round_sch(__m128h __A, __m128h __B, __m128h __C) {
4102   // CHECK-LABEL: @test_mm_fcmadd_round_sch
4103   // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.csh
4104   return _mm_fcmadd_round_sch(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4105 }
4106 
test_mm_mask_fcmadd_round_sch(__m128h __A,__mmask8 __U,__m128h __B,__m128h __C)4107 __m128h test_mm_mask_fcmadd_round_sch(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) {
4108   // CHECK-LABEL: @test_mm_mask_fcmadd_round_sch
4109   // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.csh
4110   // CHECK:  %{{.*}} = shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
4111   // CHECK:  %{{.*}} = select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
4112   return _mm_mask_fcmadd_round_sch(__A, __U, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4113 }
4114 
test_mm_maskz_fcmadd_round_sch(__mmask8 __U,__m128h __A,__m128h __B,__m128h __C)4115 __m128h test_mm_maskz_fcmadd_round_sch(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) {
4116   // CHECK-LABEL: @test_mm_maskz_fcmadd_round_sch
4117   // CHECK: @llvm.x86.avx512fp16.maskz.vfcmadd.csh
4118   return _mm_maskz_fcmadd_round_sch(__U, __A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4119 }
4120 
test_mm_mask3_fcmadd_round_sch(__m128h __A,__m128h __B,__m128h __C,__mmask8 __U)4121 __m128h test_mm_mask3_fcmadd_round_sch(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) {
4122   // CHECK-LABEL: @test_mm_mask3_fcmadd_round_sch
4123   // CHECK:  %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float>
4124   // CHECK:  %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float>
4125   // CHECK:  %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float>
4126   // CHECK:  %{{.*}} = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.csh(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 %{{.*}}, i32 11)
4127   // CHECK:  %{{.*}} = shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 0, i32 5, i32 6, i32 7>
4128   // CHECK:  %{{.*}} = bitcast <4 x float> %{{.*}} to <8 x half>
4129   return _mm_mask3_fcmadd_round_sch(__A, __B, __C, __U, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4130 }
4131 
test_mm_fmadd_sch(__m128h __A,__m128h __B,__m128h __C)4132 __m128h test_mm_fmadd_sch(__m128h __A, __m128h __B, __m128h __C) {
4133   // CHECK-LABEL: @test_mm_fmadd_sch
4134   // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.csh
4135   return _mm_fmadd_sch(__A, __B, __C);
4136 }
4137 
test_mm_mask_fmadd_sch(__m128h __A,__mmask8 __U,__m128h __B,__m128h __C)4138 __m128h test_mm_mask_fmadd_sch(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) {
4139   // CHECK-LABEL: @test_mm_mask_fmadd_sch
4140   // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.csh
4141   // CHECK:  %{{.*}} = shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
4142   // CHECK:  %{{.*}} = select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
4143   return _mm_mask_fmadd_sch(__A, __U, __B, __C);
4144 }
4145 
test_mm_maskz_fmadd_sch(__mmask8 __U,__m128h __A,__m128h __B,__m128h __C)4146 __m128h test_mm_maskz_fmadd_sch(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) {
4147   // CHECK-LABEL: @test_mm_maskz_fmadd_sch
4148   // CHECK: @llvm.x86.avx512fp16.maskz.vfmadd.csh
4149   return _mm_maskz_fmadd_sch(__U, __A, __B, __C);
4150 }
4151 
test_mm_mask3_fmadd_sch(__m128h __A,__m128h __B,__m128h __C,__mmask8 __U)4152 __m128h test_mm_mask3_fmadd_sch(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) {
4153   // CHECK-LABEL: @test_mm_mask3_fmadd_sch
4154   // CHECK:  %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float>
4155   // CHECK:  %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float>
4156   // CHECK:  %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float>
4157   // CHECK:  %{{.*}} = call <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.csh(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 %{{.*}}, i32 4)
4158   // CHECK:  %{{.*}} = shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 0, i32 5, i32 6, i32 7>
4159   // CHECK:  %{{.*}} = bitcast <4 x float> %{{.*}} to <8 x half>
4160   return _mm_mask3_fmadd_sch(__A, __B, __C, __U);
4161 }
4162 
test_mm_fmadd_round_sch(__m128h __A,__m128h __B,__m128h __C)4163 __m128h test_mm_fmadd_round_sch(__m128h __A, __m128h __B, __m128h __C) {
4164   // CHECK-LABEL: @test_mm_fmadd_round_sch
4165   // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.csh
4166   return _mm_fmadd_round_sch(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4167 }
4168 
test_mm_mask_fmadd_round_sch(__m128h __A,__mmask8 __U,__m128h __B,__m128h __C)4169 __m128h test_mm_mask_fmadd_round_sch(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) {
4170   // CHECK-LABEL: @test_mm_mask_fmadd_round_sch
4171   // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.csh
4172   // CHECK:  %{{.*}} = shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
4173   // CHECK:  %{{.*}} = select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
4174   return _mm_mask_fmadd_round_sch(__A, __U, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4175 }
4176 
test_mm_maskz_fmadd_round_sch(__mmask8 __U,__m128h __A,__m128h __B,__m128h __C)4177 __m128h test_mm_maskz_fmadd_round_sch(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) {
4178   // CHECK-LABEL: @test_mm_maskz_fmadd_round_sch
4179   // CHECK: @llvm.x86.avx512fp16.maskz.vfmadd.csh
4180   return _mm_maskz_fmadd_round_sch(__U, __A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4181 }
4182 
test_mm_mask3_fmadd_round_sch(__m128h __A,__m128h __B,__m128h __C,__mmask8 __U)4183 __m128h test_mm_mask3_fmadd_round_sch(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) {
4184   // CHECK-LABEL: @test_mm_mask3_fmadd_round_sch
4185   // CHECK:  %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float>
4186   // CHECK:  %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float>
4187   // CHECK:  %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float>
4188   // CHECK:  %{{.*}} = call <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.csh(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 %{{.*}}, i32 11)
4189   // CHECK:  %{{.*}} = shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 0, i32 5, i32 6, i32 7>
4190   // CHECK:  %{{.*}} = bitcast <4 x float> %{{.*}} to <8 x half>
4191   return _mm_mask3_fmadd_round_sch(__A, __B, __C, __U, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4192 }
4193 
test_mm_fcmul_sch(__m128h __A,__m128h __B)4194 __m128h test_mm_fcmul_sch(__m128h __A, __m128h __B) {
4195   // CHECK-LABEL: @test_mm_fcmul_sch
4196   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh
4197   return _mm_fcmul_sch(__A, __B);
4198 }
4199 
test_mm_mask_fcmul_sch(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)4200 __m128h test_mm_mask_fcmul_sch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
4201   // CHECK-LABEL: @test_mm_mask_fcmul_sch
4202   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh
4203   return _mm_mask_fcmul_sch(__W, __U, __A, __B);
4204 }
4205 
test_mm_maskz_fcmul_sch(__mmask8 __U,__m128h __A,__m128h __B)4206 __m128h test_mm_maskz_fcmul_sch(__mmask8 __U, __m128h __A, __m128h __B) {
4207   // CHECK-LABEL: @test_mm_maskz_fcmul_sch
4208   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh
4209   return _mm_maskz_fcmul_sch(__U, __A, __B);
4210 }
4211 
test_mm_fcmul_round_sch(__m128h __A,__m128h __B)4212 __m128h test_mm_fcmul_round_sch(__m128h __A, __m128h __B) {
4213   // CHECK-LABEL: @test_mm_fcmul_round_sch
4214   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh
4215   return _mm_fcmul_round_sch(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4216 }
4217 
test_mm_mask_fcmul_round_sch(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)4218 __m128h test_mm_mask_fcmul_round_sch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
4219   // CHECK-LABEL: @test_mm_mask_fcmul_round_sch
4220   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh
4221   return _mm_mask_fcmul_round_sch(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4222 }
4223 
test_mm_maskz_fcmul_round_sch(__mmask8 __U,__m128h __A,__m128h __B)4224 __m128h test_mm_maskz_fcmul_round_sch(__mmask8 __U, __m128h __A, __m128h __B) {
4225   // CHECK-LABEL: @test_mm_maskz_fcmul_round_sch
4226   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh
4227   return _mm_maskz_fcmul_round_sch(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4228 }
4229 
test_mm512_fcmul_pch(__m512h __A,__m512h __B)4230 __m512h test_mm512_fcmul_pch(__m512h __A, __m512h __B) {
4231   // CHECK-LABEL: @test_mm512_fcmul_pch
4232   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512
4233   return _mm512_fcmul_pch(__A, __B);
4234 }
4235 
test_mm512_mask_fcmul_pch(__m512h __W,__mmask16 __U,__m512h __A,__m512h __B)4236 __m512h test_mm512_mask_fcmul_pch(__m512h __W, __mmask16 __U, __m512h __A, __m512h __B) {
4237   // CHECK-LABEL: @test_mm512_mask_fcmul_pch
4238   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512
4239   return _mm512_mask_fcmul_pch(__W, __U, __A, __B);
4240 }
4241 
test_mm512_maskz_fcmul_pch(__mmask16 __U,__m512h __A,__m512h __B)4242 __m512h test_mm512_maskz_fcmul_pch(__mmask16 __U, __m512h __A, __m512h __B) {
4243   // CHECK-LABEL: @test_mm512_maskz_fcmul_pch
4244   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512
4245   return _mm512_maskz_fcmul_pch(__U, __A, __B);
4246 }
4247 
test_mm512_fcmul_round_pch(__m512h __A,__m512h __B)4248 __m512h test_mm512_fcmul_round_pch(__m512h __A, __m512h __B) {
4249   // CHECK-LABEL: @test_mm512_fcmul_round_pch
4250   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512
4251   return _mm512_fcmul_round_pch(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4252 }
4253 
test_mm512_mask_fcmul_round_pch(__m512h __W,__mmask16 __U,__m512h __A,__m512h __B)4254 __m512h test_mm512_mask_fcmul_round_pch(__m512h __W, __mmask16 __U, __m512h __A, __m512h __B) {
4255   // CHECK-LABEL: @test_mm512_mask_fcmul_round_pch
4256   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512
4257   return _mm512_mask_fcmul_round_pch(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4258 }
4259 
test_mm512_maskz_fcmul_round_pch(__mmask16 __U,__m512h __A,__m512h __B)4260 __m512h test_mm512_maskz_fcmul_round_pch(__mmask16 __U, __m512h __A, __m512h __B) {
4261   // CHECK-LABEL: @test_mm512_maskz_fcmul_round_pch
4262   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512
4263   return _mm512_maskz_fcmul_round_pch(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4264 }
4265 
test_mm512_fcmadd_pch(__m512h __A,__m512h __B,__m512h __C)4266 __m512h test_mm512_fcmadd_pch(__m512h __A, __m512h __B, __m512h __C) {
4267   // CHECK-LABEL: @test_mm512_fcmadd_pch
4268   // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.512
4269   return _mm512_fcmadd_pch(__A, __B, __C);
4270 }
4271 
test_mm512_mask_fcmadd_pch(__m512h __A,__mmask16 __U,__m512h __B,__m512h __C)4272 __m512h test_mm512_mask_fcmadd_pch(__m512h __A, __mmask16 __U, __m512h __B, __m512h __C) {
4273   // CHECK-LABEL: @test_mm512_mask_fcmadd_pch
4274   // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.512
4275   // CHECK:  %{{.*}} = select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
4276   return _mm512_mask_fcmadd_pch(__A, __U, __B, __C);
4277 }
4278 
test_mm512_mask3_fcmadd_pch(__m512h __A,__m512h __B,__m512h __C,__mmask16 __U)4279 __m512h test_mm512_mask3_fcmadd_pch(__m512h __A, __m512h __B, __m512h __C, __mmask16 __U) {
4280   // CHECK-LABEL: @test_mm512_mask3_fcmadd_pch
4281   // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.512
4282   // CHECK-NOT:  %{{.*}} = select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
4283   return _mm512_mask3_fcmadd_pch(__A, __B, __C, __U);
4284 }
4285 
test_mm512_maskz_fcmadd_pch(__mmask16 __U,__m512h __A,__m512h __B,__m512h __C)4286 __m512h test_mm512_maskz_fcmadd_pch(__mmask16 __U, __m512h __A, __m512h __B, __m512h __C) {
4287   // CHECK-LABEL: @test_mm512_maskz_fcmadd_pch
4288   // CHECK: @llvm.x86.avx512fp16.maskz.vfcmadd.cph.512
4289   return _mm512_maskz_fcmadd_pch(__U, __A, __B, __C);
4290 }
4291 
test_mm512_fcmadd_round_pch(__m512h __A,__m512h __B,__m512h __C)4292 __m512h test_mm512_fcmadd_round_pch(__m512h __A, __m512h __B, __m512h __C) {
4293   // CHECK-LABEL: @test_mm512_fcmadd_round_pch
4294   // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.512
4295   return _mm512_fcmadd_round_pch(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4296 }
4297 
test_mm512_mask_fcmadd_round_pch(__m512h __A,__mmask16 __U,__m512h __B,__m512h __C)4298 __m512h test_mm512_mask_fcmadd_round_pch(__m512h __A, __mmask16 __U, __m512h __B, __m512h __C) {
4299   // CHECK-LABEL: @test_mm512_mask_fcmadd_round_pch
4300   // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.512
4301   // CHECK:  %{{.*}} = select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
4302   return _mm512_mask_fcmadd_round_pch(__A, __U, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4303 }
4304 
test_mm512_mask3_fcmadd_round_pch(__m512h __A,__m512h __B,__m512h __C,__mmask16 __U)4305 __m512h test_mm512_mask3_fcmadd_round_pch(__m512h __A, __m512h __B, __m512h __C, __mmask16 __U) {
4306   // CHECK-LABEL: @test_mm512_mask3_fcmadd_round_pch
4307   // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.512
4308   // CHECK-NOT:  %{{.*}} = select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
4309   return _mm512_mask3_fcmadd_round_pch(__A, __B, __C, __U, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4310 }
4311 
test_mm512_maskz_fcmadd_round_pch(__mmask16 __U,__m512h __A,__m512h __B,__m512h __C)4312 __m512h test_mm512_maskz_fcmadd_round_pch(__mmask16 __U, __m512h __A, __m512h __B, __m512h __C) {
4313   // CHECK-LABEL: @test_mm512_maskz_fcmadd_round_pch
4314   // CHECK: @llvm.x86.avx512fp16.maskz.vfcmadd.cph.512
4315   return _mm512_maskz_fcmadd_round_pch(__U, __A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4316 }
4317 
test_mm512_fmul_pch(__m512h __A,__m512h __B)4318 __m512h test_mm512_fmul_pch(__m512h __A, __m512h __B) {
4319   // CHECK-LABEL: @test_mm512_fmul_pch
4320   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512
4321   return _mm512_fmul_pch(__A, __B);
4322 }
4323 
test_mm512_mask_fmul_pch(__m512h __W,__mmask16 __U,__m512h __A,__m512h __B)4324 __m512h test_mm512_mask_fmul_pch(__m512h __W, __mmask16 __U, __m512h __A, __m512h __B) {
4325   // CHECK-LABEL: @test_mm512_mask_fmul_pch
4326   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512
4327   return _mm512_mask_fmul_pch(__W, __U, __A, __B);
4328 }
4329 
test_mm512_maskz_fmul_pch(__mmask16 __U,__m512h __A,__m512h __B)4330 __m512h test_mm512_maskz_fmul_pch(__mmask16 __U, __m512h __A, __m512h __B) {
4331   // CHECK-LABEL: @test_mm512_maskz_fmul_pch
4332   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512
4333   return _mm512_maskz_fmul_pch(__U, __A, __B);
4334 }
4335 
test_mm512_fmul_round_pch(__m512h __A,__m512h __B)4336 __m512h test_mm512_fmul_round_pch(__m512h __A, __m512h __B) {
4337   // CHECK-LABEL: @test_mm512_fmul_round_pch
4338   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512
4339   return _mm512_fmul_round_pch(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4340 }
4341 
test_mm512_mask_fmul_round_pch(__m512h __W,__mmask16 __U,__m512h __A,__m512h __B)4342 __m512h test_mm512_mask_fmul_round_pch(__m512h __W, __mmask16 __U, __m512h __A, __m512h __B) {
4343   // CHECK-LABEL: @test_mm512_mask_fmul_round_pch
4344   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512
4345   return _mm512_mask_fmul_round_pch(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4346 }
4347 
test_mm512_maskz_fmul_round_pch(__mmask16 __U,__m512h __A,__m512h __B)4348 __m512h test_mm512_maskz_fmul_round_pch(__mmask16 __U, __m512h __A, __m512h __B) {
4349   // CHECK-LABEL: @test_mm512_maskz_fmul_round_pch
4350   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512
4351   return _mm512_maskz_fmul_round_pch(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4352 }
4353 
test_mm512_fmadd_pch(__m512h __A,__m512h __B,__m512h __C)4354 __m512h test_mm512_fmadd_pch(__m512h __A, __m512h __B, __m512h __C) {
4355   // CHECK-LABEL: @test_mm512_fmadd_pch
4356   // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.512
4357   return _mm512_fmadd_pch(__A, __B, __C);
4358 }
4359 
test_mm512_mask_fmadd_pch(__m512h __A,__mmask16 __U,__m512h __B,__m512h __C)4360 __m512h test_mm512_mask_fmadd_pch(__m512h __A, __mmask16 __U, __m512h __B, __m512h __C) {
4361   // CHECK-LABEL: @test_mm512_mask_fmadd_pch
4362   // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.512
4363   // CHECK:  %{{.*}} = select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
4364   return _mm512_mask_fmadd_pch(__A, __U, __B, __C);
4365 }
4366 
test_mm512_mask3_fmadd_pch(__m512h __A,__m512h __B,__m512h __C,__mmask16 __U)4367 __m512h test_mm512_mask3_fmadd_pch(__m512h __A, __m512h __B, __m512h __C, __mmask16 __U) {
4368   // CHECK-LABEL: @test_mm512_mask3_fmadd_pch
4369   // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.512
4370   // CHECK-NOT:  %{{.*}} = select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
4371   return _mm512_mask3_fmadd_pch(__A, __B, __C, __U);
4372 }
4373 
test_mm512_maskz_fmadd_pch(__mmask16 __U,__m512h __A,__m512h __B,__m512h __C)4374 __m512h test_mm512_maskz_fmadd_pch(__mmask16 __U, __m512h __A, __m512h __B, __m512h __C) {
4375   // CHECK-LABEL: @test_mm512_maskz_fmadd_pch
4376   // CHECK: @llvm.x86.avx512fp16.maskz.vfmadd.cph.512
4377   return _mm512_maskz_fmadd_pch(__U, __A, __B, __C);
4378 }
4379 
test_mm512_fmadd_round_pch(__m512h __A,__m512h __B,__m512h __C)4380 __m512h test_mm512_fmadd_round_pch(__m512h __A, __m512h __B, __m512h __C) {
4381   // CHECK-LABEL: @test_mm512_fmadd_round_pch
4382   // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.512
4383   return _mm512_fmadd_round_pch(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4384 }
4385 
test_mm512_mask_fmadd_round_pch(__m512h __A,__mmask16 __U,__m512h __B,__m512h __C)4386 __m512h test_mm512_mask_fmadd_round_pch(__m512h __A, __mmask16 __U, __m512h __B, __m512h __C) {
4387   // CHECK-LABEL: @test_mm512_mask_fmadd_round_pch
4388   // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.512
4389   // CHECK:  %{{.*}} = select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
4390   return _mm512_mask_fmadd_round_pch(__A, __U, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4391 }
4392 
test_mm512_mask3_fmadd_round_pch(__m512h __A,__m512h __B,__m512h __C,__mmask16 __U)4393 __m512h test_mm512_mask3_fmadd_round_pch(__m512h __A, __m512h __B, __m512h __C, __mmask16 __U) {
4394   // CHECK-LABEL: @test_mm512_mask3_fmadd_round_pch
4395   // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.512
4396   // CHECK-NOT:  %{{.*}} = select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
4397   return _mm512_mask3_fmadd_round_pch(__A, __B, __C, __U, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4398 }
4399 
test_mm512_maskz_fmadd_round_pch(__mmask16 __U,__m512h __A,__m512h __B,__m512h __C)4400 __m512h test_mm512_maskz_fmadd_round_pch(__mmask16 __U, __m512h __A, __m512h __B, __m512h __C) {
4401   // CHECK-LABEL: @test_mm512_maskz_fmadd_round_pch
4402   // CHECK: @llvm.x86.avx512fp16.maskz.vfmadd.cph.512
4403   return _mm512_maskz_fmadd_round_pch(__U, __A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4404 }
4405 
test_mm_fmul_sch(__m128h __A,__m128h __B)4406 __m128h test_mm_fmul_sch(__m128h __A, __m128h __B) {
4407   // CHECK-LABEL: @test_mm_fmul_sch
4408   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh
4409   return _mm_fmul_sch(__A, __B);
4410 }
4411 
test_mm_mask_fmul_sch(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)4412 __m128h test_mm_mask_fmul_sch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
4413   // CHECK-LABEL: @test_mm_mask_fmul_sch
4414   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh
4415   return _mm_mask_fmul_sch(__W, __U, __A, __B);
4416 }
4417 
test_mm_maskz_fmul_sch(__mmask8 __U,__m128h __A,__m128h __B)4418 __m128h test_mm_maskz_fmul_sch(__mmask8 __U, __m128h __A, __m128h __B) {
4419   // CHECK-LABEL: @test_mm_maskz_fmul_sch
4420   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh
4421   return _mm_maskz_fmul_sch(__U, __A, __B);
4422 }
4423 
test_mm_fmul_round_sch(__m128h __A,__m128h __B)4424 __m128h test_mm_fmul_round_sch(__m128h __A, __m128h __B) {
4425   // CHECK-LABEL: @test_mm_fmul_round_sch
4426   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh
4427   return _mm_fmul_round_sch(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4428 }
4429 
test_mm_mask_fmul_round_sch(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)4430 __m128h test_mm_mask_fmul_round_sch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
4431   // CHECK-LABEL: @test_mm_mask_fmul_round_sch
4432   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh
4433   return _mm_mask_fmul_round_sch(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4434 }
4435 
test_mm_maskz_fmul_round_sch(__mmask8 __U,__m128h __A,__m128h __B)4436 __m128h test_mm_maskz_fmul_round_sch(__mmask8 __U, __m128h __A, __m128h __B) {
4437   // CHECK-LABEL: @test_mm_maskz_fmul_round_sch
4438   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh
4439   return _mm_maskz_fmul_round_sch(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4440 }
4441 
test_mm512_reduce_add_ph(__m512h __W)4442 _Float16 test_mm512_reduce_add_ph(__m512h __W) {
4443   // CHECK-LABEL: @test_mm512_reduce_add_ph
4444   // CHECK: call reassoc half @llvm.vector.reduce.fadd.v32f16(half 0xH8000, <32 x half> %{{.*}})
4445   return _mm512_reduce_add_ph(__W);
4446 }
4447 
test_mm512_reduce_mul_ph(__m512h __W)4448 _Float16 test_mm512_reduce_mul_ph(__m512h __W) {
4449   // CHECK-LABEL: @test_mm512_reduce_mul_ph
4450   // CHECK: call reassoc half @llvm.vector.reduce.fmul.v32f16(half 0xH3C00, <32 x half> %{{.*}})
4451   return _mm512_reduce_mul_ph(__W);
4452 }
4453 
test_mm512_reduce_max_ph(__m512h __W)4454 _Float16 test_mm512_reduce_max_ph(__m512h __W) {
4455   // CHECK-LABEL: @test_mm512_reduce_max_ph
4456   // CHECK: call nnan half @llvm.vector.reduce.fmax.v32f16(<32 x half> %{{.*}})
4457   return _mm512_reduce_max_ph(__W);
4458 }
4459 
test_mm512_reduce_min_ph(__m512h __W)4460 _Float16 test_mm512_reduce_min_ph(__m512h __W) {
4461   // CHECK-LABEL: @test_mm512_reduce_min_ph
4462   // CHECK: call nnan half @llvm.vector.reduce.fmin.v32f16(<32 x half> %{{.*}})
4463   return _mm512_reduce_min_ph(__W);
4464 }
4465 
test_mm512_mask_blend_ph(__mmask32 __U,__m512h __A,__m512h __W)4466 __m512h test_mm512_mask_blend_ph(__mmask32 __U, __m512h __A, __m512h __W) {
4467   // CHECK-LABEL: @test_mm512_mask_blend_ph
4468   // CHECK:  %{{.*}} = bitcast i32 %{{.*}} to <32 x i1>
4469   // CHECK:  %{{.*}} = select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}
4470   return _mm512_mask_blend_ph(__U, __A, __W);
4471 }
4472 
test_mm512_permutex2var_ph(__m512h __A,__m512i __I,__m512h __B)4473 __m512h test_mm512_permutex2var_ph(__m512h __A, __m512i __I, __m512h __B) {
4474   // CHECK-LABEL: @test_mm512_permutex2var_ph
4475   // CHECK:  %{{.*}} = bitcast <32 x half> %{{.*}} to <32 x i16>
4476   // CHECK:  %{{.*}} = bitcast <8 x i64> %{{.*}} to <32 x i16>
4477   // CHECK:  %{{.*}} = bitcast <32 x half> %{{.*}} to <32 x i16>
4478   // CHECK:  %{{.*}} = call <32 x i16> @llvm.x86.avx512.vpermi2var.hi.512(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}})
4479   // CHECK:  %{{.*}} = bitcast <32 x i16> %{{.*}} to <32 x half>
4480   return _mm512_permutex2var_ph(__A, __I, __B);
4481 }
4482 
test_mm512_permutexvar_epi16(__m512i __A,__m512h __B)4483 __m512h test_mm512_permutexvar_epi16(__m512i __A, __m512h __B) {
4484   // CHECK-LABEL: @test_mm512_permutexvar_epi16
4485   // CHECK:  %{{.*}} = bitcast <32 x half> %{{.*}} to <32 x i16>
4486   // CHECK:  %{{.*}} = bitcast <8 x i64> %{{.*}} to <32 x i16>
4487   // CHECK:  %{{.*}} = call <32 x i16> @llvm.x86.avx512.permvar.hi.512(<32 x i16> %{{.*}}, <32 x i16> %{{.*}})
4488   // CHECK:  %{{.*}} = bitcast <32 x i16> %{{.*}} to <32 x half>
4489   return _mm512_permutexvar_ph(__A, __B);
4490 }
4491 
4492 // tests below are for alias intrinsics.
test_mm512_mul_pch(__m512h __A,__m512h __B)4493 __m512h test_mm512_mul_pch(__m512h __A, __m512h __B) {
4494   // CHECK-LABEL: @test_mm512_mul_pch
4495   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512
4496   return _mm512_mul_pch(__A, __B);
4497 }
4498 
test_mm512_mask_mul_pch(__m512h __W,__mmask16 __U,__m512h __A,__m512h __B)4499 __m512h test_mm512_mask_mul_pch(__m512h __W, __mmask16 __U, __m512h __A, __m512h __B) {
4500   // CHECK-LABEL: @test_mm512_mask_mul_pch
4501   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512
4502   return _mm512_mask_mul_pch(__W, __U, __A, __B);
4503 }
4504 
test_mm512_maskz_mul_pch(__mmask16 __U,__m512h __A,__m512h __B)4505 __m512h test_mm512_maskz_mul_pch(__mmask16 __U, __m512h __A, __m512h __B) {
4506   // CHECK-LABEL: @test_mm512_maskz_mul_pch
4507   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512
4508   return _mm512_maskz_mul_pch(__U, __A, __B);
4509 }
4510 
test_mm512_cmul_pch(__m512h __A,__m512h __B)4511 __m512h test_mm512_cmul_pch(__m512h __A, __m512h __B) {
4512   // CHECK-LABEL: @test_mm512_cmul_pch
4513   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512
4514   return _mm512_cmul_pch(__A, __B);
4515 }
test_mm512_mask_cmul_pch(__m512h __W,__mmask16 __U,__m512h __A,__m512h __B)4516 __m512h test_mm512_mask_cmul_pch(__m512h __W, __mmask16 __U, __m512h __A, __m512h __B) {
4517   // CHECK-LABEL: @test_mm512_mask_cmul_pch
4518   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512
4519   return _mm512_mask_cmul_pch(__W, __U, __A, __B);
4520 }
4521 
test_mm512_maskz_cmul_pch(__mmask16 __U,__m512h __A,__m512h __B)4522 __m512h test_mm512_maskz_cmul_pch(__mmask16 __U, __m512h __A, __m512h __B) {
4523   // CHECK-LABEL: @test_mm512_maskz_cmul_pch
4524   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512
4525   return _mm512_maskz_cmul_pch(__U, __A, __B);
4526 }
4527 
test_mm_mul_sch(__m128h __A,__m128h __B)4528 __m128h test_mm_mul_sch(__m128h __A, __m128h __B) {
4529   // CHECK-LABEL: @test_mm_mul_sch
4530   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh
4531   return _mm_mul_sch(__A, __B);
4532 }
4533 
test_mm_mask_mul_sch(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)4534 __m128h test_mm_mask_mul_sch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
4535   // CHECK-LABEL: @test_mm_mask_mul_sch
4536   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh
4537   return _mm_mask_mul_sch(__W, __U, __A, __B);
4538 }
4539 
test_mm_maskz_mul_sch(__mmask8 __U,__m128h __A,__m128h __B)4540 __m128h test_mm_maskz_mul_sch(__mmask8 __U, __m128h __A, __m128h __B) {
4541   // CHECK-LABEL: @test_mm_maskz_mul_sch
4542   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh
4543   return _mm_maskz_mul_sch(__U, __A, __B);
4544 }
4545 
test_mm_mul_round_sch(__m128h __A,__m128h __B)4546 __m128h test_mm_mul_round_sch(__m128h __A, __m128h __B) {
4547   // CHECK-LABEL: @test_mm_mul_round_sch
4548   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh
4549   return _mm_mul_round_sch(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4550 }
4551 
test_mm_mask_mul_round_sch(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)4552 __m128h test_mm_mask_mul_round_sch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
4553   // CHECK-LABEL: @test_mm_mask_mul_round_sch
4554   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh
4555   return _mm_mask_mul_round_sch(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4556 }
4557 
test_mm_maskz_mul_round_sch(__mmask8 __U,__m128h __A,__m128h __B)4558 __m128h test_mm_maskz_mul_round_sch(__mmask8 __U, __m128h __A, __m128h __B) {
4559   // CHECK-LABEL: @test_mm_maskz_mul_round_sch
4560   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh
4561   return _mm_maskz_mul_round_sch(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4562 }
4563 
test_mm512_mul_round_pch(__m512h __A,__m512h __B)4564 __m512h test_mm512_mul_round_pch(__m512h __A, __m512h __B) {
4565   // CHECK-LABEL: @test_mm512_mul_round_pch
4566   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512
4567   return _mm512_mul_round_pch(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4568 }
4569 
test_mm512_mask_mul_round_pch(__m512h __W,__mmask16 __U,__m512h __A,__m512h __B)4570 __m512h test_mm512_mask_mul_round_pch(__m512h __W, __mmask16 __U, __m512h __A, __m512h __B) {
4571   // CHECK-LABEL: @test_mm512_mask_mul_round_pch
4572   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512
4573   return _mm512_mask_mul_round_pch(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4574 }
4575 
test_mm512_maskz_mul_round_pch(__mmask16 __U,__m512h __A,__m512h __B)4576 __m512h test_mm512_maskz_mul_round_pch(__mmask16 __U, __m512h __A, __m512h __B) {
4577   // CHECK-LABEL: @test_mm512_maskz_mul_round_pch
4578   // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512
4579   return _mm512_maskz_mul_round_pch(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4580 }
4581 
test_mm512_cmul_round_pch(__m512h __A,__m512h __B)4582 __m512h test_mm512_cmul_round_pch(__m512h __A, __m512h __B) {
4583   // CHECK-LABEL: @test_mm512_cmul_round_pch
4584   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512
4585   return _mm512_cmul_round_pch(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4586 }
4587 
test_mm512_mask_cmul_round_pch(__m512h __W,__mmask16 __U,__m512h __A,__m512h __B)4588 __m512h test_mm512_mask_cmul_round_pch(__m512h __W, __mmask16 __U, __m512h __A, __m512h __B) {
4589   // CHECK-LABEL: @test_mm512_mask_cmul_round_pch
4590   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512
4591   return _mm512_mask_cmul_round_pch(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4592 }
4593 
test_mm512_maskz_cmul_round_pch(__mmask16 __U,__m512h __A,__m512h __B)4594 __m512h test_mm512_maskz_cmul_round_pch(__mmask16 __U, __m512h __A, __m512h __B) {
4595   // CHECK-LABEL: @test_mm512_maskz_cmul_round_pch
4596   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512
4597   return _mm512_maskz_cmul_round_pch(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4598 }
4599 
test_mm_cmul_sch(__m128h __A,__m128h __B)4600 __m128h test_mm_cmul_sch(__m128h __A, __m128h __B) {
4601   // CHECK-LABEL: @test_mm_cmul_sch
4602   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh
4603   return _mm_cmul_sch(__A, __B);
4604 }
4605 
test_mm_mask_cmul_sch(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)4606 __m128h test_mm_mask_cmul_sch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
4607   // CHECK-LABEL: @test_mm_mask_cmul_sch
4608   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh
4609   return _mm_mask_cmul_sch(__W, __U, __A, __B);
4610 }
4611 
test_mm_maskz_cmul_sch(__mmask8 __U,__m128h __A,__m128h __B)4612 __m128h test_mm_maskz_cmul_sch(__mmask8 __U, __m128h __A, __m128h __B) {
4613   // CHECK-LABEL: @test_mm_maskz_cmul_sch
4614   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh
4615   return _mm_maskz_cmul_sch(__U, __A, __B);
4616 }
4617 
test_mm_cmul_round_sch(__m128h __A,__m128h __B)4618 __m128h test_mm_cmul_round_sch(__m128h __A, __m128h __B) {
4619   // CHECK-LABEL: @test_mm_cmul_round_sch
4620   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh
4621   return _mm_cmul_round_sch(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4622 }
4623 
test_mm_mask_cmul_round_sch(__m128h __W,__mmask8 __U,__m128h __A,__m128h __B)4624 __m128h test_mm_mask_cmul_round_sch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {
4625   // CHECK-LABEL: @test_mm_mask_cmul_round_sch
4626   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh
4627   return _mm_mask_cmul_round_sch(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4628 }
4629 
test_mm_maskz_cmul_round_sch(__mmask8 __U,__m128h __A,__m128h __B)4630 __m128h test_mm_maskz_cmul_round_sch(__mmask8 __U, __m128h __A, __m128h __B) {
4631   // CHECK-LABEL: @test_mm_maskz_cmul_round_sch
4632   // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh
4633   return _mm_maskz_cmul_round_sch(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
4634 }
4635