xref: /llvm-project/clang/test/CodeGen/X86/avx10_2bf16-builtins.c (revision ee2722fc882ed5dbc7609686bd998b023c6645b2)
1 // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64 -target-feature +avx10.2-256 -emit-llvm -o - -Wno-invalid-feature-combination -Wall -Werror | FileCheck %s
2 // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=i386 -target-feature +avx10.2-256 -emit-llvm -o - -Wno-invalid-feature-combination -Wall -Werror | FileCheck %s
3 
4 #include <immintrin.h>
5 
6 __m256bh test_mm256_setzero_pbh() {
7   // CHECK-LABEL: @test_mm256_setzero_pbh
8   // CHECK: zeroinitializer
9   return _mm256_setzero_pbh();
10 }
11 
12 __m128bh test_mm_setzero_pbh() {
13   // CHECK-LABEL: @test_mm_setzero_pbh
14   // CHECK: zeroinitializer
15   return _mm_setzero_pbh();
16 }
17 
18 __m256bh test_mm256_undefined_pbh(void) {
19   // CHECK-LABEL: @test_mm256_undefined_pbh
20   // CHECK: ret <16 x bfloat> zeroinitializer
21   return _mm256_undefined_pbh();
22 }
23 
24 __m128bh test_mm_undefined_pbh(void) {
25   // CHECK-LABEL: @test_mm_undefined_pbh
26   // CHECK: ret <8 x bfloat> zeroinitializer
27   return _mm_undefined_pbh();
28 }
29 
30 __bf16 test_mm_cvtsbh_bf16(__m128bh __A) {
31   // CHECK-LABEL: @test_mm_cvtsbh_bf16
32   // CHECK: extractelement <8 x bfloat> %{{.*}}, i32 0
33   return _mm_cvtsbh_bf16(__A);
34 }
35 
36 __bf16 test_mm256_cvtsbh_bf16(__m256bh __A) {
37   // CHECK-LABEL: @test_mm256_cvtsbh_bf16
38   // CHECK: extractelement <16 x bfloat> %{{.*}}, i32 0
39   return _mm256_cvtsbh_bf16(__A);
40 }
41 
42 __m128bh test_mm_set_sbh(__bf16 h) {
43   // CHECK-LABEL: @test_mm_set_sbh
44   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 0
45   // CHECK: insertelement <8 x bfloat> %{{.*}}, bfloat %{{.*}}, i32 1
46   // CHECK: insertelement <8 x bfloat> %{{.*}}, bfloat %{{.*}}, i32 2
47   // CHECK: insertelement <8 x bfloat> %{{.*}}, bfloat %{{.*}}, i32 3
48   // CHECK: insertelement <8 x bfloat> %{{.*}}, bfloat %{{.*}}, i32 4
49   // CHECK: insertelement <8 x bfloat> %{{.*}}, bfloat %{{.*}}, i32 5
50   // CHECK: insertelement <8 x bfloat> %{{.*}}, bfloat %{{.*}}, i32 6
51   // CHECK: insertelement <8 x bfloat> %{{.*}}, bfloat %{{.*}}, i32 7
52   return _mm_set_sbh(h);
53 }
54 
55 __m128bh test_mm_set1_pbh(__bf16 h) {
56   // CHECK-LABEL: @test_mm_set1_pbh
57   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 0
58   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 1
59   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 2
60   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 3
61   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 4
62   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 5
63   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 6
64   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 7
65   return _mm_set1_pbh(h);
66 }
67 
68 __m256bh test_mm256_set1_pbh(__bf16 h) {
69   // CHECK-LABEL: @test_mm256_set1_pbh
70   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 0
71   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 1
72   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 2
73   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 3
74   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 4
75   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 5
76   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 6
77   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 7
78   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 8
79   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 9
80   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 10
81   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 11
82   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 12
83   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 13
84   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 14
85   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 15
86   return _mm256_set1_pbh(h);
87 }
88 
89 __m128bh test_mm_set_pbh(__bf16 bf1, __bf16 bf2, __bf16 bf3, __bf16 bf4,
90                        __bf16 bf5, __bf16 bf6, __bf16 bf7, __bf16 bf8) {
91   // CHECK-LABEL: @test_mm_set_pbh
92   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 0
93   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 1
94   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 2
95   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 3
96   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 4
97   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 5
98   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 6
99   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 7
100   return _mm_set_pbh(bf1, bf2, bf3, bf4, bf5, bf6, bf7, bf8);
101 }
102 
103 __m256bh test_mm256_set_pbh(__bf16 bf1, __bf16 bf2, __bf16 bf3, __bf16 bf4,
104                           __bf16 bf5, __bf16 bf6, __bf16 bf7, __bf16 bf8,
105                           __bf16 bf9, __bf16 bf10, __bf16 bf11, __bf16 bf12,
106                           __bf16 bf13, __bf16 bf14, __bf16 bf15, __bf16 bf16) {
107   // CHECK-LABEL: @test_mm256_set_pbh
108   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 0
109   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 1
110   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 2
111   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 3
112   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 4
113   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 5
114   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 6
115   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 7
116   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 8
117   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 9
118   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 10
119   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 11
120   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 12
121   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 13
122   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 14
123   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 15
124   return _mm256_set_pbh(bf1, bf2, bf3, bf4, bf5, bf6, bf7, bf8,
125                        bf9, bf10, bf11, bf12, bf13, bf14, bf15, bf16);
126 }
127 
128 __m128bh test_mm_setr_pbh(__bf16 bf1, __bf16 bf2, __bf16 bf3, __bf16 bf4,
129                         __bf16 bf5, __bf16 bf6, __bf16 bf7, __bf16 bf8) {
130   // CHECK-LABEL: @test_mm_setr_pbh
131   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 0
132   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 1
133   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 2
134   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 3
135   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 4
136   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 5
137   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 6
138   // CHECK: insertelement <8 x bfloat> {{.*}}, i32 7
139   return _mm_setr_pbh(bf1, bf2, bf3, bf4, bf5, bf6, bf7, bf8);
140 }
141 
142 __m256bh test_mm256_setr_pbh(__bf16 bf1, __bf16 bf2, __bf16 bf3, __bf16 bf4,
143                            __bf16 bf5, __bf16 bf6, __bf16 bf7, __bf16 bf8,
144                            __bf16 bf9, __bf16 bf10, __bf16 bf11, __bf16 bf12,
145                            __bf16 bf13, __bf16 bf14, __bf16 bf15, __bf16 bf16) {
146   // CHECK-LABEL: @test_mm256_setr_pbh
147   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 0
148   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 1
149   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 2
150   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 3
151   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 4
152   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 5
153   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 6
154   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 7
155   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 8
156   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 9
157   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 10
158   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 11
159   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 12
160   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 13
161   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 14
162   // CHECK: insertelement <16 x bfloat> {{.*}}, i32 15
163   return _mm256_setr_pbh(bf1, bf2, bf3, bf4, bf5, bf6, bf7, bf8,
164                         bf9, bf10, bf11, bf12, bf13, bf14, bf15, bf16);
165 }
166 
167 __m128 test_mm_castbf16_ps(__m128bh A) {
168   // CHECK-LABEL: test_mm_castbf16_ps
169   // CHECK: bitcast <8 x bfloat> %{{.*}} to <4 x float>
170   return _mm_castbf16_ps(A);
171 }
172 
173 __m256 test_mm256_castbf16_ps(__m256bh A) {
174   // CHECK-LABEL: test_mm256_castbf16_ps
175   // CHECK: bitcast <16 x bfloat> %{{.*}} to <8 x float>
176   return _mm256_castbf16_ps(A);
177 }
178 
179 __m128i test_mm_castbf16_si128(__m128bh A) {
180   // CHECK-LABEL: test_mm_castbf16_si128
181   // CHECK: bitcast <8 x bfloat> %{{.*}} to <2 x i64>
182   return _mm_castbf16_si128(A);
183 }
184 
185 __m256i test_mm256_castbf16_si256(__m256bh A) {
186   // CHECK-LABEL: test_mm256_castbf16_si256
187   // CHECK: bitcast <16 x bfloat> %{{.*}} to <4 x i64>
188   return _mm256_castbf16_si256(A);
189 }
190 
191 __m128bh test_mm_castps_pbh(__m128 A) {
192   // CHECK-LABEL: test_mm_castps_pbh
193   // CHECK: bitcast <4 x float> %{{.*}} to <8 x bfloat>
194   return _mm_castps_pbh(A);
195 }
196 
197 __m256bh test_mm256_castps_pbh(__m256 A) {
198   // CHECK-LABEL: test_mm256_castps_pbh
199   // CHECK: bitcast <8 x float> %{{.*}} to <16 x bfloat>
200   return _mm256_castps_pbh(A);
201 }
202 
203 __m128bh test_mm_castpd_pbh(__m128d A) {
204   // CHECK-LABEL: test_mm_castpd_pbh
205   // CHECK: bitcast <2 x double> %{{.*}} to <8 x bfloat>
206   return _mm_castpd_pbh(A);
207 }
208 
209 __m256bh test_mm256_castpd_pbh(__m256d A) {
210   // CHECK-LABEL: test_mm256_castpd_pbh
211   // CHECK: bitcast <4 x double> %{{.*}} to <16 x bfloat>
212   return _mm256_castpd_pbh(A);
213 }
214 
215 __m128bh test_mm_castsi128_pbh(__m128i A) {
216   // CHECK-LABEL: test_mm_castsi128_pbh
217   // CHECK: bitcast <2 x i64> %{{.*}} to <8 x bfloat>
218   return _mm_castsi128_pbh(A);
219 }
220 
221 __m256bh test_mm256_castsi256_pbh(__m256i A) {
222   // CHECK-LABEL: test_mm256_castsi256_pbh
223   // CHECK: bitcast <4 x i64> %{{.*}} to <16 x bfloat>
224   return _mm256_castsi256_pbh(A);
225 }
226 
227 __m128d test_mm_castbf16_pd(__m128bh A) {
228   // CHECK-LABEL: test_mm_castbf16_pd
229   // CHECK: bitcast <8 x bfloat> %{{.*}} to <2 x double>
230   return _mm_castbf16_pd(A);
231 }
232 
233 __m128bh test_mm256_castbf16256_pbh128(__m256bh __a) {
234   // CHECK-LABEL: test_mm256_castbf16256_pbh128
235   // CHECK: shufflevector <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
236   return _mm256_castbf16256_pbh128(__a);
237 }
238 
239 __m256bh test_mm256_castbf16128_pbh256(__m128bh __a) {
240   // CHECK-LABEL: test_mm256_castbf16128_pbh256
241   // CHECK: shufflevector <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
242   return _mm256_castbf16128_pbh256(__a);
243 }
244 
245 __m256d test_mm256_castbf16_pd(__m256bh A) {
246   // CHECK-LABEL: test_mm256_castbf16_pd
247   // CHECK: bitcast <16 x bfloat> %{{.*}} to <4 x double>
248   return _mm256_castbf16_pd(A);
249 }
250 
251 __m256bh test_mm256_zextbf16128_pbh256(__m128bh __a) {
252   // CHECK-LABEL: test_mm256_zextbf16128_pbh256
253   // CHECK: shufflevector <8 x bfloat> %{{.*}}, <8 x bfloat> {{.*}}, <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>
254   return _mm256_zextbf16128_pbh256(__a);
255 }
256 
257 __m128bh test_mm_abs_pbh(__m128bh a) {
258   // CHECK-LABEL: @test_mm_abs_pbh
259   // CHECK: and <4 x i32>
260   return _mm_abs_pbh(a);
261 }
262 
263 __m256bh test_mm256_abs_pbh(__m256bh a) {
264   // CHECK-LABEL: @test_mm256_abs_pbh
265   // CHECK: and <8 x i32>
266   return _mm256_abs_pbh(a);
267 }
268 
269 __m256bh test_mm256_loadu_pbh(void *p) {
270   // CHECK-LABEL: @test_mm256_loadu_pbh
271   // CHECK: load <16 x bfloat>, ptr {{.*}}, align 1{{$}}
272   return _mm256_loadu_pbh(p);
273 }
274 
275 __m128bh test_mm_load_sbh(void const *A) {
276   // CHECK-LABEL: test_mm_load_sbh
277   // CHECK: %{{.*}} = call <8 x bfloat> @llvm.masked.load.v8bf16.p0(ptr %{{.*}}, i32 1, <8 x i1> bitcast (<1 x i8> splat (i8 1) to <8 x i1>), <8 x bfloat> %{{.*}})
278   return _mm_load_sbh(A);
279 }
280 
281 __m256bh test_mm256_load_pbh(void *p) {
282   // CHECK-LABEL: @test_mm256_load_pbh
283   // CHECK: load <16 x bfloat>, ptr %{{.*}}, align 32
284   return _mm256_load_pbh(p);
285 }
286 
287 __m128bh test_mm_load_pbh(void *p) {
288   // CHECK-LABEL: @test_mm_load_pbh
289   // CHECK: load <8 x bfloat>, ptr %{{.*}}, align 16
290   return _mm_load_pbh(p);
291 }
292 
293 __m128bh test_mm_loadu_pbh(void *p) {
294   // CHECK-LABEL: @test_mm_loadu_pbh
295   // CHECK: load <8 x bfloat>, ptr {{.*}}, align 1{{$}}
296   return _mm_loadu_pbh(p);
297 }
298 
299 void test_mm_store_sbh(void *A, __m128bh B) {
300   // CHECK-LABEL: test_mm_store_sbh
301   // CHECK: extractelement <8 x bfloat> %{{.*}}, i32 0
302   // CHECK: store bfloat %{{.*}}, ptr %{{.*}}, align 1{{$}}
303   _mm_store_sbh(A, B);
304 }
305 
306 void test_mm_mask_store_sbh(void *__P, __mmask8 __U, __m128bh __A) {
307   // CHECK-LABEL: @test_mm_mask_store_sbh
308   // CHECK: call void @llvm.masked.store.v8bf16.p0(<8 x bfloat> %{{.*}}, ptr %{{.*}}, i32 1, <8 x i1> %{{.*}})
309   _mm_mask_store_sbh(__P, __U, __A);
310 }
311 
312 void test_mm256_store_pbh(void *p, __m256bh a) {
313   // CHECK-LABEL: @test_mm256_store_pbh
314   // CHECK: store <16 x bfloat> %{{.*}}, ptr %{{.*}}, align 32
315   _mm256_store_pbh(p, a);
316 }
317 
318 void test_mm_store_pbh(void *p, __m128bh a) {
319   // CHECK-LABEL: @test_mm_store_pbh
320   // CHECK: store <8 x bfloat> %{{.*}}, ptr %{{.*}}, align 16
321   _mm_store_pbh(p, a);
322 }
323 
324 __m128bh test_mm_mask_load_sbh(__m128bh __A, __mmask8 __U, const void *__W) {
325   // CHECK-LABEL: @test_mm_mask_load_sbh
326   // CHECK: %{{.*}} = call <8 x bfloat> @llvm.masked.load.v8bf16.p0(ptr %{{.*}}, i32 1, <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}})
327   return _mm_mask_load_sbh(__A, __U, __W);
328 }
329 
330 __m128bh test_mm_maskz_load_sbh(__mmask8 __U, const void *__W) {
331   // CHECK-LABEL: @test_mm_maskz_load_sbh
332   // CHECK: %{{.*}} = call <8 x bfloat> @llvm.masked.load.v8bf16.p0(ptr %{{.*}}, i32 1, <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}})
333   return _mm_maskz_load_sbh(__U, __W);
334 }
335 
336 void test_mm256_storeu_pbh(void *p, __m256bh a) {
337   // CHECK-LABEL: @test_mm256_storeu_pbh
338   // CHECK: store <16 x bfloat> %{{.*}}, ptr %{{.*}}, align 1{{$}}
339   // CHECK-NEXT: ret void
340   _mm256_storeu_pbh(p, a);
341 }
342 
343 void test_mm_storeu_pbh(void *p, __m128bh a) {
344   // CHECK-LABEL: @test_mm_storeu_pbh
345   // CHECK: store <8 x bfloat> %{{.*}}, ptr %{{.*}}, align 1{{$}}
346   // CHECK-NEXT: ret void
347   _mm_storeu_pbh(p, a);
348 }
349 
350 __m128bh test_mm_move_sbh(__m128bh A, __m128bh B) {
351   // CHECK-LABEL: test_mm_move_sbh
352   // CHECK: extractelement <8 x bfloat> %{{.*}}, i32 0
353   // CHECK: insertelement <8 x bfloat> %{{.*}}, bfloat %{{.*}}, i32 0
354   return _mm_move_sbh(A, B);
355 }
356 
357 __m128bh test_mm_mask_move_sbh(__m128bh __W, __mmask8 __U, __m128bh __A, __m128bh __B) {
358   // CHECK-LABEL: @test_mm_mask_move_sbh
359   // CHECK: [[EXT:%.*]] = extractelement <8 x bfloat> %{{.*}}, i32 0
360   // CHECK: insertelement <8 x bfloat> %{{.*}}, bfloat [[EXT]], i32 0
361   // CHECK: [[A:%.*]] = extractelement <8 x bfloat> [[VEC:%.*]], i64 0
362   // CHECK-NEXT: [[B:%.*]] = extractelement <8 x bfloat> %{{.*}}, i64 0
363   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
364   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
365   // CHECK-NEXT: [[SEL:%.*]] = select i1 %{{.*}}, bfloat [[A]], bfloat [[B]]
366   // CHECK-NEXT: insertelement <8 x bfloat> [[VEC]], bfloat [[SEL]], i64 0
367   return _mm_mask_move_sbh(__W, __U, __A, __B);
368 }
369 
370 __m128bh test_mm_maskz_move_sbh(__mmask8 __U, __m128bh __A, __m128bh __B) {
371   // CHECK-LABEL: @test_mm_maskz_move_sbh
372   // CHECK: [[EXT:%.*]] = extractelement <8 x bfloat> %{{.*}}, i32 0
373   // CHECK: insertelement <8 x bfloat> %{{.*}}, bfloat [[EXT]], i32 0
374   // CHECK: [[A:%.*]] = extractelement <8 x bfloat> [[VEC:%.*]], i64 0
375   // CHECK-NEXT: [[B:%.*]] = extractelement <8 x bfloat> %{{.*}}, i64 0
376   // CHECK-NEXT: bitcast i8 %{{.*}} to <8 x i1>
377   // CHECK-NEXT: extractelement <8 x i1> %{{.*}}, i64 0
378   // CHECK-NEXT: [[SEL:%.*]] = select i1 %{{.*}}, bfloat [[A]], bfloat [[B]]
379   // CHECK-NEXT: insertelement <8 x bfloat> [[VEC]], bfloat [[SEL]], i64 0
380   return _mm_maskz_move_sbh(__U, __A, __B);
381 }
382 
383 __m128bh test_mm_mask_blend_pbh(__mmask8 __U, __m128bh __A, __m128bh __W) {
384   // CHECK-LABEL: @test_mm_mask_blend_pbh
385   // CHECK:  %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>
386   // CHECK:  %{{.*}} = select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
387   return _mm_mask_blend_pbh(__U, __A, __W);
388 }
389 
390 __m256bh test_mm256_mask_blend_pbh(__mmask16 __U, __m256bh __A, __m256bh __W) {
391   // CHECK-LABEL: @test_mm256_mask_blend_pbh
392   // CHECK:  %{{.*}} = bitcast i16 %{{.*}} to <16 x i1>
393   // CHECK:  %{{.*}} = select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
394   return _mm256_mask_blend_pbh(__U, __A, __W);
395 }
396 
397 __m128bh test_mm_permutex2var_pbh(__m128bh __A, __m128i __I, __m128bh __B) {
398   // CHECK-LABEL: @test_mm_permutex2var_pbh
399   // CHECK:  %{{.*}} = bitcast <8 x bfloat> %{{.*}} to <8 x i16>
400   // CHECK:  %{{.*}} = bitcast <2 x i64> %{{.*}} to <8 x i16>
401   // CHECK:  %{{.*}} = bitcast <8 x bfloat> %{{.*}} to <8 x i16>
402   // CHECK:  %{{.*}} = call <8 x i16> @llvm.x86.avx512.vpermi2var.hi.128(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}})
403   // CHECK:  %{{.*}} = bitcast <8 x i16> %{{.*}} to <8 x bfloat>
404   return _mm_permutex2var_pbh(__A, __I, __B);
405 }
406 
407 __m256bh test_mm256_permutex2var_pbh(__m256bh __A, __m256i __I, __m256bh __B) {
408   // CHECK-LABEL: @test_mm256_permutex2var_pbh
409   // CHECK:  %{{.*}} = bitcast <16 x bfloat> %{{.*}} to <16 x i16>
410   // CHECK:  %{{.*}} = bitcast <4 x i64> %{{.*}} to <16 x i16>
411   // CHECK:  %{{.*}} = bitcast <16 x bfloat> %{{.*}} to <16 x i16>
412   // CHECK:  %{{.*}} = call <16 x i16> @llvm.x86.avx512.vpermi2var.hi.256(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}})
413   // CHECK:  %{{.*}} = bitcast <16 x i16> %{{.*}} to <16 x bfloat>
414   return _mm256_permutex2var_pbh(__A, __I, __B);
415 }
416 
417 __m128bh test_mm_permutexvar_pbh(__m128i __A, __m128bh __B) {
418   // CHECK-LABEL: @test_mm_permutexvar_pbh
419   // CHECK:  %{{.*}} = bitcast <8 x bfloat> %{{.*}} to <8 x i16>
420   // CHECK:  %{{.*}} = bitcast <2 x i64> %{{.*}} to <8 x i16>
421   // CHECK:  %{{.*}} = call <8 x i16> @llvm.x86.avx512.permvar.hi.128(<8 x i16> %{{.*}}, <8 x i16> %{{.*}})
422   // CHECK:  %{{.*}} = bitcast <8 x i16> %{{.*}} to <8 x bfloat>
423   return _mm_permutexvar_pbh(__A, __B);
424 }
425 
426 __m256bh test_mm256_permutexvar_pbh(__m256i __A, __m256bh __B) {
427   // CHECK-LABEL: @test_mm256_permutexvar_pbh
428   // CHECK:  %{{.*}} = bitcast <16 x bfloat> %{{.*}} to <16 x i16>
429   // CHECK:  %{{.*}} = bitcast <4 x i64> %{{.*}} to <16 x i16>
430   // CHECK:  %{{.*}} = call <16 x i16> @llvm.x86.avx512.permvar.hi.256(<16 x i16> %{{.*}}, <16 x i16> %{{.*}})
431   // CHECK:  %{{.*}} = bitcast <16 x i16> %{{.*}} to <16 x bfloat>
432   return _mm256_permutexvar_pbh(__A, __B);
433 }
434 
435 __m256bh test_mm256_add_pbh(__m256bh __A, __m256bh __B) {
436   // CHECK-LABEL: @test_mm256_add_pbh
437   // CHECK: %{{.*}} = fadd <16 x bfloat> %{{.*}}, %{{.*}}
438   return _mm256_add_pbh(__A, __B);
439 }
440 
441 __m256bh test_mm256_mask_add_pbh(__m256bh __W, __mmask16 __U, __m256bh __A, __m256bh __B) {
442   // CHECK: %{{.*}} = fadd <16 x bfloat> %{{.*}}, %{{.*}}
443   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
444   return (__m256bh)_mm256_mask_add_pbh(__W, __U, __A, __B);
445 }
446 
447 __m256bh test_mm256_maskz_add_pbh(__mmask16 __U, __m256bh __A, __m256bh __B) {
448   // CHECK: %{{.*}} = fadd <16 x bfloat> %{{.*}}, %{{.*}}
449   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
450   return _mm256_maskz_add_pbh(__U, __A, __B);
451 }
452 
453 __m128bh test_mm_add_pbh(__m128bh __A, __m128bh __B) {
454   // CHECK-LABEL: @test_mm_add_pbh
455   // CHECK: %{{.*}} = fadd <8 x bfloat> %{{.*}}, %{{.*}}
456   return _mm_add_pbh(__A, __B);
457 }
458 
459 __m128bh test_mm_mask_add_pbh(__m128bh __W, __mmask16 __U, __m128bh __A, __m128bh __B) {
460   // CHECK: %{{.*}} = fadd <8 x bfloat> %{{.*}}, %{{.*}}
461   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
462   return (__m128bh)_mm_mask_add_pbh(__W, __U, __A, __B);
463 }
464 
465 __m128bh test_mm_maskz_add_pbh(__mmask16 __U, __m128bh __A, __m128bh __B) {
466   // CHECK: %{{.*}} = fadd <8 x bfloat> %{{.*}}, %{{.*}}
467   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
468   return _mm_maskz_add_pbh(__U, __A, __B);
469 }
470 
471 __m256bh test_mm256_sub_pbh(__m256bh __A, __m256bh __B) {
472   // CHECK-LABEL: @test_mm256_sub_pbh
473   // CHECK: %{{.*}} = fsub <16 x bfloat> %{{.*}}, %{{.*}}
474   return _mm256_sub_pbh(__A, __B);
475 }
476 
477 __m256bh test_mm256_mask_sub_pbh(__m256bh __W, __mmask16 __U, __m256bh __A, __m256bh __B) {
478   // CHECK: %{{.*}} = fsub <16 x bfloat> %{{.*}}, %{{.*}}
479   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
480   return (__m256bh)_mm256_mask_sub_pbh(__W, __U, __A, __B);
481 }
482 
483 __m256bh test_mm256_maskz_sub_pbh(__mmask16 __U, __m256bh __A, __m256bh __B) {
484   // CHECK: %{{.*}} = fsub <16 x bfloat> %{{.*}}, %{{.*}}
485   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
486   return _mm256_maskz_sub_pbh(__U, __A, __B);
487 }
488 
489 __m128bh test_mm_sub_pbh(__m128bh __A, __m128bh __B) {
490   // CHECK-LABEL: @test_mm_sub_pbh
491   // CHECK: %{{.*}} = fsub <8 x bfloat> %{{.*}}, %{{.*}}
492   return _mm_sub_pbh(__A, __B);
493 }
494 
495 __m128bh test_mm_mask_sub_pbh(__m128bh __W, __mmask16 __U, __m128bh __A, __m128bh __B) {
496   // CHECK: %{{.*}} = fsub <8 x bfloat> %{{.*}}, %{{.*}}
497   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
498   return (__m128bh)_mm_mask_sub_pbh(__W, __U, __A, __B);
499 }
500 
501 __m128bh test_mm_maskz_sub_pbh(__mmask16 __U, __m128bh __A, __m128bh __B) {
502   // CHECK: %{{.*}} = fsub <8 x bfloat> %{{.*}}, %{{.*}}
503   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
504   return _mm_maskz_sub_pbh(__U, __A, __B);
505 }
506 
507 __m256bh test_mm256_mul_pbh(__m256bh __A, __m256bh __B) {
508   // CHECK-LABEL: @test_mm256_mul_pbh
509   // CHECK: %{{.*}} = fmul <16 x bfloat> %{{.*}}, %{{.*}}
510   return _mm256_mul_pbh(__A, __B);
511 }
512 
513 __m256bh test_mm256_mask_mul_pbh(__m256bh __W, __mmask16 __U, __m256bh __A, __m256bh __B) {
514   // CHECK: %{{.*}} = fmul <16 x bfloat> %{{.*}}, %{{.*}}
515   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
516   return (__m256bh)_mm256_mask_mul_pbh(__W, __U, __A, __B);
517 }
518 
519 __m256bh test_mm256_maskz_mul_pbh(__mmask16 __U, __m256bh __A, __m256bh __B) {
520   // CHECK: %{{.*}} = fmul <16 x bfloat> %{{.*}}, %{{.*}}
521   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
522   return _mm256_maskz_mul_pbh(__U, __A, __B);
523 }
524 
525 __m128bh test_mm_mul_pbh(__m128bh __A, __m128bh __B) {
526   // CHECK-LABEL: @test_mm_mul_pbh
527   // CHECK: %{{.*}} = fmul <8 x bfloat> %{{.*}}, %{{.*}}
528   return _mm_mul_pbh(__A, __B);
529 }
530 
531 __m128bh test_mm_mask_mul_pbh(__m128bh __W, __mmask16 __U, __m128bh __A, __m128bh __B) {
532   // CHECK: %{{.*}} = fmul <8 x bfloat> %{{.*}}, %{{.*}}
533   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
534   return (__m128bh)_mm_mask_mul_pbh(__W, __U, __A, __B);
535 }
536 
537 __m128bh test_mm_maskz_mul_pbh(__mmask16 __U, __m128bh __A, __m128bh __B) {
538   // CHECK: %{{.*}} = fmul <8 x bfloat> %{{.*}}, %{{.*}}
539   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
540   return _mm_maskz_mul_pbh(__U, __A, __B);
541 }
542 
543 __m256bh test_mm256_div_pbh(__m256bh __A, __m256bh __B) {
544   // CHECK-LABEL: @test_mm256_div_pbh
545   // CHECK: %{{.*}} = fdiv <16 x bfloat> %{{.*}}, %{{.*}}
546   return _mm256_div_pbh(__A, __B);
547 }
548 
549 __m256bh test_mm256_mask_div_pbh(__m256bh __W, __mmask16 __U, __m256bh __A, __m256bh __B) {
550   // CHECK: %{{.*}} = fdiv <16 x bfloat> %{{.*}}, %{{.*}}
551   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
552   return (__m256bh)_mm256_mask_div_pbh(__W, __U, __A, __B);
553 }
554 
555 __m256bh test_mm256_maskz_div_pbh(__mmask16 __U, __m256bh __A, __m256bh __B) {
556   // CHECK: %{{.*}} = fdiv <16 x bfloat> %{{.*}}, %{{.*}}
557   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
558   return _mm256_maskz_div_pbh(__U, __A, __B);
559 }
560 
561 __m128bh test_mm_div_pbh(__m128bh __A, __m128bh __B) {
562   // CHECK-LABEL: @test_mm_div_pbh
563   // CHECK: %{{.*}} = fdiv <8 x bfloat> %{{.*}}, %{{.*}}
564   return _mm_div_pbh(__A, __B);
565 }
566 
567 __m128bh test_mm_mask_div_pbh(__m128bh __W, __mmask16 __U, __m128bh __A, __m128bh __B) {
568   // CHECK: %{{.*}} = fdiv <8 x bfloat> %{{.*}}, %{{.*}}
569   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
570   return (__m128bh)_mm_mask_div_pbh(__W, __U, __A, __B);
571 }
572 
573 __m128bh test_mm_maskz_div_pbh(__mmask16 __U, __m128bh __A, __m128bh __B) {
574   // CHECK: %{{.*}} = fdiv <8 x bfloat> %{{.*}}, %{{.*}}
575   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
576   return _mm_maskz_div_pbh(__U, __A, __B);
577 }
578 
579 __m256bh test_mm256_max_pbh(__m256bh __A, __m256bh __B) {
580   // CHECK-LABEL: @test_mm256_max_pbh
581   // CHECK: @llvm.x86.avx10.vmaxbf16256(
582   return _mm256_max_pbh(__A, __B);
583 }
584 
585 __m256bh test_mm256_mask_max_pbh(__m256bh __W, __mmask16 __U, __m256bh __A, __m256bh __B) {
586   // CHECK: @llvm.x86.avx10.vmaxbf16256
587   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
588   return (__m256bh)_mm256_mask_max_pbh(__W, __U, __A, __B);
589 }
590 
591 __m256bh test_mm256_maskz_max_pbh(__mmask16 __U, __m256bh __A, __m256bh __B) {
592   // CHECK: @llvm.x86.avx10.vmaxbf16256
593   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
594   return _mm256_maskz_max_pbh(__U, __A, __B);
595 }
596 
597 __m128bh test_mm_max_pbh(__m128bh __A, __m128bh __B) {
598   // CHECK-LABEL: @test_mm_max_pbh
599   // CHECK: @llvm.x86.avx10.vmaxbf16128(
600   return _mm_max_pbh(__A, __B);
601 }
602 
603 __m128bh test_mm_mask_max_pbh(__m128bh __W, __mmask16 __U, __m128bh __A, __m128bh __B) {
604   // CHECK: @llvm.x86.avx10.vmaxbf16128
605   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
606   return (__m128bh)_mm_mask_max_pbh(__W, __U, __A, __B);
607 }
608 
609 __m128bh test_mm_maskz_max_pbh(__mmask16 __U, __m128bh __A, __m128bh __B) {
610   // CHECK: @llvm.x86.avx10.vmaxbf16128
611   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
612   return _mm_maskz_max_pbh(__U, __A, __B);
613 }
614 
615 __m256bh test_mm256_min_pbh(__m256bh __A, __m256bh __B) {
616   // CHECK-LABEL: @test_mm256_min_pbh
617   // CHECK: @llvm.x86.avx10.vminbf16256(
618   return _mm256_min_pbh(__A, __B);
619 }
620 
621 __m256bh test_mm256_mask_min_pbh(__m256bh __W, __mmask16 __U, __m256bh __A, __m256bh __B) {
622   // CHECK: @llvm.x86.avx10.vminbf16256
623   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
624   return (__m256bh)_mm256_mask_min_pbh(__W, __U, __A, __B);
625 }
626 
627 __m256bh test_mm256_maskz_min_pbh(__mmask16 __U, __m256bh __A, __m256bh __B) {
628   // CHECK: @llvm.x86.avx10.vminbf16256
629   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
630   return _mm256_maskz_min_pbh(__U, __A, __B);
631 }
632 
633 __m128bh test_mm_min_pbh(__m128bh __A, __m128bh __B) {
634   // CHECK-LABEL: @test_mm_min_pbh
635   // CHECK: @llvm.x86.avx10.vminbf16128(
636   return _mm_min_pbh(__A, __B);
637 }
638 
639 __m128bh test_mm_mask_min_pbh(__m128bh __W, __mmask16 __U, __m128bh __A, __m128bh __B) {
640   // CHECK: @llvm.x86.avx10.vminbf16128
641   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
642   return (__m128bh)_mm_mask_min_pbh(__W, __U, __A, __B);
643 }
644 
645 __m128bh test_mm_maskz_min_pbh(__mmask16 __U, __m128bh __A, __m128bh __B) {
646   // CHECK: @llvm.x86.avx10.vminbf16128
647   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
648   return _mm_maskz_min_pbh(__U, __A, __B);
649 }
650 
651 int test_mm_comieq_sbh(__m128bh __A, __m128bh __B) {
652   // CHECK-LABEL: test_mm_comieq_sbh
653   // CHECK: %{{.}} = call i32 @llvm.x86.avx10.vcomisbf16eq(<8 x bfloat> %{{.}}, <8 x bfloat> %{{.}})
654   return _mm_comieq_sbh(__A, __B);
655 }
656 
657 int test_mm_comilt_sbh(__m128bh __A, __m128bh __B) {
658   // CHECK-LABEL: test_mm_comilt_sbh
659   // CHECK: %{{.}} = call i32 @llvm.x86.avx10.vcomisbf16lt(<8 x bfloat> %{{.}}, <8 x bfloat> %{{.}})
660   return _mm_comilt_sbh(__A, __B);
661 }
662 
663 int test_mm_comile_sbh(__m128bh __A, __m128bh __B) {
664   // CHECK-LABEL: test_mm_comile_sbh
665   // CHECK: %{{.}} = call i32 @llvm.x86.avx10.vcomisbf16le(<8 x bfloat> %{{.}}, <8 x bfloat> %{{.}})
666   return _mm_comile_sbh(__A, __B);
667 }
668 
669 int test_mm_comigt_sbh(__m128bh __A, __m128bh __B) {
670   // CHECK-LABEL: test_mm_comigt_sbh
671   // CHECK: %{{.}} = call i32 @llvm.x86.avx10.vcomisbf16gt(<8 x bfloat> %{{.}}, <8 x bfloat> %{{.}})
672   return _mm_comigt_sbh(__A, __B);
673 }
674 
675 int test_mm_comige_sbh(__m128bh __A, __m128bh __B) {
676   // CHECK-LABEL: test_mm_comige_sbh
677   // CHECK: %{{.}} = call i32 @llvm.x86.avx10.vcomisbf16ge(<8 x bfloat> %{{.}}, <8 x bfloat> %{{.}})
678   return _mm_comige_sbh(__A, __B);
679 }
680 
681 int test_mm_comineq_sbh(__m128bh __A, __m128bh __B) {
682   // CHECK-LABEL: test_mm_comineq_sbh
683   // CHECK: %{{.}} = call i32 @llvm.x86.avx10.vcomisbf16neq(<8 x bfloat> %{{.}}, <8 x bfloat> %{{.}})
684   return _mm_comineq_sbh(__A, __B);
685 }
686 
687 __mmask16 test_mm256_cmp_pbh_mask_eq_oq(__m256bh a, __m256bh b) {
688   // CHECK-LABEL: @test_mm256_cmp_pbh_mask_eq_oq
689   // CHECK: fcmp oeq <16 x bfloat> %{{.*}}, %{{.*}}
690   return _mm256_cmp_pbh_mask(a, b, _CMP_EQ_OQ);
691 }
692 
693 __mmask16 test_mm256_cmp_pbh_mask_lt_os(__m256bh a, __m256bh b) {
694   // CHECK-LABEL: test_mm256_cmp_pbh_mask_lt_os
695   // CHECK: fcmp olt <16 x bfloat> %{{.*}}, %{{.*}}
696   return _mm256_cmp_pbh_mask(a, b, _CMP_LT_OS);
697 }
698 
699 __mmask16 test_mm256_cmp_pbh_mask_le_os(__m256bh a, __m256bh b) {
700   // CHECK-LABEL: test_mm256_cmp_pbh_mask_le_os
701   // CHECK: fcmp ole <16 x bfloat> %{{.*}}, %{{.*}}
702   return _mm256_cmp_pbh_mask(a, b, _CMP_LE_OS);
703 }
704 
705 __mmask16 test_mm256_cmp_pbh_mask_unord_q(__m256bh a, __m256bh b) {
706   // CHECK-LABEL: test_mm256_cmp_pbh_mask_unord_q
707   // CHECK: fcmp uno <16 x bfloat> %{{.*}}, %{{.*}}
708   return _mm256_cmp_pbh_mask(a, b, _CMP_UNORD_Q);
709 }
710 
711 __mmask16 test_mm256_cmp_pbh_mask_neq_uq(__m256bh a, __m256bh b) {
712   // CHECK-LABEL: test_mm256_cmp_pbh_mask_neq_uq
713   // CHECK: fcmp une <16 x bfloat> %{{.*}}, %{{.*}}
714   return _mm256_cmp_pbh_mask(a, b, _CMP_NEQ_UQ);
715 }
716 
717 __mmask16 test_mm256_cmp_pbh_mask_nlt_us(__m256bh a, __m256bh b) {
718   // CHECK-LABEL: test_mm256_cmp_pbh_mask_nlt_us
719   // CHECK: fcmp uge <16 x bfloat> %{{.*}}, %{{.*}}
720   return _mm256_cmp_pbh_mask(a, b, _CMP_NLT_US);
721 }
722 
723 __mmask16 test_mm256_cmp_pbh_mask_nle_us(__m256bh a, __m256bh b) {
724   // CHECK-LABEL: test_mm256_cmp_pbh_mask_nle_us
725   // CHECK: fcmp ugt <16 x bfloat> %{{.*}}, %{{.*}}
726   return _mm256_cmp_pbh_mask(a, b, _CMP_NLE_US);
727 }
728 
729 __mmask16 test_mm256_cmp_pbh_mask_ord_q(__m256bh a, __m256bh b) {
730   // CHECK-LABEL: test_mm256_cmp_pbh_mask_ord_q
731   // CHECK: fcmp ord <16 x bfloat> %{{.*}}, %{{.*}}
732   return _mm256_cmp_pbh_mask(a, b, _CMP_ORD_Q);
733 }
734 
735 __mmask16 test_mm256_cmp_pbh_mask_eq_uq(__m256bh a, __m256bh b) {
736   // CHECK-LABEL: test_mm256_cmp_pbh_mask_eq_uq
737   // CHECK: fcmp ueq <16 x bfloat> %{{.*}}, %{{.*}}
738   return _mm256_cmp_pbh_mask(a, b, _CMP_EQ_UQ);
739 }
740 
741 __mmask16 test_mm256_cmp_pbh_mask_nge_us(__m256bh a, __m256bh b) {
742   // CHECK-LABEL: test_mm256_cmp_pbh_mask_nge_us
743   // CHECK: fcmp ult <16 x bfloat> %{{.*}}, %{{.*}}
744   return _mm256_cmp_pbh_mask(a, b, _CMP_NGE_US);
745 }
746 
747 __mmask16 test_mm256_cmp_pbh_mask_ngt_us(__m256bh a, __m256bh b) {
748   // CHECK-LABEL: test_mm256_cmp_pbh_mask_ngt_us
749   // CHECK: fcmp ule <16 x bfloat> %{{.*}}, %{{.*}}
750   return _mm256_cmp_pbh_mask(a, b, _CMP_NGT_US);
751 }
752 
753 __mmask16 test_mm256_cmp_pbh_mask_false_oq(__m256bh a, __m256bh b) {
754   // CHECK-LABEL: test_mm256_cmp_pbh_mask_false_oq
755   // CHECK: fcmp false <16 x bfloat> %{{.*}}, %{{.*}}
756   return _mm256_cmp_pbh_mask(a, b, _CMP_FALSE_OQ);
757 }
758 
759 __mmask16 test_mm256_cmp_pbh_mask_neq_oq(__m256bh a, __m256bh b) {
760   // CHECK-LABEL: test_mm256_cmp_pbh_mask_neq_oq
761   // CHECK: fcmp one <16 x bfloat> %{{.*}}, %{{.*}}
762   return _mm256_cmp_pbh_mask(a, b, _CMP_NEQ_OQ);
763 }
764 
765 __mmask16 test_mm256_cmp_pbh_mask_ge_os(__m256bh a, __m256bh b) {
766   // CHECK-LABEL: test_mm256_cmp_pbh_mask_ge_os
767   // CHECK: fcmp oge <16 x bfloat> %{{.*}}, %{{.*}}
768   return _mm256_cmp_pbh_mask(a, b, _CMP_GE_OS);
769 }
770 
771 __mmask16 test_mm256_cmp_pbh_mask_gt_os(__m256bh a, __m256bh b) {
772   // CHECK-LABEL: test_mm256_cmp_pbh_mask_gt_os
773   // CHECK: fcmp ogt <16 x bfloat> %{{.*}}, %{{.*}}
774   return _mm256_cmp_pbh_mask(a, b, _CMP_GT_OS);
775 }
776 
777 __mmask16 test_mm256_cmp_pbh_mask_true_uq(__m256bh a, __m256bh b) {
778   // CHECK-LABEL: test_mm256_cmp_pbh_mask_true_uq
779   // CHECK: fcmp true <16 x bfloat> %{{.*}}, %{{.*}}
780   return _mm256_cmp_pbh_mask(a, b, _CMP_TRUE_UQ);
781 }
782 
783 __mmask16 test_mm256_cmp_pbh_mask_eq_os(__m256bh a, __m256bh b) {
784   // CHECK-LABEL: test_mm256_cmp_pbh_mask_eq_os
785   // CHECK: fcmp oeq <16 x bfloat> %{{.*}}, %{{.*}}
786   return _mm256_cmp_pbh_mask(a, b, _CMP_EQ_OS);
787 }
788 
789 __mmask16 test_mm256_cmp_pbh_mask_lt_oq(__m256bh a, __m256bh b) {
790   // CHECK-LABEL: test_mm256_cmp_pbh_mask_lt_oq
791   // CHECK: fcmp olt <16 x bfloat> %{{.*}}, %{{.*}}
792   return _mm256_cmp_pbh_mask(a, b, _CMP_LT_OQ);
793 }
794 
795 __mmask16 test_mm256_cmp_pbh_mask_le_oq(__m256bh a, __m256bh b) {
796   // CHECK-LABEL: test_mm256_cmp_pbh_mask_le_oq
797   // CHECK: fcmp ole <16 x bfloat> %{{.*}}, %{{.*}}
798   return _mm256_cmp_pbh_mask(a, b, _CMP_LE_OQ);
799 }
800 
801 __mmask16 test_mm256_cmp_pbh_mask_unord_s(__m256bh a, __m256bh b) {
802   // CHECK-LABEL: test_mm256_cmp_pbh_mask_unord_s
803   // CHECK: fcmp uno <16 x bfloat> %{{.*}}, %{{.*}}
804   return _mm256_cmp_pbh_mask(a, b, _CMP_UNORD_S);
805 }
806 
807 __mmask16 test_mm256_cmp_pbh_mask_neq_us(__m256bh a, __m256bh b) {
808   // CHECK-LABEL: test_mm256_cmp_pbh_mask_neq_us
809   // CHECK: fcmp une <16 x bfloat> %{{.*}}, %{{.*}}
810   return _mm256_cmp_pbh_mask(a, b, _CMP_NEQ_US);
811 }
812 
813 __mmask16 test_mm256_cmp_pbh_mask_nlt_uq(__m256bh a, __m256bh b) {
814   // CHECK-LABEL: test_mm256_cmp_pbh_mask_nlt_uq
815   // CHECK: fcmp uge <16 x bfloat> %{{.*}}, %{{.*}}
816   return _mm256_cmp_pbh_mask(a, b, _CMP_NLT_UQ);
817 }
818 
819 __mmask16 test_mm256_cmp_pbh_mask_nle_uq(__m256bh a, __m256bh b) {
820   // CHECK-LABEL: test_mm256_cmp_pbh_mask_nle_uq
821   // CHECK: fcmp ugt <16 x bfloat> %{{.*}}, %{{.*}}
822   return _mm256_cmp_pbh_mask(a, b, _CMP_NLE_UQ);
823 }
824 
825 __mmask16 test_mm256_cmp_pbh_mask_ord_s(__m256bh a, __m256bh b) {
826   // CHECK-LABEL: test_mm256_cmp_pbh_mask_ord_s
827   // CHECK: fcmp ord <16 x bfloat> %{{.*}}, %{{.*}}
828   return _mm256_cmp_pbh_mask(a, b, _CMP_ORD_S);
829 }
830 
831 __mmask16 test_mm256_cmp_pbh_mask_eq_us(__m256bh a, __m256bh b) {
832   // CHECK-LABEL: test_mm256_cmp_pbh_mask_eq_us
833   // CHECK: fcmp ueq <16 x bfloat> %{{.*}}, %{{.*}}
834   return _mm256_cmp_pbh_mask(a, b, _CMP_EQ_US);
835 }
836 
837 __mmask16 test_mm256_cmp_pbh_mask_nge_uq(__m256bh a, __m256bh b) {
838   // CHECK-LABEL: test_mm256_cmp_pbh_mask_nge_uq
839   // CHECK: fcmp ult <16 x bfloat> %{{.*}}, %{{.*}}
840   return _mm256_cmp_pbh_mask(a, b, _CMP_NGE_UQ);
841 }
842 
843 __mmask16 test_mm256_cmp_pbh_mask_ngt_uq(__m256bh a, __m256bh b) {
844   // CHECK-LABEL: test_mm256_cmp_pbh_mask_ngt_uq
845   // CHECK: fcmp ule <16 x bfloat> %{{.*}}, %{{.*}}
846   return _mm256_cmp_pbh_mask(a, b, _CMP_NGT_UQ);
847 }
848 
849 __mmask16 test_mm256_cmp_pbh_mask_false_os(__m256bh a, __m256bh b) {
850   // CHECK-LABEL: test_mm256_cmp_pbh_mask_false_os
851   // CHECK: fcmp false <16 x bfloat> %{{.*}}, %{{.*}}
852   return _mm256_cmp_pbh_mask(a, b, _CMP_FALSE_OS);
853 }
854 
855 __mmask16 test_mm256_cmp_pbh_mask_neq_os(__m256bh a, __m256bh b) {
856   // CHECK-LABEL: test_mm256_cmp_pbh_mask_neq_os
857   // CHECK: fcmp one <16 x bfloat> %{{.*}}, %{{.*}}
858   return _mm256_cmp_pbh_mask(a, b, _CMP_NEQ_OS);
859 }
860 
861 __mmask16 test_mm256_cmp_pbh_mask_ge_oq(__m256bh a, __m256bh b) {
862   // CHECK-LABEL: test_mm256_cmp_pbh_mask_ge_oq
863   // CHECK: fcmp oge <16 x bfloat> %{{.*}}, %{{.*}}
864   return _mm256_cmp_pbh_mask(a, b, _CMP_GE_OQ);
865 }
866 
867 __mmask16 test_mm256_cmp_pbh_mask_gt_oq(__m256bh a, __m256bh b) {
868   // CHECK-LABEL: test_mm256_cmp_pbh_mask_gt_oq
869   // CHECK: fcmp ogt <16 x bfloat> %{{.*}}, %{{.*}}
870   return _mm256_cmp_pbh_mask(a, b, _CMP_GT_OQ);
871 }
872 
873 __mmask16 test_mm256_cmp_pbh_mask_true_us(__m256bh a, __m256bh b) {
874   // CHECK-LABEL: test_mm256_cmp_pbh_mask_true_us
875   // CHECK: fcmp true <16 x bfloat> %{{.*}}, %{{.*}}
876   return _mm256_cmp_pbh_mask(a, b, _CMP_TRUE_US);
877 }
878 
879 __mmask16 test_mm256_mask_cmp_pbh_mask_eq_oq(__mmask16 m, __m256bh a, __m256bh b) {
880   // CHECK-LABEL: @test_mm256_mask_cmp_pbh_mask_eq_oq
881   // CHECK: fcmp oeq <16 x bfloat> %{{.*}}, %{{.*}}
882   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
883   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_EQ_OQ);
884 }
885 
886 __mmask16 test_mm256_mask_cmp_pbh_mask_lt_os(__mmask16 m, __m256bh a, __m256bh b) {
887   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_lt_os
888   // CHECK: fcmp olt <16 x bfloat> %{{.*}}, %{{.*}}
889   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
890   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_LT_OS);
891 }
892 
893 __mmask16 test_mm256_mask_cmp_pbh_mask_le_os(__mmask16 m, __m256bh a, __m256bh b) {
894   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_le_os
895   // CHECK: fcmp ole <16 x bfloat> %{{.*}}, %{{.*}}
896   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
897   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_LE_OS);
898 }
899 
900 __mmask16 test_mm256_mask_cmp_pbh_mask_unord_q(__mmask16 m, __m256bh a, __m256bh b) {
901   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_unord_q
902   // CHECK: fcmp uno <16 x bfloat> %{{.*}}, %{{.*}}
903   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
904   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_UNORD_Q);
905 }
906 
907 __mmask16 test_mm256_mask_cmp_pbh_mask_neq_uq(__mmask16 m, __m256bh a, __m256bh b) {
908   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_neq_uq
909   // CHECK: fcmp une <16 x bfloat> %{{.*}}, %{{.*}}
910   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
911   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_NEQ_UQ);
912 }
913 
914 __mmask16 test_mm256_mask_cmp_pbh_mask_nlt_us(__mmask16 m, __m256bh a, __m256bh b) {
915   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_nlt_us
916   // CHECK: fcmp uge <16 x bfloat> %{{.*}}, %{{.*}}
917   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
918   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_NLT_US);
919 }
920 
921 __mmask16 test_mm256_mask_cmp_pbh_mask_nle_us(__mmask16 m, __m256bh a, __m256bh b) {
922   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_nle_us
923   // CHECK: fcmp ugt <16 x bfloat> %{{.*}}, %{{.*}}
924   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
925   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_NLE_US);
926 }
927 
928 __mmask16 test_mm256_mask_cmp_pbh_mask_ord_q(__mmask16 m, __m256bh a, __m256bh b) {
929   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_ord_q
930   // CHECK: fcmp ord <16 x bfloat> %{{.*}}, %{{.*}}
931   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
932   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_ORD_Q);
933 }
934 
935 __mmask16 test_mm256_mask_cmp_pbh_mask_eq_uq(__mmask16 m, __m256bh a, __m256bh b) {
936   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_eq_uq
937   // CHECK: fcmp ueq <16 x bfloat> %{{.*}}, %{{.*}}
938   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
939   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_EQ_UQ);
940 }
941 
942 __mmask16 test_mm256_mask_cmp_pbh_mask_nge_us(__mmask16 m, __m256bh a, __m256bh b) {
943   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_nge_us
944   // CHECK: fcmp ult <16 x bfloat> %{{.*}}, %{{.*}}
945   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
946   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_NGE_US);
947 }
948 
949 __mmask16 test_mm256_mask_cmp_pbh_mask_ngt_us(__mmask16 m, __m256bh a, __m256bh b) {
950   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_ngt_us
951   // CHECK: fcmp ule <16 x bfloat> %{{.*}}, %{{.*}}
952   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
953   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_NGT_US);
954 }
955 
956 __mmask16 test_mm256_mask_cmp_pbh_mask_false_oq(__mmask16 m, __m256bh a, __m256bh b) {
957   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_false_oq
958   // CHECK: fcmp false <16 x bfloat> %{{.*}}, %{{.*}}
959   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
960   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_FALSE_OQ);
961 }
962 
963 __mmask16 test_mm256_mask_cmp_pbh_mask_neq_oq(__mmask16 m, __m256bh a, __m256bh b) {
964   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_neq_oq
965   // CHECK: fcmp one <16 x bfloat> %{{.*}}, %{{.*}}
966   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
967   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_NEQ_OQ);
968 }
969 
970 __mmask16 test_mm256_mask_cmp_pbh_mask_ge_os(__mmask16 m, __m256bh a, __m256bh b) {
971   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_ge_os
972   // CHECK: fcmp oge <16 x bfloat> %{{.*}}, %{{.*}}
973   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
974   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_GE_OS);
975 }
976 
977 __mmask16 test_mm256_mask_cmp_pbh_mask_gt_os(__mmask16 m, __m256bh a, __m256bh b) {
978   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_gt_os
979   // CHECK: fcmp ogt <16 x bfloat> %{{.*}}, %{{.*}}
980   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
981   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_GT_OS);
982 }
983 
984 __mmask16 test_mm256_mask_cmp_pbh_mask_true_uq(__mmask16 m, __m256bh a, __m256bh b) {
985   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_true_uq
986   // CHECK: fcmp true <16 x bfloat> %{{.*}}, %{{.*}}
987   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
988   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_TRUE_UQ);
989 }
990 
991 __mmask16 test_mm256_mask_cmp_pbh_mask_eq_os(__mmask16 m, __m256bh a, __m256bh b) {
992   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_eq_os
993   // CHECK: fcmp oeq <16 x bfloat> %{{.*}}, %{{.*}}
994   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
995   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_EQ_OS);
996 }
997 
998 __mmask16 test_mm256_mask_cmp_pbh_mask_lt_oq(__mmask16 m, __m256bh a, __m256bh b) {
999   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_lt_oq
1000   // CHECK: fcmp olt <16 x bfloat> %{{.*}}, %{{.*}}
1001   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
1002   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_LT_OQ);
1003 }
1004 
1005 __mmask16 test_mm256_mask_cmp_pbh_mask_le_oq(__mmask16 m, __m256bh a, __m256bh b) {
1006   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_le_oq
1007   // CHECK: fcmp ole <16 x bfloat> %{{.*}}, %{{.*}}
1008   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
1009   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_LE_OQ);
1010 }
1011 
1012 __mmask16 test_mm256_mask_cmp_pbh_mask_unord_s(__mmask16 m, __m256bh a, __m256bh b) {
1013   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_unord_s
1014   // CHECK: fcmp uno <16 x bfloat> %{{.*}}, %{{.*}}
1015   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
1016   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_UNORD_S);
1017 }
1018 
1019 __mmask16 test_mm256_mask_cmp_pbh_mask_neq_us(__mmask16 m, __m256bh a, __m256bh b) {
1020   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_neq_us
1021   // CHECK: fcmp une <16 x bfloat> %{{.*}}, %{{.*}}
1022   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
1023   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_NEQ_US);
1024 }
1025 
1026 __mmask16 test_mm256_mask_cmp_pbh_mask_nlt_uq(__mmask16 m, __m256bh a, __m256bh b) {
1027   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_nlt_uq
1028   // CHECK: fcmp uge <16 x bfloat> %{{.*}}, %{{.*}}
1029   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
1030   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_NLT_UQ);
1031 }
1032 
1033 __mmask16 test_mm256_mask_cmp_pbh_mask_nle_uq(__mmask16 m, __m256bh a, __m256bh b) {
1034   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_nle_uq
1035   // CHECK: fcmp ugt <16 x bfloat> %{{.*}}, %{{.*}}
1036   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
1037   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_NLE_UQ);
1038 }
1039 
1040 __mmask16 test_mm256_mask_cmp_pbh_mask_ord_s(__mmask16 m, __m256bh a, __m256bh b) {
1041   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_ord_s
1042   // CHECK: fcmp ord <16 x bfloat> %{{.*}}, %{{.*}}
1043   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
1044   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_ORD_S);
1045 }
1046 
1047 __mmask16 test_mm256_mask_cmp_pbh_mask_eq_us(__mmask16 m, __m256bh a, __m256bh b) {
1048   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_eq_us
1049   // CHECK: fcmp ueq <16 x bfloat> %{{.*}}, %{{.*}}
1050   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
1051   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_EQ_US);
1052 }
1053 
1054 __mmask16 test_mm256_mask_cmp_pbh_mask_nge_uq(__mmask16 m, __m256bh a, __m256bh b) {
1055   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_nge_uq
1056   // CHECK: fcmp ult <16 x bfloat> %{{.*}}, %{{.*}}
1057   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
1058   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_NGE_UQ);
1059 }
1060 
1061 __mmask16 test_mm256_mask_cmp_pbh_mask_ngt_uq(__mmask16 m, __m256bh a, __m256bh b) {
1062   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_ngt_uq
1063   // CHECK: fcmp ule <16 x bfloat> %{{.*}}, %{{.*}}
1064   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
1065   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_NGT_UQ);
1066 }
1067 
1068 __mmask16 test_mm256_mask_cmp_pbh_mask_false_os(__mmask16 m, __m256bh a, __m256bh b) {
1069   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_false_os
1070   // CHECK: fcmp false <16 x bfloat> %{{.*}}, %{{.*}}
1071   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
1072   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_FALSE_OS);
1073 }
1074 
1075 __mmask16 test_mm256_mask_cmp_pbh_mask_neq_os(__mmask16 m, __m256bh a, __m256bh b) {
1076   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_neq_os
1077   // CHECK: fcmp one <16 x bfloat> %{{.*}}, %{{.*}}
1078   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
1079   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_NEQ_OS);
1080 }
1081 
1082 __mmask16 test_mm256_mask_cmp_pbh_mask_ge_oq(__mmask16 m, __m256bh a, __m256bh b) {
1083   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_ge_oq
1084   // CHECK: fcmp oge <16 x bfloat> %{{.*}}, %{{.*}}
1085   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
1086   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_GE_OQ);
1087 }
1088 
1089 __mmask16 test_mm256_mask_cmp_pbh_mask_gt_oq(__mmask16 m, __m256bh a, __m256bh b) {
1090   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_gt_oq
1091   // CHECK: fcmp ogt <16 x bfloat> %{{.*}}, %{{.*}}
1092   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
1093   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_GT_OQ);
1094 }
1095 
1096 __mmask16 test_mm256_mask_cmp_pbh_mask_true_us(__mmask16 m, __m256bh a, __m256bh b) {
1097   // CHECK-LABEL: test_mm256_mask_cmp_pbh_mask_true_us
1098   // CHECK: fcmp true <16 x bfloat> %{{.*}}, %{{.*}}
1099   // CHECK: and <16 x i1> %{{.*}}, %{{.*}}
1100   return _mm256_mask_cmp_pbh_mask(m, a, b, _CMP_TRUE_US);
1101 }
1102 
1103 __mmask8 test_mm_cmp_pbh_mask_eq_oq(__m128bh a, __m128bh b) {
1104   // CHECK-LABEL: @test_mm_cmp_pbh_mask_eq_oq
1105   // CHECK: fcmp oeq <8 x bfloat> %{{.*}}, %{{.*}}
1106   return _mm_cmp_pbh_mask(a, b, _CMP_EQ_OQ);
1107 }
1108 
1109 __mmask8 test_mm_cmp_pbh_mask_lt_os(__m128bh a, __m128bh b) {
1110   // CHECK-LABEL: test_mm_cmp_pbh_mask_lt_os
1111   // CHECK: fcmp olt <8 x bfloat> %{{.*}}, %{{.*}}
1112   return _mm_cmp_pbh_mask(a, b, _CMP_LT_OS);
1113 }
1114 
1115 __mmask8 test_mm_cmp_pbh_mask_le_os(__m128bh a, __m128bh b) {
1116   // CHECK-LABEL: test_mm_cmp_pbh_mask_le_os
1117   // CHECK: fcmp ole <8 x bfloat> %{{.*}}, %{{.*}}
1118   return _mm_cmp_pbh_mask(a, b, _CMP_LE_OS);
1119 }
1120 
1121 __mmask8 test_mm_cmp_pbh_mask_unord_q(__m128bh a, __m128bh b) {
1122   // CHECK-LABEL: test_mm_cmp_pbh_mask_unord_q
1123   // CHECK: fcmp uno <8 x bfloat> %{{.*}}, %{{.*}}
1124   return _mm_cmp_pbh_mask(a, b, _CMP_UNORD_Q);
1125 }
1126 
1127 __mmask8 test_mm_cmp_pbh_mask_neq_uq(__m128bh a, __m128bh b) {
1128   // CHECK-LABEL: test_mm_cmp_pbh_mask_neq_uq
1129   // CHECK: fcmp une <8 x bfloat> %{{.*}}, %{{.*}}
1130   return _mm_cmp_pbh_mask(a, b, _CMP_NEQ_UQ);
1131 }
1132 
1133 __mmask8 test_mm_cmp_pbh_mask_nlt_us(__m128bh a, __m128bh b) {
1134   // CHECK-LABEL: test_mm_cmp_pbh_mask_nlt_us
1135   // CHECK: fcmp uge <8 x bfloat> %{{.*}}, %{{.*}}
1136   return _mm_cmp_pbh_mask(a, b, _CMP_NLT_US);
1137 }
1138 
1139 __mmask8 test_mm_cmp_pbh_mask_nle_us(__m128bh a, __m128bh b) {
1140   // CHECK-LABEL: test_mm_cmp_pbh_mask_nle_us
1141   // CHECK: fcmp ugt <8 x bfloat> %{{.*}}, %{{.*}}
1142   return _mm_cmp_pbh_mask(a, b, _CMP_NLE_US);
1143 }
1144 
1145 __mmask8 test_mm_cmp_pbh_mask_ord_q(__m128bh a, __m128bh b) {
1146   // CHECK-LABEL: test_mm_cmp_pbh_mask_ord_q
1147   // CHECK: fcmp ord <8 x bfloat> %{{.*}}, %{{.*}}
1148   return _mm_cmp_pbh_mask(a, b, _CMP_ORD_Q);
1149 }
1150 
1151 __mmask8 test_mm_cmp_pbh_mask_eq_uq(__m128bh a, __m128bh b) {
1152   // CHECK-LABEL: test_mm_cmp_pbh_mask_eq_uq
1153   // CHECK: fcmp ueq <8 x bfloat> %{{.*}}, %{{.*}}
1154   return _mm_cmp_pbh_mask(a, b, _CMP_EQ_UQ);
1155 }
1156 
1157 __mmask8 test_mm_cmp_pbh_mask_nge_us(__m128bh a, __m128bh b) {
1158   // CHECK-LABEL: test_mm_cmp_pbh_mask_nge_us
1159   // CHECK: fcmp ult <8 x bfloat> %{{.*}}, %{{.*}}
1160   return _mm_cmp_pbh_mask(a, b, _CMP_NGE_US);
1161 }
1162 
1163 __mmask8 test_mm_cmp_pbh_mask_ngt_us(__m128bh a, __m128bh b) {
1164   // CHECK-LABEL: test_mm_cmp_pbh_mask_ngt_us
1165   // CHECK: fcmp ule <8 x bfloat> %{{.*}}, %{{.*}}
1166   return _mm_cmp_pbh_mask(a, b, _CMP_NGT_US);
1167 }
1168 
1169 __mmask8 test_mm_cmp_pbh_mask_false_oq(__m128bh a, __m128bh b) {
1170   // CHECK-LABEL: test_mm_cmp_pbh_mask_false_oq
1171   // CHECK: fcmp false <8 x bfloat> %{{.*}}, %{{.*}}
1172   return _mm_cmp_pbh_mask(a, b, _CMP_FALSE_OQ);
1173 }
1174 
1175 __mmask8 test_mm_cmp_pbh_mask_neq_oq(__m128bh a, __m128bh b) {
1176   // CHECK-LABEL: test_mm_cmp_pbh_mask_neq_oq
1177   // CHECK: fcmp one <8 x bfloat> %{{.*}}, %{{.*}}
1178   return _mm_cmp_pbh_mask(a, b, _CMP_NEQ_OQ);
1179 }
1180 
1181 __mmask8 test_mm_cmp_pbh_mask_ge_os(__m128bh a, __m128bh b) {
1182   // CHECK-LABEL: test_mm_cmp_pbh_mask_ge_os
1183   // CHECK: fcmp oge <8 x bfloat> %{{.*}}, %{{.*}}
1184   return _mm_cmp_pbh_mask(a, b, _CMP_GE_OS);
1185 }
1186 
1187 __mmask8 test_mm_cmp_pbh_mask_gt_os(__m128bh a, __m128bh b) {
1188   // CHECK-LABEL: test_mm_cmp_pbh_mask_gt_os
1189   // CHECK: fcmp ogt <8 x bfloat> %{{.*}}, %{{.*}}
1190   return _mm_cmp_pbh_mask(a, b, _CMP_GT_OS);
1191 }
1192 
1193 __mmask8 test_mm_cmp_pbh_mask_true_uq(__m128bh a, __m128bh b) {
1194   // CHECK-LABEL: test_mm_cmp_pbh_mask_true_uq
1195   // CHECK: fcmp true <8 x bfloat> %{{.*}}, %{{.*}}
1196   return _mm_cmp_pbh_mask(a, b, _CMP_TRUE_UQ);
1197 }
1198 
1199 __mmask8 test_mm_cmp_pbh_mask_eq_os(__m128bh a, __m128bh b) {
1200   // CHECK-LABEL: test_mm_cmp_pbh_mask_eq_os
1201   // CHECK: fcmp oeq <8 x bfloat> %{{.*}}, %{{.*}}
1202   return _mm_cmp_pbh_mask(a, b, _CMP_EQ_OS);
1203 }
1204 
1205 __mmask8 test_mm_cmp_pbh_mask_lt_oq(__m128bh a, __m128bh b) {
1206   // CHECK-LABEL: test_mm_cmp_pbh_mask_lt_oq
1207   // CHECK: fcmp olt <8 x bfloat> %{{.*}}, %{{.*}}
1208   return _mm_cmp_pbh_mask(a, b, _CMP_LT_OQ);
1209 }
1210 
1211 __mmask8 test_mm_cmp_pbh_mask_le_oq(__m128bh a, __m128bh b) {
1212   // CHECK-LABEL: test_mm_cmp_pbh_mask_le_oq
1213   // CHECK: fcmp ole <8 x bfloat> %{{.*}}, %{{.*}}
1214   return _mm_cmp_pbh_mask(a, b, _CMP_LE_OQ);
1215 }
1216 
1217 __mmask8 test_mm_cmp_pbh_mask_unord_s(__m128bh a, __m128bh b) {
1218   // CHECK-LABEL: test_mm_cmp_pbh_mask_unord_s
1219   // CHECK: fcmp uno <8 x bfloat> %{{.*}}, %{{.*}}
1220   return _mm_cmp_pbh_mask(a, b, _CMP_UNORD_S);
1221 }
1222 
1223 __mmask8 test_mm_cmp_pbh_mask_neq_us(__m128bh a, __m128bh b) {
1224   // CHECK-LABEL: test_mm_cmp_pbh_mask_neq_us
1225   // CHECK: fcmp une <8 x bfloat> %{{.*}}, %{{.*}}
1226   return _mm_cmp_pbh_mask(a, b, _CMP_NEQ_US);
1227 }
1228 
1229 __mmask8 test_mm_cmp_pbh_mask_nlt_uq(__m128bh a, __m128bh b) {
1230   // CHECK-LABEL: test_mm_cmp_pbh_mask_nlt_uq
1231   // CHECK: fcmp uge <8 x bfloat> %{{.*}}, %{{.*}}
1232   return _mm_cmp_pbh_mask(a, b, _CMP_NLT_UQ);
1233 }
1234 
1235 __mmask8 test_mm_cmp_pbh_mask_nle_uq(__m128bh a, __m128bh b) {
1236   // CHECK-LABEL: test_mm_cmp_pbh_mask_nle_uq
1237   // CHECK: fcmp ugt <8 x bfloat> %{{.*}}, %{{.*}}
1238   return _mm_cmp_pbh_mask(a, b, _CMP_NLE_UQ);
1239 }
1240 
1241 __mmask8 test_mm_cmp_pbh_mask_ord_s(__m128bh a, __m128bh b) {
1242   // CHECK-LABEL: test_mm_cmp_pbh_mask_ord_s
1243   // CHECK: fcmp ord <8 x bfloat> %{{.*}}, %{{.*}}
1244   return _mm_cmp_pbh_mask(a, b, _CMP_ORD_S);
1245 }
1246 
1247 __mmask8 test_mm_cmp_pbh_mask_eq_us(__m128bh a, __m128bh b) {
1248   // CHECK-LABEL: test_mm_cmp_pbh_mask_eq_us
1249   // CHECK: fcmp ueq <8 x bfloat> %{{.*}}, %{{.*}}
1250   return _mm_cmp_pbh_mask(a, b, _CMP_EQ_US);
1251 }
1252 
1253 __mmask8 test_mm_cmp_pbh_mask_nge_uq(__m128bh a, __m128bh b) {
1254   // CHECK-LABEL: test_mm_cmp_pbh_mask_nge_uq
1255   // CHECK: fcmp ult <8 x bfloat> %{{.*}}, %{{.*}}
1256   return _mm_cmp_pbh_mask(a, b, _CMP_NGE_UQ);
1257 }
1258 
1259 __mmask8 test_mm_cmp_pbh_mask_ngt_uq(__m128bh a, __m128bh b) {
1260   // CHECK-LABEL: test_mm_cmp_pbh_mask_ngt_uq
1261   // CHECK: fcmp ule <8 x bfloat> %{{.*}}, %{{.*}}
1262   return _mm_cmp_pbh_mask(a, b, _CMP_NGT_UQ);
1263 }
1264 
1265 __mmask8 test_mm_cmp_pbh_mask_false_os(__m128bh a, __m128bh b) {
1266   // CHECK-LABEL: test_mm_cmp_pbh_mask_false_os
1267   // CHECK: fcmp false <8 x bfloat> %{{.*}}, %{{.*}}
1268   return _mm_cmp_pbh_mask(a, b, _CMP_FALSE_OS);
1269 }
1270 
1271 __mmask8 test_mm_cmp_pbh_mask_neq_os(__m128bh a, __m128bh b) {
1272   // CHECK-LABEL: test_mm_cmp_pbh_mask_neq_os
1273   // CHECK: fcmp one <8 x bfloat> %{{.*}}, %{{.*}}
1274   return _mm_cmp_pbh_mask(a, b, _CMP_NEQ_OS);
1275 }
1276 
1277 __mmask8 test_mm_cmp_pbh_mask_ge_oq(__m128bh a, __m128bh b) {
1278   // CHECK-LABEL: test_mm_cmp_pbh_mask_ge_oq
1279   // CHECK: fcmp oge <8 x bfloat> %{{.*}}, %{{.*}}
1280   return _mm_cmp_pbh_mask(a, b, _CMP_GE_OQ);
1281 }
1282 
1283 __mmask8 test_mm_cmp_pbh_mask_gt_oq(__m128bh a, __m128bh b) {
1284   // CHECK-LABEL: test_mm_cmp_pbh_mask_gt_oq
1285   // CHECK: fcmp ogt <8 x bfloat> %{{.*}}, %{{.*}}
1286   return _mm_cmp_pbh_mask(a, b, _CMP_GT_OQ);
1287 }
1288 
1289 __mmask8 test_mm_cmp_pbh_mask_true_us(__m128bh a, __m128bh b) {
1290   // CHECK-LABEL: test_mm_cmp_pbh_mask_true_us
1291   // CHECK: fcmp true <8 x bfloat> %{{.*}}, %{{.*}}
1292   return _mm_cmp_pbh_mask(a, b, _CMP_TRUE_US);
1293 }
1294 
1295 __mmask8 test_mm_mask_cmp_pbh_mask_eq_oq(__mmask8 m, __m128bh a, __m128bh b) {
1296   // CHECK-LABEL: @test_mm_mask_cmp_pbh_mask_eq_oq
1297   // CHECK: fcmp oeq <8 x bfloat> %{{.*}}, %{{.*}}
1298   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1299   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_EQ_OQ);
1300 }
1301 
1302 __mmask8 test_mm_mask_cmp_pbh_mask_lt_os(__mmask8 m, __m128bh a, __m128bh b) {
1303   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_lt_os
1304   // CHECK: fcmp olt <8 x bfloat> %{{.*}}, %{{.*}}
1305   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1306   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_LT_OS);
1307 }
1308 
1309 __mmask8 test_mm_mask_cmp_pbh_mask_le_os(__mmask8 m, __m128bh a, __m128bh b) {
1310   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_le_os
1311   // CHECK: fcmp ole <8 x bfloat> %{{.*}}, %{{.*}}
1312   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1313   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_LE_OS);
1314 }
1315 
1316 __mmask8 test_mm_mask_cmp_pbh_mask_unord_q(__mmask8 m, __m128bh a, __m128bh b) {
1317   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_unord_q
1318   // CHECK: fcmp uno <8 x bfloat> %{{.*}}, %{{.*}}
1319   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1320   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_UNORD_Q);
1321 }
1322 
1323 __mmask8 test_mm_mask_cmp_pbh_mask_neq_uq(__mmask8 m, __m128bh a, __m128bh b) {
1324   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_neq_uq
1325   // CHECK: fcmp une <8 x bfloat> %{{.*}}, %{{.*}}
1326   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1327   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_NEQ_UQ);
1328 }
1329 
1330 __mmask8 test_mm_mask_cmp_pbh_mask_nlt_us(__mmask8 m, __m128bh a, __m128bh b) {
1331   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_nlt_us
1332   // CHECK: fcmp uge <8 x bfloat> %{{.*}}, %{{.*}}
1333   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1334   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_NLT_US);
1335 }
1336 
1337 __mmask8 test_mm_mask_cmp_pbh_mask_nle_us(__mmask8 m, __m128bh a, __m128bh b) {
1338   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_nle_us
1339   // CHECK: fcmp ugt <8 x bfloat> %{{.*}}, %{{.*}}
1340   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1341   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_NLE_US);
1342 }
1343 
1344 __mmask8 test_mm_mask_cmp_pbh_mask_ord_q(__mmask8 m, __m128bh a, __m128bh b) {
1345   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_ord_q
1346   // CHECK: fcmp ord <8 x bfloat> %{{.*}}, %{{.*}}
1347   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1348   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_ORD_Q);
1349 }
1350 
1351 __mmask8 test_mm_mask_cmp_pbh_mask_eq_uq(__mmask8 m, __m128bh a, __m128bh b) {
1352   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_eq_uq
1353   // CHECK: fcmp ueq <8 x bfloat> %{{.*}}, %{{.*}}
1354   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1355   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_EQ_UQ);
1356 }
1357 
1358 __mmask8 test_mm_mask_cmp_pbh_mask_nge_us(__mmask8 m, __m128bh a, __m128bh b) {
1359   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_nge_us
1360   // CHECK: fcmp ult <8 x bfloat> %{{.*}}, %{{.*}}
1361   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1362   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_NGE_US);
1363 }
1364 
1365 __mmask8 test_mm_mask_cmp_pbh_mask_ngt_us(__mmask8 m, __m128bh a, __m128bh b) {
1366   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_ngt_us
1367   // CHECK: fcmp ule <8 x bfloat> %{{.*}}, %{{.*}}
1368   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1369   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_NGT_US);
1370 }
1371 
1372 __mmask8 test_mm_mask_cmp_pbh_mask_false_oq(__mmask8 m, __m128bh a, __m128bh b) {
1373   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_false_oq
1374   // CHECK: fcmp false <8 x bfloat> %{{.*}}, %{{.*}}
1375   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1376   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_FALSE_OQ);
1377 }
1378 
1379 __mmask8 test_mm_mask_cmp_pbh_mask_neq_oq(__mmask8 m, __m128bh a, __m128bh b) {
1380   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_neq_oq
1381   // CHECK: fcmp one <8 x bfloat> %{{.*}}, %{{.*}}
1382   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1383   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_NEQ_OQ);
1384 }
1385 
1386 __mmask8 test_mm_mask_cmp_pbh_mask_ge_os(__mmask8 m, __m128bh a, __m128bh b) {
1387   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_ge_os
1388   // CHECK: fcmp oge <8 x bfloat> %{{.*}}, %{{.*}}
1389   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1390   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_GE_OS);
1391 }
1392 
1393 __mmask8 test_mm_mask_cmp_pbh_mask_gt_os(__mmask8 m, __m128bh a, __m128bh b) {
1394   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_gt_os
1395   // CHECK: fcmp ogt <8 x bfloat> %{{.*}}, %{{.*}}
1396   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1397   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_GT_OS);
1398 }
1399 
1400 __mmask8 test_mm_mask_cmp_pbh_mask_true_uq(__mmask8 m, __m128bh a, __m128bh b) {
1401   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_true_uq
1402   // CHECK: fcmp true <8 x bfloat> %{{.*}}, %{{.*}}
1403   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1404   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_TRUE_UQ);
1405 }
1406 
1407 __mmask8 test_mm_mask_cmp_pbh_mask_eq_os(__mmask8 m, __m128bh a, __m128bh b) {
1408   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_eq_os
1409   // CHECK: fcmp oeq <8 x bfloat> %{{.*}}, %{{.*}}
1410   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1411   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_EQ_OS);
1412 }
1413 
1414 __mmask8 test_mm_mask_cmp_pbh_mask_lt_oq(__mmask8 m, __m128bh a, __m128bh b) {
1415   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_lt_oq
1416   // CHECK: fcmp olt <8 x bfloat> %{{.*}}, %{{.*}}
1417   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1418   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_LT_OQ);
1419 }
1420 
1421 __mmask8 test_mm_mask_cmp_pbh_mask_le_oq(__mmask8 m, __m128bh a, __m128bh b) {
1422   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_le_oq
1423   // CHECK: fcmp ole <8 x bfloat> %{{.*}}, %{{.*}}
1424   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1425   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_LE_OQ);
1426 }
1427 
1428 __mmask8 test_mm_mask_cmp_pbh_mask_unord_s(__mmask8 m, __m128bh a, __m128bh b) {
1429   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_unord_s
1430   // CHECK: fcmp uno <8 x bfloat> %{{.*}}, %{{.*}}
1431   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1432   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_UNORD_S);
1433 }
1434 
1435 __mmask8 test_mm_mask_cmp_pbh_mask_neq_us(__mmask8 m, __m128bh a, __m128bh b) {
1436   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_neq_us
1437   // CHECK: fcmp une <8 x bfloat> %{{.*}}, %{{.*}}
1438   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1439   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_NEQ_US);
1440 }
1441 
1442 __mmask8 test_mm_mask_cmp_pbh_mask_nlt_uq(__mmask8 m, __m128bh a, __m128bh b) {
1443   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_nlt_uq
1444   // CHECK: fcmp uge <8 x bfloat> %{{.*}}, %{{.*}}
1445   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1446   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_NLT_UQ);
1447 }
1448 
1449 __mmask8 test_mm_mask_cmp_pbh_mask_nle_uq(__mmask8 m, __m128bh a, __m128bh b) {
1450   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_nle_uq
1451   // CHECK: fcmp ugt <8 x bfloat> %{{.*}}, %{{.*}}
1452   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1453   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_NLE_UQ);
1454 }
1455 
1456 __mmask8 test_mm_mask_cmp_pbh_mask_ord_s(__mmask8 m, __m128bh a, __m128bh b) {
1457   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_ord_s
1458   // CHECK: fcmp ord <8 x bfloat> %{{.*}}, %{{.*}}
1459   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1460   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_ORD_S);
1461 }
1462 
1463 __mmask8 test_mm_mask_cmp_pbh_mask_eq_us(__mmask8 m, __m128bh a, __m128bh b) {
1464   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_eq_us
1465   // CHECK: fcmp ueq <8 x bfloat> %{{.*}}, %{{.*}}
1466   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1467   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_EQ_US);
1468 }
1469 
1470 __mmask8 test_mm_mask_cmp_pbh_mask_nge_uq(__mmask8 m, __m128bh a, __m128bh b) {
1471   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_nge_uq
1472   // CHECK: fcmp ult <8 x bfloat> %{{.*}}, %{{.*}}
1473   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1474   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_NGE_UQ);
1475 }
1476 
1477 __mmask8 test_mm_mask_cmp_pbh_mask_ngt_uq(__mmask8 m, __m128bh a, __m128bh b) {
1478   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_ngt_uq
1479   // CHECK: fcmp ule <8 x bfloat> %{{.*}}, %{{.*}}
1480   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1481   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_NGT_UQ);
1482 }
1483 
1484 __mmask8 test_mm_mask_cmp_pbh_mask_false_os(__mmask8 m, __m128bh a, __m128bh b) {
1485   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_false_os
1486   // CHECK: fcmp false <8 x bfloat> %{{.*}}, %{{.*}}
1487   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1488   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_FALSE_OS);
1489 }
1490 
1491 __mmask8 test_mm_mask_cmp_pbh_mask_neq_os(__mmask8 m, __m128bh a, __m128bh b) {
1492   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_neq_os
1493   // CHECK: fcmp one <8 x bfloat> %{{.*}}, %{{.*}}
1494   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1495   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_NEQ_OS);
1496 }
1497 
1498 __mmask8 test_mm_mask_cmp_pbh_mask_ge_oq(__mmask8 m, __m128bh a, __m128bh b) {
1499   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_ge_oq
1500   // CHECK: fcmp oge <8 x bfloat> %{{.*}}, %{{.*}}
1501   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1502   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_GE_OQ);
1503 }
1504 
1505 __mmask8 test_mm_mask_cmp_pbh_mask_gt_oq(__mmask8 m, __m128bh a, __m128bh b) {
1506   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_gt_oq
1507   // CHECK: fcmp ogt <8 x bfloat> %{{.*}}, %{{.*}}
1508   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1509   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_GT_OQ);
1510 }
1511 
1512 __mmask8 test_mm_mask_cmp_pbh_mask_true_us(__mmask8 m, __m128bh a, __m128bh b) {
1513   // CHECK-LABEL: test_mm_mask_cmp_pbh_mask_true_us
1514   // CHECK: fcmp true <8 x bfloat> %{{.*}}, %{{.*}}
1515   // CHECK: and <8 x i1> %{{.*}}, %{{.*}}
1516   return _mm_mask_cmp_pbh_mask(m, a, b, _CMP_TRUE_US);
1517 }
1518 
1519 
1520 __mmask16 test_mm256_mask_fpclass_pbh_mask(__mmask16 __U, __m256bh __A) {
1521   // CHECK-LABEL: @test_mm256_mask_fpclass_pbh_mask
1522   // CHECK: @llvm.x86.avx10.fpclass.bf16.256
1523   return _mm256_mask_fpclass_pbh_mask(__U, __A, 4);
1524 }
1525 
1526 __mmask16 test_mm256_fpclass_pbh_mask(__m256bh __A) {
1527   // CHECK-LABEL: @test_mm256_fpclass_pbh_mask
1528   // CHECK: @llvm.x86.avx10.fpclass.bf16.256
1529   return _mm256_fpclass_pbh_mask(__A, 4);
1530 }
1531 
1532 __mmask8 test_mm_mask_fpclass_pbh_mask(__mmask8 __U, __m128bh __A) {
1533   // CHECK-LABEL: @test_mm_mask_fpclass_pbh_mask
1534   // CHECK: @llvm.x86.avx10.fpclass.bf16.128
1535   return _mm_mask_fpclass_pbh_mask(__U, __A, 4);
1536 }
1537 
1538 __mmask8 test_mm_fpclass_pbh_mask(__m128bh __A) {
1539   // CHECK-LABEL: @test_mm_fpclass_pbh_mask
1540   // CHECK: @llvm.x86.avx10.fpclass.bf16.128
1541   return _mm_fpclass_pbh_mask(__A, 4);
1542 }
1543 
1544 __m256bh test_mm256_scalef_pbh(__m256bh __A, __m256bh __B) {
1545   // CHECK-LABEL: @test_mm256_scalef_pbh
1546   // CHECK: @llvm.x86.avx10.mask.scalef.bf16.256
1547   return _mm256_scalef_pbh(__A, __B);
1548 }
1549 
1550 __m256bh test_mm256_mask_scalef_pbh(__m256bh __W, __mmask16 __U, __m256bh __A, __m256bh __B) {
1551   // CHECK-LABEL: @test_mm256_mask_scalef_pbh
1552   // CHECK: @llvm.x86.avx10.mask.scalef.bf16.256
1553   return _mm256_mask_scalef_pbh(__W, __U, __A, __B);
1554 }
1555 
1556 __m256bh test_mm256_maskz_scalef_pbh(__mmask16 __U, __m256bh __A, __m256bh __B) {
1557   // CHECK-LABEL: @test_mm256_maskz_scalef_pbh
1558   // CHECK: @llvm.x86.avx10.mask.scalef.bf16.256
1559   return _mm256_maskz_scalef_pbh(__U, __A, __B);
1560 }
1561 
1562 __m256bh test_mm256_rcp_pbh(__m256bh __A) {
1563   // CHECK-LABEL: @test_mm256_rcp_pbh
1564   // CHECK: @llvm.x86.avx10.mask.rcp.bf16.256
1565   return _mm256_rcp_pbh(__A);
1566 }
1567 
1568 __m256bh test_mm256_mask_rcp_pbh(__m256bh __W, __mmask16 __U, __m256bh __A) {
1569   // CHECK-LABEL: @test_mm256_mask_rcp_pbh
1570   // CHECK: @llvm.x86.avx10.mask.rcp.bf16.256
1571   return (__m256bh)_mm256_mask_rcp_pbh(__W, __U, __A);
1572 }
1573 
1574 __m256bh test_mm256_maskz_rcp_pbh(__mmask16 __U, __m256bh __A) {
1575   // CHECK-LABEL: @test_mm256_maskz_rcp_pbh
1576   // CHECK: @llvm.x86.avx10.mask.rcp.bf16.256
1577   return _mm256_maskz_rcp_pbh(__U, __A);
1578 }
1579 
1580 __m256bh test_mm256_getexp_pbh(__m256bh __A) {
1581   // CHECK-LABEL: @test_mm256_getexp_pbh
1582   // CHECK: @llvm.x86.avx10.mask.getexp.bf16.256
1583   return _mm256_getexp_pbh(__A);
1584 }
1585 
1586 __m256bh test_mm256_mask_getexp_pbh(__m256bh __W, __mmask16 __U, __m256bh __A) {
1587   // CHECK-LABEL: @test_mm256_mask_getexp_pbh
1588   // CHECK: @llvm.x86.avx10.mask.getexp.bf16.256
1589   return _mm256_mask_getexp_pbh(__W, __U, __A);
1590 }
1591 
1592 __m256bh test_mm256_maskz_getexp_pbh(__mmask16 __U, __m256bh __A) {
1593   // CHECK-LABEL: @test_mm256_maskz_getexp_pbh
1594   // CHECK: @llvm.x86.avx10.mask.getexp.bf16.256
1595   return _mm256_maskz_getexp_pbh(__U, __A);
1596 }
1597 
1598 __m256bh test_mm256_rsqrt_pbh(__m256bh __A) {
1599   // CHECK-LABEL: @test_mm256_rsqrt_pbh
1600   // CHECK: @llvm.x86.avx10.mask.rsqrt.bf16.256
1601   return _mm256_rsqrt_pbh(__A);
1602 }
1603 
1604 __m256bh test_mm256_mask_rsqrt_pbh(__m256bh __W, __mmask16 __U, __m256bh __A) {
1605   // CHECK-LABEL: @test_mm256_mask_rsqrt_pbh
1606   // CHECK: @llvm.x86.avx10.mask.rsqrt.bf16.256
1607   return (__m256bh)_mm256_mask_rsqrt_pbh(__W, __U, __A);
1608 }
1609 
1610 __m256bh test_mm256_maskz_rsqrt_pbh(__mmask16 __U, __m256bh __A) {
1611   // CHECK-LABEL: @test_mm256_maskz_rsqrt_pbh
1612   // CHECK: @llvm.x86.avx10.mask.rsqrt.bf16.256
1613   return _mm256_maskz_rsqrt_pbh(__U, __A);
1614 }
1615 
1616 __m256bh test_mm256_reduce_pbh(__m256bh __A) {
1617   // CHECK-LABEL: @test_mm256_reduce_pbh
1618   // CHECK: @llvm.x86.avx10.mask.reduce.bf16.256
1619   return _mm256_reduce_pbh(__A, 3);
1620 }
1621 
1622 __m256bh test_mm256_mask_reduce_pbh(__m256bh __W, __mmask16 __U, __m256bh __A) {
1623   // CHECK-LABEL: @test_mm256_mask_reduce_pbh
1624   // CHECK: @llvm.x86.avx10.mask.reduce.bf16.256
1625   return _mm256_mask_reduce_pbh(__W, __U, __A, 1);
1626 }
1627 
1628 __m256bh test_mm256_maskz_reduce_pbh(__mmask16 __U, __m256bh __A) {
1629   // CHECK-LABEL: @test_mm256_maskz_reduce_pbh
1630   // CHECK: @llvm.x86.avx10.mask.reduce.bf16.256
1631   return _mm256_maskz_reduce_pbh(__U, __A, 1);
1632 }
1633 
1634 __m256bh test_mm256_roundscale_pbh(__m256bh __A) {
1635   // CHECK-LABEL: @test_mm256_roundscale_pbh
1636   // CHECK: @llvm.x86.avx10.mask.rndscale.bf16.256
1637   return _mm256_roundscale_pbh(__A, 3);
1638 }
1639 
1640 __m256bh test_mm256_mask_roundscale_pbh(__m256bh __W, __mmask16 __U, __m256bh __A) {
1641   // CHECK-LABEL: @test_mm256_mask_roundscale_pbh
1642   // CHECK: @llvm.x86.avx10.mask.rndscale.bf16.256
1643   return _mm256_mask_roundscale_pbh(__W, __U, __A, 1);
1644 }
1645 
1646 __m256bh test_mm256_maskz_roundscale_pbh(__mmask16 __U, __m256bh __A) {
1647   // CHECK-LABEL: @test_mm256_maskz_roundscale_pbh
1648   // CHECK: @llvm.x86.avx10.mask.rndscale.bf16.256
1649   return _mm256_maskz_roundscale_pbh(__U, __A, 1 );
1650 }
1651 
1652 __m256bh test_mm256_getmant_pbh(__m256bh __A) {
1653   // CHECK-LABEL: @test_mm256_getmant_pbh
1654   // CHECK: @llvm.x86.avx10.mask.getmant.bf16.256
1655   return _mm256_getmant_pbh(__A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan);
1656 }
1657 
1658 __m256bh test_mm256_mask_getmant_pbh(__m256bh __W, __mmask16 __U, __m256bh __A) {
1659   // CHECK-LABEL: @test_mm256_mask_getmant_pbh
1660   // CHECK: @llvm.x86.avx10.mask.getmant.bf16.256
1661   return _mm256_mask_getmant_pbh(__W, __U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan);
1662 }
1663 
1664 __m256bh test_mm256_maskz_getmant_pbh(__mmask16 __U, __m256bh __A) {
1665   // CHECK-LABEL: @test_mm256_maskz_getmant_pbh
1666   // CHECK: @llvm.x86.avx10.mask.getmant.bf16.256
1667   return _mm256_maskz_getmant_pbh(__U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan);
1668 }
1669 
1670 __m256bh test_mm256_sqrt_pbh(__m256bh __A) {
1671   // CHECK-LABEL: @test_mm256_sqrt_pbh
1672   // CHECK: call <16 x bfloat> @llvm.sqrt.v16bf16(<16 x bfloat> %{{.*}})
1673   return _mm256_sqrt_pbh(__A);
1674 }
1675 
1676 __m256bh test_mm256_mask_sqrt_pbh(__m256bh __W, __mmask16 __U, __m256bh __A) {
1677   // CHECK-LABEL: @test_mm256_mask_sqrt_pbh
1678   // CHECK: @llvm.sqrt.v16bf16
1679   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
1680   return (__m256bh)_mm256_mask_sqrt_pbh(__W, __U, __A);
1681 }
1682 
1683 __m256bh test_mm256_maskz_sqrt_pbh(__mmask16 __U, __m256bh __A) {
1684   // CHECK-LABEL: @test_mm256_maskz_sqrt_pbh
1685   // CHECK: @llvm.sqrt.v16bf16
1686   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
1687   return _mm256_maskz_sqrt_pbh(__U, __A);
1688 }
1689 
1690 __m128bh test_mm_scalef_pbh(__m128bh __A, __m128bh __B) {
1691   // CHECK-LABEL: @test_mm_scalef_pbh
1692   // CHECK: @llvm.x86.avx10.mask.scalef.bf16.128
1693   return _mm_scalef_pbh(__A, __B);
1694 }
1695 
1696 __m128bh test_mm_mask_scalef_pbh(__m128bh __W, __mmask8 __U, __m128bh __A, __m128bh __B) {
1697   // CHECK-LABEL: @test_mm_mask_scalef_pbh
1698   // CHECK: @llvm.x86.avx10.mask.scalef.bf16.128
1699   return _mm_mask_scalef_pbh(__W, __U, __A, __B);
1700 }
1701 
1702 __m128bh test_mm_maskz_scalef_pbh(__mmask8 __U, __m128bh __A, __m128bh __B) {
1703   // CHECK-LABEL: @test_mm_maskz_scalef_pbh
1704   // CHECK: @llvm.x86.avx10.mask.scalef.bf16.128
1705   return _mm_maskz_scalef_pbh(__U, __A, __B);
1706 }
1707 
1708 __m128bh test_mm_rcp_pbh(__m128bh __A) {
1709   // CHECK-LABEL: @test_mm_rcp_pbh
1710   // CHECK: @llvm.x86.avx10.mask.rcp.bf16.128
1711   return _mm_rcp_pbh(__A);
1712 }
1713 
1714 __m128bh test_mm_mask_rcp_pbh(__m128bh __W, __mmask8 __U, __m128bh __A) {
1715   // CHECK-LABEL: @test_mm_mask_rcp_pbh
1716   // CHECK: @llvm.x86.avx10.mask.rcp.bf16.128
1717   return (__m128bh)_mm_mask_rcp_pbh(__W, __U, __A);
1718 }
1719 
1720 __m128bh test_mm_maskz_rcp_pbh(__mmask8 __U, __m128bh __A) {
1721   // CHECK-LABEL: @test_mm_maskz_rcp_pbh
1722   // CHECK: @llvm.x86.avx10.mask.rcp.bf16.128
1723   return _mm_maskz_rcp_pbh(__U, __A);
1724 }
1725 
1726 __m128bh test_mm_getexp_pbh(__m128bh __A) {
1727   // CHECK-LABEL: @test_mm_getexp_pbh
1728   // CHECK: @llvm.x86.avx10.mask.getexp.bf16.128
1729   return _mm_getexp_pbh(__A);
1730 }
1731 
1732 __m128bh test_mm_mask_getexp_pbh(__m128bh __W, __mmask8 __U, __m128bh __A) {
1733   // CHECK-LABEL: @test_mm_mask_getexp_pbh
1734   // CHECK: @llvm.x86.avx10.mask.getexp.bf16.128
1735   return _mm_mask_getexp_pbh(__W, __U, __A);
1736 }
1737 
1738 __m128bh test_mm_maskz_getexp_pbh(__mmask8 __U, __m128bh __A) {
1739   // CHECK-LABEL: @test_mm_maskz_getexp_pbh
1740   // CHECK: @llvm.x86.avx10.mask.getexp.bf16.128
1741   return _mm_maskz_getexp_pbh(__U, __A);
1742 }
1743 
1744 __m128bh test_mm_rsqrt_pbh(__m128bh __A) {
1745   // CHECK-LABEL: @test_mm_rsqrt_pbh
1746   // CHECK: @llvm.x86.avx10.mask.rsqrt.bf16.128
1747   return _mm_rsqrt_pbh(__A);
1748 }
1749 
1750 __m128bh test_mm_mask_rsqrt_pbh(__m128bh __W, __mmask8 __U, __m128bh __A) {
1751   // CHECK-LABEL: @test_mm_mask_rsqrt_pbh
1752   // CHECK: @llvm.x86.avx10.mask.rsqrt.bf16.128
1753   return (__m128bh)_mm_mask_rsqrt_pbh(__W, __U, __A);
1754 }
1755 
1756 __m128bh test_mm_maskz_rsqrt_pbh(__mmask8 __U, __m128bh __A) {
1757   // CHECK-LABEL: @test_mm_maskz_rsqrt_pbh
1758   // CHECK: @llvm.x86.avx10.mask.rsqrt.bf16.128
1759   return _mm_maskz_rsqrt_pbh(__U, __A);
1760 }
1761 
1762 __m128bh test_mm_reduce_pbh(__m128bh __A) {
1763   // CHECK-LABEL: @test_mm_reduce_pbh
1764   // CHECK: @llvm.x86.avx10.mask.reduce.bf16.128
1765   return _mm_reduce_pbh(__A, 3);
1766 }
1767 
1768 __m128bh test_mm_mask_reduce_pbh(__m128bh __W, __mmask8 __U, __m128bh __A) {
1769   // CHECK-LABEL: @test_mm_mask_reduce_pbh
1770   // CHECK: @llvm.x86.avx10.mask.reduce.bf16.128
1771   return _mm_mask_reduce_pbh(__W, __U, __A, 1);
1772 }
1773 
1774 __m128bh test_mm_maskz_reduce_pbh(__mmask8 __U, __m128bh __A) {
1775   // CHECK-LABEL: @test_mm_maskz_reduce_pbh
1776   // CHECK: @llvm.x86.avx10.mask.reduce.bf16.128
1777   return _mm_maskz_reduce_pbh(__U, __A, 1);
1778 }
1779 
1780 __m128bh test_mm_roundscale_pbh(__m128bh __A) {
1781   // CHECK-LABEL: @test_mm_roundscale_pbh
1782   // CHECK: @llvm.x86.avx10.mask.rndscale.bf16.128
1783   return _mm_roundscale_pbh(__A, 3);
1784 }
1785 
1786 __m128bh test_mm_mask_roundscale_pbh(__m128bh __W, __mmask8 __U, __m128bh __A) {
1787   // CHECK-LABEL: @test_mm_mask_roundscale_pbh
1788   // CHECK: @llvm.x86.avx10.mask.rndscale.bf16.128
1789   return _mm_mask_roundscale_pbh(__W, __U, __A, 1);
1790 }
1791 
1792 __m128bh test_mm_maskz_roundscale_pbh(__mmask8 __U, __m128bh __A) {
1793   // CHECK-LABEL: @test_mm_maskz_roundscale_pbh
1794   // CHECK: @llvm.x86.avx10.mask.rndscale.bf16.128
1795   return _mm_maskz_roundscale_pbh(__U, __A, 1 );
1796 }
1797 
1798 __m128bh test_mm_getmant_pbh(__m128bh __A) {
1799   // CHECK-LABEL: @test_mm_getmant_pbh
1800   // CHECK: @llvm.x86.avx10.mask.getmant.bf16.128
1801   return _mm_getmant_pbh(__A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan);
1802 }
1803 
1804 __m128bh test_mm_mask_getmant_pbh(__m128bh __W, __mmask8 __U, __m128bh __A) {
1805   // CHECK-LABEL: @test_mm_mask_getmant_pbh
1806   // CHECK: @llvm.x86.avx10.mask.getmant.bf16.128
1807   return _mm_mask_getmant_pbh(__W, __U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan);
1808 }
1809 
1810 __m128bh test_mm_maskz_getmant_pbh(__mmask8 __U, __m128bh __A) {
1811   // CHECK-LABEL: @test_mm_maskz_getmant_pbh
1812   // CHECK: @llvm.x86.avx10.mask.getmant.bf16.128
1813   return _mm_maskz_getmant_pbh(__U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan);
1814 }
1815 
1816 __m128bh test_mm_sqrt_pbh(__m128bh __A) {
1817   // CHECK-LABEL: @test_mm_sqrt_pbh
1818   // CHECK: call <8 x bfloat> @llvm.sqrt.v8bf16(<8 x bfloat> {{.*}})
1819   return _mm_sqrt_pbh(__A);
1820 }
1821 
1822 __m128bh test_mm_mask_sqrt_pbh(__m128bh __W, __mmask8 __U, __m128bh __A) {
1823   // CHECK-LABEL: @test_mm_mask_sqrt_pbh
1824   // CHECK: call <8 x bfloat> @llvm.sqrt.v8bf16(<8 x bfloat> {{.*}})
1825   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
1826   return (__m128bh)_mm_mask_sqrt_pbh(__W, __U, __A);
1827 }
1828 
1829 __m128bh test_mm_maskz_sqrt_pbh(__mmask8 __U, __m128bh __A) {
1830   // CHECK-LABEL: @test_mm_maskz_sqrt_pbh
1831   // CHECK: call <8 x bfloat> @llvm.sqrt.v8bf16(<8 x bfloat> {{.*}})
1832   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
1833   return _mm_maskz_sqrt_pbh(__U, __A);
1834 }
1835 
1836 __m256bh test_mm256_fmadd_pbh(__m256bh __A, __m256bh __B, __m256bh __C) {
1837   // CHECK-LABEL: @test_mm256_fmadd_pbh
1838   // CHECK: call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}})
1839   return _mm256_fmadd_pbh(__A, __B, __C);
1840 }
1841 
1842 __m256bh test_mm256_mask_fmadd_pbh(__m256bh __A, __mmask16 __U, __m256bh __B, __m256bh __C) {
1843   // CHECK-LABEL: @test_mm256_mask_fmadd_pbh
1844   // CHECK: call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}})
1845   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
1846   return _mm256_mask_fmadd_pbh(__A, __U, __B, __C);
1847 }
1848 
1849 __m256bh test_mm256_mask3_fmadd_pbh(__m256bh __A, __m256bh __B, __m256bh __C, __mmask16 __U) {
1850   // CHECK-LABEL: @test_mm256_mask3_fmadd_pbh
1851   // CHECK: call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}})
1852   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
1853   return _mm256_mask3_fmadd_pbh(__A, __B, __C, __U);
1854 }
1855 
1856 __m256bh test_mm256_maskz_fmadd_pbh(__mmask16 __U, __m256bh __A, __m256bh __B, __m256bh __C) {
1857   // CHECK-LABEL: @test_mm256_maskz_fmadd_pbh
1858   // CHECK: call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}})
1859   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
1860   return _mm256_maskz_fmadd_pbh(__U, __A, __B, __C);
1861 }
1862 
1863 __m256bh test_mm256_fmsub_pbh(__m256bh __A, __m256bh __B, __m256bh __C) {
1864   // CHECK-LABEL: @test_mm256_fmsub_pbh
1865   // CHECK: fneg
1866   // CHECK: call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}})
1867   return _mm256_fmsub_pbh(__A, __B, __C);
1868 }
1869 
1870 __m256bh test_mm256_mask_fmsub_pbh(__m256bh __A, __mmask16 __U, __m256bh __B, __m256bh __C) {
1871   // CHECK-LABEL: @test_mm256_mask_fmsub_pbh
1872   // CHECK: fneg
1873   // CHECK: call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}})
1874   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
1875   return _mm256_mask_fmsub_pbh(__A, __U, __B, __C);
1876 }
1877 
1878 __m256bh test_mm256_mask3_fmsub_pbh(__m256bh __A, __m256bh __B, __m256bh __C, __mmask16 __U) {
1879   // CHECK-LABEL: @test_mm256_mask3_fmsub_pbh
1880   // CHECK: fneg
1881   // CHECK: call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}})
1882   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
1883   return _mm256_mask3_fmsub_pbh(__A, __B, __C, __U);
1884 }
1885 
1886 __m256bh test_mm256_maskz_fmsub_pbh(__mmask16 __U, __m256bh __A, __m256bh __B, __m256bh __C) {
1887   // CHECK-LABEL: @test_mm256_maskz_fmsub_pbh
1888   // CHECK: fneg
1889   // CHECK: call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}})
1890   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
1891   return _mm256_maskz_fmsub_pbh(__U, __A, __B, __C);
1892 }
1893 
1894 __m256bh test_mm256_fnmadd_pbh(__m256bh __A, __m256bh __B, __m256bh __C) {
1895   // CHECK-LABEL: @test_mm256_fnmadd_pbh
1896   // CHECK: fneg
1897   // CHECK: call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}})
1898   return _mm256_fnmadd_pbh(__A, __B, __C);
1899 }
1900 
1901 __m256bh test_mm256_mask_fnmadd_pbh(__m256bh __A, __mmask16 __U, __m256bh __B, __m256bh __C) {
1902   // CHECK-LABEL: @test_mm256_mask_fnmadd_pbh
1903   // CHECK: fneg
1904   // CHECK: call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}})
1905   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
1906   return _mm256_mask_fnmadd_pbh(__A, __U, __B, __C);
1907 }
1908 
1909 __m256bh test_mm256_mask3_fnmadd_pbh(__m256bh __A, __m256bh __B, __m256bh __C, __mmask16 __U) {
1910   // CHECK-LABEL: @test_mm256_mask3_fnmadd_pbh
1911   // CHECK: fneg
1912   // CHECK: call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}})
1913   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
1914   return _mm256_mask3_fnmadd_pbh(__A, __B, __C, __U);
1915 }
1916 
1917 __m256bh test_mm256_maskz_fnmadd_pbh(__mmask16 __U, __m256bh __A, __m256bh __B, __m256bh __C) {
1918   // CHECK-LABEL: @test_mm256_maskz_fnmadd_pbh
1919   // CHECK: fneg
1920   // CHECK: call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}})
1921   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
1922   return _mm256_maskz_fnmadd_pbh(__U, __A, __B, __C);
1923 }
1924 
1925 __m256bh test_mm256_fnmsub_pbh(__m256bh __A, __m256bh __B, __m256bh __C) {
1926   // CHECK-LABEL: @test_mm256_fnmsub_pbh
1927   // CHECK: fneg
1928   // CHECK: fneg
1929   // CHECK: call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}})
1930   return _mm256_fnmsub_pbh(__A, __B, __C);
1931 }
1932 
1933 __m256bh test_mm256_mask_fnmsub_pbh(__m256bh __A, __mmask16 __U, __m256bh __B, __m256bh __C) {
1934   // CHECK-LABEL: @test_mm256_mask_fnmsub_pbh
1935   // CHECK: fneg
1936   // CHECK: fneg
1937   // CHECK: call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}})
1938   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
1939   return _mm256_mask_fnmsub_pbh(__A, __U, __B, __C);
1940 }
1941 
1942 __m256bh test_mm256_mask3_fnmsub_pbh(__m256bh __A, __m256bh __B, __m256bh __C, __mmask16 __U) {
1943   // CHECK-LABEL: @test_mm256_mask3_fnmsub_pbh
1944   // CHECK: fneg
1945   // CHECK: fneg
1946   // CHECK: call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}})
1947   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
1948   return _mm256_mask3_fnmsub_pbh(__A, __B, __C, __U);
1949 }
1950 
1951 __m256bh test_mm256_maskz_fnmsub_pbh(__mmask16 __U, __m256bh __A, __m256bh __B, __m256bh __C) {
1952   // CHECK-LABEL: @test_mm256_maskz_fnmsub_pbh
1953   // CHECK: fneg
1954   // CHECK: fneg
1955   // CHECK: call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}})
1956   // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
1957   return _mm256_maskz_fnmsub_pbh(__U, __A, __B, __C);
1958 }
1959 
1960 __m128bh test_mm_fmadd_pbh(__m128bh __A, __m128bh __B, __m128bh __C) {
1961   // CHECK-LABEL: @test_mm_fmadd_pbh
1962   // CHECK: call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}})
1963   return _mm_fmadd_pbh(__A, __B, __C);
1964 }
1965 
1966 __m128bh test_mm_mask_fmadd_pbh(__m128bh __A, __mmask8 __U, __m128bh __B, __m128bh __C) {
1967   // CHECK-LABEL: @test_mm_mask_fmadd_pbh
1968   // CHECK: call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}})
1969   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
1970   return _mm_mask_fmadd_pbh(__A, __U, __B, __C);
1971 }
1972 
1973 __m128bh test_mm_mask3_fmadd_pbh(__m128bh __A, __m128bh __B, __m128bh __C, __mmask8 __U) {
1974   // CHECK-LABEL: @test_mm_mask3_fmadd_pbh
1975   // CHECK: call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}})
1976   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
1977   return _mm_mask3_fmadd_pbh(__A, __B, __C, __U);
1978 }
1979 
1980 __m128bh test_mm_maskz_fmadd_pbh(__mmask8 __U, __m128bh __A, __m128bh __B, __m128bh __C) {
1981   // CHECK-LABEL: @test_mm_maskz_fmadd_pbh
1982   // CHECK: call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}})
1983   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
1984   return _mm_maskz_fmadd_pbh(__U, __A, __B, __C);
1985 }
1986 
1987 __m128bh test_mm_fmsub_pbh(__m128bh __A, __m128bh __B, __m128bh __C) {
1988   // CHECK-LABEL: @test_mm_fmsub_pbh
1989   // CHECK: fneg
1990   // CHECK: call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}})
1991   return _mm_fmsub_pbh(__A, __B, __C);
1992 }
1993 
1994 __m128bh test_mm_mask_fmsub_pbh(__m128bh __A, __mmask8 __U, __m128bh __B, __m128bh __C) {
1995   // CHECK-LABEL: @test_mm_mask_fmsub_pbh
1996   // CHECK: fneg
1997   // CHECK: call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}})
1998   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
1999   return _mm_mask_fmsub_pbh(__A, __U, __B, __C);
2000 }
2001 
2002 __m128bh test_mm_mask3_fmsub_pbh(__m128bh __A, __m128bh __B, __m128bh __C, __mmask8 __U) {
2003   // CHECK-LABEL: @test_mm_mask3_fmsub_pbh
2004   // CHECK: fneg
2005   // CHECK: call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}})
2006   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
2007   return _mm_mask3_fmsub_pbh(__A, __B, __C, __U);
2008 }
2009 
2010 __m128bh test_mm_maskz_fmsub_pbh(__mmask8 __U, __m128bh __A, __m128bh __B, __m128bh __C) {
2011   // CHECK-LABEL: @test_mm_maskz_fmsub_pbh
2012   // CHECK: fneg
2013   // CHECK: call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}})
2014   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
2015   return _mm_maskz_fmsub_pbh(__U, __A, __B, __C);
2016 }
2017 
2018 __m128bh test_mm_fnmadd_pbh(__m128bh __A, __m128bh __B, __m128bh __C) {
2019   // CHECK-LABEL: @test_mm_fnmadd_pbh
2020   // CHECK: fneg
2021   // CHECK: call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}})
2022   return _mm_fnmadd_pbh(__A, __B, __C);
2023 }
2024 
2025 __m128bh test_mm_mask_fnmadd_pbh(__m128bh __A, __mmask8 __U, __m128bh __B, __m128bh __C) {
2026   // CHECK-LABEL: @test_mm_mask_fnmadd_pbh
2027   // CHECK: fneg
2028   // CHECK: call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}})
2029   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
2030   return _mm_mask_fnmadd_pbh(__A, __U, __B, __C);
2031 }
2032 
2033 __m128bh test_mm_mask3_fnmadd_pbh(__m128bh __A, __m128bh __B, __m128bh __C, __mmask8 __U) {
2034   // CHECK-LABEL: @test_mm_mask3_fnmadd_pbh
2035   // CHECK: fneg
2036   // CHECK: call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}})
2037   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
2038   return _mm_mask3_fnmadd_pbh(__A, __B, __C, __U);
2039 }
2040 
2041 __m128bh test_mm_maskz_fnmadd_pbh(__mmask8 __U, __m128bh __A, __m128bh __B, __m128bh __C) {
2042   // CHECK-LABEL: @test_mm_maskz_fnmadd_pbh
2043   // CHECK: fneg
2044   // CHECK: call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}})
2045   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
2046   return _mm_maskz_fnmadd_pbh(__U, __A, __B, __C);
2047 }
2048 
2049 __m128bh test_mm_fnmsub_pbh(__m128bh __A, __m128bh __B, __m128bh __C) {
2050   // CHECK-LABEL: @test_mm_fnmsub_pbh
2051   // CHECK: fneg
2052   // CHECK: fneg
2053   // CHECK: call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}})
2054   return _mm_fnmsub_pbh(__A, __B, __C);
2055 }
2056 
2057 __m128bh test_mm_mask_fnmsub_pbh(__m128bh __A, __mmask8 __U, __m128bh __B, __m128bh __C) {
2058   // CHECK-LABEL: @test_mm_mask_fnmsub_pbh
2059   // CHECK: fneg
2060   // CHECK: fneg
2061   // CHECK: call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}})
2062   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
2063   return _mm_mask_fnmsub_pbh(__A, __U, __B, __C);
2064 }
2065 
2066 __m128bh test_mm_mask3_fnmsub_pbh(__m128bh __A, __m128bh __B, __m128bh __C, __mmask8 __U) {
2067   // CHECK-LABEL: @test_mm_mask3_fnmsub_pbh
2068   // CHECK: fneg
2069   // CHECK: fneg
2070   // CHECK: call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}})
2071   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
2072   return _mm_mask3_fnmsub_pbh(__A, __B, __C, __U);
2073 }
2074 
2075 __m128bh test_mm_maskz_fnmsub_pbh(__mmask8 __U, __m128bh __A, __m128bh __B, __m128bh __C) {
2076   // CHECK-LABEL: @test_mm_maskz_fnmsub_pbh
2077   // CHECK: fneg
2078   // CHECK: fneg
2079   // CHECK: call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}})
2080   // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
2081   return _mm_maskz_fnmsub_pbh(__U, __A, __B, __C);
2082 }
2083