1086 lines · c
1// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64 -target-feature +avx10.2 -emit-llvm -o - -Wno-invalid-feature-combination -Wall -Werror | FileCheck %s2// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=i386 -target-feature +avx10.2 -emit-llvm -o - -Wno-invalid-feature-combination -Wall -Werror | FileCheck %s3 4#include <immintrin.h>5 6__m512bh test_mm512_setzero_pbh() {7 // CHECK-LABEL: @test_mm512_setzero_pbh8 // CHECK: zeroinitializer9 return _mm512_setzero_pbh();10}11 12__m512bh test_mm512_undefined_pbh(void) {13 // CHECK-LABEL: @test_mm512_undefined_pbh14 // CHECK: ret <32 x bfloat> zeroinitializer15 return _mm512_undefined_pbh();16}17 18__m512bh test_mm512_set1_pbh(__bf16 h) {19 // CHECK-LABEL: @test_mm512_set1_pbh20 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 021 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 122 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 223 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 324 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 425 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 526 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 627 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 728 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 829 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 930 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1031 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1132 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1233 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1334 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1435 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1536 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1637 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1738 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1839 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1940 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2041 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2142 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2243 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2344 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2445 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2546 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2647 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2748 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2849 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2950 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 3051 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 3152 return _mm512_set1_pbh(h);53}54 55__m512bh test_mm512_set_pbh(__bf16 bf1, __bf16 bf2, __bf16 bf3, __bf16 bf4,56 __bf16 bf5, __bf16 bf6, __bf16 bf7, __bf16 bf8,57 __bf16 bf9, __bf16 bf10, __bf16 bf11, __bf16 bf12,58 __bf16 bf13, __bf16 bf14, __bf16 bf15, __bf16 bf16,59 __bf16 bf17, __bf16 bf18, __bf16 bf19, __bf16 bf20,60 __bf16 bf21, __bf16 bf22, __bf16 bf23, __bf16 bf24,61 __bf16 bf25, __bf16 bf26, __bf16 bf27, __bf16 bf28,62 __bf16 bf29, __bf16 bf30, __bf16 bf31, __bf16 bf32) {63 // CHECK-LABEL: @test_mm512_set_pbh64 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 065 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 166 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 267 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 368 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 469 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 570 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 671 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 772 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 873 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 974 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1075 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1176 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1277 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1378 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1479 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1580 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1681 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1782 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1883 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1984 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2085 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2186 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2287 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2388 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2489 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2590 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2691 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2792 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2893 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2994 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 3095 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 3196 return _mm512_set_pbh(bf1, bf2, bf3, bf4, bf5, bf6, bf7, bf8,97 bf9, bf10, bf11, bf12, bf13, bf14, bf15, bf16,98 bf17, bf18, bf19, bf20, bf21, bf22, bf23, bf24,99 bf25, bf26, bf27, bf28, bf29, bf30, bf31, bf32);100}101 102__m512bh test_mm512_setr_pbh(__bf16 bf1, __bf16 bf2, __bf16 bf3, __bf16 bf4,103 __bf16 bf5, __bf16 bf6, __bf16 bf7, __bf16 bf8,104 __bf16 bf9, __bf16 bf10, __bf16 bf11, __bf16 bf12,105 __bf16 bf13, __bf16 bf14, __bf16 bf15, __bf16 bf16,106 __bf16 bf17, __bf16 bf18, __bf16 bf19, __bf16 bf20,107 __bf16 bf21, __bf16 bf22, __bf16 bf23, __bf16 bf24,108 __bf16 bf25, __bf16 bf26, __bf16 bf27, __bf16 bf28,109 __bf16 bf29, __bf16 bf30, __bf16 bf31, __bf16 bf32) {110 // CHECK-LABEL: @test_mm512_setr_pbh111 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 0112 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 1113 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 2114 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 3115 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 4116 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 5117 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 6118 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 7119 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 8120 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 9121 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 10122 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 11123 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 12124 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 13125 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 14126 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 15127 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 16128 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 17129 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 18130 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 19131 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 20132 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 21133 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 22134 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 23135 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 24136 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 25137 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 26138 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 27139 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 28140 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 29141 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 30142 // CHECK: insertelement <32 x bfloat> {{.*}}, i32 31143 return _mm512_setr_pbh(bf1, bf2, bf3, bf4, bf5, bf6, bf7, bf8,144 bf9, bf10, bf11, bf12, bf13, bf14, bf15, bf16,145 bf17, bf18, bf19, bf20, bf21, bf22, bf23, bf24,146 bf25, bf26, bf27, bf28, bf29, bf30, bf31, bf32);147}148 149__m512 test_mm512_castbf16_ps(__m512bh A) {150 // CHECK-LABEL: test_mm512_castbf16_ps151 // CHECK: bitcast <32 x bfloat> %{{.*}} to <16 x float>152 return _mm512_castbf16_ps(A);153}154 155__m512d test_mm512_castbf16_pd(__m512bh A) {156 // CHECK-LABEL: test_mm512_castbf16_pd157 // CHECK: bitcast <32 x bfloat> %{{.*}} to <8 x double>158 return _mm512_castbf16_pd(A);159}160 161__m512i test_mm512_castbf16_si512(__m512bh A) {162 // CHECK-LABEL: test_mm512_castbf16_si512163 // CHECK: bitcast <32 x bfloat> %{{.*}} to <8 x i64>164 return _mm512_castbf16_si512(A);165}166 167__m512bh test_mm512_castps_pbh(__m512 A) {168 // CHECK-LABEL: test_mm512_castps_pbh169 // CHECK: bitcast <16 x float> %{{.*}} to <32 x bfloat>170 return _mm512_castps_pbh(A);171}172 173__m512bh test_mm512_castpd_pbh(__m512d A) {174 // CHECK-LABEL: test_mm512_castpd_pbh175 // CHECK: bitcast <8 x double> %{{.*}} to <32 x bfloat>176 return _mm512_castpd_pbh(A);177}178 179__m512bh test_mm512_castsi512_pbh(__m512i A) {180 // CHECK-LABEL: test_mm512_castsi512_pbh181 // CHECK: bitcast <8 x i64> %{{.*}} to <32 x bfloat>182 return _mm512_castsi512_pbh(A);183}184 185__m128bh test_mm512_castbf16512_pbh128(__m512bh __a) {186 // CHECK-LABEL: test_mm512_castbf16512_pbh128187 // CHECK: shufflevector <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>188 return _mm512_castbf16512_pbh128(__a);189}190 191__m256bh test_mm512_castbf16512_pbh256(__m512bh __a) {192 // CHECK-LABEL: test_mm512_castbf16512_pbh256193 // CHECK: shufflevector <32 x bfloat> %{{.*}}, <32 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>194 return _mm512_castbf16512_pbh256(__a);195}196 197__m512bh test_mm512_castbf16128_pbh512(__m128bh __a) {198 // CHECK-LABEL: test_mm512_castbf16128_pbh512199 // CHECK: shufflevector <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}, <32 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, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>200 return _mm512_castbf16128_pbh512(__a);201}202 203__m512bh test_mm512_castbf16256_pbh512(__m256bh __a) {204 // CHECK-LABEL: test_mm512_castbf16256_pbh512205 // CHECK: shufflevector <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>206 return _mm512_castbf16256_pbh512(__a);207}208 209__m512bh test_mm512_zextbf16128_pbh512(__m128bh __a) {210 // CHECK-LABEL: test_mm512_zextbf16128_pbh512211 // CHECK: shufflevector <8 x bfloat> %{{.*}}, <8 x bfloat> {{.*}}, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>212 return _mm512_zextbf16128_pbh512(__a);213}214 215__m512bh test_mm512_zextbf16256_pbh512(__m256bh __a) {216 // CHECK-LABEL: test_mm512_zextbf16256_pbh512217 // CHECK: shufflevector <16 x bfloat> %{{.*}}, <16 x bfloat> {{.*}}, <32 x i32>218 return _mm512_zextbf16256_pbh512(__a);219}220 221__m512bh test_mm512_abs_pbh(__m512bh a) {222 // CHECK-LABEL: @test_mm512_abs_pbh223 // CHECK: and <16 x i32>224 return _mm512_abs_pbh(a);225}226 227// VMOVSH228 229__m512bh test_mm512_load_pbh(void *p) {230 // CHECK-LABEL: @test_mm512_load_pbh231 // CHECK: load <32 x bfloat>, ptr %{{.*}}, align 64232 return _mm512_load_pbh(p);233}234 235__m512bh test_mm512_loadu_pbh(void *p) {236 // CHECK-LABEL: @test_mm512_loadu_pbh237 // CHECK: load <32 x bfloat>, ptr {{.*}}, align 1{{$}}238 return _mm512_loadu_pbh(p);239}240 241void test_mm512_store_pbh(void *p, __m512bh a) {242 // CHECK-LABEL: @test_mm512_store_pbh243 // CHECK: store <32 x bfloat> %{{.*}}, ptr %{{.*}}, align 64244 _mm512_store_pbh(p, a);245}246 247void test_mm512_storeu_pbh(void *p, __m512bh a) {248 // CHECK-LABEL: @test_mm512_storeu_pbh249 // CHECK: store <32 x bfloat> %{{.*}}, ptr %{{.*}}, align 1{{$}}250 // CHECK-NEXT: ret void251 _mm512_storeu_pbh(p, a);252}253 254__m512bh test_mm512_mask_blend_pbh(__mmask32 __U, __m512bh __A, __m512bh __W) {255 // CHECK-LABEL: @test_mm512_mask_blend_pbh256 // CHECK: %{{.*}} = bitcast i32 %{{.*}} to <32 x i1>257 // CHECK: %{{.*}} = select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}258 return _mm512_mask_blend_pbh(__U, __A, __W);259}260 261__m512bh test_mm512_permutex2var_pbh(__m512bh __A, __m512i __I, __m512bh __B) {262 // CHECK-LABEL: @test_mm512_permutex2var_pbh263 // CHECK: %{{.*}} = bitcast <32 x bfloat> %{{.*}} to <32 x i16>264 // CHECK: %{{.*}} = bitcast <8 x i64> %{{.*}} to <32 x i16>265 // CHECK: %{{.*}} = bitcast <32 x bfloat> %{{.*}} to <32 x i16>266 // CHECK: %{{.*}} = call <32 x i16> @llvm.x86.avx512.vpermi2var.hi.512(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}})267 // CHECK: %{{.*}} = bitcast <32 x i16> %{{.*}} to <32 x bfloat>268 return _mm512_permutex2var_pbh(__A, __I, __B);269}270 271__m512bh test_mm512_permutexvar_epi16(__m512i __A, __m512bh __B) {272 // CHECK-LABEL: @test_mm512_permutexvar_epi16273 // CHECK: %{{.*}} = bitcast <32 x bfloat> %{{.*}} to <32 x i16>274 // CHECK: %{{.*}} = bitcast <8 x i64> %{{.*}} to <32 x i16>275 // CHECK: %{{.*}} = call <32 x i16> @llvm.x86.avx512.permvar.hi.512(<32 x i16> %{{.*}}, <32 x i16> %{{.*}})276 // CHECK: %{{.*}} = bitcast <32 x i16> %{{.*}} to <32 x bfloat>277 return _mm512_permutexvar_pbh(__A, __B);278}279 280__m512bh test_mm512_add_pbh(__m512bh __A, __m512bh __B) {281 // CHECK-LABEL: @test_mm512_add_pbh282 // CHECK: %{{.*}} = fadd <32 x bfloat> %{{.*}}, %{{.*}}283 return _mm512_add_pbh(__A, __B);284}285 286__m512bh test_mm512_mask_add_pbh(__m512bh __W, __mmask32 __U, __m512bh __A, __m512bh __B) {287 // CHECK: %{{.*}} = fadd <32 x bfloat> %{{.*}}, %{{.*}}288 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}289 return _mm512_mask_add_pbh(__W, __U, __A, __B);290}291 292__m512bh test_mm512_maskz_add_pbh(__mmask32 __U, __m512bh __A, __m512bh __B) {293 // CHECK: %{{.*}} = fadd <32 x bfloat> %{{.*}}, %{{.*}}294 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}295 return _mm512_maskz_add_pbh(__U, __A, __B);296}297 298__m512bh test_mm512_sub_pbh(__m512bh __A, __m512bh __B) {299 // CHECK-LABEL: @test_mm512_sub_pbh300 // CHECK: %{{.*}} = fsub <32 x bfloat> %{{.*}}, %{{.*}}301 return _mm512_sub_pbh(__A, __B);302}303 304__m512bh test_mm512_mask_sub_pbh(__m512bh __W, __mmask32 __U, __m512bh __A, __m512bh __B) {305 // CHECK: %{{.*}} = fsub <32 x bfloat> %{{.*}}, %{{.*}}306 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}307 return _mm512_mask_sub_pbh(__W, __U, __A, __B);308}309 310__m512bh test_mm512_maskz_sub_pbh(__mmask32 __U, __m512bh __A, __m512bh __B) {311 // CHECK: %{{.*}} = fsub <32 x bfloat> %{{.*}}, %{{.*}}312 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}313 return _mm512_maskz_sub_pbh(__U, __A, __B);314}315 316__m512bh test_mm512_mul_pbh(__m512bh __A, __m512bh __B) {317 // CHECK-LABEL: @test_mm512_mul_pbh318 // CHECK: %{{.*}} = fmul <32 x bfloat> %{{.*}}, %{{.*}}319 return _mm512_mul_pbh(__A, __B);320}321 322__m512bh test_mm512_mask_mul_pbh(__m512bh __W, __mmask32 __U, __m512bh __A, __m512bh __B) {323 // CHECK: %{{.*}} = fmul <32 x bfloat> %{{.*}}, %{{.*}}324 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}325 return _mm512_mask_mul_pbh(__W, __U, __A, __B);326}327 328__m512bh test_mm512_maskz_mul_pbh(__mmask32 __U, __m512bh __A, __m512bh __B) {329 // CHECK: %{{.*}} = fmul <32 x bfloat> %{{.*}}, %{{.*}}330 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}331 return _mm512_maskz_mul_pbh(__U, __A, __B);332}333 334__m512bh test_mm512_div_pbh(__m512bh __A, __m512bh __B) {335 // CHECK-LABEL: @test_mm512_div_pbh336 // CHECK: %{{.*}} = fdiv <32 x bfloat> %{{.*}}, %{{.*}}337 return _mm512_div_pbh(__A, __B);338}339 340__m512bh test_mm512_mask_div_pbh(__m512bh __W, __mmask32 __U, __m512bh __A, __m512bh __B) {341 // CHECK: %{{.*}} = fdiv <32 x bfloat> %{{.*}}, %{{.*}}342 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}343 return _mm512_mask_div_pbh(__W, __U, __A, __B);344}345 346__m512bh test_mm512_maskz_div_pbh(__mmask32 __U, __m512bh __A, __m512bh __B) {347 // CHECK: %{{.*}} = fdiv <32 x bfloat> %{{.*}}, %{{.*}}348 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}349 return _mm512_maskz_div_pbh(__U, __A, __B);350}351 352__m512bh test_mm512_max_pbh(__m512bh __A, __m512bh __B) {353 // CHECK-LABEL: @test_mm512_max_pbh354 // CHECK: @llvm.x86.avx10.vmaxbf16512(355 return _mm512_max_pbh(__A, __B);356}357 358__m512bh test_mm512_mask_max_pbh(__m512bh __W, __mmask32 __U, __m512bh __A, __m512bh __B) {359 // CHECK: @llvm.x86.avx10.vmaxbf16512360 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}361 return _mm512_mask_max_pbh(__W, __U, __A, __B);362}363 364__m512bh test_mm512_maskz_max_pbh(__mmask32 __U, __m512bh __A, __m512bh __B) {365 // CHECK: @llvm.x86.avx10.vmaxbf16512366 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}367 return _mm512_maskz_max_pbh(__U, __A, __B);368}369 370__m512bh test_mm512_min_pbh(__m512bh __A, __m512bh __B) {371 // CHECK-LABEL: @test_mm512_min_pbh372 // CHECK: @llvm.x86.avx10.vminbf16512(373 return _mm512_min_pbh(__A, __B);374}375 376__m512bh test_mm512_mask_min_pbh(__m512bh __W, __mmask32 __U, __m512bh __A, __m512bh __B) {377 // CHECK: @llvm.x86.avx10.vminbf16512378 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}379 return _mm512_mask_min_pbh(__W, __U, __A, __B);380}381 382__m512bh test_mm512_maskz_min_pbh(__mmask32 __U, __m512bh __A, __m512bh __B) {383 // CHECK: @llvm.x86.avx10.vminbf16512384 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}385 return _mm512_maskz_min_pbh(__U, __A, __B);386}387 388__mmask32 test_mm512_cmp_pbh_mask_eq_oq(__m512bh a, __m512bh b) {389 // CHECK-LABEL: @test_mm512_cmp_pbh_mask_eq_oq390 // CHECK: fcmp oeq <32 x bfloat> %{{.*}}, %{{.*}}391 return _mm512_cmp_pbh_mask(a, b, _CMP_EQ_OQ);392}393 394__mmask32 test_mm512_cmp_pbh_mask_lt_os(__m512bh a, __m512bh b) {395 // CHECK-LABEL: test_mm512_cmp_pbh_mask_lt_os396 // CHECK: fcmp olt <32 x bfloat> %{{.*}}, %{{.*}}397 return _mm512_cmp_pbh_mask(a, b, _CMP_LT_OS);398}399 400__mmask32 test_mm512_cmp_pbh_mask_le_os(__m512bh a, __m512bh b) {401 // CHECK-LABEL: test_mm512_cmp_pbh_mask_le_os402 // CHECK: fcmp ole <32 x bfloat> %{{.*}}, %{{.*}}403 return _mm512_cmp_pbh_mask(a, b, _CMP_LE_OS);404}405 406__mmask32 test_mm512_cmp_pbh_mask_unord_q(__m512bh a, __m512bh b) {407 // CHECK-LABEL: test_mm512_cmp_pbh_mask_unord_q408 // CHECK: fcmp uno <32 x bfloat> %{{.*}}, %{{.*}}409 return _mm512_cmp_pbh_mask(a, b, _CMP_UNORD_Q);410}411 412__mmask32 test_mm512_cmp_pbh_mask_neq_uq(__m512bh a, __m512bh b) {413 // CHECK-LABEL: test_mm512_cmp_pbh_mask_neq_uq414 // CHECK: fcmp une <32 x bfloat> %{{.*}}, %{{.*}}415 return _mm512_cmp_pbh_mask(a, b, _CMP_NEQ_UQ);416}417 418__mmask32 test_mm512_cmp_pbh_mask_nlt_us(__m512bh a, __m512bh b) {419 // CHECK-LABEL: test_mm512_cmp_pbh_mask_nlt_us420 // CHECK: fcmp uge <32 x bfloat> %{{.*}}, %{{.*}}421 return _mm512_cmp_pbh_mask(a, b, _CMP_NLT_US);422}423 424__mmask32 test_mm512_cmp_pbh_mask_nle_us(__m512bh a, __m512bh b) {425 // CHECK-LABEL: test_mm512_cmp_pbh_mask_nle_us426 // CHECK: fcmp ugt <32 x bfloat> %{{.*}}, %{{.*}}427 return _mm512_cmp_pbh_mask(a, b, _CMP_NLE_US);428}429 430__mmask32 test_mm512_cmp_pbh_mask_ord_q(__m512bh a, __m512bh b) {431 // CHECK-LABEL: test_mm512_cmp_pbh_mask_ord_q432 // CHECK: fcmp ord <32 x bfloat> %{{.*}}, %{{.*}}433 return _mm512_cmp_pbh_mask(a, b, _CMP_ORD_Q);434}435 436__mmask32 test_mm512_cmp_pbh_mask_eq_uq(__m512bh a, __m512bh b) {437 // CHECK-LABEL: test_mm512_cmp_pbh_mask_eq_uq438 // CHECK: fcmp ueq <32 x bfloat> %{{.*}}, %{{.*}}439 return _mm512_cmp_pbh_mask(a, b, _CMP_EQ_UQ);440}441 442__mmask32 test_mm512_cmp_pbh_mask_nge_us(__m512bh a, __m512bh b) {443 // CHECK-LABEL: test_mm512_cmp_pbh_mask_nge_us444 // CHECK: fcmp ult <32 x bfloat> %{{.*}}, %{{.*}}445 return _mm512_cmp_pbh_mask(a, b, _CMP_NGE_US);446}447 448__mmask32 test_mm512_cmp_pbh_mask_ngt_us(__m512bh a, __m512bh b) {449 // CHECK-LABEL: test_mm512_cmp_pbh_mask_ngt_us450 // CHECK: fcmp ule <32 x bfloat> %{{.*}}, %{{.*}}451 return _mm512_cmp_pbh_mask(a, b, _CMP_NGT_US);452}453 454__mmask32 test_mm512_cmp_pbh_mask_false_oq(__m512bh a, __m512bh b) {455 // CHECK-LABEL: test_mm512_cmp_pbh_mask_false_oq456 // CHECK: fcmp false <32 x bfloat> %{{.*}}, %{{.*}}457 return _mm512_cmp_pbh_mask(a, b, _CMP_FALSE_OQ);458}459 460__mmask32 test_mm512_cmp_pbh_mask_neq_oq(__m512bh a, __m512bh b) {461 // CHECK-LABEL: test_mm512_cmp_pbh_mask_neq_oq462 // CHECK: fcmp one <32 x bfloat> %{{.*}}, %{{.*}}463 return _mm512_cmp_pbh_mask(a, b, _CMP_NEQ_OQ);464}465 466__mmask32 test_mm512_cmp_pbh_mask_ge_os(__m512bh a, __m512bh b) {467 // CHECK-LABEL: test_mm512_cmp_pbh_mask_ge_os468 // CHECK: fcmp oge <32 x bfloat> %{{.*}}, %{{.*}}469 return _mm512_cmp_pbh_mask(a, b, _CMP_GE_OS);470}471 472__mmask32 test_mm512_cmp_pbh_mask_gt_os(__m512bh a, __m512bh b) {473 // CHECK-LABEL: test_mm512_cmp_pbh_mask_gt_os474 // CHECK: fcmp ogt <32 x bfloat> %{{.*}}, %{{.*}}475 return _mm512_cmp_pbh_mask(a, b, _CMP_GT_OS);476}477 478__mmask32 test_mm512_cmp_pbh_mask_true_uq(__m512bh a, __m512bh b) {479 // CHECK-LABEL: test_mm512_cmp_pbh_mask_true_uq480 // CHECK: fcmp true <32 x bfloat> %{{.*}}, %{{.*}}481 return _mm512_cmp_pbh_mask(a, b, _CMP_TRUE_UQ);482}483 484__mmask32 test_mm512_cmp_pbh_mask_eq_os(__m512bh a, __m512bh b) {485 // CHECK-LABEL: test_mm512_cmp_pbh_mask_eq_os486 // CHECK: fcmp oeq <32 x bfloat> %{{.*}}, %{{.*}}487 return _mm512_cmp_pbh_mask(a, b, _CMP_EQ_OS);488}489 490__mmask32 test_mm512_cmp_pbh_mask_lt_oq(__m512bh a, __m512bh b) {491 // CHECK-LABEL: test_mm512_cmp_pbh_mask_lt_oq492 // CHECK: fcmp olt <32 x bfloat> %{{.*}}, %{{.*}}493 return _mm512_cmp_pbh_mask(a, b, _CMP_LT_OQ);494}495 496__mmask32 test_mm512_cmp_pbh_mask_le_oq(__m512bh a, __m512bh b) {497 // CHECK-LABEL: test_mm512_cmp_pbh_mask_le_oq498 // CHECK: fcmp ole <32 x bfloat> %{{.*}}, %{{.*}}499 return _mm512_cmp_pbh_mask(a, b, _CMP_LE_OQ);500}501 502__mmask32 test_mm512_cmp_pbh_mask_unord_s(__m512bh a, __m512bh b) {503 // CHECK-LABEL: test_mm512_cmp_pbh_mask_unord_s504 // CHECK: fcmp uno <32 x bfloat> %{{.*}}, %{{.*}}505 return _mm512_cmp_pbh_mask(a, b, _CMP_UNORD_S);506}507 508__mmask32 test_mm512_cmp_pbh_mask_neq_us(__m512bh a, __m512bh b) {509 // CHECK-LABEL: test_mm512_cmp_pbh_mask_neq_us510 // CHECK: fcmp une <32 x bfloat> %{{.*}}, %{{.*}}511 return _mm512_cmp_pbh_mask(a, b, _CMP_NEQ_US);512}513 514__mmask32 test_mm512_cmp_pbh_mask_nlt_uq(__m512bh a, __m512bh b) {515 // CHECK-LABEL: test_mm512_cmp_pbh_mask_nlt_uq516 // CHECK: fcmp uge <32 x bfloat> %{{.*}}, %{{.*}}517 return _mm512_cmp_pbh_mask(a, b, _CMP_NLT_UQ);518}519 520__mmask32 test_mm512_cmp_pbh_mask_nle_uq(__m512bh a, __m512bh b) {521 // CHECK-LABEL: test_mm512_cmp_pbh_mask_nle_uq522 // CHECK: fcmp ugt <32 x bfloat> %{{.*}}, %{{.*}}523 return _mm512_cmp_pbh_mask(a, b, _CMP_NLE_UQ);524}525 526__mmask32 test_mm512_cmp_pbh_mask_ord_s(__m512bh a, __m512bh b) {527 // CHECK-LABEL: test_mm512_cmp_pbh_mask_ord_s528 // CHECK: fcmp ord <32 x bfloat> %{{.*}}, %{{.*}}529 return _mm512_cmp_pbh_mask(a, b, _CMP_ORD_S);530}531 532__mmask32 test_mm512_cmp_pbh_mask_eq_us(__m512bh a, __m512bh b) {533 // CHECK-LABEL: test_mm512_cmp_pbh_mask_eq_us534 // CHECK: fcmp ueq <32 x bfloat> %{{.*}}, %{{.*}}535 return _mm512_cmp_pbh_mask(a, b, _CMP_EQ_US);536}537 538__mmask32 test_mm512_cmp_pbh_mask_nge_uq(__m512bh a, __m512bh b) {539 // CHECK-LABEL: test_mm512_cmp_pbh_mask_nge_uq540 // CHECK: fcmp ult <32 x bfloat> %{{.*}}, %{{.*}}541 return _mm512_cmp_pbh_mask(a, b, _CMP_NGE_UQ);542}543 544__mmask32 test_mm512_cmp_pbh_mask_ngt_uq(__m512bh a, __m512bh b) {545 // CHECK-LABEL: test_mm512_cmp_pbh_mask_ngt_uq546 // CHECK: fcmp ule <32 x bfloat> %{{.*}}, %{{.*}}547 return _mm512_cmp_pbh_mask(a, b, _CMP_NGT_UQ);548}549 550__mmask32 test_mm512_cmp_pbh_mask_false_os(__m512bh a, __m512bh b) {551 // CHECK-LABEL: test_mm512_cmp_pbh_mask_false_os552 // CHECK: fcmp false <32 x bfloat> %{{.*}}, %{{.*}}553 return _mm512_cmp_pbh_mask(a, b, _CMP_FALSE_OS);554}555 556__mmask32 test_mm512_cmp_pbh_mask_neq_os(__m512bh a, __m512bh b) {557 // CHECK-LABEL: test_mm512_cmp_pbh_mask_neq_os558 // CHECK: fcmp one <32 x bfloat> %{{.*}}, %{{.*}}559 return _mm512_cmp_pbh_mask(a, b, _CMP_NEQ_OS);560}561 562__mmask32 test_mm512_cmp_pbh_mask_ge_oq(__m512bh a, __m512bh b) {563 // CHECK-LABEL: test_mm512_cmp_pbh_mask_ge_oq564 // CHECK: fcmp oge <32 x bfloat> %{{.*}}, %{{.*}}565 return _mm512_cmp_pbh_mask(a, b, _CMP_GE_OQ);566}567 568__mmask32 test_mm512_cmp_pbh_mask_gt_oq(__m512bh a, __m512bh b) {569 // CHECK-LABEL: test_mm512_cmp_pbh_mask_gt_oq570 // CHECK: fcmp ogt <32 x bfloat> %{{.*}}, %{{.*}}571 return _mm512_cmp_pbh_mask(a, b, _CMP_GT_OQ);572}573 574__mmask32 test_mm512_cmp_pbh_mask_true_us(__m512bh a, __m512bh b) {575 // CHECK-LABEL: test_mm512_cmp_pbh_mask_true_us576 // CHECK: fcmp true <32 x bfloat> %{{.*}}, %{{.*}}577 return _mm512_cmp_pbh_mask(a, b, _CMP_TRUE_US);578}579 580__mmask32 test_mm512_mask_cmp_pbh_mask_eq_oq(__mmask32 m, __m512bh a, __m512bh b) {581 // CHECK-LABEL: @test_mm512_mask_cmp_pbh_mask_eq_oq582 // CHECK: fcmp oeq <32 x bfloat> %{{.*}}, %{{.*}}583 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}584 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_EQ_OQ);585}586 587__mmask32 test_mm512_mask_cmp_pbh_mask_lt_os(__mmask32 m, __m512bh a, __m512bh b) {588 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_lt_os589 // CHECK: fcmp olt <32 x bfloat> %{{.*}}, %{{.*}}590 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}591 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_LT_OS);592}593 594__mmask32 test_mm512_mask_cmp_pbh_mask_le_os(__mmask32 m, __m512bh a, __m512bh b) {595 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_le_os596 // CHECK: fcmp ole <32 x bfloat> %{{.*}}, %{{.*}}597 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}598 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_LE_OS);599}600 601__mmask32 test_mm512_mask_cmp_pbh_mask_unord_q(__mmask32 m, __m512bh a, __m512bh b) {602 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_unord_q603 // CHECK: fcmp uno <32 x bfloat> %{{.*}}, %{{.*}}604 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_UNORD_Q);605}606 607__mmask32 test_mm512_mask_cmp_pbh_mask_neq_uq(__mmask32 m, __m512bh a, __m512bh b) {608 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_neq_uq609 // CHECK: fcmp une <32 x bfloat> %{{.*}}, %{{.*}}610 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}611 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_NEQ_UQ);612}613 614__mmask32 test_mm512_mask_cmp_pbh_mask_nlt_us(__mmask32 m, __m512bh a, __m512bh b) {615 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_nlt_us616 // CHECK: fcmp uge <32 x bfloat> %{{.*}}, %{{.*}}617 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}618 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_NLT_US);619}620 621__mmask32 test_mm512_mask_cmp_pbh_mask_nle_us(__mmask32 m, __m512bh a, __m512bh b) {622 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_nle_us623 // CHECK: fcmp ugt <32 x bfloat> %{{.*}}, %{{.*}}624 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}625 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_NLE_US);626}627 628__mmask32 test_mm512_mask_cmp_pbh_mask_ord_q(__mmask32 m, __m512bh a, __m512bh b) {629 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_ord_q630 // CHECK: fcmp ord <32 x bfloat> %{{.*}}, %{{.*}}631 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}632 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_ORD_Q);633}634 635__mmask32 test_mm512_mask_cmp_pbh_mask_eq_uq(__mmask32 m, __m512bh a, __m512bh b) {636 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_eq_uq637 // CHECK: fcmp ueq <32 x bfloat> %{{.*}}, %{{.*}}638 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}639 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_EQ_UQ);640}641 642__mmask32 test_mm512_mask_cmp_pbh_mask_nge_us(__mmask32 m, __m512bh a, __m512bh b) {643 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_nge_us644 // CHECK: fcmp ult <32 x bfloat> %{{.*}}, %{{.*}}645 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}646 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_NGE_US);647}648 649__mmask32 test_mm512_mask_cmp_pbh_mask_ngt_us(__mmask32 m, __m512bh a, __m512bh b) {650 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_ngt_us651 // CHECK: fcmp ule <32 x bfloat> %{{.*}}, %{{.*}}652 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}653 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_NGT_US);654}655 656__mmask32 test_mm512_mask_cmp_pbh_mask_false_oq(__mmask32 m, __m512bh a, __m512bh b) {657 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_false_oq658 // CHECK: fcmp false <32 x bfloat> %{{.*}}, %{{.*}}659 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}660 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_FALSE_OQ);661}662 663__mmask32 test_mm512_mask_cmp_pbh_mask_neq_oq(__mmask32 m, __m512bh a, __m512bh b) {664 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_neq_oq665 // CHECK: fcmp one <32 x bfloat> %{{.*}}, %{{.*}}666 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}667 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_NEQ_OQ);668}669 670__mmask32 test_mm512_mask_cmp_pbh_mask_ge_os(__mmask32 m, __m512bh a, __m512bh b) {671 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_ge_os672 // CHECK: fcmp oge <32 x bfloat> %{{.*}}, %{{.*}}673 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}674 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_GE_OS);675}676 677__mmask32 test_mm512_mask_cmp_pbh_mask_gt_os(__mmask32 m, __m512bh a, __m512bh b) {678 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_gt_os679 // CHECK: fcmp ogt <32 x bfloat> %{{.*}}, %{{.*}}680 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}681 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_GT_OS);682}683 684__mmask32 test_mm512_mask_cmp_pbh_mask_true_uq(__mmask32 m, __m512bh a, __m512bh b) {685 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_true_uq686 // CHECK: fcmp true <32 x bfloat> %{{.*}}, %{{.*}}687 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}688 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_TRUE_UQ);689}690 691__mmask32 test_mm512_mask_cmp_pbh_mask_eq_os(__mmask32 m, __m512bh a, __m512bh b) {692 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_eq_os693 // CHECK: fcmp oeq <32 x bfloat> %{{.*}}, %{{.*}}694 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}695 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_EQ_OS);696}697 698__mmask32 test_mm512_mask_cmp_pbh_mask_lt_oq(__mmask32 m, __m512bh a, __m512bh b) {699 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_lt_oq700 // CHECK: fcmp olt <32 x bfloat> %{{.*}}, %{{.*}}701 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}702 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_LT_OQ);703}704 705__mmask32 test_mm512_mask_cmp_pbh_mask_le_oq(__mmask32 m, __m512bh a, __m512bh b) {706 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_le_oq707 // CHECK: fcmp ole <32 x bfloat> %{{.*}}, %{{.*}}708 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}709 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_LE_OQ);710}711 712__mmask32 test_mm512_mask_cmp_pbh_mask_unord_s(__mmask32 m, __m512bh a, __m512bh b) {713 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_unord_s714 // CHECK: fcmp uno <32 x bfloat> %{{.*}}, %{{.*}}715 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}716 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_UNORD_S);717}718 719__mmask32 test_mm512_mask_cmp_pbh_mask_neq_us(__mmask32 m, __m512bh a, __m512bh b) {720 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_neq_us721 // CHECK: fcmp une <32 x bfloat> %{{.*}}, %{{.*}}722 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}723 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_NEQ_US);724}725 726__mmask32 test_mm512_mask_cmp_pbh_mask_nlt_uq(__mmask32 m, __m512bh a, __m512bh b) {727 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_nlt_uq728 // CHECK: fcmp uge <32 x bfloat> %{{.*}}, %{{.*}}729 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}730 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_NLT_UQ);731}732 733__mmask32 test_mm512_mask_cmp_pbh_mask_nle_uq(__mmask32 m, __m512bh a, __m512bh b) {734 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_nle_uq735 // CHECK: fcmp ugt <32 x bfloat> %{{.*}}, %{{.*}}736 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}737 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_NLE_UQ);738}739 740__mmask32 test_mm512_mask_cmp_pbh_mask_ord_s(__mmask32 m, __m512bh a, __m512bh b) {741 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_ord_s742 // CHECK: fcmp ord <32 x bfloat> %{{.*}}, %{{.*}}743 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}744 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_ORD_S);745}746 747__mmask32 test_mm512_mask_cmp_pbh_mask_eq_us(__mmask32 m, __m512bh a, __m512bh b) {748 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_eq_us749 // CHECK: fcmp ueq <32 x bfloat> %{{.*}}, %{{.*}}750 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}751 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_EQ_US);752}753 754__mmask32 test_mm512_mask_cmp_pbh_mask_nge_uq(__mmask32 m, __m512bh a, __m512bh b) {755 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_nge_uq756 // CHECK: fcmp ult <32 x bfloat> %{{.*}}, %{{.*}}757 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}758 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_NGE_UQ);759}760 761__mmask32 test_mm512_mask_cmp_pbh_mask_ngt_uq(__mmask32 m, __m512bh a, __m512bh b) {762 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_ngt_uq763 // CHECK: fcmp ule <32 x bfloat> %{{.*}}, %{{.*}}764 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}765 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_NGT_UQ);766}767 768__mmask32 test_mm512_mask_cmp_pbh_mask_false_os(__mmask32 m, __m512bh a, __m512bh b) {769 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_false_os770 // CHECK: fcmp false <32 x bfloat> %{{.*}}, %{{.*}}771 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}772 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_FALSE_OS);773}774 775__mmask32 test_mm512_mask_cmp_pbh_mask_neq_os(__mmask32 m, __m512bh a, __m512bh b) {776 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_neq_os777 // CHECK: fcmp one <32 x bfloat> %{{.*}}, %{{.*}}778 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}779 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_NEQ_OS);780}781 782__mmask32 test_mm512_mask_cmp_pbh_mask_ge_oq(__mmask32 m, __m512bh a, __m512bh b) {783 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_ge_oq784 // CHECK: fcmp oge <32 x bfloat> %{{.*}}, %{{.*}}785 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}786 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_GE_OQ);787}788 789__mmask32 test_mm512_mask_cmp_pbh_mask_gt_oq(__mmask32 m, __m512bh a, __m512bh b) {790 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_gt_oq791 // CHECK: fcmp ogt <32 x bfloat> %{{.*}}, %{{.*}}792 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}793 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_GT_OQ);794}795 796__mmask32 test_mm512_mask_cmp_pbh_mask_true_us(__mmask32 m, __m512bh a, __m512bh b) {797 // CHECK-LABEL: test_mm512_mask_cmp_pbh_mask_true_us798 // CHECK: fcmp true <32 x bfloat> %{{.*}}, %{{.*}}799 // CHECK: and <32 x i1> %{{.*}}, %{{.*}}800 return _mm512_mask_cmp_pbh_mask(m, a, b, _CMP_TRUE_US);801}802 803__mmask32 test_mm512_mask_fpclass_pbh_mask(__mmask32 __U, __m512bh __A) {804 // CHECK-LABEL: @test_mm512_mask_fpclass_pbh_mask805 // CHECK: @llvm.x86.avx10.fpclass.bf16.512806 return _mm512_mask_fpclass_pbh_mask(__U, __A, 4);807}808 809__mmask32 test_mm512_fpclass_pbh_mask(__m512bh __A) {810 // CHECK-LABEL: @test_mm512_fpclass_pbh_mask811 // CHECK: @llvm.x86.avx10.fpclass.bf16.512812 return _mm512_fpclass_pbh_mask(__A, 4);813}814 815__m512bh test_mm512_scalef_pbh(__m512bh __A, __m512bh __B) {816 // CHECK-LABEL: @test_mm512_scalef_pbh817 // CHECK: @llvm.x86.avx10.mask.scalef.bf16.512818 return _mm512_scalef_pbh(__A, __B);819}820 821__m512bh test_mm512_mask_scalef_pbh(__m512bh __W, __mmask32 __U, __m512bh __A, __m512bh __B) {822 // CHECK-LABEL: @test_mm512_mask_scalef_pbh823 // CHECK: @llvm.x86.avx10.mask.scalef.bf16.512824 return _mm512_mask_scalef_pbh(__W, __U, __A, __B);825}826 827__m512bh test_mm512_maskz_scalef_pbh(__mmask32 __U, __m512bh __A, __m512bh __B) {828 // CHECK-LABEL: @test_mm512_maskz_scalef_pbh829 // CHECK: @llvm.x86.avx10.mask.scalef.bf16.512830 return _mm512_maskz_scalef_pbh(__U, __A, __B);831}832 833__m512bh test_mm512_rcp_pbh(__m512bh __A) {834 // CHECK-LABEL: @test_mm512_rcp_pbh835 // CHECK: @llvm.x86.avx10.mask.rcp.bf16.512836 return _mm512_rcp_pbh(__A);837}838 839__m512bh test_mm512_mask_rcp_pbh(__m512bh __W, __mmask32 __U, __m512bh __A) {840 // CHECK-LABEL: @test_mm512_mask_rcp_pbh841 // CHECK: @llvm.x86.avx10.mask.rcp.bf16.512842 return (__m512bh)_mm512_mask_rcp_pbh(__W, __U, __A);843}844 845__m512bh test_mm512_maskz_rcp_pbh(__mmask32 __U, __m512bh __A) {846 // CHECK-LABEL: @test_mm512_maskz_rcp_pbh847 // CHECK: @llvm.x86.avx10.mask.rcp.bf16.512848 return _mm512_maskz_rcp_pbh(__U, __A);849}850 851__m512bh test_mm512_getexp_pbh(__m512bh __A) {852 // CHECK-LABEL: @test_mm512_getexp_pbh853 // CHECK: @llvm.x86.avx10.mask.getexp.bf16.512854 return _mm512_getexp_pbh(__A);855}856 857__m512bh test_mm512_mask_getexp_pbh(__m512bh __W, __mmask32 __U, __m512bh __A) {858 // CHECK-LABEL: @test_mm512_mask_getexp_pbh859 // CHECK: @llvm.x86.avx10.mask.getexp.bf16.512860 return _mm512_mask_getexp_pbh(__W, __U, __A);861}862 863__m512bh test_mm512_maskz_getexp_pbh(__mmask32 __U, __m512bh __A) {864 // CHECK-LABEL: @test_mm512_maskz_getexp_pbh865 // CHECK: @llvm.x86.avx10.mask.getexp.bf16.512866 return _mm512_maskz_getexp_pbh(__U, __A);867}868 869__m512bh test_mm512_rsqrt_pbh(__m512bh __A) {870 // CHECK-LABEL: @test_mm512_rsqrt_pbh871 // CHECK: @llvm.x86.avx10.mask.rsqrt.bf16.512872 return _mm512_rsqrt_pbh(__A);873}874 875__m512bh test_mm512_mask_rsqrt_pbh(__m512bh __W, __mmask32 __U, __m512bh __A) {876 // CHECK-LABEL: @test_mm512_mask_rsqrt_pbh877 // CHECK: @llvm.x86.avx10.mask.rsqrt.bf16.512878 return (__m512bh)_mm512_mask_rsqrt_pbh(__W, __U, __A);879}880 881__m512bh test_mm512_maskz_rsqrt_pbh(__mmask32 __U, __m512bh __A) {882 // CHECK-LABEL: @test_mm512_maskz_rsqrt_pbh883 // CHECK: @llvm.x86.avx10.mask.rsqrt.bf16.512884 return _mm512_maskz_rsqrt_pbh(__U, __A);885}886 887__m512bh test_mm512_reduce_pbh(__m512bh __A) {888 // CHECK-LABEL: @test_mm512_reduce_pbh889 // CHECK: @llvm.x86.avx10.mask.reduce.bf16.512890 return _mm512_reduce_pbh(__A, 3);891}892 893__m512bh test_mm512_mask_reduce_pbh(__m512bh __W, __mmask16 __U, __m512bh __A) {894 // CHECK-LABEL: @test_mm512_mask_reduce_pbh895 // CHECK: @llvm.x86.avx10.mask.reduce.bf16.512896 return _mm512_mask_reduce_pbh(__W, __U, __A, 1);897}898 899__m512bh test_mm512_maskz_reduce_pbh(__mmask16 __U, __m512bh __A) {900 // CHECK-LABEL: @test_mm512_maskz_reduce_pbh901 // CHECK: @llvm.x86.avx10.mask.reduce.bf16.512902 return _mm512_maskz_reduce_pbh(__U, __A, 1);903}904 905__m512bh test_mm512_roundscale_pbh(__m512bh __A) {906 // CHECK-LABEL: @test_mm512_roundscale_pbh907 // CHECK: @llvm.x86.avx10.mask.rndscale.bf16.512908 return _mm512_roundscale_pbh(__A, 3);909}910 911__m512bh test_mm512_mask_roundscale_pbh(__m512bh __W, __mmask16 __U, __m512bh __A) {912 // CHECK-LABEL: @test_mm512_mask_roundscale_pbh913 // CHECK: @llvm.x86.avx10.mask.rndscale.bf16.512914 return _mm512_mask_roundscale_pbh(__W, __U, __A, 1);915}916 917__m512bh test_mm512_maskz_roundscale_pbh(__mmask16 __U, __m512bh __A) {918 // CHECK-LABEL: @test_mm512_maskz_roundscale_pbh919 // CHECK: @llvm.x86.avx10.mask.rndscale.bf16.512920 return _mm512_maskz_roundscale_pbh(__U, __A, 1 );921}922 923__m512bh test_mm512_getmant_pbh(__m512bh __A) {924 // CHECK-LABEL: @test_mm512_getmant_pbh925 // CHECK: @llvm.x86.avx10.mask.getmant.bf16.512926 return _mm512_getmant_pbh(__A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan);927}928 929__m512bh test_mm512_mask_getmant_pbh(__m512bh __W, __mmask32 __U, __m512bh __A) {930 // CHECK-LABEL: @test_mm512_mask_getmant_pbh931 // CHECK: @llvm.x86.avx10.mask.getmant.bf16.512932 return _mm512_mask_getmant_pbh(__W, __U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan);933}934 935__m512bh test_mm512_maskz_getmant_pbh(__mmask32 __U, __m512bh __A) {936 // CHECK-LABEL: @test_mm512_maskz_getmant_pbh937 // CHECK: @llvm.x86.avx10.mask.getmant.bf16.512938 return _mm512_maskz_getmant_pbh(__U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan);939}940 941__m512bh test_mm512_sqrt_pbh(__m512bh __A) {942 // CHECK-LABEL: @test_mm512_sqrt_pbh943 // CHECK: %{{.*}} = call <32 x bfloat> @llvm.sqrt.v32bf16(<32 x bfloat> %{{.*}})944 return _mm512_sqrt_pbh(__A);945}946 947__m512bh test_mm512_mask_sqrt_pbh(__m512bh __W, __mmask32 __U, __m512bh __A) {948 // CHECK-LABEL: @test_mm512_mask_sqrt_pbh949 // CHECK: %{{.*}} = call <32 x bfloat> @llvm.sqrt.v32bf16(<32 x bfloat> %{{.*}})950 // CHECK: bitcast i32 %{{.*}} to <32 x i1>951 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}952 return (__m512bh)_mm512_mask_sqrt_pbh(__W, __U, __A);953}954 955__m512bh test_mm512_maskz_sqrt_pbh(__mmask32 __U, __m512bh __A) {956 // CHECK-LABEL: @test_mm512_maskz_sqrt_pbh957 // CHECK: %{{.*}} = call <32 x bfloat> @llvm.sqrt.v32bf16(<32 x bfloat> %{{.*}})958 // CHECK: bitcast i32 %{{.*}} to <32 x i1>959 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}960 return _mm512_maskz_sqrt_pbh(__U, __A);961}962 963__m512bh test_mm512_fmadd_pbh(__m512bh __A, __m512bh __B, __m512bh __C) {964 // CHECK-LABEL: @test_mm512_fmadd_pbh965 // CHECK: call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}})966 return _mm512_fmadd_pbh(__A, __B, __C);967}968 969__m512bh test_mm512_mask_fmadd_pbh(__m512bh __A, __mmask32 __U, __m512bh __B, __m512bh __C) {970 // CHECK-LABEL: @test_mm512_mask_fmadd_pbh971 // CHECK: call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}})972 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}973 return _mm512_mask_fmadd_pbh(__A, __U, __B, __C);974}975 976__m512bh test_mm512_mask3_fmadd_pbh(__m512bh __A, __m512bh __B, __m512bh __C, __mmask32 __U) {977 // CHECK-LABEL: @test_mm512_mask3_fmadd_pbh978 // CHECK: call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}})979 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}980 return _mm512_mask3_fmadd_pbh(__A, __B, __C, __U);981}982 983__m512bh test_mm512_maskz_fmadd_pbh(__mmask32 __U, __m512bh __A, __m512bh __B, __m512bh __C) {984 // CHECK-LABEL: @test_mm512_maskz_fmadd_pbh985 // CHECK: call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}})986 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}987 return _mm512_maskz_fmadd_pbh(__U, __A, __B, __C);988}989 990__m512bh test_mm512_fmsub_pbh(__m512bh __A, __m512bh __B, __m512bh __C) {991 // CHECK-LABEL: @test_mm512_fmsub_pbh992 // CHECK: fneg993 // CHECK: call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}})994 return _mm512_fmsub_pbh(__A, __B, __C);995}996 997__m512bh test_mm512_mask_fmsub_pbh(__m512bh __A, __mmask32 __U, __m512bh __B, __m512bh __C) {998 // CHECK-LABEL: @test_mm512_mask_fmsub_pbh999 // CHECK: fneg1000 // CHECK: call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}})1001 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}1002 return _mm512_mask_fmsub_pbh(__A, __U, __B, __C);1003}1004 1005__m512bh test_mm512_mask3_fmsub_pbh(__m512bh __A, __m512bh __B, __m512bh __C, __mmask32 __U) {1006 // CHECK-LABEL: @test_mm512_mask3_fmsub_pbh1007 // CHECK: fneg1008 // CHECK: call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}})1009 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}1010 return _mm512_mask3_fmsub_pbh(__A, __B, __C, __U);1011}1012 1013__m512bh test_mm512_maskz_fmsub_pbh(__mmask32 __U, __m512bh __A, __m512bh __B, __m512bh __C) {1014 // CHECK-LABEL: @test_mm512_maskz_fmsub_pbh1015 // CHECK: fneg1016 // CHECK: call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}})1017 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}1018 return _mm512_maskz_fmsub_pbh(__U, __A, __B, __C);1019}1020 1021__m512bh test_mm512_fnmadd_pbh(__m512bh __A, __m512bh __B, __m512bh __C) {1022 // CHECK-LABEL: @test_mm512_fnmadd_pbh1023 // CHECK: fneg1024 // CHECK: call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}})1025 return _mm512_fnmadd_pbh(__A, __B, __C);1026}1027 1028__m512bh test_mm512_mask_fnmadd_pbh(__m512bh __A, __mmask32 __U, __m512bh __B, __m512bh __C) {1029 // CHECK-LABEL: @test_mm512_mask_fnmadd_pbh1030 // CHECK: fneg1031 // CHECK: call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}})1032 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}1033 return _mm512_mask_fnmadd_pbh(__A, __U, __B, __C);1034}1035 1036__m512bh test_mm512_mask3_fnmadd_pbh(__m512bh __A, __m512bh __B, __m512bh __C, __mmask32 __U) {1037 // CHECK-LABEL: @test_mm512_mask3_fnmadd_pbh1038 // CHECK: fneg1039 // CHECK: call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}})1040 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}1041 return _mm512_mask3_fnmadd_pbh(__A, __B, __C, __U);1042}1043 1044__m512bh test_mm512_maskz_fnmadd_pbh(__mmask32 __U, __m512bh __A, __m512bh __B, __m512bh __C) {1045 // CHECK-LABEL: @test_mm512_maskz_fnmadd_pbh1046 // CHECK: fneg1047 // CHECK: call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}})1048 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}1049 return _mm512_maskz_fnmadd_pbh(__U, __A, __B, __C);1050}1051 1052__m512bh test_mm512_fnmsub_pbh(__m512bh __A, __m512bh __B, __m512bh __C) {1053 // CHECK-LABEL: @test_mm512_fnmsub_pbh1054 // CHECK: fneg1055 // CHECK: fneg1056 // CHECK: call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}})1057 return _mm512_fnmsub_pbh(__A, __B, __C);1058}1059 1060__m512bh test_mm512_mask_fnmsub_pbh(__m512bh __A, __mmask32 __U, __m512bh __B, __m512bh __C) {1061 // CHECK-LABEL: @test_mm512_mask_fnmsub_pbh1062 // CHECK: fneg1063 // CHECK: fneg1064 // CHECK: call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}})1065 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}1066 return _mm512_mask_fnmsub_pbh(__A, __U, __B, __C);1067}1068 1069__m512bh test_mm512_mask3_fnmsub_pbh(__m512bh __A, __m512bh __B, __m512bh __C, __mmask32 __U) {1070 // CHECK-LABEL: @test_mm512_mask3_fnmsub_pbh1071 // CHECK: fneg1072 // CHECK: fneg1073 // CHECK: call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}})1074 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}1075 return _mm512_mask3_fnmsub_pbh(__A, __B, __C, __U);1076}1077 1078__m512bh test_mm512_maskz_fnmsub_pbh(__mmask32 __U, __m512bh __A, __m512bh __B, __m512bh __C) {1079 // CHECK-LABEL: @test_mm512_maskz_fnmsub_pbh1080 // CHECK: fneg1081 // CHECK: fneg1082 // CHECK: call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}})1083 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}1084 return _mm512_maskz_fnmsub_pbh(__U, __A, __B, __C);1085}1086