brintos

brintos / llvm-project-archived public Read only

0
0
Text · 126.1 KiB · 68d0984 Raw
3261 lines · c
1// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-unknown -target-feature +avx512vl -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror | FileCheck %s2// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-unknown-unknown -target-feature +avx512vl -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror | FileCheck %s3// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-unknown -target-feature +avx512vl -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror | FileCheck %s4// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-unknown-unknown -target-feature +avx512vl -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror | FileCheck %s5 6// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-unknown -target-feature +avx512vl -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s7// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-unknown-unknown -target-feature +avx512vl -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s8// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-unknown -target-feature +avx512vl -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s9// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-unknown-unknown -target-feature +avx512vl -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s10 11 12#include <immintrin.h>13#include "builtin_test_helpers.h"14 15_Float16 test_mm_cvtsh_h(__m128h __A) {16  // CHECK-LABEL: test_mm_cvtsh_h17  // CHECK: extractelement <8 x half> %{{.*}}, i32 018  return _mm_cvtsh_h(__A);19}20TEST_CONSTEXPR(_mm_cvtsh_h((__m128h){-8.0, 7.0, -6.0, 5.0, -4.0, 3.0, -2.0, 1.0}) == -8.0);21 22_Float16 test_mm256_cvtsh_h(__m256h __A) {23  // CHECK-LABEL: test_mm256_cvtsh_h24  // CHECK: extractelement <16 x half> %{{.*}}, i32 025  return _mm256_cvtsh_h(__A);26}27TEST_CONSTEXPR(_mm256_cvtsh_h((__m256h){-32.0, 31.0, -30.0, 29.0, -28.0, 27.0, -26.0, 25.0, -24.0, 23.0, -22.0, 21.0, -20.0, 19.0, -18.0, 17.0}) == -32.0);28 29__m128h test_mm_set_sh(_Float16 __h) {30  // CHECK-LABEL: test_mm_set_sh31  // CHECK: insertelement <8 x half> {{.*}}, i32 032  // CHECK: insertelement <8 x half> %{{.*}}, half 0xH0000, i32 133  // CHECK: insertelement <8 x half> %{{.*}}, half 0xH0000, i32 234  // CHECK: insertelement <8 x half> %{{.*}}, half 0xH0000, i32 335  // CHECK: insertelement <8 x half> %{{.*}}, half 0xH0000, i32 436  // CHECK: insertelement <8 x half> %{{.*}}, half 0xH0000, i32 537  // CHECK: insertelement <8 x half> %{{.*}}, half 0xH0000, i32 638  // CHECK: insertelement <8 x half> %{{.*}}, half 0xH0000, i32 739  return _mm_set_sh(__h);40}41 42TEST_CONSTEXPR(match_m128h(_mm_set_sh(2.0), 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0));43 44__m128h test_mm_set1_ph(_Float16 h) {45  // CHECK-LABEL: test_mm_set1_ph46  // CHECK: insertelement <8 x half> {{.*}}, i32 047  // CHECK: insertelement <8 x half> {{.*}}, i32 148  // CHECK: insertelement <8 x half> {{.*}}, i32 249  // CHECK: insertelement <8 x half> {{.*}}, i32 350  // CHECK: insertelement <8 x half> {{.*}}, i32 451  // CHECK: insertelement <8 x half> {{.*}}, i32 552  // CHECK: insertelement <8 x half> {{.*}}, i32 653  // CHECK: insertelement <8 x half> {{.*}}, i32 754  return _mm_set1_ph(h);55}56 57TEST_CONSTEXPR(match_m128h(_mm_set1_ph(-777.0), -777.0, -777.0, -777.0, -777.0, -777.0, -777.0, -777.0, -777.0));58 59__m256h test_mm256_set1_ph(_Float16 h) {60  // CHECK-LABEL: test_mm256_set1_ph61  // CHECK: insertelement <16 x half> {{.*}}, i32 062  // CHECK: insertelement <16 x half> {{.*}}, i32 163  // CHECK: insertelement <16 x half> {{.*}}, i32 264  // CHECK: insertelement <16 x half> {{.*}}, i32 365  // CHECK: insertelement <16 x half> {{.*}}, i32 466  // CHECK: insertelement <16 x half> {{.*}}, i32 567  // CHECK: insertelement <16 x half> {{.*}}, i32 668  // CHECK: insertelement <16 x half> {{.*}}, i32 769  // CHECK: insertelement <16 x half> {{.*}}, i32 870  // CHECK: insertelement <16 x half> {{.*}}, i32 971  // CHECK: insertelement <16 x half> {{.*}}, i32 1072  // CHECK: insertelement <16 x half> {{.*}}, i32 1173  // CHECK: insertelement <16 x half> {{.*}}, i32 1274  // CHECK: insertelement <16 x half> {{.*}}, i32 1375  // CHECK: insertelement <16 x half> {{.*}}, i32 1476  // CHECK: insertelement <16 x half> {{.*}}, i32 1577  return _mm256_set1_ph(h);78}79 80TEST_CONSTEXPR(match_m256h(_mm256_set1_ph(-777.0), -777.0, -777.0, -777.0, -777.0, -777.0, -777.0, -777.0, -777.0, -777.0, -777.0, -777.0, -777.0, -777.0, -777.0, -777.0, -777.0));81 82__m128h test_mm_set1_pch(_Float16 _Complex h) {83  // CHECK-LABEL: test_mm_set1_pch84  // CHECK: insertelement <4 x float> {{.*}}, i32 085  // CHECK: insertelement <4 x float> {{.*}}, i32 186  // CHECK: insertelement <4 x float> {{.*}}, i32 287  // CHECK: insertelement <4 x float> {{.*}}, i32 388  return _mm_set1_pch(h);89}90 91TEST_CONSTEXPR(match_m128h(_mm_set1_pch(1.0), 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0));92 93__m256h test_mm256_set1_pch(_Float16 _Complex h) {94  // CHECK-LABEL: test_mm256_set1_pch95  // CHECK: insertelement <8 x float> {{.*}}, i32 096  // CHECK: insertelement <8 x float> {{.*}}, i32 197  // CHECK: insertelement <8 x float> {{.*}}, i32 298  // CHECK: insertelement <8 x float> {{.*}}, i32 399  // CHECK: insertelement <8 x float> {{.*}}, i32 4100  // CHECK: insertelement <8 x float> {{.*}}, i32 5101  // CHECK: insertelement <8 x float> {{.*}}, i32 6102  // CHECK: insertelement <8 x float> {{.*}}, i32 7103  return _mm256_set1_pch(h);104}105 106TEST_CONSTEXPR(match_m256h(_mm256_set1_pch(1.0), 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0));107 108__m128h test_mm_set_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 __h4,109                       _Float16 __h5, _Float16 __h6, _Float16 __h7, _Float16 __h8) {110  // CHECK-LABEL: test_mm_set_ph111  // CHECK: insertelement <8 x half> {{.*}}, i32 0112  // CHECK: insertelement <8 x half> {{.*}}, i32 1113  // CHECK: insertelement <8 x half> {{.*}}, i32 2114  // CHECK: insertelement <8 x half> {{.*}}, i32 3115  // CHECK: insertelement <8 x half> {{.*}}, i32 4116  // CHECK: insertelement <8 x half> {{.*}}, i32 5117  // CHECK: insertelement <8 x half> {{.*}}, i32 6118  // CHECK: insertelement <8 x half> {{.*}}, i32 7119  return _mm_set_ph(__h1, __h2, __h3, __h4, __h5, __h6, __h7, __h8);120}121TEST_CONSTEXPR(match_m128h(_mm_set_ph(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0), 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0));122 123__m256h test_mm256_set_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 __h4,124                          _Float16 __h5, _Float16 __h6, _Float16 __h7, _Float16 __h8,125                          _Float16 __h9, _Float16 __h10, _Float16 __h11, _Float16 __h12,126                          _Float16 __h13, _Float16 __h14, _Float16 __h15, _Float16 __h16) {127  // CHECK-LABEL: test_mm256_set_ph128  // CHECK: insertelement <16 x half> {{.*}}, i32 0129  // CHECK: insertelement <16 x half> {{.*}}, i32 1130  // CHECK: insertelement <16 x half> {{.*}}, i32 2131  // CHECK: insertelement <16 x half> {{.*}}, i32 3132  // CHECK: insertelement <16 x half> {{.*}}, i32 4133  // CHECK: insertelement <16 x half> {{.*}}, i32 5134  // CHECK: insertelement <16 x half> {{.*}}, i32 6135  // CHECK: insertelement <16 x half> {{.*}}, i32 7136  // CHECK: insertelement <16 x half> {{.*}}, i32 8137  // CHECK: insertelement <16 x half> {{.*}}, i32 9138  // CHECK: insertelement <16 x half> {{.*}}, i32 10139  // CHECK: insertelement <16 x half> {{.*}}, i32 11140  // CHECK: insertelement <16 x half> {{.*}}, i32 12141  // CHECK: insertelement <16 x half> {{.*}}, i32 13142  // CHECK: insertelement <16 x half> {{.*}}, i32 14143  // CHECK: insertelement <16 x half> {{.*}}, i32 15144  return _mm256_set_ph(__h1, __h2, __h3, __h4, __h5, __h6, __h7, __h8,145                       __h9, __h10, __h11, __h12, __h13, __h14, __h15, __h16);146}147 148TEST_CONSTEXPR(match_m256h(_mm256_set_ph(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0), 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0, 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0));149 150__m128h test_mm_setr_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 __h4,151                        _Float16 __h5, _Float16 __h6, _Float16 __h7, _Float16 __h8) {152  // CHECK-LABEL: test_mm_setr_ph153  // CHECK: insertelement <8 x half> {{.*}}, i32 0154  // CHECK: insertelement <8 x half> {{.*}}, i32 1155  // CHECK: insertelement <8 x half> {{.*}}, i32 2156  // CHECK: insertelement <8 x half> {{.*}}, i32 3157  // CHECK: insertelement <8 x half> {{.*}}, i32 4158  // CHECK: insertelement <8 x half> {{.*}}, i32 5159  // CHECK: insertelement <8 x half> {{.*}}, i32 6160  // CHECK: insertelement <8 x half> {{.*}}, i32 7161  return _mm_setr_ph(__h1, __h2, __h3, __h4, __h5, __h6, __h7, __h8);162}163 164TEST_CONSTEXPR(match_m128h(_mm_setr_ph(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0), 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0));165 166__m256h test_mm256_setr_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 __h4,167                           _Float16 __h5, _Float16 __h6, _Float16 __h7, _Float16 __h8,168                           _Float16 __h9, _Float16 __h10, _Float16 __h11, _Float16 __h12,169                           _Float16 __h13, _Float16 __h14, _Float16 __h15, _Float16 __h16) {170  // CHECK-LABEL: test_mm256_setr_ph171  // CHECK: insertelement <16 x half> {{.*}}, i32 0172  // CHECK: insertelement <16 x half> {{.*}}, i32 1173  // CHECK: insertelement <16 x half> {{.*}}, i32 2174  // CHECK: insertelement <16 x half> {{.*}}, i32 3175  // CHECK: insertelement <16 x half> {{.*}}, i32 4176  // CHECK: insertelement <16 x half> {{.*}}, i32 5177  // CHECK: insertelement <16 x half> {{.*}}, i32 6178  // CHECK: insertelement <16 x half> {{.*}}, i32 7179  // CHECK: insertelement <16 x half> {{.*}}, i32 8180  // CHECK: insertelement <16 x half> {{.*}}, i32 9181  // CHECK: insertelement <16 x half> {{.*}}, i32 10182  // CHECK: insertelement <16 x half> {{.*}}, i32 11183  // CHECK: insertelement <16 x half> {{.*}}, i32 12184  // CHECK: insertelement <16 x half> {{.*}}, i32 13185  // CHECK: insertelement <16 x half> {{.*}}, i32 14186  // CHECK: insertelement <16 x half> {{.*}}, i32 15187  return _mm256_setr_ph(__h1, __h2, __h3, __h4, __h5, __h6, __h7, __h8,188                        __h9, __h10, __h11, __h12, __h13, __h14, __h15, __h16);189}190 191TEST_CONSTEXPR(match_m256h(_mm256_setr_ph(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0), 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0));192 193__m256h test_mm256_add_ph(__m256h __A, __m256h __B) {194  // CHECK-LABEL: test_mm256_add_ph195  // CHECK: %{{.*}} = fadd <16 x half> %{{.*}}, %{{.*}}196  return _mm256_add_ph(__A, __B);197}198 199__m256h test_mm256_mask_add_ph(__m256h __W, __mmask32 __U, __m256h __A, __m256h __B) {200  // CHECK-LABEL: test_mm256_mask_add_ph201  // CHECK: %{{.*}} = fadd <16 x half> %{{.*}}, %{{.*}}202  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}203  return (__m256h)_mm256_mask_add_ph(__W, __U, __A, __B);204}205 206__m256h test_mm256_maskz_add_ph(__mmask32 __U, __m256h __A, __m256h __B) {207  // CHECK-LABEL: test_mm256_maskz_add_ph208  // CHECK: %{{.*}} = fadd <16 x half> %{{.*}}, %{{.*}}209  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}210  return _mm256_maskz_add_ph(__U, __A, __B);211}212 213__m128h test_mm_add_ph(__m128h __A, __m128h __B) {214  // CHECK-LABEL: test_mm_add_ph215  // CHECK: %{{.*}} = fadd <8 x half> %{{.*}}, %{{.*}}216  return _mm_add_ph(__A, __B);217}218 219__m128h test_mm_mask_add_ph(__m128h __W, __mmask32 __U, __m128h __A, __m128h __B) {220  // CHECK-LABEL: test_mm_mask_add_ph221  // CHECK: %{{.*}} = fadd <8 x half> %{{.*}}, %{{.*}}222  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}223  return (__m128h)_mm_mask_add_ph(__W, __U, __A, __B);224}225 226__m128h test_mm_maskz_add_ph(__mmask32 __U, __m128h __A, __m128h __B) {227  // CHECK-LABEL: test_mm_maskz_add_ph228  // CHECK: %{{.*}} = fadd <8 x half> %{{.*}}, %{{.*}}229  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}230  return _mm_maskz_add_ph(__U, __A, __B);231}232 233__m256h test_mm256_sub_ph(__m256h __A, __m256h __B) {234  // CHECK-LABEL: test_mm256_sub_ph235  // CHECK: %{{.*}} = fsub <16 x half> %{{.*}}, %{{.*}}236  return _mm256_sub_ph(__A, __B);237}238 239__m256h test_mm256_mask_sub_ph(__m256h __W, __mmask32 __U, __m256h __A, __m256h __B) {240  // CHECK-LABEL: test_mm256_mask_sub_ph241  // CHECK: %{{.*}} = fsub <16 x half> %{{.*}}, %{{.*}}242  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}243  return (__m256h)_mm256_mask_sub_ph(__W, __U, __A, __B);244}245 246__m256h test_mm256_maskz_sub_ph(__mmask32 __U, __m256h __A, __m256h __B) {247  // CHECK-LABEL: test_mm256_maskz_sub_ph248  // CHECK: %{{.*}} = fsub <16 x half> %{{.*}}, %{{.*}}249  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}250  return _mm256_maskz_sub_ph(__U, __A, __B);251}252 253__m128h test_mm_sub_ph(__m128h __A, __m128h __B) {254  // CHECK-LABEL: test_mm_sub_ph255  // CHECK: %{{.*}} = fsub <8 x half> %{{.*}}, %{{.*}}256  return _mm_sub_ph(__A, __B);257}258 259__m128h test_mm_mask_sub_ph(__m128h __W, __mmask32 __U, __m128h __A, __m128h __B) {260  // CHECK-LABEL: test_mm_mask_sub_ph261  // CHECK: %{{.*}} = fsub <8 x half> %{{.*}}, %{{.*}}262  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}263  return (__m128h)_mm_mask_sub_ph(__W, __U, __A, __B);264}265 266__m128h test_mm_maskz_sub_ph(__mmask32 __U, __m128h __A, __m128h __B) {267  // CHECK-LABEL: test_mm_maskz_sub_ph268  // CHECK: %{{.*}} = fsub <8 x half> %{{.*}}, %{{.*}}269  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}270  return _mm_maskz_sub_ph(__U, __A, __B);271}272 273__m256h test_mm256_mul_ph(__m256h __A, __m256h __B) {274  // CHECK-LABEL: test_mm256_mul_ph275  // CHECK: %{{.*}} = fmul <16 x half> %{{.*}}, %{{.*}}276  return _mm256_mul_ph(__A, __B);277}278 279__m256h test_mm256_mask_mul_ph(__m256h __W, __mmask32 __U, __m256h __A, __m256h __B) {280  // CHECK-LABEL: test_mm256_mask_mul_ph281  // CHECK: %{{.*}} = fmul <16 x half> %{{.*}}, %{{.*}}282  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}283  return (__m256h)_mm256_mask_mul_ph(__W, __U, __A, __B);284}285 286__m256h test_mm256_maskz_mul_ph(__mmask32 __U, __m256h __A, __m256h __B) {287  // CHECK-LABEL: test_mm256_maskz_mul_ph288  // CHECK: %{{.*}} = fmul <16 x half> %{{.*}}, %{{.*}}289  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}290  return _mm256_maskz_mul_ph(__U, __A, __B);291}292 293__m128h test_mm_mul_ph(__m128h __A, __m128h __B) {294  // CHECK-LABEL: test_mm_mul_ph295  // CHECK: %{{.*}} = fmul <8 x half> %{{.*}}, %{{.*}}296  return _mm_mul_ph(__A, __B);297}298 299__m128h test_mm_mask_mul_ph(__m128h __W, __mmask32 __U, __m128h __A, __m128h __B) {300  // CHECK-LABEL: test_mm_mask_mul_ph301  // CHECK: %{{.*}} = fmul <8 x half> %{{.*}}, %{{.*}}302  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}303  return (__m128h)_mm_mask_mul_ph(__W, __U, __A, __B);304}305 306__m128h test_mm_maskz_mul_ph(__mmask32 __U, __m128h __A, __m128h __B) {307  // CHECK-LABEL: test_mm_maskz_mul_ph308  // CHECK: %{{.*}} = fmul <8 x half> %{{.*}}, %{{.*}}309  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}310  return _mm_maskz_mul_ph(__U, __A, __B);311}312 313__m256h test_mm256_div_ph(__m256h __A, __m256h __B) {314  // CHECK-LABEL: test_mm256_div_ph315  // CHECK: %{{.*}} = fdiv <16 x half> %{{.*}}, %{{.*}}316  return _mm256_div_ph(__A, __B);317}318 319__m256h test_mm256_mask_div_ph(__m256h __W, __mmask32 __U, __m256h __A, __m256h __B) {320  // CHECK-LABEL: test_mm256_mask_div_ph321  // CHECK: %{{.*}} = fdiv <16 x half> %{{.*}}, %{{.*}}322  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}323  return (__m256h)_mm256_mask_div_ph(__W, __U, __A, __B);324}325 326__m256h test_mm256_maskz_div_ph(__mmask32 __U, __m256h __A, __m256h __B) {327  // CHECK-LABEL: test_mm256_maskz_div_ph328  // CHECK: %{{.*}} = fdiv <16 x half> %{{.*}}, %{{.*}}329  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}330  return _mm256_maskz_div_ph(__U, __A, __B);331}332 333__m128h test_mm_div_ph(__m128h __A, __m128h __B) {334  // CHECK-LABEL: test_mm_div_ph335  // CHECK: %{{.*}} = fdiv <8 x half> %{{.*}}, %{{.*}}336  return _mm_div_ph(__A, __B);337}338 339__m128h test_mm_mask_div_ph(__m128h __W, __mmask32 __U, __m128h __A, __m128h __B) {340  // CHECK-LABEL: test_mm_mask_div_ph341  // CHECK: %{{.*}} = fdiv <8 x half> %{{.*}}, %{{.*}}342  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}343  return (__m128h)_mm_mask_div_ph(__W, __U, __A, __B);344}345 346__m128h test_mm_maskz_div_ph(__mmask32 __U, __m128h __A, __m128h __B) {347  // CHECK-LABEL: test_mm_maskz_div_ph348  // CHECK: %{{.*}} = fdiv <8 x half> %{{.*}}, %{{.*}}349  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}350  return _mm_maskz_div_ph(__U, __A, __B);351}352 353__m256h test_mm256_min_ph(__m256h __A, __m256h __B) {354  // CHECK-LABEL: test_mm256_min_ph355  // CHECK: @llvm.x86.avx512fp16.min.ph.256356  return _mm256_min_ph(__A, __B);357}358 359__m256h test_mm256_mask_min_ph(__m256h __W, __mmask32 __U, __m256h __A, __m256h __B) {360  // CHECK-LABEL: test_mm256_mask_min_ph361  // CHECK: @llvm.x86.avx512fp16.min.ph.256362  return (__m256h)_mm256_mask_min_ph(__W, __U, __A, __B);363}364 365__m256h test_mm256_maskz_min_ph(__mmask32 __U, __m256h __A, __m256h __B) {366  // CHECK-LABEL: test_mm256_maskz_min_ph367  // CHECK: @llvm.x86.avx512fp16.min.ph.256368  return _mm256_maskz_min_ph(__U, __A, __B);369}370 371__m128h test_mm_min_ph(__m128h __A, __m128h __B) {372  // CHECK-LABEL: test_mm_min_ph373  // CHECK: @llvm.x86.avx512fp16.min.ph.128374  return _mm_min_ph(__A, __B);375}376 377__m128h test_mm_mask_min_ph(__m128h __W, __mmask32 __U, __m128h __A, __m128h __B) {378  // CHECK-LABEL: test_mm_mask_min_ph379  // CHECK: @llvm.x86.avx512fp16.min.ph.128380  return (__m128h)_mm_mask_min_ph(__W, __U, __A, __B);381}382 383__m128h test_mm_maskz_min_ph(__mmask32 __U, __m128h __A, __m128h __B) {384  // CHECK-LABEL: test_mm_maskz_min_ph385  // CHECK: @llvm.x86.avx512fp16.min.ph.128386  return _mm_maskz_min_ph(__U, __A, __B);387}388 389__m256h test_mm256_max_ph(__m256h __A, __m256h __B) {390  // CHECK-LABEL: test_mm256_max_ph391  // CHECK: @llvm.x86.avx512fp16.max.ph.256392  return _mm256_max_ph(__A, __B);393}394 395__m256h test_mm256_mask_max_ph(__m256h __W, __mmask32 __U, __m256h __A, __m256h __B) {396  // CHECK-LABEL: test_mm256_mask_max_ph397  // CHECK: @llvm.x86.avx512fp16.max.ph.256398  return (__m256h)_mm256_mask_max_ph(__W, __U, __A, __B);399}400 401__m256h test_mm256_maskz_max_ph(__mmask32 __U, __m256h __A, __m256h __B) {402  // CHECK-LABEL: test_mm256_maskz_max_ph403  // CHECK: @llvm.x86.avx512fp16.max.ph.256404  return _mm256_maskz_max_ph(__U, __A, __B);405}406 407__m128h test_mm_max_ph(__m128h __A, __m128h __B) {408  // CHECK-LABEL: test_mm_max_ph409  // CHECK: @llvm.x86.avx512fp16.max.ph.128410  return _mm_max_ph(__A, __B);411}412 413__m128h test_mm_mask_max_ph(__m128h __W, __mmask32 __U, __m128h __A, __m128h __B) {414  // CHECK-LABEL: test_mm_mask_max_ph415  // CHECK: @llvm.x86.avx512fp16.max.ph.128416  return (__m128h)_mm_mask_max_ph(__W, __U, __A, __B);417}418 419__m128h test_mm_maskz_max_ph(__mmask32 __U, __m128h __A, __m128h __B) {420  // CHECK-LABEL: test_mm_maskz_max_ph421  // CHECK: @llvm.x86.avx512fp16.max.ph.128422  return _mm_maskz_max_ph(__U, __A, __B);423}424 425__m128h test_mm_abs_ph(__m128h a) {426  // CHECK-LABEL: test_mm_abs_ph427  // CHECK: and <4 x i32>428  return _mm_abs_ph(a);429}430TEST_CONSTEXPR(match_m128h(_mm_abs_ph((__m128h){-1.0, 2.0, -3.0, 4.0, -5.0, 6.0, -7.0, 8.0}), 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0));431 432__m256h test_mm256_abs_ph(__m256h a) {433  // CHECK-LABEL: test_mm256_abs_ph434  // CHECK: and <8 x i32>435  return _mm256_abs_ph(a);436}437TEST_CONSTEXPR(match_m256h(_mm256_abs_ph((__m256h){-1.0, 2.0, -3.0, 4.0, -5.0, 6.0, -7.0, 8.0, -9.0, 10.0, -11.0, 12.0, -13.0, 14.0, -15.0, 16.0}), 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0));438 439__m256h test_mm256_conj_pch(__m256h __A) {440  // CHECK-LABEL: test_mm256_conj_pch441  // CHECK:  %{{.*}} = bitcast <16 x half> %{{.*}} to <8 x float>442  // CHECK:  %{{.*}} = bitcast <8 x float> %{{.*}} to <8 x i32>443  // CHECK:  %{{.*}} = bitcast <8 x float> %{{.*}} to <8 x i32>444  // CHECK:  %{{.*}} = xor <8 x i32> %{{.*}}, %{{.*}}445  // CHECK:  %{{.*}} = bitcast <8 x i32> %{{.*}} to <8 x float>446  // CHECK:  %{{.*}} = bitcast <8 x float> %{{.*}} to <16 x half>447  return _mm256_conj_pch(__A);448}449 450__m256h test_mm256_mask_conj_pch(__m256h __W, __mmask32 __U, __m256h __A) {451  // CHECK-LABEL: test_mm256_mask_conj_pch452  // CHECK:  %{{.*}} = trunc i32 %{{.*}} to i8453  // CHECK:  %{{.*}} = bitcast <16 x half> %{{.*}} to <8 x float>454  // CHECK:  %{{.*}} = bitcast <8 x float> %{{.*}} to <8 x i32>455  // CHECK:  %{{.*}} = bitcast <8 x float> %{{.*}} to <8 x i32>456  // CHECK:  %{{.*}} = xor <8 x i32> %{{.*}}, %{{.*}}457  // CHECK:  %{{.*}} = bitcast <8 x i32> %{{.*}} to <8 x float>458  // CHECK:  %{{.*}} = bitcast <8 x float> %{{.*}} to <16 x half>459  // CHECK:  %{{.*}} = bitcast <16 x half> %{{.*}} to <8 x float>460  // CHECK:  %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>461  // CHECK:  %{{.*}} = select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}462  // CHECK:  %{{.*}} = bitcast <8 x float> %{{.*}} to <16 x half>463  return _mm256_mask_conj_pch(__W, __U, __A);464}465 466__m256h test_mm256_maskz_conj_pch(__mmask32 __U, __m256h __A) {467  // CHECK-LABEL: test_mm256_maskz_conj_pch468  // CHECK:  %{{.*}} = trunc i32 %{{.*}} to i8469  // CHECK:  %{{.*}} = bitcast <16 x half> %{{.*}} to <8 x float>470  // CHECK:  %{{.*}} = bitcast <8 x float> %{{.*}} to <8 x i32>471  // CHECK:  %{{.*}} = bitcast <8 x float> %{{.*}} to <8 x i32>472  // CHECK:  %{{.*}} = xor <8 x i32> %{{.*}}, %{{.*}}473  // CHECK:  %{{.*}} = bitcast <8 x i32> %{{.*}} to <8 x float>474  // CHECK:  %{{.*}} = bitcast <8 x float> %{{.*}} to <16 x half>475  // CHECK:  %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>476  // CHECK:  %{{.*}} = select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}477  // CHECK:  %{{.*}} = bitcast <8 x float> %{{.*}} to <16 x half>478  return _mm256_maskz_conj_pch(__U, __A);479}480 481__m128h test_mm_conj_pch(__m128h __A) {482  // CHECK-LABEL: test_mm_conj_pch483  // CHECK:  %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float>484  // CHECK:  %{{.*}} = bitcast <4 x float> %{{.*}} to <4 x i32>485  // CHECK:  %{{.*}} = bitcast <4 x float> %{{.*}} to <4 x i32>486  // CHECK:  %{{.*}} = xor <4 x i32> %{{.*}}, %{{.*}}487  // CHECK:  %{{.*}} = bitcast <4 x i32> %{{.*}} to <4 x float>488  // CHECK:  %{{.*}} = bitcast <4 x float> %{{.*}} to <8 x half>489  return _mm_conj_pch(__A);490}491 492__m128h test_mm_mask_conj_pch(__m128h __W, __mmask32 __U, __m128h __A) {493  // CHECK-LABEL: test_mm_mask_conj_pch494  // CHECK:  %{{.*}} = trunc i32 %{{.*}} to i8495  // CHECK:  %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float>496  // CHECK:  %{{.*}} = bitcast <4 x float> %{{.*}} to <4 x i32>497  // CHECK:  %{{.*}} = bitcast <4 x float> %{{.*}} to <4 x i32>498  // CHECK:  %{{.*}} = xor <4 x i32> %{{.*}}, %{{.*}}499  // CHECK:  %{{.*}} = bitcast <4 x i32> %{{.*}} to <4 x float>500  // CHECK:  %{{.*}} = bitcast <4 x float> %{{.*}} to <8 x half>501  // CHECK:  %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float>502  // CHECK:  %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>503  // CHECK:  %{{.*}} = shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>504  // CHECK:  %{{.*}} = select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}505  // CHECK:  %{{.*}} = bitcast <4 x float> %{{.*}} to <8 x half>506  return _mm_mask_conj_pch(__W, __U, __A);507}508 509__m128h test_mm_maskz_conj_pch(__mmask32 __U, __m128h __A) {510  // CHECK-LABEL: test_mm_maskz_conj_pch511  // CHECK:  %{{.*}} = trunc i32 %{{.*}} to i8512  // CHECK:  %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float>513  // CHECK:  %{{.*}} = bitcast <4 x float> %{{.*}} to <4 x i32>514  // CHECK:  %{{.*}} = bitcast <4 x float> %{{.*}} to <4 x i32>515  // CHECK:  %{{.*}} = xor <4 x i32> %{{.*}}, %{{.*}}516  // CHECK:  %{{.*}} = bitcast <4 x i32> %{{.*}} to <4 x float>517  // CHECK:  %{{.*}} = bitcast <4 x float> %{{.*}} to <8 x half>518  // CHECK:  %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>519  // CHECK:  %{{.*}} = shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>520  // CHECK:  %{{.*}} = select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}521  // CHECK:  %{{.*}} = bitcast <4 x float> %{{.*}} to <8 x half>522  return _mm_maskz_conj_pch(__U, __A);523}524 525__mmask16 test_mm256_cmp_ph_mask_eq_oq(__m256h a, __m256h b) {526  // CHECK-LABEL: test_mm256_cmp_ph_mask_eq_oq527  // CHECK: fcmp oeq <16 x half> %{{.*}}, %{{.*}}528  return _mm256_cmp_ph_mask(a, b, _CMP_EQ_OQ);529}530 531__mmask16 test_mm256_cmp_ph_mask_lt_os(__m256h a, __m256h b) {532  // CHECK-LABEL: test_mm256_cmp_ph_mask_lt_os533  // CHECK: fcmp olt <16 x half> %{{.*}}, %{{.*}}534  return _mm256_cmp_ph_mask(a, b, _CMP_LT_OS);535}536 537__mmask16 test_mm256_cmp_ph_mask_le_os(__m256h a, __m256h b) {538  // CHECK-LABEL: test_mm256_cmp_ph_mask_le_os539  // CHECK: fcmp ole <16 x half> %{{.*}}, %{{.*}}540  return _mm256_cmp_ph_mask(a, b, _CMP_LE_OS);541}542 543__mmask16 test_mm256_cmp_ph_mask_unord_q(__m256h a, __m256h b) {544  // CHECK-LABEL: test_mm256_cmp_ph_mask_unord_q545  // CHECK: fcmp uno <16 x half> %{{.*}}, %{{.*}}546  return _mm256_cmp_ph_mask(a, b, _CMP_UNORD_Q);547}548 549__mmask16 test_mm256_cmp_ph_mask_neq_uq(__m256h a, __m256h b) {550  // CHECK-LABEL: test_mm256_cmp_ph_mask_neq_uq551  // CHECK: fcmp une <16 x half> %{{.*}}, %{{.*}}552  return _mm256_cmp_ph_mask(a, b, _CMP_NEQ_UQ);553}554 555__mmask16 test_mm256_cmp_ph_mask_nlt_us(__m256h a, __m256h b) {556  // CHECK-LABEL: test_mm256_cmp_ph_mask_nlt_us557  // CHECK: fcmp uge <16 x half> %{{.*}}, %{{.*}}558  return _mm256_cmp_ph_mask(a, b, _CMP_NLT_US);559}560 561__mmask16 test_mm256_cmp_ph_mask_nle_us(__m256h a, __m256h b) {562  // CHECK-LABEL: test_mm256_cmp_ph_mask_nle_us563  // CHECK: fcmp ugt <16 x half> %{{.*}}, %{{.*}}564  return _mm256_cmp_ph_mask(a, b, _CMP_NLE_US);565}566 567__mmask16 test_mm256_cmp_ph_mask_ord_q(__m256h a, __m256h b) {568  // CHECK-LABEL: test_mm256_cmp_ph_mask_ord_q569  // CHECK: fcmp ord <16 x half> %{{.*}}, %{{.*}}570  return _mm256_cmp_ph_mask(a, b, _CMP_ORD_Q);571}572 573__mmask16 test_mm256_cmp_ph_mask_eq_uq(__m256h a, __m256h b) {574  // CHECK-LABEL: test_mm256_cmp_ph_mask_eq_uq575  // CHECK: fcmp ueq <16 x half> %{{.*}}, %{{.*}}576  return _mm256_cmp_ph_mask(a, b, _CMP_EQ_UQ);577}578 579__mmask16 test_mm256_cmp_ph_mask_nge_us(__m256h a, __m256h b) {580  // CHECK-LABEL: test_mm256_cmp_ph_mask_nge_us581  // CHECK: fcmp ult <16 x half> %{{.*}}, %{{.*}}582  return _mm256_cmp_ph_mask(a, b, _CMP_NGE_US);583}584 585__mmask16 test_mm256_cmp_ph_mask_ngt_us(__m256h a, __m256h b) {586  // CHECK-LABEL: test_mm256_cmp_ph_mask_ngt_us587  // CHECK: fcmp ule <16 x half> %{{.*}}, %{{.*}}588  return _mm256_cmp_ph_mask(a, b, _CMP_NGT_US);589}590 591__mmask16 test_mm256_cmp_ph_mask_false_oq(__m256h a, __m256h b) {592  // CHECK-LABEL: test_mm256_cmp_ph_mask_false_oq593  // CHECK: fcmp false <16 x half> %{{.*}}, %{{.*}}594  return _mm256_cmp_ph_mask(a, b, _CMP_FALSE_OQ);595}596 597__mmask16 test_mm256_cmp_ph_mask_neq_oq(__m256h a, __m256h b) {598  // CHECK-LABEL: test_mm256_cmp_ph_mask_neq_oq599  // CHECK: fcmp one <16 x half> %{{.*}}, %{{.*}}600  return _mm256_cmp_ph_mask(a, b, _CMP_NEQ_OQ);601}602 603__mmask16 test_mm256_cmp_ph_mask_ge_os(__m256h a, __m256h b) {604  // CHECK-LABEL: test_mm256_cmp_ph_mask_ge_os605  // CHECK: fcmp oge <16 x half> %{{.*}}, %{{.*}}606  return _mm256_cmp_ph_mask(a, b, _CMP_GE_OS);607}608 609__mmask16 test_mm256_cmp_ph_mask_gt_os(__m256h a, __m256h b) {610  // CHECK-LABEL: test_mm256_cmp_ph_mask_gt_os611  // CHECK: fcmp ogt <16 x half> %{{.*}}, %{{.*}}612  return _mm256_cmp_ph_mask(a, b, _CMP_GT_OS);613}614 615__mmask16 test_mm256_cmp_ph_mask_true_uq(__m256h a, __m256h b) {616  // CHECK-LABEL: test_mm256_cmp_ph_mask_true_uq617  // CHECK: fcmp true <16 x half> %{{.*}}, %{{.*}}618  return _mm256_cmp_ph_mask(a, b, _CMP_TRUE_UQ);619}620 621__mmask16 test_mm256_cmp_ph_mask_eq_os(__m256h a, __m256h b) {622  // CHECK-LABEL: test_mm256_cmp_ph_mask_eq_os623  // CHECK: fcmp oeq <16 x half> %{{.*}}, %{{.*}}624  return _mm256_cmp_ph_mask(a, b, _CMP_EQ_OS);625}626 627__mmask16 test_mm256_cmp_ph_mask_lt_oq(__m256h a, __m256h b) {628  // CHECK-LABEL: test_mm256_cmp_ph_mask_lt_oq629  // CHECK: fcmp olt <16 x half> %{{.*}}, %{{.*}}630  return _mm256_cmp_ph_mask(a, b, _CMP_LT_OQ);631}632 633__mmask16 test_mm256_cmp_ph_mask_le_oq(__m256h a, __m256h b) {634  // CHECK-LABEL: test_mm256_cmp_ph_mask_le_oq635  // CHECK: fcmp ole <16 x half> %{{.*}}, %{{.*}}636  return _mm256_cmp_ph_mask(a, b, _CMP_LE_OQ);637}638 639__mmask16 test_mm256_cmp_ph_mask_unord_s(__m256h a, __m256h b) {640  // CHECK-LABEL: test_mm256_cmp_ph_mask_unord_s641  // CHECK: fcmp uno <16 x half> %{{.*}}, %{{.*}}642  return _mm256_cmp_ph_mask(a, b, _CMP_UNORD_S);643}644 645__mmask16 test_mm256_cmp_ph_mask_neq_us(__m256h a, __m256h b) {646  // CHECK-LABEL: test_mm256_cmp_ph_mask_neq_us647  // CHECK: fcmp une <16 x half> %{{.*}}, %{{.*}}648  return _mm256_cmp_ph_mask(a, b, _CMP_NEQ_US);649}650 651__mmask16 test_mm256_cmp_ph_mask_nlt_uq(__m256h a, __m256h b) {652  // CHECK-LABEL: test_mm256_cmp_ph_mask_nlt_uq653  // CHECK: fcmp uge <16 x half> %{{.*}}, %{{.*}}654  return _mm256_cmp_ph_mask(a, b, _CMP_NLT_UQ);655}656 657__mmask16 test_mm256_cmp_ph_mask_nle_uq(__m256h a, __m256h b) {658  // CHECK-LABEL: test_mm256_cmp_ph_mask_nle_uq659  // CHECK: fcmp ugt <16 x half> %{{.*}}, %{{.*}}660  return _mm256_cmp_ph_mask(a, b, _CMP_NLE_UQ);661}662 663__mmask16 test_mm256_cmp_ph_mask_ord_s(__m256h a, __m256h b) {664  // CHECK-LABEL: test_mm256_cmp_ph_mask_ord_s665  // CHECK: fcmp ord <16 x half> %{{.*}}, %{{.*}}666  return _mm256_cmp_ph_mask(a, b, _CMP_ORD_S);667}668 669__mmask16 test_mm256_cmp_ph_mask_eq_us(__m256h a, __m256h b) {670  // CHECK-LABEL: test_mm256_cmp_ph_mask_eq_us671  // CHECK: fcmp ueq <16 x half> %{{.*}}, %{{.*}}672  return _mm256_cmp_ph_mask(a, b, _CMP_EQ_US);673}674 675__mmask16 test_mm256_cmp_ph_mask_nge_uq(__m256h a, __m256h b) {676  // CHECK-LABEL: test_mm256_cmp_ph_mask_nge_uq677  // CHECK: fcmp ult <16 x half> %{{.*}}, %{{.*}}678  return _mm256_cmp_ph_mask(a, b, _CMP_NGE_UQ);679}680 681__mmask16 test_mm256_cmp_ph_mask_ngt_uq(__m256h a, __m256h b) {682  // CHECK-LABEL: test_mm256_cmp_ph_mask_ngt_uq683  // CHECK: fcmp ule <16 x half> %{{.*}}, %{{.*}}684  return _mm256_cmp_ph_mask(a, b, _CMP_NGT_UQ);685}686 687__mmask16 test_mm256_cmp_ph_mask_false_os(__m256h a, __m256h b) {688  // CHECK-LABEL: test_mm256_cmp_ph_mask_false_os689  // CHECK: fcmp false <16 x half> %{{.*}}, %{{.*}}690  return _mm256_cmp_ph_mask(a, b, _CMP_FALSE_OS);691}692 693__mmask16 test_mm256_cmp_ph_mask_neq_os(__m256h a, __m256h b) {694  // CHECK-LABEL: test_mm256_cmp_ph_mask_neq_os695  // CHECK: fcmp one <16 x half> %{{.*}}, %{{.*}}696  return _mm256_cmp_ph_mask(a, b, _CMP_NEQ_OS);697}698 699__mmask16 test_mm256_cmp_ph_mask_ge_oq(__m256h a, __m256h b) {700  // CHECK-LABEL: test_mm256_cmp_ph_mask_ge_oq701  // CHECK: fcmp oge <16 x half> %{{.*}}, %{{.*}}702  return _mm256_cmp_ph_mask(a, b, _CMP_GE_OQ);703}704 705__mmask16 test_mm256_cmp_ph_mask_gt_oq(__m256h a, __m256h b) {706  // CHECK-LABEL: test_mm256_cmp_ph_mask_gt_oq707  // CHECK: fcmp ogt <16 x half> %{{.*}}, %{{.*}}708  return _mm256_cmp_ph_mask(a, b, _CMP_GT_OQ);709}710 711__mmask16 test_mm256_cmp_ph_mask_true_us(__m256h a, __m256h b) {712  // CHECK-LABEL: test_mm256_cmp_ph_mask_true_us713  // CHECK: fcmp true <16 x half> %{{.*}}, %{{.*}}714  return _mm256_cmp_ph_mask(a, b, _CMP_TRUE_US);715}716 717__mmask16 test_mm256_mask_cmp_ph_mask_eq_oq(__mmask16 m, __m256h a, __m256h b) {718  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_eq_oq719  // CHECK: [[CMP:%.*]] = fcmp oeq <16 x half> %{{.*}}, %{{.*}}720  // CHECK: and <16 x i1> [[CMP]], {{.*}}721  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_EQ_OQ);722}723 724__mmask16 test_mm256_mask_cmp_ph_mask_lt_os(__mmask16 m, __m256h a, __m256h b) {725  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_lt_os726  // CHECK: [[CMP:%.*]] = fcmp olt <16 x half> %{{.*}}, %{{.*}}727  // CHECK: and <16 x i1> [[CMP]], {{.*}}728  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_LT_OS);729}730 731__mmask16 test_mm256_mask_cmp_ph_mask_le_os(__mmask16 m, __m256h a, __m256h b) {732  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_le_os733  // CHECK: [[CMP:%.*]] = fcmp ole <16 x half> %{{.*}}, %{{.*}}734  // CHECK: and <16 x i1> [[CMP]], {{.*}}735  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_LE_OS);736}737 738__mmask16 test_mm256_mask_cmp_ph_mask_unord_q(__mmask16 m, __m256h a, __m256h b) {739  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_unord_q740  // CHECK: [[CMP:%.*]] = fcmp uno <16 x half> %{{.*}}, %{{.*}}741  // CHECK: and <16 x i1> [[CMP]], {{.*}}742  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_UNORD_Q);743}744 745__mmask16 test_mm256_mask_cmp_ph_mask_neq_uq(__mmask16 m, __m256h a, __m256h b) {746  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_neq_uq747  // CHECK: [[CMP:%.*]] = fcmp une <16 x half> %{{.*}}, %{{.*}}748  // CHECK: and <16 x i1> [[CMP]], {{.*}}749  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_NEQ_UQ);750}751 752__mmask16 test_mm256_mask_cmp_ph_mask_nlt_us(__mmask16 m, __m256h a, __m256h b) {753  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_nlt_us754  // CHECK: [[CMP:%.*]] = fcmp uge <16 x half> %{{.*}}, %{{.*}}755  // CHECK: and <16 x i1> [[CMP]], {{.*}}756  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_NLT_US);757}758 759__mmask16 test_mm256_mask_cmp_ph_mask_nle_us(__mmask16 m, __m256h a, __m256h b) {760  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_nle_us761  // CHECK: [[CMP:%.*]] = fcmp ugt <16 x half> %{{.*}}, %{{.*}}762  // CHECK: and <16 x i1> [[CMP]], {{.*}}763  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_NLE_US);764}765 766__mmask16 test_mm256_mask_cmp_ph_mask_ord_q(__mmask16 m, __m256h a, __m256h b) {767  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_ord_q768  // CHECK: [[CMP:%.*]] = fcmp ord <16 x half> %{{.*}}, %{{.*}}769  // CHECK: and <16 x i1> [[CMP]], {{.*}}770  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_ORD_Q);771}772 773__mmask16 test_mm256_mask_cmp_ph_mask_eq_uq(__mmask16 m, __m256h a, __m256h b) {774  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_eq_uq775  // CHECK: [[CMP:%.*]] = fcmp ueq <16 x half> %{{.*}}, %{{.*}}776  // CHECK: and <16 x i1> [[CMP]], {{.*}}777  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_EQ_UQ);778}779 780__mmask16 test_mm256_mask_cmp_ph_mask_nge_us(__mmask16 m, __m256h a, __m256h b) {781  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_nge_us782  // CHECK: [[CMP:%.*]] = fcmp ult <16 x half> %{{.*}}, %{{.*}}783  // CHECK: and <16 x i1> [[CMP]], {{.*}}784  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_NGE_US);785}786 787__mmask16 test_mm256_mask_cmp_ph_mask_ngt_us(__mmask16 m, __m256h a, __m256h b) {788  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_ngt_us789  // CHECK: [[CMP:%.*]] = fcmp ule <16 x half> %{{.*}}, %{{.*}}790  // CHECK: and <16 x i1> [[CMP]], {{.*}}791  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_NGT_US);792}793 794__mmask16 test_mm256_mask_cmp_ph_mask_false_oq(__mmask16 m, __m256h a, __m256h b) {795  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_false_oq796  // CHECK: [[CMP:%.*]] = fcmp false <16 x half> %{{.*}}, %{{.*}}797  // CHECK: and <16 x i1> [[CMP]], {{.*}}798  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_FALSE_OQ);799}800 801__mmask16 test_mm256_mask_cmp_ph_mask_neq_oq(__mmask16 m, __m256h a, __m256h b) {802  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_neq_oq803  // CHECK: [[CMP:%.*]] = fcmp one <16 x half> %{{.*}}, %{{.*}}804  // CHECK: and <16 x i1> [[CMP]], {{.*}}805  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_NEQ_OQ);806}807 808__mmask16 test_mm256_mask_cmp_ph_mask_ge_os(__mmask16 m, __m256h a, __m256h b) {809  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_ge_os810  // CHECK: [[CMP:%.*]] = fcmp oge <16 x half> %{{.*}}, %{{.*}}811  // CHECK: and <16 x i1> [[CMP]], {{.*}}812  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_GE_OS);813}814 815__mmask16 test_mm256_mask_cmp_ph_mask_gt_os(__mmask16 m, __m256h a, __m256h b) {816  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_gt_os817  // CHECK: [[CMP:%.*]] = fcmp ogt <16 x half> %{{.*}}, %{{.*}}818  // CHECK: and <16 x i1> [[CMP]], {{.*}}819  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_GT_OS);820}821 822__mmask16 test_mm256_mask_cmp_ph_mask_true_uq(__mmask16 m, __m256h a, __m256h b) {823  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_true_uq824  // CHECK: [[CMP:%.*]] = fcmp true <16 x half> %{{.*}}, %{{.*}}825  // CHECK: and <16 x i1> [[CMP]], {{.*}}826  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_TRUE_UQ);827}828 829__mmask16 test_mm256_mask_cmp_ph_mask_eq_os(__mmask16 m, __m256h a, __m256h b) {830  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_eq_os831  // CHECK: [[CMP:%.*]] = fcmp oeq <16 x half> %{{.*}}, %{{.*}}832  // CHECK: and <16 x i1> [[CMP]], {{.*}}833  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_EQ_OS);834}835 836__mmask16 test_mm256_mask_cmp_ph_mask_lt_oq(__mmask16 m, __m256h a, __m256h b) {837  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_lt_oq838  // CHECK: [[CMP:%.*]] = fcmp olt <16 x half> %{{.*}}, %{{.*}}839  // CHECK: and <16 x i1> [[CMP]], {{.*}}840  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_LT_OQ);841}842 843__mmask16 test_mm256_mask_cmp_ph_mask_le_oq(__mmask16 m, __m256h a, __m256h b) {844  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_le_oq845  // CHECK: [[CMP:%.*]] = fcmp ole <16 x half> %{{.*}}, %{{.*}}846  // CHECK: and <16 x i1> [[CMP]], {{.*}}847  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_LE_OQ);848}849 850__mmask16 test_mm256_mask_cmp_ph_mask_unord_s(__mmask16 m, __m256h a, __m256h b) {851  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_unord_s852  // CHECK: [[CMP:%.*]] = fcmp uno <16 x half> %{{.*}}, %{{.*}}853  // CHECK: and <16 x i1> [[CMP]], {{.*}}854  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_UNORD_S);855}856 857__mmask16 test_mm256_mask_cmp_ph_mask_neq_us(__mmask16 m, __m256h a, __m256h b) {858  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_neq_us859  // CHECK: [[CMP:%.*]] = fcmp une <16 x half> %{{.*}}, %{{.*}}860  // CHECK: and <16 x i1> [[CMP]], {{.*}}861  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_NEQ_US);862}863 864__mmask16 test_mm256_mask_cmp_ph_mask_nlt_uq(__mmask16 m, __m256h a, __m256h b) {865  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_nlt_uq866  // CHECK: [[CMP:%.*]] = fcmp uge <16 x half> %{{.*}}, %{{.*}}867  // CHECK: and <16 x i1> [[CMP]], {{.*}}868  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_NLT_UQ);869}870 871__mmask16 test_mm256_mask_cmp_ph_mask_nle_uq(__mmask16 m, __m256h a, __m256h b) {872  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_nle_uq873  // CHECK: [[CMP:%.*]] = fcmp ugt <16 x half> %{{.*}}, %{{.*}}874  // CHECK: and <16 x i1> [[CMP]], {{.*}}875  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_NLE_UQ);876}877 878__mmask16 test_mm256_mask_cmp_ph_mask_ord_s(__mmask16 m, __m256h a, __m256h b) {879  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_ord_s880  // CHECK: [[CMP:%.*]] = fcmp ord <16 x half> %{{.*}}, %{{.*}}881  // CHECK: and <16 x i1> [[CMP]], {{.*}}882  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_ORD_S);883}884 885__mmask16 test_mm256_mask_cmp_ph_mask_eq_us(__mmask16 m, __m256h a, __m256h b) {886  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_eq_us887  // CHECK: [[CMP:%.*]] = fcmp ueq <16 x half> %{{.*}}, %{{.*}}888  // CHECK: and <16 x i1> [[CMP]], {{.*}}889  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_EQ_US);890}891 892__mmask16 test_mm256_mask_cmp_ph_mask_nge_uq(__mmask16 m, __m256h a, __m256h b) {893  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_nge_uq894  // CHECK: [[CMP:%.*]] = fcmp ult <16 x half> %{{.*}}, %{{.*}}895  // CHECK: and <16 x i1> [[CMP]], {{.*}}896  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_NGE_UQ);897}898 899__mmask16 test_mm256_mask_cmp_ph_mask_ngt_uq(__mmask16 m, __m256h a, __m256h b) {900  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_ngt_uq901  // CHECK: [[CMP:%.*]] = fcmp ule <16 x half> %{{.*}}, %{{.*}}902  // CHECK: and <16 x i1> [[CMP]], {{.*}}903  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_NGT_UQ);904}905 906__mmask16 test_mm256_mask_cmp_ph_mask_false_os(__mmask16 m, __m256h a, __m256h b) {907  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_false_os908  // CHECK: [[CMP:%.*]] = fcmp false <16 x half> %{{.*}}, %{{.*}}909  // CHECK: and <16 x i1> [[CMP]], {{.*}}910  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_FALSE_OS);911}912 913__mmask16 test_mm256_mask_cmp_ph_mask_neq_os(__mmask16 m, __m256h a, __m256h b) {914  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_neq_os915  // CHECK: [[CMP:%.*]] = fcmp one <16 x half> %{{.*}}, %{{.*}}916  // CHECK: and <16 x i1> [[CMP]], {{.*}}917  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_NEQ_OS);918}919 920__mmask16 test_mm256_mask_cmp_ph_mask_ge_oq(__mmask16 m, __m256h a, __m256h b) {921  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_ge_oq922  // CHECK: [[CMP:%.*]] = fcmp oge <16 x half> %{{.*}}, %{{.*}}923  // CHECK: and <16 x i1> [[CMP]], {{.*}}924  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_GE_OQ);925}926 927__mmask16 test_mm256_mask_cmp_ph_mask_gt_oq(__mmask16 m, __m256h a, __m256h b) {928  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_gt_oq929  // CHECK: [[CMP:%.*]] = fcmp ogt <16 x half> %{{.*}}, %{{.*}}930  // CHECK: and <16 x i1> [[CMP]], {{.*}}931  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_GT_OQ);932}933 934__mmask16 test_mm256_mask_cmp_ph_mask_true_us(__mmask16 m, __m256h a, __m256h b) {935  // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_true_us936  // CHECK: [[CMP:%.*]] = fcmp true <16 x half> %{{.*}}, %{{.*}}937  // CHECK: and <16 x i1> [[CMP]], {{.*}}938  return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_TRUE_US);939}940 941__mmask8 test_mm_cmp_ph_mask_eq_oq(__m128h a, __m128h b) {942  // CHECK-LABEL: test_mm_cmp_ph_mask_eq_oq943  // CHECK: fcmp oeq <8 x half> %{{.*}}, %{{.*}}944  return _mm_cmp_ph_mask(a, b, _CMP_EQ_OQ);945}946 947__mmask8 test_mm_cmp_ph_mask_lt_os(__m128h a, __m128h b) {948  // CHECK-LABEL: test_mm_cmp_ph_mask_lt_os949  // CHECK: fcmp olt <8 x half> %{{.*}}, %{{.*}}950  return _mm_cmp_ph_mask(a, b, _CMP_LT_OS);951}952 953__mmask8 test_mm_cmp_ph_mask_le_os(__m128h a, __m128h b) {954  // CHECK-LABEL: test_mm_cmp_ph_mask_le_os955  // CHECK: fcmp ole <8 x half> %{{.*}}, %{{.*}}956  return _mm_cmp_ph_mask(a, b, _CMP_LE_OS);957}958 959__mmask8 test_mm_cmp_ph_mask_unord_q(__m128h a, __m128h b) {960  // CHECK-LABEL: test_mm_cmp_ph_mask_unord_q961  // CHECK: fcmp uno <8 x half> %{{.*}}, %{{.*}}962  return _mm_cmp_ph_mask(a, b, _CMP_UNORD_Q);963}964 965__mmask8 test_mm_cmp_ph_mask_neq_uq(__m128h a, __m128h b) {966  // CHECK-LABEL: test_mm_cmp_ph_mask_neq_uq967  // CHECK: fcmp une <8 x half> %{{.*}}, %{{.*}}968  return _mm_cmp_ph_mask(a, b, _CMP_NEQ_UQ);969}970 971__mmask8 test_mm_cmp_ph_mask_nlt_us(__m128h a, __m128h b) {972  // CHECK-LABEL: test_mm_cmp_ph_mask_nlt_us973  // CHECK: fcmp uge <8 x half> %{{.*}}, %{{.*}}974  return _mm_cmp_ph_mask(a, b, _CMP_NLT_US);975}976 977__mmask8 test_mm_cmp_ph_mask_nle_us(__m128h a, __m128h b) {978  // CHECK-LABEL: test_mm_cmp_ph_mask_nle_us979  // CHECK: fcmp ugt <8 x half> %{{.*}}, %{{.*}}980  return _mm_cmp_ph_mask(a, b, _CMP_NLE_US);981}982 983__mmask8 test_mm_cmp_ph_mask_ord_q(__m128h a, __m128h b) {984  // CHECK-LABEL: test_mm_cmp_ph_mask_ord_q985  // CHECK: fcmp ord <8 x half> %{{.*}}, %{{.*}}986  return _mm_cmp_ph_mask(a, b, _CMP_ORD_Q);987}988 989__mmask8 test_mm_cmp_ph_mask_eq_uq(__m128h a, __m128h b) {990  // CHECK-LABEL: test_mm_cmp_ph_mask_eq_uq991  // CHECK: fcmp ueq <8 x half> %{{.*}}, %{{.*}}992  return _mm_cmp_ph_mask(a, b, _CMP_EQ_UQ);993}994 995__mmask8 test_mm_cmp_ph_mask_nge_us(__m128h a, __m128h b) {996  // CHECK-LABEL: test_mm_cmp_ph_mask_nge_us997  // CHECK: fcmp ult <8 x half> %{{.*}}, %{{.*}}998  return _mm_cmp_ph_mask(a, b, _CMP_NGE_US);999}1000 1001__mmask8 test_mm_cmp_ph_mask_ngt_us(__m128h a, __m128h b) {1002  // CHECK-LABEL: test_mm_cmp_ph_mask_ngt_us1003  // CHECK: fcmp ule <8 x half> %{{.*}}, %{{.*}}1004  return _mm_cmp_ph_mask(a, b, _CMP_NGT_US);1005}1006 1007__mmask8 test_mm_cmp_ph_mask_false_oq(__m128h a, __m128h b) {1008  // CHECK-LABEL: test_mm_cmp_ph_mask_false_oq1009  // CHECK: fcmp false <8 x half> %{{.*}}, %{{.*}}1010  return _mm_cmp_ph_mask(a, b, _CMP_FALSE_OQ);1011}1012 1013__mmask8 test_mm_cmp_ph_mask_neq_oq(__m128h a, __m128h b) {1014  // CHECK-LABEL: test_mm_cmp_ph_mask_neq_oq1015  // CHECK: fcmp one <8 x half> %{{.*}}, %{{.*}}1016  return _mm_cmp_ph_mask(a, b, _CMP_NEQ_OQ);1017}1018 1019__mmask8 test_mm_cmp_ph_mask_ge_os(__m128h a, __m128h b) {1020  // CHECK-LABEL: test_mm_cmp_ph_mask_ge_os1021  // CHECK: fcmp oge <8 x half> %{{.*}}, %{{.*}}1022  return _mm_cmp_ph_mask(a, b, _CMP_GE_OS);1023}1024 1025__mmask8 test_mm_cmp_ph_mask_gt_os(__m128h a, __m128h b) {1026  // CHECK-LABEL: test_mm_cmp_ph_mask_gt_os1027  // CHECK: fcmp ogt <8 x half> %{{.*}}, %{{.*}}1028  return _mm_cmp_ph_mask(a, b, _CMP_GT_OS);1029}1030 1031__mmask8 test_mm_cmp_ph_mask_true_uq(__m128h a, __m128h b) {1032  // CHECK-LABEL: test_mm_cmp_ph_mask_true_uq1033  // CHECK: fcmp true <8 x half> %{{.*}}, %{{.*}}1034  return _mm_cmp_ph_mask(a, b, _CMP_TRUE_UQ);1035}1036 1037__mmask8 test_mm_cmp_ph_mask_eq_os(__m128h a, __m128h b) {1038  // CHECK-LABEL: test_mm_cmp_ph_mask_eq_os1039  // CHECK: fcmp oeq <8 x half> %{{.*}}, %{{.*}}1040  return _mm_cmp_ph_mask(a, b, _CMP_EQ_OS);1041}1042 1043__mmask8 test_mm_cmp_ph_mask_lt_oq(__m128h a, __m128h b) {1044  // CHECK-LABEL: test_mm_cmp_ph_mask_lt_oq1045  // CHECK: fcmp olt <8 x half> %{{.*}}, %{{.*}}1046  return _mm_cmp_ph_mask(a, b, _CMP_LT_OQ);1047}1048 1049__mmask8 test_mm_cmp_ph_mask_le_oq(__m128h a, __m128h b) {1050  // CHECK-LABEL: test_mm_cmp_ph_mask_le_oq1051  // CHECK: fcmp ole <8 x half> %{{.*}}, %{{.*}}1052  return _mm_cmp_ph_mask(a, b, _CMP_LE_OQ);1053}1054 1055__mmask8 test_mm_cmp_ph_mask_unord_s(__m128h a, __m128h b) {1056  // CHECK-LABEL: test_mm_cmp_ph_mask_unord_s1057  // CHECK: fcmp uno <8 x half> %{{.*}}, %{{.*}}1058  return _mm_cmp_ph_mask(a, b, _CMP_UNORD_S);1059}1060 1061__mmask8 test_mm_cmp_ph_mask_neq_us(__m128h a, __m128h b) {1062  // CHECK-LABEL: test_mm_cmp_ph_mask_neq_us1063  // CHECK: fcmp une <8 x half> %{{.*}}, %{{.*}}1064  return _mm_cmp_ph_mask(a, b, _CMP_NEQ_US);1065}1066 1067__mmask8 test_mm_cmp_ph_mask_nlt_uq(__m128h a, __m128h b) {1068  // CHECK-LABEL: test_mm_cmp_ph_mask_nlt_uq1069  // CHECK: fcmp uge <8 x half> %{{.*}}, %{{.*}}1070  return _mm_cmp_ph_mask(a, b, _CMP_NLT_UQ);1071}1072 1073__mmask8 test_mm_cmp_ph_mask_nle_uq(__m128h a, __m128h b) {1074  // CHECK-LABEL: test_mm_cmp_ph_mask_nle_uq1075  // CHECK: fcmp ugt <8 x half> %{{.*}}, %{{.*}}1076  return _mm_cmp_ph_mask(a, b, _CMP_NLE_UQ);1077}1078 1079__mmask8 test_mm_cmp_ph_mask_ord_s(__m128h a, __m128h b) {1080  // CHECK-LABEL: test_mm_cmp_ph_mask_ord_s1081  // CHECK: fcmp ord <8 x half> %{{.*}}, %{{.*}}1082  return _mm_cmp_ph_mask(a, b, _CMP_ORD_S);1083}1084 1085__mmask8 test_mm_cmp_ph_mask_eq_us(__m128h a, __m128h b) {1086  // CHECK-LABEL: test_mm_cmp_ph_mask_eq_us1087  // CHECK: fcmp ueq <8 x half> %{{.*}}, %{{.*}}1088  return _mm_cmp_ph_mask(a, b, _CMP_EQ_US);1089}1090 1091__mmask8 test_mm_cmp_ph_mask_nge_uq(__m128h a, __m128h b) {1092  // CHECK-LABEL: test_mm_cmp_ph_mask_nge_uq1093  // CHECK: fcmp ult <8 x half> %{{.*}}, %{{.*}}1094  return _mm_cmp_ph_mask(a, b, _CMP_NGE_UQ);1095}1096 1097__mmask8 test_mm_cmp_ph_mask_ngt_uq(__m128h a, __m128h b) {1098  // CHECK-LABEL: test_mm_cmp_ph_mask_ngt_uq1099  // CHECK: fcmp ule <8 x half> %{{.*}}, %{{.*}}1100  return _mm_cmp_ph_mask(a, b, _CMP_NGT_UQ);1101}1102 1103__mmask8 test_mm_cmp_ph_mask_false_os(__m128h a, __m128h b) {1104  // CHECK-LABEL: test_mm_cmp_ph_mask_false_os1105  // CHECK: fcmp false <8 x half> %{{.*}}, %{{.*}}1106  return _mm_cmp_ph_mask(a, b, _CMP_FALSE_OS);1107}1108 1109__mmask8 test_mm_cmp_ph_mask_neq_os(__m128h a, __m128h b) {1110  // CHECK-LABEL: test_mm_cmp_ph_mask_neq_os1111  // CHECK: fcmp one <8 x half> %{{.*}}, %{{.*}}1112  return _mm_cmp_ph_mask(a, b, _CMP_NEQ_OS);1113}1114 1115__mmask8 test_mm_cmp_ph_mask_ge_oq(__m128h a, __m128h b) {1116  // CHECK-LABEL: test_mm_cmp_ph_mask_ge_oq1117  // CHECK: fcmp oge <8 x half> %{{.*}}, %{{.*}}1118  return _mm_cmp_ph_mask(a, b, _CMP_GE_OQ);1119}1120 1121__mmask8 test_mm_cmp_ph_mask_gt_oq(__m128h a, __m128h b) {1122  // CHECK-LABEL: test_mm_cmp_ph_mask_gt_oq1123  // CHECK: fcmp ogt <8 x half> %{{.*}}, %{{.*}}1124  return _mm_cmp_ph_mask(a, b, _CMP_GT_OQ);1125}1126 1127__mmask8 test_mm_cmp_ph_mask_true_us(__m128h a, __m128h b) {1128  // CHECK-LABEL: test_mm_cmp_ph_mask_true_us1129  // CHECK: fcmp true <8 x half> %{{.*}}, %{{.*}}1130  return _mm_cmp_ph_mask(a, b, _CMP_TRUE_US);1131}1132 1133__mmask8 test_mm_mask_cmp_ph_mask_eq_oq(__mmask8 m, __m128h a, __m128h b) {1134  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_eq_oq1135  // CHECK: [[CMP:%.*]] = fcmp oeq <8 x half> %{{.*}}, %{{.*}}1136  // CHECK: and <8 x i1> [[CMP]], {{.*}}1137  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_EQ_OQ);1138}1139 1140__mmask8 test_mm_mask_cmp_ph_mask_lt_os(__mmask8 m, __m128h a, __m128h b) {1141  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_lt_os1142  // CHECK: [[CMP:%.*]] = fcmp olt <8 x half> %{{.*}}, %{{.*}}1143  // CHECK: and <8 x i1> [[CMP]], {{.*}}1144  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_LT_OS);1145}1146 1147__mmask8 test_mm_mask_cmp_ph_mask_le_os(__mmask8 m, __m128h a, __m128h b) {1148  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_le_os1149  // CHECK: [[CMP:%.*]] = fcmp ole <8 x half> %{{.*}}, %{{.*}}1150  // CHECK: and <8 x i1> [[CMP]], {{.*}}1151  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_LE_OS);1152}1153 1154__mmask8 test_mm_mask_cmp_ph_mask_unord_q(__mmask8 m, __m128h a, __m128h b) {1155  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_unord_q1156  // CHECK: [[CMP:%.*]] = fcmp uno <8 x half> %{{.*}}, %{{.*}}1157  // CHECK: and <8 x i1> [[CMP]], {{.*}}1158  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_UNORD_Q);1159}1160 1161__mmask8 test_mm_mask_cmp_ph_mask_neq_uq(__mmask8 m, __m128h a, __m128h b) {1162  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_neq_uq1163  // CHECK: [[CMP:%.*]] = fcmp une <8 x half> %{{.*}}, %{{.*}}1164  // CHECK: and <8 x i1> [[CMP]], {{.*}}1165  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_NEQ_UQ);1166}1167 1168__mmask8 test_mm_mask_cmp_ph_mask_nlt_us(__mmask8 m, __m128h a, __m128h b) {1169  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_nlt_us1170  // CHECK: [[CMP:%.*]] = fcmp uge <8 x half> %{{.*}}, %{{.*}}1171  // CHECK: and <8 x i1> [[CMP]], {{.*}}1172  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_NLT_US);1173}1174 1175__mmask8 test_mm_mask_cmp_ph_mask_nle_us(__mmask8 m, __m128h a, __m128h b) {1176  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_nle_us1177  // CHECK: [[CMP:%.*]] = fcmp ugt <8 x half> %{{.*}}, %{{.*}}1178  // CHECK: and <8 x i1> [[CMP]], {{.*}}1179  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_NLE_US);1180}1181 1182__mmask8 test_mm_mask_cmp_ph_mask_ord_q(__mmask8 m, __m128h a, __m128h b) {1183  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_ord_q1184  // CHECK: [[CMP:%.*]] = fcmp ord <8 x half> %{{.*}}, %{{.*}}1185  // CHECK: and <8 x i1> [[CMP]], {{.*}}1186  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_ORD_Q);1187}1188 1189__mmask8 test_mm_mask_cmp_ph_mask_eq_uq(__mmask8 m, __m128h a, __m128h b) {1190  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_eq_uq1191  // CHECK: [[CMP:%.*]] = fcmp ueq <8 x half> %{{.*}}, %{{.*}}1192  // CHECK: and <8 x i1> [[CMP]], {{.*}}1193  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_EQ_UQ);1194}1195 1196__mmask8 test_mm_mask_cmp_ph_mask_nge_us(__mmask8 m, __m128h a, __m128h b) {1197  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_nge_us1198  // CHECK: [[CMP:%.*]] = fcmp ult <8 x half> %{{.*}}, %{{.*}}1199  // CHECK: and <8 x i1> [[CMP]], {{.*}}1200  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_NGE_US);1201}1202 1203__mmask8 test_mm_mask_cmp_ph_mask_ngt_us(__mmask8 m, __m128h a, __m128h b) {1204  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_ngt_us1205  // CHECK: [[CMP:%.*]] = fcmp ule <8 x half> %{{.*}}, %{{.*}}1206  // CHECK: and <8 x i1> [[CMP]], {{.*}}1207  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_NGT_US);1208}1209 1210__mmask8 test_mm_mask_cmp_ph_mask_false_oq(__mmask8 m, __m128h a, __m128h b) {1211  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_false_oq1212  // CHECK: [[CMP:%.*]] = fcmp false <8 x half> %{{.*}}, %{{.*}}1213  // CHECK: and <8 x i1> [[CMP]], {{.*}}1214  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_FALSE_OQ);1215}1216 1217__mmask8 test_mm_mask_cmp_ph_mask_neq_oq(__mmask8 m, __m128h a, __m128h b) {1218  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_neq_oq1219  // CHECK: [[CMP:%.*]] = fcmp one <8 x half> %{{.*}}, %{{.*}}1220  // CHECK: and <8 x i1> [[CMP]], {{.*}}1221  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_NEQ_OQ);1222}1223 1224__mmask8 test_mm_mask_cmp_ph_mask_ge_os(__mmask8 m, __m128h a, __m128h b) {1225  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_ge_os1226  // CHECK: [[CMP:%.*]] = fcmp oge <8 x half> %{{.*}}, %{{.*}}1227  // CHECK: and <8 x i1> [[CMP]], {{.*}}1228  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_GE_OS);1229}1230 1231__mmask8 test_mm_mask_cmp_ph_mask_gt_os(__mmask8 m, __m128h a, __m128h b) {1232  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_gt_os1233  // CHECK: [[CMP:%.*]] = fcmp ogt <8 x half> %{{.*}}, %{{.*}}1234  // CHECK: and <8 x i1> [[CMP]], {{.*}}1235  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_GT_OS);1236}1237 1238__mmask8 test_mm_mask_cmp_ph_mask_true_uq(__mmask8 m, __m128h a, __m128h b) {1239  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_true_uq1240  // CHECK: [[CMP:%.*]] = fcmp true <8 x half> %{{.*}}, %{{.*}}1241  // CHECK: and <8 x i1> [[CMP]], {{.*}}1242  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_TRUE_UQ);1243}1244 1245__mmask8 test_mm_mask_cmp_ph_mask_eq_os(__mmask8 m, __m128h a, __m128h b) {1246  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_eq_os1247  // CHECK: [[CMP:%.*]] = fcmp oeq <8 x half> %{{.*}}, %{{.*}}1248  // CHECK: and <8 x i1> [[CMP]], {{.*}}1249  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_EQ_OS);1250}1251 1252__mmask8 test_mm_mask_cmp_ph_mask_lt_oq(__mmask8 m, __m128h a, __m128h b) {1253  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_lt_oq1254  // CHECK: [[CMP:%.*]] = fcmp olt <8 x half> %{{.*}}, %{{.*}}1255  // CHECK: and <8 x i1> [[CMP]], {{.*}}1256  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_LT_OQ);1257}1258 1259__mmask8 test_mm_mask_cmp_ph_mask_le_oq(__mmask8 m, __m128h a, __m128h b) {1260  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_le_oq1261  // CHECK: [[CMP:%.*]] = fcmp ole <8 x half> %{{.*}}, %{{.*}}1262  // CHECK: and <8 x i1> [[CMP]], {{.*}}1263  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_LE_OQ);1264}1265 1266__mmask8 test_mm_mask_cmp_ph_mask_unord_s(__mmask8 m, __m128h a, __m128h b) {1267  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_unord_s1268  // CHECK: [[CMP:%.*]] = fcmp uno <8 x half> %{{.*}}, %{{.*}}1269  // CHECK: and <8 x i1> [[CMP]], {{.*}}1270  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_UNORD_S);1271}1272 1273__mmask8 test_mm_mask_cmp_ph_mask_neq_us(__mmask8 m, __m128h a, __m128h b) {1274  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_neq_us1275  // CHECK: [[CMP:%.*]] = fcmp une <8 x half> %{{.*}}, %{{.*}}1276  // CHECK: and <8 x i1> [[CMP]], {{.*}}1277  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_NEQ_US);1278}1279 1280__mmask8 test_mm_mask_cmp_ph_mask_nlt_uq(__mmask8 m, __m128h a, __m128h b) {1281  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_nlt_uq1282  // CHECK: [[CMP:%.*]] = fcmp uge <8 x half> %{{.*}}, %{{.*}}1283  // CHECK: and <8 x i1> [[CMP]], {{.*}}1284  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_NLT_UQ);1285}1286 1287__mmask8 test_mm_mask_cmp_ph_mask_nle_uq(__mmask8 m, __m128h a, __m128h b) {1288  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_nle_uq1289  // CHECK: [[CMP:%.*]] = fcmp ugt <8 x half> %{{.*}}, %{{.*}}1290  // CHECK: and <8 x i1> [[CMP]], {{.*}}1291  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_NLE_UQ);1292}1293 1294__mmask8 test_mm_mask_cmp_ph_mask_ord_s(__mmask8 m, __m128h a, __m128h b) {1295  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_ord_s1296  // CHECK: [[CMP:%.*]] = fcmp ord <8 x half> %{{.*}}, %{{.*}}1297  // CHECK: and <8 x i1> [[CMP]], {{.*}}1298  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_ORD_S);1299}1300 1301__mmask8 test_mm_mask_cmp_ph_mask_eq_us(__mmask8 m, __m128h a, __m128h b) {1302  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_eq_us1303  // CHECK: [[CMP:%.*]] = fcmp ueq <8 x half> %{{.*}}, %{{.*}}1304  // CHECK: and <8 x i1> [[CMP]], {{.*}}1305  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_EQ_US);1306}1307 1308__mmask8 test_mm_mask_cmp_ph_mask_nge_uq(__mmask8 m, __m128h a, __m128h b) {1309  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_nge_uq1310  // CHECK: [[CMP:%.*]] = fcmp ult <8 x half> %{{.*}}, %{{.*}}1311  // CHECK: and <8 x i1> [[CMP]], {{.*}}1312  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_NGE_UQ);1313}1314 1315__mmask8 test_mm_mask_cmp_ph_mask_ngt_uq(__mmask8 m, __m128h a, __m128h b) {1316  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_ngt_uq1317  // CHECK: [[CMP:%.*]] = fcmp ule <8 x half> %{{.*}}, %{{.*}}1318  // CHECK: and <8 x i1> [[CMP]], {{.*}}1319  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_NGT_UQ);1320}1321 1322__mmask8 test_mm_mask_cmp_ph_mask_false_os(__mmask8 m, __m128h a, __m128h b) {1323  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_false_os1324  // CHECK: [[CMP:%.*]] = fcmp false <8 x half> %{{.*}}, %{{.*}}1325  // CHECK: and <8 x i1> [[CMP]], {{.*}}1326  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_FALSE_OS);1327}1328 1329__mmask8 test_mm_mask_cmp_ph_mask_neq_os(__mmask8 m, __m128h a, __m128h b) {1330  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_neq_os1331  // CHECK: [[CMP:%.*]] = fcmp one <8 x half> %{{.*}}, %{{.*}}1332  // CHECK: and <8 x i1> [[CMP]], {{.*}}1333  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_NEQ_OS);1334}1335 1336__mmask8 test_mm_mask_cmp_ph_mask_ge_oq(__mmask8 m, __m128h a, __m128h b) {1337  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_ge_oq1338  // CHECK: [[CMP:%.*]] = fcmp oge <8 x half> %{{.*}}, %{{.*}}1339  // CHECK: and <8 x i1> [[CMP]], {{.*}}1340  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_GE_OQ);1341}1342 1343__mmask8 test_mm_mask_cmp_ph_mask_gt_oq(__mmask8 m, __m128h a, __m128h b) {1344  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_gt_oq1345  // CHECK: [[CMP:%.*]] = fcmp ogt <8 x half> %{{.*}}, %{{.*}}1346  // CHECK: and <8 x i1> [[CMP]], {{.*}}1347  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_GT_OQ);1348}1349 1350__mmask8 test_mm_mask_cmp_ph_mask_true_us(__mmask8 m, __m128h a, __m128h b) {1351  // CHECK-LABEL: test_mm_mask_cmp_ph_mask_true_us1352  // CHECK: [[CMP:%.*]] = fcmp true <8 x half> %{{.*}}, %{{.*}}1353  // CHECK: and <8 x i1> [[CMP]], {{.*}}1354  return _mm_mask_cmp_ph_mask(m, a, b, _CMP_TRUE_US);1355}1356 1357__m256h test_mm256_rcp_ph(__m256h __A) {1358  // CHECK-LABEL: test_mm256_rcp_ph1359  // CHECK: @llvm.x86.avx512fp16.mask.rcp.ph.2561360  return _mm256_rcp_ph(__A);1361}1362 1363__m256h test_mm256_mask_rcp_ph(__m256h __W, __mmask32 __U, __m256h __A) {1364  // CHECK-LABEL: test_mm256_mask_rcp_ph1365  // CHECK: @llvm.x86.avx512fp16.mask.rcp.ph.2561366  return (__m256h)_mm256_mask_rcp_ph(__W, __U, __A);1367}1368 1369__m256h test_mm256_maskz_rcp_ph(__mmask32 __U, __m256h __A) {1370  // CHECK-LABEL: test_mm256_maskz_rcp_ph1371  // CHECK: @llvm.x86.avx512fp16.mask.rcp.ph.2561372  return _mm256_maskz_rcp_ph(__U, __A);1373}1374 1375__m128h test_mm_rcp_ph(__m128h __A) {1376  // CHECK-LABEL: test_mm_rcp_ph1377  // CHECK: @llvm.x86.avx512fp16.mask.rcp.ph.1281378  return _mm_rcp_ph(__A);1379}1380 1381__m128h test_mm_mask_rcp_ph(__m128h __W, __mmask32 __U, __m128h __A) {1382  // CHECK-LABEL: test_mm_mask_rcp_ph1383  // CHECK: @llvm.x86.avx512fp16.mask.rcp.ph.1281384  return (__m128h)_mm_mask_rcp_ph(__W, __U, __A);1385}1386 1387__m128h test_mm_maskz_rcp_ph(__mmask32 __U, __m128h __A) {1388  // CHECK-LABEL: test_mm_maskz_rcp_ph1389  // CHECK: @llvm.x86.avx512fp16.mask.rcp.ph.1281390  return _mm_maskz_rcp_ph(__U, __A);1391}1392 1393__m256h test_mm256_rsqrt_ph(__m256h __A) {1394  // CHECK-LABEL: test_mm256_rsqrt_ph1395  // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.ph.2561396  return _mm256_rsqrt_ph(__A);1397}1398 1399__m256h test_mm256_mask_rsqrt_ph(__m256h __W, __mmask16 __U, __m256h __A) {1400  // CHECK-LABEL: test_mm256_mask_rsqrt_ph1401  // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.ph.2561402  return (__m256h)_mm256_mask_rsqrt_ph(__W, __U, __A);1403}1404 1405__m256h test_mm256_maskz_rsqrt_ph(__mmask16 __U, __m256h __A) {1406  // CHECK-LABEL: test_mm256_maskz_rsqrt_ph1407  // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.ph.2561408  return _mm256_maskz_rsqrt_ph(__U, __A);1409}1410 1411__m128h test_mm_rsqrt_ph(__m128h __A) {1412  // CHECK-LABEL: test_mm_rsqrt_ph1413  // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.ph.1281414  return _mm_rsqrt_ph(__A);1415}1416 1417__m128h test_mm_mask_rsqrt_ph(__m128h __W, __mmask32 __U, __m128h __A) {1418  // CHECK-LABEL: test_mm_mask_rsqrt_ph1419  // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.ph.1281420  return (__m128h)_mm_mask_rsqrt_ph(__W, __U, __A);1421}1422 1423__m128h test_mm_maskz_rsqrt_ph(__mmask32 __U, __m128h __A) {1424  // CHECK-LABEL: test_mm_maskz_rsqrt_ph1425  // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.ph.1281426  return _mm_maskz_rsqrt_ph(__U, __A);1427}1428 1429__m128h test_mm_getmant_ph(__m128h __A) {1430  // CHECK-LABEL: test_mm_getmant_ph1431  // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.1281432  return _mm_getmant_ph(__A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan);1433}1434 1435__m128h test_mm_mask_getmant_ph(__m128h __W, __mmask8 __U, __m128h __A) {1436  // CHECK-LABEL: test_mm_mask_getmant_ph1437  // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.1281438  return _mm_mask_getmant_ph(__W, __U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan);1439}1440 1441__m128h test_mm_maskz_getmant_ph(__mmask8 __U, __m128h __A) {1442  // CHECK-LABEL: test_mm_maskz_getmant_ph1443  // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.1281444  return _mm_maskz_getmant_ph(__U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan);1445}1446 1447__m256h test_mm256_getmant_ph(__m256h __A) {1448  // CHECK-LABEL: test_mm256_getmant_ph1449  // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.2561450  return _mm256_getmant_ph(__A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan);1451}1452 1453__m256h test_mm256_mask_getmant_ph(__m256h __W, __mmask16 __U, __m256h __A) {1454  // CHECK-LABEL: test_mm256_mask_getmant_ph1455  // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.2561456  return _mm256_mask_getmant_ph(__W, __U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan);1457}1458 1459__m256h test_mm256_maskz_getmant_ph(__mmask16 __U, __m256h __A) {1460  // CHECK-LABEL: test_mm256_maskz_getmant_ph1461  // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.2561462  return _mm256_maskz_getmant_ph(__U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan);1463}1464 1465__m128h test_mm_getexp_ph(__m128h __A) {1466  // CHECK-LABEL: test_mm_getexp_ph1467  // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.1281468  return _mm_getexp_ph(__A);1469}1470 1471__m128h test_mm_mask_getexp_ph(__m128h __W, __mmask8 __U, __m128h __A) {1472  // CHECK-LABEL: test_mm_mask_getexp_ph1473  // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.1281474  return _mm_mask_getexp_ph(__W, __U, __A);1475}1476 1477__m128h test_mm_maskz_getexp_ph(__mmask8 __U, __m128h __A) {1478  // CHECK-LABEL: test_mm_maskz_getexp_ph1479  // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.1281480  return _mm_maskz_getexp_ph(__U, __A);1481}1482 1483__m256h test_mm256_getexp_ph(__m256h __A) {1484  // CHECK-LABEL: test_mm256_getexp_ph1485  // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.2561486  return _mm256_getexp_ph(__A);1487}1488 1489__m256h test_mm256_mask_getexp_ph(__m256h __W, __mmask16 __U, __m256h __A) {1490  // CHECK-LABEL: test_mm256_mask_getexp_ph1491  // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.2561492  return _mm256_mask_getexp_ph(__W, __U, __A);1493}1494 1495__m256h test_mm256_maskz_getexp_ph(__mmask16 __U, __m256h __A) {1496  // CHECK-LABEL: test_mm256_maskz_getexp_ph1497  // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.2561498  return _mm256_maskz_getexp_ph(__U, __A);1499}1500 1501__m128h test_mm_scalef_ph(__m128h __A, __m128h __B) {1502  // CHECK-LABEL: test_mm_scalef_ph1503  // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.1281504  return _mm_scalef_ph(__A, __B);1505}1506 1507__m128h test_mm_mask_scalef_ph(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {1508  // CHECK-LABEL: test_mm_mask_scalef_ph1509  // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.1281510  return _mm_mask_scalef_ph(__W, __U, __A, __B);1511}1512 1513__m128h test_mm_maskz_scalef_ph(__mmask8 __U, __m128h __A, __m128h __B) {1514  // CHECK-LABEL: test_mm_maskz_scalef_ph1515  // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.1281516  return _mm_maskz_scalef_ph(__U, __A, __B);1517}1518 1519__m256h test_mm256_scalef_ph(__m256h __A, __m256h __B) {1520  // CHECK-LABEL: test_mm256_scalef_ph1521  // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.2561522  return _mm256_scalef_ph(__A, __B);1523}1524 1525__m256h test_mm256_mask_scalef_ph(__m256h __W, __mmask16 __U, __m256h __A, __m256h __B) {1526  // CHECK-LABEL: test_mm256_mask_scalef_ph1527  // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.2561528  return _mm256_mask_scalef_ph(__W, __U, __A, __B);1529}1530 1531__m256h test_mm256_maskz_scalef_ph(__mmask16 __U, __m256h __A, __m256h __B) {1532  // CHECK-LABEL: test_mm256_maskz_scalef_ph1533  // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.2561534  return _mm256_maskz_scalef_ph(__U, __A, __B);1535}1536 1537__m128h test_mm_roundscale_ph(__m128h __A) {1538  // CHECK-LABEL: test_mm_roundscale_ph1539  // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.1281540  return _mm_roundscale_ph(__A, 4);1541}1542 1543__m128h test_mm_mask_roundscale_ph(__m128h __W, __mmask8 __U, __m128h __A) {1544  // CHECK-LABEL: test_mm_mask_roundscale_ph1545  // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.1281546  return _mm_mask_roundscale_ph(__W, __U, __A, 4);1547}1548 1549__m128h test_mm_maskz_roundscale_ph(__mmask8 __U, __m128h __A) {1550  // CHECK-LABEL: test_mm_maskz_roundscale_ph1551  // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.1281552  return _mm_maskz_roundscale_ph(__U, __A, 4);1553}1554 1555__m256h test_mm256_roundscale_ph(__m256h __A) {1556  // CHECK-LABEL: test_mm256_roundscale_ph1557  // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.2561558  return _mm256_roundscale_ph(__A, 4);1559}1560 1561__m256h test_mm256_mask_roundscale_ph(__m256h __W, __mmask16 __U, __m256h __A) {1562  // CHECK-LABEL: test_mm256_mask_roundscale_ph1563  // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.2561564  return _mm256_mask_roundscale_ph(__W, __U, __A, 4);1565}1566 1567__m256h test_mm256_maskz_roundscale_ph(__mmask16 __U, __m256h __A) {1568  // CHECK-LABEL: test_mm256_maskz_roundscale_ph1569  // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.2561570  return _mm256_maskz_roundscale_ph(__U, __A, 4);1571}1572 1573__m128h test_mm_reduce_ph(__m128h __A) {1574  // CHECK-LABEL: test_mm_reduce_ph1575  // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.1281576  return _mm_reduce_ph(__A, 4);1577}1578 1579__m128h test_mm_mask_reduce_ph(__m128h __W, __mmask8 __U, __m128h __A) {1580  // CHECK-LABEL: test_mm_mask_reduce_ph1581  // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.1281582  return _mm_mask_reduce_ph(__W, __U, __A, 4);1583}1584 1585__m128h test_mm_maskz_reduce_ph(__mmask8 __U, __m128h __A) {1586  // CHECK-LABEL: test_mm_maskz_reduce_ph1587  // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.1281588  return _mm_maskz_reduce_ph(__U, __A, 4);1589}1590 1591__m256h test_mm256_reduce_ph(__m256h __A) {1592  // CHECK-LABEL: test_mm256_reduce_ph1593  // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.2561594  return _mm256_reduce_ph(__A, 4);1595}1596 1597__m256h test_mm256_mask_reduce_ph(__m256h __W, __mmask16 __U, __m256h __A) {1598  // CHECK-LABEL: test_mm256_mask_reduce_ph1599  // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.2561600  return _mm256_mask_reduce_ph(__W, __U, __A, 4);1601}1602 1603__m256h test_mm256_maskz_reduce_ph(__mmask16 __U, __m256h __A) {1604  // CHECK-LABEL: test_mm256_maskz_reduce_ph1605  // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.2561606  return _mm256_maskz_reduce_ph(__U, __A, 4);1607}1608__m128h test_mm_sqrt_ph(__m128h x) {1609  // CHECK-LABEL: test_mm_sqrt_ph1610  // CHECK: @llvm.sqrt.v8f16(<8 x half> {{.*}})1611  return _mm_sqrt_ph(x);1612}1613 1614__m256h test_mm256_sqrt_ph(__m256h A) {1615  // CHECK-LABEL: test_mm256_sqrt_ph1616  // CHECK: @llvm.sqrt.v16f16(<16 x half> %{{.*}})1617  return _mm256_sqrt_ph(A);1618}1619 1620__m128h test_mm_mask_sqrt_ph(__m128h __W, __mmask8 __U, __m128h __A) {1621  // CHECK-LABEL: test_mm_mask_sqrt_ph1622  // CHECK: @llvm.sqrt.v8f161623  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}1624  return _mm_mask_sqrt_ph(__W, __U, __A);1625}1626 1627__m128h test_mm_maskz_sqrt_ph(__mmask8 __U, __m128h __A) {1628  // CHECK-LABEL: test_mm_maskz_sqrt_ph1629  // CHECK: @llvm.sqrt.v8f161630  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}1631  return _mm_maskz_sqrt_ph(__U, __A);1632}1633 1634__m256h test_mm256_mask_sqrt_ph(__m256h __W, __mmask16 __U, __m256h __A) {1635  // CHECK-LABEL: test_mm256_mask_sqrt_ph1636  // CHECK: @llvm.sqrt.v16f161637  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}1638  return _mm256_mask_sqrt_ph(__W, __U, __A);1639}1640 1641__m256h test_mm256_maskz_sqrt_ph(__mmask16 __U, __m256h __A) {1642  // CHECK-LABEL: test_mm256_maskz_sqrt_ph1643  // CHECK: @llvm.sqrt.v16f161644  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}1645  return _mm256_maskz_sqrt_ph(__U, __A);1646}1647__mmask8 test_mm_mask_fpclass_ph_mask(__mmask8 __U, __m128h __A) {1648  // CHECK-LABEL: test_mm_mask_fpclass_ph_mask1649  // CHECK: @llvm.x86.avx512fp16.fpclass.ph.1281650  return _mm_mask_fpclass_ph_mask(__U, __A, 2);1651}1652 1653__mmask8 test_mm_fpclass_ph_mask(__m128h __A) {1654  // CHECK-LABEL: test_mm_fpclass_ph_mask1655  // CHECK: @llvm.x86.avx512fp16.fpclass.ph.1281656  return _mm_fpclass_ph_mask(__A, 2);1657}1658 1659__mmask16 test_mm256_mask_fpclass_ph_mask(__mmask16 __U, __m256h __A) {1660  // CHECK-LABEL: test_mm256_mask_fpclass_ph_mask1661  // CHECK: @llvm.x86.avx512fp16.fpclass.ph.2561662  return _mm256_mask_fpclass_ph_mask(__U, __A, 2);1663}1664 1665__mmask16 test_mm256_fpclass_ph_mask(__m256h __A) {1666  // CHECK-LABEL: test_mm256_fpclass_ph_mask1667  // CHECK: @llvm.x86.avx512fp16.fpclass.ph.2561668  return _mm256_fpclass_ph_mask(__A, 2);1669}1670 1671__m128h test_mm_cvtpd_ph(__m128d A) {1672  // CHECK-LABEL: test_mm_cvtpd_ph1673  // CHECK: @llvm.x86.avx512fp16.mask.vcvtpd2ph.1281674  return _mm_cvtpd_ph(A);1675}1676 1677__m128h test_mm_mask_cvtpd_ph(__m128h A, __mmask8 B, __m128d C) {1678  // CHECK-LABEL: test_mm_mask_cvtpd_ph1679  // CHECK: @llvm.x86.avx512fp16.mask.vcvtpd2ph.1281680  return _mm_mask_cvtpd_ph(A, B, C);1681}1682 1683__m128h test_mm_maskz_cvtpd_ph(__mmask8 A, __m128d B) {1684  // CHECK-LABEL: test_mm_maskz_cvtpd_ph1685  // CHECK: @llvm.x86.avx512fp16.mask.vcvtpd2ph.1281686  return _mm_maskz_cvtpd_ph(A, B);1687}1688 1689__m128h test_mm256_cvtpd_ph(__m256d A) {1690  // CHECK-LABEL: test_mm256_cvtpd_ph1691  // CHECK: @llvm.x86.avx512fp16.mask.vcvtpd2ph.2561692  return _mm256_cvtpd_ph(A);1693}1694 1695__m128h test_mm256_mask_cvtpd_ph(__m128h A, __mmask8 B, __m256d C) {1696  // CHECK-LABEL: test_mm256_mask_cvtpd_ph1697  // CHECK: @llvm.x86.avx512fp16.mask.vcvtpd2ph.2561698  return _mm256_mask_cvtpd_ph(A, B, C);1699}1700 1701__m128h test_mm256_maskz_cvtpd_ph(__mmask8 A, __m256d B) {1702  // CHECK-LABEL: test_mm256_maskz_cvtpd_ph1703  // CHECK: @llvm.x86.avx512fp16.mask.vcvtpd2ph.2561704  return _mm256_maskz_cvtpd_ph(A, B);1705}1706 1707__m128d test_mm_cvtph_pd(__m128h A) {1708  // CHECK-LABEL: test_mm_cvtph_pd1709  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2pd.1281710  return _mm_cvtph_pd(A);1711}1712 1713__m128d test_mm_mask_cvtph_pd(__m128d A, __mmask8 B, __m128h C) {1714  // CHECK-LABEL: test_mm_mask_cvtph_pd1715  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2pd.1281716  return _mm_mask_cvtph_pd(A, B, C);1717}1718 1719__m128d test_mm_maskz_cvtph_pd(__mmask8 A, __m128h B) {1720  // CHECK-LABEL: test_mm_maskz_cvtph_pd1721  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2pd.1281722  return _mm_maskz_cvtph_pd(A, B);1723}1724 1725__m256d test_mm256_cvtph_pd(__m128h A) {1726  // CHECK-LABEL: test_mm256_cvtph_pd1727  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2pd.2561728  return _mm256_cvtph_pd(A);1729}1730 1731__m256d test_mm256_mask_cvtph_pd(__m256d A, __mmask8 B, __m128h C) {1732  // CHECK-LABEL: test_mm256_mask_cvtph_pd1733  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2pd.2561734  return _mm256_mask_cvtph_pd(A, B, C);1735}1736 1737__m256d test_mm256_maskz_cvtph_pd(__mmask8 A, __m128h B) {1738  // CHECK-LABEL: test_mm256_maskz_cvtph_pd1739  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2pd.2561740  return _mm256_maskz_cvtph_pd(A, B);1741}1742 1743__m128i test_mm_cvtph_epi16(__m128h A) {1744  // CHECK-LABEL: test_mm_cvtph_epi161745  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2w.1281746  return _mm_cvtph_epi16(A);1747}1748 1749__m128i test_mm_mask_cvtph_epi16(__m128i A, __mmask8 B, __m128h C) {1750  // CHECK-LABEL: test_mm_mask_cvtph_epi161751  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2w.1281752  return _mm_mask_cvtph_epi16(A, B, C);1753}1754 1755__m128i test_mm_maskz_cvtph_epi16(__mmask8 A, __m128h B) {1756  // CHECK-LABEL: test_mm_maskz_cvtph_epi161757  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2w.1281758  return _mm_maskz_cvtph_epi16(A, B);1759}1760 1761__m256i test_mm256_cvtph_epi16(__m256h A) {1762  // CHECK-LABEL: test_mm256_cvtph_epi161763  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2w.2561764  return _mm256_cvtph_epi16(A);1765}1766 1767__m256i test_mm256_mask_cvtph_epi16(__m256i A, __mmask16 B, __m256h C) {1768  // CHECK-LABEL: test_mm256_mask_cvtph_epi161769  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2w.2561770  return _mm256_mask_cvtph_epi16(A, B, C);1771}1772 1773__m256i test_mm256_maskz_cvtph_epi16(__mmask16 A, __m256h B) {1774  // CHECK-LABEL: test_mm256_maskz_cvtph_epi161775  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2w.2561776  return _mm256_maskz_cvtph_epi16(A, B);1777}1778 1779__m128i test_mm_cvttph_epi16(__m128h A) {1780  // CHECK-LABEL: test_mm_cvttph_epi161781  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2w.1281782  return _mm_cvttph_epi16(A);1783}1784 1785__m128i test_mm_mask_cvttph_epi16(__m128i A, __mmask8 B, __m128h C) {1786  // CHECK-LABEL: test_mm_mask_cvttph_epi161787  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2w.1281788  return _mm_mask_cvttph_epi16(A, B, C);1789}1790 1791__m128i test_mm_maskz_cvttph_epi16(__mmask8 A, __m128h B) {1792  // CHECK-LABEL: test_mm_maskz_cvttph_epi161793  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2w.1281794  return _mm_maskz_cvttph_epi16(A, B);1795}1796 1797__m256i test_mm256_cvttph_epi16(__m256h A) {1798  // CHECK-LABEL: test_mm256_cvttph_epi161799  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2w.2561800  return _mm256_cvttph_epi16(A);1801}1802 1803__m256i test_mm256_mask_cvttph_epi16(__m256i A, __mmask16 B, __m256h C) {1804  // CHECK-LABEL: test_mm256_mask_cvttph_epi161805  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2w.2561806  return _mm256_mask_cvttph_epi16(A, B, C);1807}1808 1809__m256i test_mm256_maskz_cvttph_epi16(__mmask16 A, __m256h B) {1810  // CHECK-LABEL: test_mm256_maskz_cvttph_epi161811  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2w.2561812  return _mm256_maskz_cvttph_epi16(A, B);1813}1814 1815__m128h test_mm_cvtepi16_ph(__m128i A) {1816  // CHECK-LABEL: test_mm_cvtepi16_ph1817  // CHECK: %{{.*}} = sitofp <8 x i16> %{{.*}} to <8 x half>1818  return _mm_cvtepi16_ph(A);1819}1820 1821TEST_CONSTEXPR(match_m128h(_mm_cvtepi16_ph((__m128i)(__v8hi){1, 1, 2, 2, 4, 4, 8, 8}), 1.0, 1.0, 2.0, 2.0, 4.0, 4.0, 8.0, 8.0));1822 1823__m128h test_mm_mask_cvtepi16_ph(__m128h A, __mmask8 B, __m128i C) {1824  // CHECK-LABEL: test_mm_mask_cvtepi16_ph1825  // CHECK: %{{.*}} = sitofp <8 x i16> %{{.*}} to <8 x half>1826  return _mm_mask_cvtepi16_ph(A, B, C);1827}1828 1829TEST_CONSTEXPR(match_m128h(_mm_mask_cvtepi16_ph(_mm_set1_ph(-777.0), /*1001 0011=*/0x93, (__m128i)(__v8hi){1, 1, 2, 2, 4, 4, 8, 8}), 1.0, 1.0, -777.0, -777.0, 4.0, -777.0, -777.0, 8.0));1830 1831__m128h test_mm_maskz_cvtepi16_ph(__mmask8 A, __m128i B) {1832  // CHECK-LABEL: test_mm_maskz_cvtepi16_ph1833  // CHECK: %{{.*}} = sitofp <8 x i16> %{{.*}} to <8 x half>1834  return _mm_maskz_cvtepi16_ph(A, B);1835}1836 1837TEST_CONSTEXPR(match_m128h(_mm_maskz_cvtepi16_ph(/*1001 0011=*/0x93, (__m128i)(__v8hi){1, 1, 2, 2, 4, 4, 8, 8}), 1.0, 1.0, 0.0, 0.0, 4.0, 0.0, 0.0, 8.0));1838 1839__m256h test_mm256_cvtepi16_ph(__m256i A) {1840  // CHECK-LABEL: test_mm256_cvtepi16_ph1841  // CHECK: %{{.*}} = sitofp <16 x i16> %{{.*}} to <16 x half>1842  return _mm256_cvtepi16_ph(A);1843}1844 1845TEST_CONSTEXPR(match_m256h(_mm256_cvtepi16_ph((__m256i)(__v16hi){-1, -1, 2, 2, -4, -4, 8, 8, -16, -16, 32, 32, -64, -64, 128, 128}), -1.0, -1.0, 2.0, 2.0, -4.0, -4.0, 8.0, 8.0, -16.0, -16.0, 32.0, 32.0, -64.0, -64.0, 128.0, 128.0));1846 1847__m256h test_mm256_mask_cvtepi16_ph(__m256h A, __mmask16 B, __m256i C) {1848  // CHECK-LABEL: test_mm256_mask_cvtepi16_ph1849  // CHECK: %{{.*}} = sitofp <16 x i16> %{{.*}} to <16 x half>1850  return _mm256_mask_cvtepi16_ph(A, B, C);1851}1852 1853TEST_CONSTEXPR(match_m256h(_mm256_mask_cvtepi16_ph(_mm256_set1_ph(-777.0), /*1101 0101 1101 1100=*/0xd5dc, (__m256i)(__v16hi){-1, -1, 2, 2, -4, -4, 8, 8, -16, -16, 32, 32, -64, -64, 128, 128}), -777.0, -777.0, 2.0, 2.0, -4.0, -777.0, 8.0, 8.0, -16.0, -777.0, 32.0, -777.0, -64.0, -777.0, 128.0, 128.0));1854 1855__m256h test_mm256_maskz_cvtepi16_ph(__mmask16 A, __m256i B) {1856  // CHECK-LABEL: test_mm256_maskz_cvtepi16_ph1857  // CHECK: %{{.*}} = sitofp <16 x i16> %{{.*}} to <16 x half>1858  return _mm256_maskz_cvtepi16_ph(A, B);1859}1860 1861TEST_CONSTEXPR(match_m256h(_mm256_maskz_cvtepi16_ph(/*1101 0101 1101 1100=*/0xd5dc, (__m256i)(__v16hi){-1, -1, 2, 2, -4, -4, 8, 8, -16, -16, 32, 32, -64, -64, 128, 128}), 0.0, 0.0, 2.0, 2.0, -4.0, 0.0, 8.0, 8.0, -16.0, 0.0, 32.0, 0.0, -64.0, 0.0, 128.0, 128.0));1862 1863__m128i test_mm_cvtph_epu16(__m128h A) {1864  // CHECK-LABEL: test_mm_cvtph_epu161865  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uw.1281866  return _mm_cvtph_epu16(A);1867}1868 1869__m128i test_mm_mask_cvtph_epu16(__m128i A, __mmask8 B, __m128h C) {1870  // CHECK-LABEL: test_mm_mask_cvtph_epu161871  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uw.1281872  return _mm_mask_cvtph_epu16(A, B, C);1873}1874 1875__m128i test_mm_maskz_cvtph_epu16(__mmask8 A, __m128h B) {1876  // CHECK-LABEL: test_mm_maskz_cvtph_epu161877  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uw.1281878  return _mm_maskz_cvtph_epu16(A, B);1879}1880 1881__m256i test_mm256_cvtph_epu16(__m256h A) {1882  // CHECK-LABEL: test_mm256_cvtph_epu161883  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uw.2561884  return _mm256_cvtph_epu16(A);1885}1886 1887__m256i test_mm256_mask_cvtph_epu16(__m256i A, __mmask16 B, __m256h C) {1888  // CHECK-LABEL: test_mm256_mask_cvtph_epu161889  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uw.2561890  return _mm256_mask_cvtph_epu16(A, B, C);1891}1892 1893__m256i test_mm256_maskz_cvtph_epu16(__mmask16 A, __m256h B) {1894  // CHECK-LABEL: test_mm256_maskz_cvtph_epu161895  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uw.2561896  return _mm256_maskz_cvtph_epu16(A, B);1897}1898 1899__m128i test_mm_cvttph_epu16(__m128h A) {1900  // CHECK-LABEL: test_mm_cvttph_epu161901  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uw.1281902  return _mm_cvttph_epu16(A);1903}1904 1905__m128i test_mm_mask_cvttph_epu16(__m128i A, __mmask8 B, __m128h C) {1906  // CHECK-LABEL: test_mm_mask_cvttph_epu161907  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uw.1281908  return _mm_mask_cvttph_epu16(A, B, C);1909}1910 1911__m128i test_mm_maskz_cvttph_epu16(__mmask8 A, __m128h B) {1912  // CHECK-LABEL: test_mm_maskz_cvttph_epu161913  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uw.1281914  return _mm_maskz_cvttph_epu16(A, B);1915}1916 1917__m256i test_mm256_cvttph_epu16(__m256h A) {1918  // CHECK-LABEL: test_mm256_cvttph_epu161919  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uw.2561920  return _mm256_cvttph_epu16(A);1921}1922 1923__m256i test_mm256_mask_cvttph_epu16(__m256i A, __mmask16 B, __m256h C) {1924  // CHECK-LABEL: test_mm256_mask_cvttph_epu161925  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uw.2561926  return _mm256_mask_cvttph_epu16(A, B, C);1927}1928 1929__m256i test_mm256_maskz_cvttph_epu16(__mmask16 A, __m256h B) {1930  // CHECK-LABEL: test_mm256_maskz_cvttph_epu161931  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uw.2561932  return _mm256_maskz_cvttph_epu16(A, B);1933}1934 1935__m128h test_mm_cvtepu16_ph(__m128i A) {1936  // CHECK-LABEL: test_mm_cvtepu16_ph1937  // CHECK: %{{.*}} = uitofp <8 x i16> %{{.*}} to <8 x half>1938  return _mm_cvtepu16_ph(A);1939}1940 1941TEST_CONSTEXPR(match_m128h(_mm_cvtepu16_ph((__m128i)(__v8hu){1, 1, 2, 2, 4, 4, 8, 8}), 1.0, 1.0, 2.0, 2.0, 4.0, 4.0, 8.0, 8.0));1942 1943__m128h test_mm_mask_cvtepu16_ph(__m128h A, __mmask8 B, __m128i C) {1944  // CHECK-LABEL: test_mm_mask_cvtepu16_ph1945  // CHECK: %{{.*}} = uitofp <8 x i16> %{{.*}} to <8 x half>1946  return _mm_mask_cvtepu16_ph(A, B, C);1947}1948 1949TEST_CONSTEXPR(match_m128h(_mm_mask_cvtepu16_ph(_mm_set1_ph(-777.0), /*1001 0011=*/0x93, (__m128i)(__v8hu){1, 1, 2, 2, 4, 4, 8, 8}), 1.0, 1.0, -777.0, -777.0, 4.0, -777.0, -777.0, 8.0));1950 1951__m128h test_mm_maskz_cvtepu16_ph(__mmask8 A, __m128i B) {1952  // CHECK-LABEL: test_mm_maskz_cvtepu16_ph1953  // CHECK: %{{.*}} = uitofp <8 x i16> %{{.*}} to <8 x half>1954  return _mm_maskz_cvtepu16_ph(A, B);1955}1956 1957TEST_CONSTEXPR(match_m128h(_mm_maskz_cvtepu16_ph(/*1001 0011=*/0x93, (__m128i)(__v8hu){1, 1, 2, 2, 4, 4, 8, 8}), 1.0, 1.0, 0.0, 0.0, 4.0, 0.0, 0.0, 8.0));1958 1959__m256h test_mm256_cvtepu16_ph(__m256i A) {1960  // CHECK-LABEL: test_mm256_cvtepu16_ph1961  // CHECK: %{{.*}} = uitofp <16 x i16> %{{.*}} to <16 x half>1962  return _mm256_cvtepu16_ph(A);1963}1964 1965TEST_CONSTEXPR(match_m256h(_mm256_cvtepu16_ph((__m256i)(__v16hu){1, 1, 2, 2, 4, 4, 8, 8, 16, 16, 32, 32, 64, 64, 128, 128}),1.0, 1.0, 2.0, 2.0, 4.0, 4.0, 8.0, 8.0, 16.0, 16.0, 32.0, 32.0, 64.0, 64.0, 128.0, 128.0));1966 1967__m256h test_mm256_mask_cvtepu16_ph(__m256h A, __mmask16 B, __m256i C) {1968  // CHECK-LABEL: test_mm256_mask_cvtepu16_ph1969  // CHECK: %{{.*}} = uitofp <16 x i16> %{{.*}} to <16 x half>1970  return _mm256_mask_cvtepu16_ph(A, B, C);1971}1972 1973 TEST_CONSTEXPR(match_m256h(_mm256_mask_cvtepu16_ph(_mm256_set1_ph(-999.0),/*1100 1001 1110 1000=*/0xc9e8,(__m256i)(__v16hu){ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}), -999.0, -999.0, -999.0, 4.0, -999.0, 6.0, 7.0, 8.0, 9.0, -999.0, -999.0, 12.0, -999.0, -999.0, 15.0, 16.0));    1974 1975__m256h test_mm256_maskz_cvtepu16_ph(__mmask16 A, __m256i B) {1976  // CHECK-LABEL: test_mm256_maskz_cvtepu16_ph1977  // CHECK: %{{.*}} = uitofp <16 x i16> %{{.*}} to <16 x half>1978  return _mm256_maskz_cvtepu16_ph(A, B);1979}1980 1981TEST_CONSTEXPR(match_m256h(_mm256_maskz_cvtepu16_ph(/*1100 1001 1110 1000=*/0xc9e8,(__m256i)(__v16hu){ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}), 0.0, 0.0, 0.0, 4.0, 0.0, 6.0, 7.0, 8.0, 9.0, 0.0, 0.0, 12.0, 0.0, 0.0, 15.0, 16.0));1982 1983__m128i test_mm_cvtph_epi32(__m128h A) {1984  // CHECK-LABEL: test_mm_cvtph_epi321985  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2dq.1281986  return _mm_cvtph_epi32(A);1987}1988 1989__m128i test_mm_mask_cvtph_epi32(__m128i A, __mmask8 B, __m128h C) {1990  // CHECK-LABEL: test_mm_mask_cvtph_epi321991  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2dq.1281992  return _mm_mask_cvtph_epi32(A, B, C);1993}1994 1995__m128i test_mm_maskz_cvtph_epi32(__mmask8 A, __m128h B) {1996  // CHECK-LABEL: test_mm_maskz_cvtph_epi321997  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2dq.1281998  return _mm_maskz_cvtph_epi32(A, B);1999}2000 2001__m256i test_mm256_cvtph_epi32(__m128h A) {2002  // CHECK-LABEL: test_mm256_cvtph_epi322003  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2dq.2562004  return _mm256_cvtph_epi32(A);2005}2006 2007__m256i test_mm256_mask_cvtph_epi32(__m256i A, __mmask8 B, __m128h C) {2008  // CHECK-LABEL: test_mm256_mask_cvtph_epi322009  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2dq.2562010  return _mm256_mask_cvtph_epi32(A, B, C);2011}2012 2013__m256i test_mm256_maskz_cvtph_epi32(__mmask8 A, __m128h B) {2014  // CHECK-LABEL: test_mm256_maskz_cvtph_epi322015  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2dq.2562016  return _mm256_maskz_cvtph_epi32(A, B);2017}2018 2019__m128i test_mm_cvtph_epu32(__m128h A) {2020  // CHECK-LABEL: test_mm_cvtph_epu322021  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2udq.1282022  return _mm_cvtph_epu32(A);2023}2024 2025__m128i test_mm_mask_cvtph_epu32(__m128i A, __mmask8 B, __m128h C) {2026  // CHECK-LABEL: test_mm_mask_cvtph_epu322027  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2udq.1282028  return _mm_mask_cvtph_epu32(A, B, C);2029}2030 2031__m128i test_mm_maskz_cvtph_epu32(__mmask8 A, __m128h B) {2032  // CHECK-LABEL: test_mm_maskz_cvtph_epu322033  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2udq.1282034  return _mm_maskz_cvtph_epu32(A, B);2035}2036 2037__m256i test_mm256_cvtph_epu32(__m128h A) {2038  // CHECK-LABEL: test_mm256_cvtph_epu322039  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2udq.2562040  return _mm256_cvtph_epu32(A);2041}2042 2043__m256i test_mm256_mask_cvtph_epu32(__m256i A, __mmask8 B, __m128h C) {2044  // CHECK-LABEL: test_mm256_mask_cvtph_epu322045  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2udq.2562046  return _mm256_mask_cvtph_epu32(A, B, C);2047}2048 2049__m256i test_mm256_maskz_cvtph_epu32(__mmask8 A, __m128h B) {2050  // CHECK-LABEL: test_mm256_maskz_cvtph_epu322051  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2udq.2562052  return _mm256_maskz_cvtph_epu32(A, B);2053}2054 2055__m128h test_mm_cvtepi32_ph(__m128i A) {2056  // CHECK-LABEL: test_mm_cvtepi32_ph2057  // CHECK: @llvm.x86.avx512fp16.mask.vcvtdq2ph.1282058  return _mm_cvtepi32_ph(A);2059}2060 2061__m128h test_mm_mask_cvtepi32_ph(__m128h A, __mmask8 B, __m128i C) {2062  // CHECK-LABEL: test_mm_mask_cvtepi32_ph2063  // CHECK: @llvm.x86.avx512fp16.mask.vcvtdq2ph.1282064  return _mm_mask_cvtepi32_ph(A, B, C);2065}2066 2067__m128h test_mm_maskz_cvtepi32_ph(__mmask8 A, __m128i B) {2068  // CHECK-LABEL: test_mm_maskz_cvtepi32_ph2069  // CHECK: @llvm.x86.avx512fp16.mask.vcvtdq2ph.1282070  return _mm_maskz_cvtepi32_ph(A, B);2071}2072 2073__m128h test_mm256_cvtepi32_ph(__m256i A) {2074  // CHECK-LABEL: test_mm256_cvtepi32_ph2075  // CHECK: %{{.*}} = sitofp <8 x i32> %{{.*}} to <8 x half>2076  return _mm256_cvtepi32_ph(A);2077}2078 2079TEST_CONSTEXPR(match_m128h(_mm256_cvtepi32_ph((__m256i)(__v8si){-1, -1, 2, 2, -4, -4, 6, 6}), -1.0, -1.0, 2.0, 2.0, -4.0, -4.0, 6.0, 6.0));2080 2081__m128h test_mm256_mask_cvtepi32_ph(__m128h A, __mmask8 B, __m256i C) {2082  // CHECK-LABEL: test_mm256_mask_cvtepi32_ph2083  // CHECK: %{{.*}} = sitofp <8 x i32> %{{.*}} to <8 x half>2084  return _mm256_mask_cvtepi32_ph(A, B, C);2085}2086 2087TEST_CONSTEXPR(match_m128h(_mm256_mask_cvtepi32_ph(_mm_set1_ph(-999.0),/*1001 0011=*/0x93,(__m256i)(__v8si){1, 2, 3, 4, 5, 6, 7, 8}), 1.0, 2.0, -999.0, -999.0, 5.0, -999.0, -999.0, 8.0));2088 2089__m128h test_mm256_maskz_cvtepi32_ph(__mmask8 A, __m256i B) {2090  // CHECK-LABEL: test_mm256_maskz_cvtepi32_ph2091  // CHECK: %{{.*}} = sitofp <8 x i32> %{{.*}} to <8 x half>2092  return _mm256_maskz_cvtepi32_ph(A, B);2093}2094 2095 TEST_CONSTEXPR(match_m128h(_mm256_maskz_cvtepi32_ph(/*1001 0011=*/0x93, (__m256i)(__v8si){1, 1, 2, 2, 4, 4, 8, 8}), 1.0, 1.0, 0.0, 0.0, 4.0, 0.0, 0.0, 8.0));2096 2097__m128h test_mm_cvtepu32_ph(__m128i A) {2098  // CHECK-LABEL: test_mm_cvtepu32_ph2099  // CHECK: @llvm.x86.avx512fp16.mask.vcvtudq2ph.1282100  return _mm_cvtepu32_ph(A);2101}2102 2103__m128h test_mm_mask_cvtepu32_ph(__m128h A, __mmask8 B, __m128i C) {2104  // CHECK-LABEL: test_mm_mask_cvtepu32_ph2105  // CHECK: @llvm.x86.avx512fp16.mask.vcvtudq2ph.1282106  return _mm_mask_cvtepu32_ph(A, B, C);2107}2108 2109__m128h test_mm_maskz_cvtepu32_ph(__mmask8 A, __m128i B) {2110  // CHECK-LABEL: test_mm_maskz_cvtepu32_ph2111  // CHECK: @llvm.x86.avx512fp16.mask.vcvtudq2ph.1282112  return _mm_maskz_cvtepu32_ph(A, B);2113}2114 2115__m128h test_mm256_cvtepu32_ph(__m256i A) {2116  // CHECK-LABEL: test_mm256_cvtepu32_ph2117  // CHECK: %{{.*}} = uitofp <8 x i32> %{{.*}} to <8 x half>2118  return _mm256_cvtepu32_ph(A);2119}2120 2121TEST_CONSTEXPR(match_m128h( _mm256_cvtepu32_ph((__m256i)(__v8su){1, 2, 3, 4, 5, 6, 7, 8}), 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0));2122 2123__m128h test_mm256_mask_cvtepu32_ph(__m128h A, __mmask8 B, __m256i C) {2124  // CHECK-LABEL: test_mm256_mask_cvtepu32_ph2125  // CHECK: %{{.*}} = uitofp <8 x i32> %{{.*}} to <8 x half>2126  return _mm256_mask_cvtepu32_ph(A, B, C);2127}2128 2129TEST_CONSTEXPR(match_m128h( _mm256_mask_cvtepu32_ph(_mm_set1_ph(-999.0),/*1001 0011=*/0x93,(__m256i)(__v8su){1, 2, 3, 4, 5, 6, 7, 8}), 1.0, 2.0, -999.0, -999.0, 5.0, -999.0, -999.0, 8.0));2130 2131__m128h test_mm256_maskz_cvtepu32_ph(__mmask8 A, __m256i B) {2132  // CHECK-LABEL: test_mm256_maskz_cvtepu32_ph2133  // CHECK: %{{.*}} = uitofp <8 x i32> %{{.*}} to <8 x half>2134  return _mm256_maskz_cvtepu32_ph(A, B);2135}2136 2137TEST_CONSTEXPR(match_m128h(_mm256_maskz_cvtepu32_ph(/*1001 0011=*/0x93, (__m256i)(__v8su){1, 1, 2, 2, 4, 4, 8, 8}), 1.0, 1.0, 0.0, 0.0, 4.0, 0.0, 0.0, 8.0));2138 2139__m128i test_mm_cvttph_epi32(__m128h A) {2140  // CHECK-LABEL: test_mm_cvttph_epi322141  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2dq.1282142  return _mm_cvttph_epi32(A);2143}2144 2145__m128i test_mm_mask_cvttph_epi32(__m128i A, __mmask8 B, __m128h C) {2146  // CHECK-LABEL: test_mm_mask_cvttph_epi322147  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2dq.1282148  return _mm_mask_cvttph_epi32(A, B, C);2149}2150 2151__m128i test_mm_maskz_cvttph_epi32(__mmask8 A, __m128h B) {2152  // CHECK-LABEL: test_mm_maskz_cvttph_epi322153  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2dq.1282154  return _mm_maskz_cvttph_epi32(A, B);2155}2156 2157__m256i test_mm256_cvttph_epi32(__m128h A) {2158  // CHECK-LABEL: test_mm256_cvttph_epi322159  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2dq.2562160  return _mm256_cvttph_epi32(A);2161}2162 2163__m256i test_mm256_mask_cvttph_epi32(__m256i A, __mmask8 B, __m128h C) {2164  // CHECK-LABEL: test_mm256_mask_cvttph_epi322165  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2dq.2562166  return _mm256_mask_cvttph_epi32(A, B, C);2167}2168 2169__m256i test_mm256_maskz_cvttph_epi32(__mmask8 A, __m128h B) {2170  // CHECK-LABEL: test_mm256_maskz_cvttph_epi322171  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2dq.2562172  return _mm256_maskz_cvttph_epi32(A, B);2173}2174 2175__m128i test_mm_cvttph_epu32(__m128h A) {2176  // CHECK-LABEL: test_mm_cvttph_epu322177  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2udq.1282178  return _mm_cvttph_epu32(A);2179}2180 2181__m128i test_mm_mask_cvttph_epu32(__m128i A, __mmask8 B, __m128h C) {2182  // CHECK-LABEL: test_mm_mask_cvttph_epu322183  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2udq.1282184  return _mm_mask_cvttph_epu32(A, B, C);2185}2186 2187__m128i test_mm_maskz_cvttph_epu32(__mmask8 A, __m128h B) {2188  // CHECK-LABEL: test_mm_maskz_cvttph_epu322189  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2udq.1282190  return _mm_maskz_cvttph_epu32(A, B);2191}2192 2193__m256i test_mm256_cvttph_epu32(__m128h A) {2194  // CHECK-LABEL: test_mm256_cvttph_epu322195  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2udq.2562196  return _mm256_cvttph_epu32(A);2197}2198 2199__m256i test_mm256_mask_cvttph_epu32(__m256i A, __mmask8 B, __m128h C) {2200  // CHECK-LABEL: test_mm256_mask_cvttph_epu322201  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2udq.2562202  return _mm256_mask_cvttph_epu32(A, B, C);2203}2204 2205__m256i test_mm256_maskz_cvttph_epu32(__mmask8 A, __m128h B) {2206  // CHECK-LABEL: test_mm256_maskz_cvttph_epu322207  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2udq.2562208  return _mm256_maskz_cvttph_epu32(A, B);2209}2210 2211__m128h test_mm_cvtepi64_ph(__m128i A) {2212  // CHECK-LABEL: test_mm_cvtepi64_ph2213  // CHECK: @llvm.x86.avx512fp16.mask.vcvtqq2ph.1282214  return _mm_cvtepi64_ph(A);2215}2216 2217__m128h test_mm_mask_cvtepi64_ph(__m128h A, __mmask8 B, __m128i C) {2218  // CHECK-LABEL: test_mm_mask_cvtepi64_ph2219  // CHECK: @llvm.x86.avx512fp16.mask.vcvtqq2ph.1282220  return _mm_mask_cvtepi64_ph(A, B, C);2221}2222 2223__m128h test_mm_maskz_cvtepi64_ph(__mmask8 A, __m128i B) {2224  // CHECK-LABEL: test_mm_maskz_cvtepi64_ph2225  // CHECK: @llvm.x86.avx512fp16.mask.vcvtqq2ph.1282226  return _mm_maskz_cvtepi64_ph(A, B);2227}2228 2229__m128h test_mm256_cvtepi64_ph(__m256i A) {2230  // CHECK-LABEL: test_mm256_cvtepi64_ph2231  // CHECK: @llvm.x86.avx512fp16.mask.vcvtqq2ph.2562232  return _mm256_cvtepi64_ph(A);2233}2234 2235__m128h test_mm256_mask_cvtepi64_ph(__m128h A, __mmask8 B, __m256i C) {2236  // CHECK-LABEL: test_mm256_mask_cvtepi64_ph2237  // CHECK: @llvm.x86.avx512fp16.mask.vcvtqq2ph.2562238  return _mm256_mask_cvtepi64_ph(A, B, C);2239}2240 2241__m128h test_mm256_maskz_cvtepi64_ph(__mmask8 A, __m256i B) {2242  // CHECK-LABEL: test_mm256_maskz_cvtepi64_ph2243  // CHECK: @llvm.x86.avx512fp16.mask.vcvtqq2ph.2562244  return _mm256_maskz_cvtepi64_ph(A, B);2245}2246 2247__m128i test_mm_cvtph_epi64(__m128h A) {2248  // CHECK-LABEL: test_mm_cvtph_epi642249  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2qq.1282250  return _mm_cvtph_epi64(A);2251}2252 2253__m128i test_mm_mask_cvtph_epi64(__m128i A, __mmask8 B, __m128h C) {2254  // CHECK-LABEL: test_mm_mask_cvtph_epi642255  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2qq.1282256  return _mm_mask_cvtph_epi64(A, B, C);2257}2258 2259__m128i test_mm_maskz_cvtph_epi64(__mmask8 A, __m128h B) {2260  // CHECK-LABEL: test_mm_maskz_cvtph_epi642261  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2qq.1282262  return _mm_maskz_cvtph_epi64(A, B);2263}2264 2265__m256i test_mm256_cvtph_epi64(__m128h A) {2266  // CHECK-LABEL: test_mm256_cvtph_epi642267  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2qq.2562268  return _mm256_cvtph_epi64(A);2269}2270 2271__m256i test_mm256_mask_cvtph_epi64(__m256i A, __mmask8 B, __m128h C) {2272  // CHECK-LABEL: test_mm256_mask_cvtph_epi642273  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2qq.2562274  return _mm256_mask_cvtph_epi64(A, B, C);2275}2276 2277__m256i test_mm256_maskz_cvtph_epi64(__mmask8 A, __m128h B) {2278  // CHECK-LABEL: test_mm256_maskz_cvtph_epi642279  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2qq.2562280  return _mm256_maskz_cvtph_epi64(A, B);2281}2282 2283__m128h test_mm_cvtepu64_ph(__m128i A) {2284  // CHECK-LABEL: test_mm_cvtepu64_ph2285  // CHECK: @llvm.x86.avx512fp16.mask.vcvtuqq2ph.1282286  return _mm_cvtepu64_ph(A);2287}2288 2289__m128h test_mm_mask_cvtepu64_ph(__m128h A, __mmask8 B, __m128i C) {2290  // CHECK-LABEL: test_mm_mask_cvtepu64_ph2291  // CHECK: @llvm.x86.avx512fp16.mask.vcvtuqq2ph.1282292  return _mm_mask_cvtepu64_ph(A, B, C);2293}2294 2295__m128h test_mm_maskz_cvtepu64_ph(__mmask8 A, __m128i B) {2296  // CHECK-LABEL: test_mm_maskz_cvtepu64_ph2297  // CHECK: @llvm.x86.avx512fp16.mask.vcvtuqq2ph.1282298  return _mm_maskz_cvtepu64_ph(A, B);2299}2300 2301__m128h test_mm256_cvtepu64_ph(__m256i A) {2302  // CHECK-LABEL: test_mm256_cvtepu64_ph2303  // CHECK: @llvm.x86.avx512fp16.mask.vcvtuqq2ph.2562304  return _mm256_cvtepu64_ph(A);2305}2306 2307__m128h test_mm256_mask_cvtepu64_ph(__m128h A, __mmask8 B, __m256i C) {2308  // CHECK-LABEL: test_mm256_mask_cvtepu64_ph2309  // CHECK: @llvm.x86.avx512fp16.mask.vcvtuqq2ph.2562310  return _mm256_mask_cvtepu64_ph(A, B, C);2311}2312 2313__m128h test_mm256_maskz_cvtepu64_ph(__mmask8 A, __m256i B) {2314  // CHECK-LABEL: test_mm256_maskz_cvtepu64_ph2315  // CHECK: @llvm.x86.avx512fp16.mask.vcvtuqq2ph.2562316  return _mm256_maskz_cvtepu64_ph(A, B);2317}2318 2319__m128i test_mm_cvtph_epu64(__m128h A) {2320  // CHECK-LABEL: test_mm_cvtph_epu642321  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uqq.1282322  return _mm_cvtph_epu64(A);2323}2324 2325__m128i test_mm_mask_cvtph_epu64(__m128i A, __mmask8 B, __m128h C) {2326  // CHECK-LABEL: test_mm_mask_cvtph_epu642327  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uqq.1282328  return _mm_mask_cvtph_epu64(A, B, C);2329}2330 2331__m128i test_mm_maskz_cvtph_epu64(__mmask8 A, __m128h B) {2332  // CHECK-LABEL: test_mm_maskz_cvtph_epu642333  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uqq.1282334  return _mm_maskz_cvtph_epu64(A, B);2335}2336 2337__m256i test_mm256_cvtph_epu64(__m128h A) {2338  // CHECK-LABEL: test_mm256_cvtph_epu642339  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uqq.2562340  return _mm256_cvtph_epu64(A);2341}2342 2343__m256i test_mm256_mask_cvtph_epu64(__m256i A, __mmask8 B, __m128h C) {2344  // CHECK-LABEL: test_mm256_mask_cvtph_epu642345  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uqq.2562346  return _mm256_mask_cvtph_epu64(A, B, C);2347}2348 2349__m256i test_mm256_maskz_cvtph_epu64(__mmask8 A, __m128h B) {2350  // CHECK-LABEL: test_mm256_maskz_cvtph_epu642351  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2uqq.2562352  return _mm256_maskz_cvtph_epu64(A, B);2353}2354 2355__m128i test_mm_cvttph_epi64(__m128h A) {2356  // CHECK-LABEL: test_mm_cvttph_epi642357  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2qq.1282358  return _mm_cvttph_epi64(A);2359}2360 2361__m128i test_mm_mask_cvttph_epi64(__m128i A, __mmask8 B, __m128h C) {2362  // CHECK-LABEL: test_mm_mask_cvttph_epi642363  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2qq.1282364  return _mm_mask_cvttph_epi64(A, B, C);2365}2366 2367__m128i test_mm_maskz_cvttph_epi64(__mmask8 A, __m128h B) {2368  // CHECK-LABEL: test_mm_maskz_cvttph_epi642369  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2qq.1282370  return _mm_maskz_cvttph_epi64(A, B);2371}2372 2373__m256i test_mm256_cvttph_epi64(__m128h A) {2374  // CHECK-LABEL: test_mm256_cvttph_epi642375  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2qq.2562376  return _mm256_cvttph_epi64(A);2377}2378 2379__m256i test_mm256_mask_cvttph_epi64(__m256i A, __mmask8 B, __m128h C) {2380  // CHECK-LABEL: test_mm256_mask_cvttph_epi642381  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2qq.2562382  return _mm256_mask_cvttph_epi64(A, B, C);2383}2384 2385__m256i test_mm256_maskz_cvttph_epi64(__mmask8 A, __m128h B) {2386  // CHECK-LABEL: test_mm256_maskz_cvttph_epi642387  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2qq.2562388  return _mm256_maskz_cvttph_epi64(A, B);2389}2390 2391__m128i test_mm_cvttph_epu64(__m128h A) {2392  // CHECK-LABEL: test_mm_cvttph_epu642393  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uqq.1282394  return _mm_cvttph_epu64(A);2395}2396 2397__m128i test_mm_mask_cvttph_epu64(__m128i A, __mmask8 B, __m128h C) {2398  // CHECK-LABEL: test_mm_mask_cvttph_epu642399  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uqq.1282400  return _mm_mask_cvttph_epu64(A, B, C);2401}2402 2403__m128i test_mm_maskz_cvttph_epu64(__mmask8 A, __m128h B) {2404  // CHECK-LABEL: test_mm_maskz_cvttph_epu642405  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uqq.1282406  return _mm_maskz_cvttph_epu64(A, B);2407}2408 2409__m256i test_mm256_cvttph_epu64(__m128h A) {2410  // CHECK-LABEL: test_mm256_cvttph_epu642411  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uqq.2562412  return _mm256_cvttph_epu64(A);2413}2414 2415__m256i test_mm256_mask_cvttph_epu64(__m256i A, __mmask8 B, __m128h C) {2416  // CHECK-LABEL: test_mm256_mask_cvttph_epu642417  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uqq.2562418  return _mm256_mask_cvttph_epu64(A, B, C);2419}2420 2421__m256i test_mm256_maskz_cvttph_epu64(__mmask8 A, __m128h B) {2422  // CHECK-LABEL: test_mm256_maskz_cvttph_epu642423  // CHECK: @llvm.x86.avx512fp16.mask.vcvttph2uqq.2562424  return _mm256_maskz_cvttph_epu64(A, B);2425}2426 2427__m128 test_mm_cvtxph_ps(__m128h A) {2428  // CHECK-LABEL: test_mm_cvtxph_ps2429  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2psx.1282430  return _mm_cvtxph_ps(A);2431}2432 2433__m128 test_mm_mask_cvtxph_ps(__m128 A, __mmask8 B, __m128h C) {2434  // CHECK-LABEL: test_mm_mask_cvtxph_ps2435  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2psx.1282436  return _mm_mask_cvtxph_ps(A, B, C);2437}2438 2439__m128 test_mm_maskz_cvtxph_ps(__mmask8 A, __m128h B) {2440  // CHECK-LABEL: test_mm_maskz_cvtxph_ps2441  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2psx.1282442  return _mm_maskz_cvtxph_ps(A, B);2443}2444 2445__m256 test_mm256_cvtxph_ps(__m128h A) {2446  // CHECK-LABEL: test_mm256_cvtxph_ps2447  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2psx.2562448  return _mm256_cvtxph_ps(A);2449}2450 2451__m256 test_mm256_mask_cvtxph_ps(__m256 A, __mmask8 B, __m128h C) {2452  // CHECK-LABEL: test_mm256_mask_cvtxph_ps2453  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2psx.2562454  return _mm256_mask_cvtxph_ps(A, B, C);2455}2456 2457__m256 test_mm256_maskz_cvtxph_ps(__mmask8 A, __m128h B) {2458  // CHECK-LABEL: test_mm256_maskz_cvtxph_ps2459  // CHECK: @llvm.x86.avx512fp16.mask.vcvtph2psx.2562460  return _mm256_maskz_cvtxph_ps(A, B);2461}2462 2463__m128h test_mm_cvtxps_ph(__m128 A) {2464  // CHECK-LABEL: test_mm_cvtxps_ph2465  // CHECK: @llvm.x86.avx512fp16.mask.vcvtps2phx.1282466  return _mm_cvtxps_ph(A);2467}2468 2469__m128h test_mm_mask_cvtxps_ph(__m128h A, __mmask8 B, __m128 C) {2470  // CHECK-LABEL: test_mm_mask_cvtxps_ph2471  // CHECK: @llvm.x86.avx512fp16.mask.vcvtps2phx.1282472  return _mm_mask_cvtxps_ph(A, B, C);2473}2474 2475__m128h test_mm_maskz_cvtxps_ph(__mmask8 A, __m128 B) {2476  // CHECK-LABEL: test_mm_maskz_cvtxps_ph2477  // CHECK: @llvm.x86.avx512fp16.mask.vcvtps2phx.1282478  return _mm_maskz_cvtxps_ph(A, B);2479}2480 2481__m128h test_mm256_cvtxps_ph(__m256 A) {2482  // CHECK-LABEL: test_mm256_cvtxps_ph2483  // CHECK: @llvm.x86.avx512fp16.mask.vcvtps2phx.2562484  return _mm256_cvtxps_ph(A);2485}2486 2487__m128h test_mm256_mask_cvtxps_ph(__m128h A, __mmask8 B, __m256 C) {2488  // CHECK-LABEL: test_mm256_mask_cvtxps_ph2489  // CHECK: @llvm.x86.avx512fp16.mask.vcvtps2phx.2562490  return _mm256_mask_cvtxps_ph(A, B, C);2491}2492 2493__m128h test_mm256_maskz_cvtxps_ph(__mmask8 A, __m256 B) {2494  // CHECK-LABEL: test_mm256_maskz_cvtxps_ph2495  // CHECK: @llvm.x86.avx512fp16.mask.vcvtps2phx.2562496  return _mm256_maskz_cvtxps_ph(A, B);2497}2498 2499__m128h test_mm_fmadd_ph(__m128h __A, __m128h __B, __m128h __C) {2500  // CHECK-LABEL: test_mm_fmadd_ph2501  // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}})2502  return _mm_fmadd_ph(__A, __B, __C);2503}2504 2505__m128h test_mm_mask_fmadd_ph(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) {2506  // CHECK-LABEL: test_mm_mask_fmadd_ph2507  // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}})2508  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}2509  return _mm_mask_fmadd_ph(__A, __U, __B, __C);2510}2511 2512__m128h test_mm_fmsub_ph(__m128h __A, __m128h __B, __m128h __C) {2513  // CHECK-LABEL: test_mm_fmsub_ph2514  // CHECK: fneg2515  // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}})2516  return _mm_fmsub_ph(__A, __B, __C);2517}2518 2519__m128h test_mm_mask_fmsub_ph(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) {2520  // CHECK-LABEL: test_mm_mask_fmsub_ph2521  // CHECK: fneg2522  // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}})2523  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}2524  return _mm_mask_fmsub_ph(__A, __U, __B, __C);2525}2526 2527__m128h test_mm_mask3_fmadd_ph(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) {2528  // CHECK-LABEL: test_mm_mask3_fmadd_ph2529  // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}})2530  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}2531  return _mm_mask3_fmadd_ph(__A, __B, __C, __U);2532}2533 2534__m128h test_mm_mask3_fnmadd_ph(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) {2535  // CHECK-LABEL: test_mm_mask3_fnmadd_ph2536  // CHECK: fneg2537  // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}})2538  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}2539  return _mm_mask3_fnmadd_ph(__A, __B, __C, __U);2540}2541 2542__m128h test_mm_maskz_fmadd_ph(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) {2543  // CHECK-LABEL: test_mm_maskz_fmadd_ph2544  // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}})2545  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}2546  return _mm_maskz_fmadd_ph(__U, __A, __B, __C);2547}2548 2549__m128h test_mm_maskz_fmsub_ph(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) {2550  // CHECK-LABEL: test_mm_maskz_fmsub_ph2551  // CHECK: fneg2552  // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}})2553  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}2554  return _mm_maskz_fmsub_ph(__U, __A, __B, __C);2555}2556 2557__m128h test_mm_maskz_fnmadd_ph(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) {2558  // CHECK-LABEL: test_mm_maskz_fnmadd_ph2559  // CHECK: fneg2560  // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}})2561  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}2562  return _mm_maskz_fnmadd_ph(__U, __A, __B, __C);2563}2564 2565__m128h test_mm_maskz_fnmsub_ph(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) {2566  // CHECK-LABEL: test_mm_maskz_fnmsub_ph2567  // CHECK: fneg2568  // CHECK: fneg2569  // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}})2570  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}2571  return _mm_maskz_fnmsub_ph(__U, __A, __B, __C);2572}2573 2574__m256h test_mm256_fmadd_ph(__m256h __A, __m256h __B, __m256h __C) {2575  // CHECK-LABEL: test_mm256_fmadd_ph2576  // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}})2577  return _mm256_fmadd_ph(__A, __B, __C);2578}2579 2580__m256h test_mm256_mask_fmadd_ph(__m256h __A, __mmask8 __U, __m256h __B, __m256h __C) {2581  // CHECK-LABEL: test_mm256_mask_fmadd_ph2582  // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}})2583  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}2584  return _mm256_mask_fmadd_ph(__A, __U, __B, __C);2585}2586 2587__m256h test_mm256_fmsub_ph(__m256h __A, __m256h __B, __m256h __C) {2588  // CHECK-LABEL: test_mm256_fmsub_ph2589  // CHECK: fneg2590  // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}})2591  return _mm256_fmsub_ph(__A, __B, __C);2592}2593 2594__m256h test_mm256_mask_fmsub_ph(__m256h __A, __mmask16 __U, __m256h __B, __m256h __C) {2595  // CHECK-LABEL: test_mm256_mask_fmsub_ph2596  // CHECK: fneg2597  // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}})2598  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}2599  return _mm256_mask_fmsub_ph(__A, __U, __B, __C);2600}2601 2602__m256h test_mm256_mask3_fmadd_ph(__m256h __A, __m256h __B, __m256h __C, __mmask16 __U) {2603  // CHECK-LABEL: test_mm256_mask3_fmadd_ph2604  // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}})2605  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}2606  return _mm256_mask3_fmadd_ph(__A, __B, __C, __U);2607}2608 2609__m256h test_mm256_mask3_fnmadd_ph(__m256h __A, __m256h __B, __m256h __C, __mmask16 __U) {2610  // CHECK-LABEL: test_mm256_mask3_fnmadd_ph2611  // CHECK: fneg2612  // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}})2613  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}2614  return _mm256_mask3_fnmadd_ph(__A, __B, __C, __U);2615}2616 2617__m256h test_mm256_maskz_fmadd_ph(__mmask16 __U, __m256h __A, __m256h __B, __m256h __C) {2618  // CHECK-LABEL: test_mm256_maskz_fmadd_ph2619  // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}})2620  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}2621  return _mm256_maskz_fmadd_ph(__U, __A, __B, __C);2622}2623 2624__m256h test_mm256_maskz_fmsub_ph(__mmask16 __U, __m256h __A, __m256h __B, __m256h __C) {2625  // CHECK-LABEL: test_mm256_maskz_fmsub_ph2626  // CHECK: fneg2627  // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}})2628  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}2629  return _mm256_maskz_fmsub_ph(__U, __A, __B, __C);2630}2631 2632__m256h test_mm256_maskz_fnmadd_ph(__mmask16 __U, __m256h __A, __m256h __B, __m256h __C) {2633  // CHECK-LABEL: test_mm256_maskz_fnmadd_ph2634  // CHECK: fneg2635  // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}})2636  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}2637  return _mm256_maskz_fnmadd_ph(__U, __A, __B, __C);2638}2639 2640__m256h test_mm256_maskz_fnmsub_ph(__mmask16 __U, __m256h __A, __m256h __B, __m256h __C) {2641  // CHECK-LABEL: test_mm256_maskz_fnmsub_ph2642  // CHECK: fneg2643  // CHECK: fneg2644  // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}})2645  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}2646  return _mm256_maskz_fnmsub_ph(__U, __A, __B, __C);2647}2648 2649__m128h test_mm_fmaddsub_ph(__m128h __A, __m128h __B, __m128h __C) {2650  // CHECK-LABEL: test_mm_fmaddsub_ph2651  // CHECK-NOT: fneg2652  // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}})2653  return _mm_fmaddsub_ph(__A, __B, __C);2654}2655 2656__m128h test_mm_mask_fmaddsub_ph(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) {2657  // CHECK-LABEL: test_mm_mask_fmaddsub_ph2658  // CHECK-NOT: fneg2659  // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}})2660  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}2661  return _mm_mask_fmaddsub_ph(__A, __U, __B, __C);2662}2663 2664__m128h test_mm_fmsubadd_ph(__m128h __A, __m128h __B, __m128h __C) {2665  // CHECK-LABEL: test_mm_fmsubadd_ph2666  // CHECK: [[NEG:%.+]] = fneg2667  // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> [[NEG]])2668  return _mm_fmsubadd_ph(__A, __B, __C);2669}2670 2671__m128h test_mm_mask_fmsubadd_ph(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) {2672  // CHECK-LABEL: test_mm_mask_fmsubadd_ph2673  // CHECK: [[NEG:%.+]] = fneg2674  // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> [[NEG]])2675  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}2676  return _mm_mask_fmsubadd_ph(__A, __U, __B, __C);2677}2678 2679__m128h test_mm_mask3_fmaddsub_ph(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) {2680  // CHECK-LABEL: test_mm_mask3_fmaddsub_ph2681  // CHECK-NOT: fneg2682  // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}})2683  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}2684  return _mm_mask3_fmaddsub_ph(__A, __B, __C, __U);2685}2686 2687__m128h test_mm_maskz_fmaddsub_ph(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) {2688  // CHECK-LABEL: test_mm_maskz_fmaddsub_ph2689  // CHECK-NOT: fneg2690  // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}})2691  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}2692  return _mm_maskz_fmaddsub_ph(__U, __A, __B, __C);2693}2694 2695__m128h test_mm_maskz_fmsubadd_ph(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) {2696  // CHECK-LABEL: test_mm_maskz_fmsubadd_ph2697  // CHECK: [[NEG:%.+]] = fneg2698  // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> [[NEG]])2699  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}2700  return _mm_maskz_fmsubadd_ph(__U, __A, __B, __C);2701}2702 2703__m256h test_mm256_fmaddsub_ph(__m256h __A, __m256h __B, __m256h __C) {2704  // CHECK-LABEL: test_mm256_fmaddsub_ph2705  // CHECK-NOT: fneg2706  // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}})2707  return _mm256_fmaddsub_ph(__A, __B, __C);2708}2709 2710__m256h test_mm256_mask_fmaddsub_ph(__m256h __A, __mmask16 __U, __m256h __B, __m256h __C) {2711  // CHECK-LABEL: test_mm256_mask_fmaddsub_ph2712  // CHECK-NOT: fneg2713  // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}})2714  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}2715  return _mm256_mask_fmaddsub_ph(__A, __U, __B, __C);2716}2717 2718__m256h test_mm256_fmsubadd_ph(__m256h __A, __m256h __B, __m256h __C) {2719  // CHECK-LABEL: test_mm256_fmsubadd_ph2720  // CHECK: [[NEG:%.+]] = fneg2721  // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> [[NEG]])2722  return _mm256_fmsubadd_ph(__A, __B, __C);2723}2724 2725__m256h test_mm256_mask_fmsubadd_ph(__m256h __A, __mmask16 __U, __m256h __B, __m256h __C) {2726  // CHECK-LABEL: test_mm256_mask_fmsubadd_ph2727  // CHECK: [[NEG:%.+]] = fneg2728  // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> [[NEG]])2729  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}2730  return _mm256_mask_fmsubadd_ph(__A, __U, __B, __C);2731}2732 2733__m256h test_mm256_mask3_fmaddsub_ph(__m256h __A, __m256h __B, __m256h __C, __mmask16 __U) {2734  // CHECK-LABEL: test_mm256_mask3_fmaddsub_ph2735  // CHECK-NOT: fneg2736  // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}})2737  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}2738  return _mm256_mask3_fmaddsub_ph(__A, __B, __C, __U);2739}2740 2741__m256h test_mm256_maskz_fmaddsub_ph(__mmask16 __U, __m256h __A, __m256h __B, __m256h __C) {2742  // CHECK-LABEL: test_mm256_maskz_fmaddsub_ph2743  // CHECK-NOT: fneg2744  // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}})2745  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}2746  return _mm256_maskz_fmaddsub_ph(__U, __A, __B, __C);2747}2748 2749__m256h test_mm256_maskz_fmsubadd_ph(__mmask16 __U, __m256h __A, __m256h __B, __m256h __C) {2750  // CHECK-LABEL: test_mm256_maskz_fmsubadd_ph2751  // CHECK: [[NEG:%.+]] = fneg2752  // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> [[NEG]])2753  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}2754  return _mm256_maskz_fmsubadd_ph(__U, __A, __B, __C);2755}2756 2757__m128h test_mm_mask3_fmsub_ph(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) {2758  // CHECK-LABEL: test_mm_mask3_fmsub_ph2759  // CHECK: fneg2760  // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}})2761  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}2762  return _mm_mask3_fmsub_ph(__A, __B, __C, __U);2763}2764 2765__m256h test_mm256_mask3_fmsub_ph(__m256h __A, __m256h __B, __m256h __C, __mmask16 __U) {2766  // CHECK-LABEL: test_mm256_mask3_fmsub_ph2767  // CHECK: fneg2768  // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}})2769  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}2770  return _mm256_mask3_fmsub_ph(__A, __B, __C, __U);2771}2772 2773__m128h test_mm_mask3_fmsubadd_ph(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) {2774  // CHECK-LABEL: test_mm_mask3_fmsubadd_ph2775  // CHECK: [[NEG:%.+]] = fneg2776  // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> [[NEG]])2777  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}2778  return _mm_mask3_fmsubadd_ph(__A, __B, __C, __U);2779}2780 2781__m256h test_mm256_mask3_fmsubadd_ph(__m256h __A, __m256h __B, __m256h __C, __mmask16 __U) {2782  // CHECK-LABEL: test_mm256_mask3_fmsubadd_ph2783  // CHECK: [[NEG:%.+]] = fneg2784  // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> [[NEG]])2785  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}2786  return _mm256_mask3_fmsubadd_ph(__A, __B, __C, __U);2787}2788 2789__m128h test_mm_fnmadd_ph(__m128h __A, __m128h __B, __m128h __C) {2790  // CHECK-LABEL: test_mm_fnmadd_ph2791  // CHECK: fneg2792  // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}})2793  return _mm_fnmadd_ph(__A, __B, __C);2794}2795 2796__m128h test_mm_mask_fnmadd_ph(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) {2797  // CHECK-LABEL: test_mm_mask_fnmadd_ph2798  // CHECK: fneg2799  // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}})2800  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}2801  return _mm_mask_fnmadd_ph(__A, __U, __B, __C);2802}2803 2804__m256h test_mm256_fnmadd_ph(__m256h __A, __m256h __B, __m256h __C) {2805  // CHECK-LABEL: test_mm256_fnmadd_ph2806  // CHECK: fneg2807  // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}})2808  return _mm256_fnmadd_ph(__A, __B, __C);2809}2810 2811__m256h test_mm256_mask_fnmadd_ph(__m256h __A, __mmask16 __U, __m256h __B, __m256h __C) {2812  // CHECK-LABEL: test_mm256_mask_fnmadd_ph2813  // CHECK: fneg2814  // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}})2815  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}2816  return _mm256_mask_fnmadd_ph(__A, __U, __B, __C);2817}2818 2819__m128h test_mm_fnmsub_ph(__m128h __A, __m128h __B, __m128h __C) {2820  // CHECK-LABEL: test_mm_fnmsub_ph2821  // CHECK: fneg2822  // CHECK: fneg2823  // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}})2824  return _mm_fnmsub_ph(__A, __B, __C);2825}2826 2827__m128h test_mm_mask_fnmsub_ph(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) {2828  // CHECK-LABEL: test_mm_mask_fnmsub_ph2829  // CHECK: fneg2830  // CHECK: fneg2831  // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}})2832  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}2833  return _mm_mask_fnmsub_ph(__A, __U, __B, __C);2834}2835 2836__m128h test_mm_mask3_fnmsub_ph(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) {2837  // CHECK-LABEL: test_mm_mask3_fnmsub_ph2838  // CHECK: fneg2839  // CHECK: fneg2840  // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}})2841  // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}2842  return _mm_mask3_fnmsub_ph(__A, __B, __C, __U);2843}2844 2845__m256h test_mm256_fnmsub_ph(__m256h __A, __m256h __B, __m256h __C) {2846  // CHECK-LABEL: test_mm256_fnmsub_ph2847  // CHECK: fneg2848  // CHECK: fneg2849  // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}})2850  return _mm256_fnmsub_ph(__A, __B, __C);2851}2852 2853__m256h test_mm256_mask_fnmsub_ph(__m256h __A, __mmask16 __U, __m256h __B, __m256h __C) {2854  // CHECK-LABEL: test_mm256_mask_fnmsub_ph2855  // CHECK: fneg2856  // CHECK: fneg2857  // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}})2858  // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}2859  return _mm256_mask_fnmsub_ph(__A, __U, __B, __C);2860}2861 2862__m256h test_mm256_mask3_fnmsub_ph(__m256h __A, __m256h __B, __m256h __C, __mmask16 __U) {2863  // CHECK-LABEL: test_mm256_mask3_fnmsub_ph2864  // CHECK: fneg2865  // CHECK: fneg2866  // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}})2867  return _mm256_mask3_fnmsub_ph(__A, __B, __C, __U);2868}2869 2870__m128h test_mm_fcmul_pch(__m128h __A, __m128h __B) {2871  // CHECK-LABEL: test_mm_fcmul_pch2872  // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.1282873  return _mm_fcmul_pch(__A, __B);2874}2875 2876__m128h test_mm_mask_fcmul_pch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {2877  // CHECK-LABEL: test_mm_mask_fcmul_pch2878  // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.1282879  return _mm_mask_fcmul_pch(__W, __U, __A, __B);2880}2881 2882__m128h test_mm_maskz_fcmul_pch(__mmask8 __U, __m128h __A, __m128h __B) {2883  // CHECK-LABEL: test_mm_maskz_fcmul_pch2884  // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.1282885  return _mm_maskz_fcmul_pch(__U, __A, __B);2886}2887 2888__m256h test_mm256_fcmul_pch(__m256h __A, __m256h __B) {2889  // CHECK-LABEL: test_mm256_fcmul_pch2890  // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.2562891  return _mm256_fcmul_pch(__A, __B);2892}2893 2894__m256h test_mm256_mask_fcmul_pch(__m256h __W, __mmask8 __U, __m256h __A, __m256h __B) {2895  // CHECK-LABEL: test_mm256_mask_fcmul_pch2896  // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.2562897  return _mm256_mask_fcmul_pch(__W, __U, __A, __B);2898}2899 2900__m256h test_mm256_maskz_fcmul_pch(__mmask8 __U, __m256h __A, __m256h __B) {2901  // CHECK-LABEL: test_mm256_maskz_fcmul_pch2902  // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.2562903  return _mm256_maskz_fcmul_pch(__U, __A, __B);2904}2905 2906__m128h test_mm_fcmadd_pch(__m128h __A, __m128h __B, __m128h __C) {2907  // CHECK-LABEL: test_mm_fcmadd_pch2908  // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.1282909  return _mm_fcmadd_pch(__A, __B, __C);2910}2911 2912__m128h test_mm_mask_fcmadd_pch(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) {2913  // CHECK-LABEL: test_mm_mask_fcmadd_pch2914  // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.1282915  // CHECK:  %{{.*}} = shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2916  // CHECK:  %{{.*}} = select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}2917  return _mm_mask_fcmadd_pch(__A, __U, __B, __C);2918}2919 2920__m128h test_mm_mask3_fcmadd_pch(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) {2921  // CHECK-LABEL: test_mm_mask3_fcmadd_pch2922  // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.1282923  // CHECK-NOT:  %{{.*}} = select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}2924  return _mm_mask3_fcmadd_pch(__A, __B, __C, __U);2925}2926 2927__m128h test_mm_maskz_fcmadd_pch(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) {2928  // CHECK-LABEL: test_mm_maskz_fcmadd_pch2929  // CHECK: @llvm.x86.avx512fp16.maskz.vfcmadd.cph.1282930  return _mm_maskz_fcmadd_pch(__U, __A, __B, __C);2931}2932 2933__m256h test_mm256_fcmadd_pch(__m256h __A, __m256h __B, __m256h __C) {2934  // CHECK-LABEL: test_mm256_fcmadd_pch2935  // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.2562936  return _mm256_fcmadd_pch(__A, __B, __C);2937}2938 2939__m256h test_mm256_mask_fcmadd_pch(__m256h __A, __mmask8 __U, __m256h __B, __m256h __C) {2940  // CHECK-LABEL: test_mm256_mask_fcmadd_pch2941  // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.2562942  // CHECK:  %{{.*}} = select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}2943  return _mm256_mask_fcmadd_pch(__A, __U, __B, __C);2944}2945 2946__m256h test_mm256_mask3_fcmadd_pch(__m256h __A, __m256h __B, __m256h __C, __mmask8 __U) {2947  // CHECK-LABEL: test_mm256_mask3_fcmadd_pch2948  // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.2562949  // CHECK-NOT:  %{{.*}} = select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}2950  return _mm256_mask3_fcmadd_pch(__A, __B, __C, __U);2951}2952 2953__m256h test_mm256_maskz_fcmadd_pch(__mmask8 __U, __m256h __A, __m256h __B, __m256h __C) {2954  // CHECK-LABEL: test_mm256_maskz_fcmadd_pch2955  // CHECK: @llvm.x86.avx512fp16.maskz.vfcmadd.cph.2562956  return _mm256_maskz_fcmadd_pch(__U, __A, __B, __C);2957}2958 2959__m128h test_mm_fmul_pch(__m128h __A, __m128h __B) {2960  // CHECK-LABEL: test_mm_fmul_pch2961  // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.1282962  return _mm_fmul_pch(__A, __B);2963}2964 2965__m128h test_mm_mask_fmul_pch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {2966  // CHECK-LABEL: test_mm_mask_fmul_pch2967  // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.1282968  return _mm_mask_fmul_pch(__W, __U, __A, __B);2969}2970 2971__m128h test_mm_maskz_fmul_pch(__mmask8 __U, __m128h __A, __m128h __B) {2972  // CHECK-LABEL: test_mm_maskz_fmul_pch2973  // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.1282974  return _mm_maskz_fmul_pch(__U, __A, __B);2975}2976 2977__m256h test_mm256_fmul_pch(__m256h __A, __m256h __B) {2978  // CHECK-LABEL: test_mm256_fmul_pch2979  // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.2562980  return _mm256_fmul_pch(__A, __B);2981}2982 2983__m256h test_mm256_mask_fmul_pch(__m256h __W, __mmask8 __U, __m256h __A, __m256h __B) {2984  // CHECK-LABEL: test_mm256_mask_fmul_pch2985  // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.2562986  return _mm256_mask_fmul_pch(__W, __U, __A, __B);2987}2988 2989__m256h test_mm256_maskz_fmul_pch(__mmask8 __U, __m256h __A, __m256h __B) {2990  // CHECK-LABEL: test_mm256_maskz_fmul_pch2991  // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.2562992  return _mm256_maskz_fmul_pch(__U, __A, __B);2993}2994 2995__m128h test_mm_fmadd_pch(__m128h __A, __m128h __B, __m128h __C) {2996  // CHECK-LABEL: test_mm_fmadd_pch2997  // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.1282998  return _mm_fmadd_pch(__A, __B, __C);2999}3000 3001__m128h test_mm_mask_fmadd_pch(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) {3002  // CHECK-LABEL: test_mm_mask_fmadd_pch3003  // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.1283004  // CHECK:  %{{.*}} = shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3005  // CHECK:  %{{.*}} = select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}3006  return _mm_mask_fmadd_pch(__A, __U, __B, __C);3007}3008 3009__m128h test_mm_mask3_fmadd_pch(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) {3010  // CHECK-LABEL: test_mm_mask3_fmadd_pch3011  // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.1283012  return _mm_mask3_fmadd_pch(__A, __B, __C, __U);3013}3014 3015__m128h test_mm_maskz_fmadd_pch(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) {3016  // CHECK-LABEL: test_mm_maskz_fmadd_pch3017  // CHECK: @llvm.x86.avx512fp16.maskz.vfmadd.cph.1283018  return _mm_maskz_fmadd_pch(__U, __A, __B, __C);3019}3020 3021__m256h test_mm256_fmadd_pch(__m256h __A, __m256h __B, __m256h __C) {3022  // CHECK-LABEL: test_mm256_fmadd_pch3023  // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.2563024  return _mm256_fmadd_pch(__A, __B, __C);3025}3026 3027__m256h test_mm256_mask_fmadd_pch(__m256h __A, __mmask8 __U, __m256h __B, __m256h __C) {3028  // CHECK-LABEL: test_mm256_mask_fmadd_pch3029  // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.2563030  // CHECK:  %{{.*}} = select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}3031  return _mm256_mask_fmadd_pch(__A, __U, __B, __C);3032}3033 3034__m256h test_mm256_mask3_fmadd_pch(__m256h __A, __m256h __B, __m256h __C, __mmask8 __U) {3035  // CHECK-LABEL: test_mm256_mask3_fmadd_pch3036  // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.2563037  return _mm256_mask3_fmadd_pch(__A, __B, __C, __U);3038}3039 3040__m256h test_mm256_maskz_fmadd_pch(__mmask8 __U, __m256h __A, __m256h __B, __m256h __C) {3041  // CHECK-LABEL: test_mm256_maskz_fmadd_pch3042  // CHECK: @llvm.x86.avx512fp16.maskz.vfmadd.cph.2563043  return _mm256_maskz_fmadd_pch(__U, __A, __B, __C);3044}3045 3046__m128h test_mm_mask_blend_ph(__mmask8 __U, __m128h __A, __m128h __W) {3047  // CHECK-LABEL: test_mm_mask_blend_ph3048  // CHECK:  %{{.*}} = bitcast i8 %{{.*}} to <8 x i1>3049  // CHECK:  %{{.*}} = select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}3050  return _mm_mask_blend_ph(__U, __A, __W);3051}3052TEST_CONSTEXPR(match_m128h(3053  _mm_mask_blend_ph(3054    (__mmask8)0x01,3055    (__m128h)(__v8hf){2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f},3056    (__m128h)(__v8hf){10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f}3057  ),3058  10.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f3059));3060 3061__m256h test_mm256_mask_blend_ph(__mmask16 __U, __m256h __A, __m256h __W) {3062  // CHECK-LABEL: test_mm256_mask_blend_ph3063  // CHECK:  %{{.*}} = bitcast i16 %{{.*}} to <16 x i1>3064  // CHECK:  %{{.*}} = select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}3065  return _mm256_mask_blend_ph(__U, __A, __W);3066}3067TEST_CONSTEXPR(match_m256h(3068  _mm256_mask_blend_ph(3069    (__mmask16)0x0001,3070    (__m256h)(__v16hf){2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f,3071                       2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f},3072    (__m256h)(__v16hf){10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f,3073                       18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f}3074  ),3075  10.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f,3076  2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f3077));3078 3079__m512h test_mm512_mask_blend_ph(__mmask32 __U, __m512h __A, __m512h __W) {3080  // CHECK-LABEL: test_mm512_mask_blend_ph3081  // CHECK: %{{.*}} = bitcast i32 %{{.*}} to <32 x i1>3082  // CHECK: %{{.*}} = select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}3083  return _mm512_mask_blend_ph(__U, __A, __W);3084}3085TEST_CONSTEXPR(match_m512h(3086  _mm512_mask_blend_ph(3087    (__mmask32)0x00000001,3088    (__m512h)(__v32hf){2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f,3089                       2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f,3090                       2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f,3091                       2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f},3092    (__m512h)(__v32hf){10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f,3093                       18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f,3094                       26.0f, 27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f, 33.0f,3095                       34.0f, 35.0f, 36.0f, 37.0f, 38.0f, 39.0f, 40.0f, 41.0f}3096  ),3097  10.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f,3098  2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f,3099  2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f,3100  2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f3101));3102 3103__m128h test_mm_permutex2var_ph(__m128h __A, __m128i __I, __m128h __B) {3104  // CHECK-LABEL: test_mm_permutex2var_ph3105  // CHECK:  %{{.*}} = bitcast <8 x half> %{{.*}} to <8 x i16>3106  // CHECK:  %{{.*}} = bitcast <2 x i64> %{{.*}} to <8 x i16>3107  // CHECK:  %{{.*}} = bitcast <8 x half> %{{.*}} to <8 x i16>3108  // CHECK:  %{{.*}} = call <8 x i16> @llvm.x86.avx512.vpermi2var.hi.128(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}})3109  // CHECK:  %{{.*}} = bitcast <8 x i16> %{{.*}} to <8 x half>3110  return _mm_permutex2var_ph(__A, __I, __B);3111}3112 3113__m256h test_mm256_permutex2var_ph(__m256h __A, __m256i __I, __m256h __B) {3114  // CHECK-LABEL: test_mm256_permutex2var_ph3115  // CHECK:  %{{.*}} = bitcast <16 x half> %{{.*}} to <16 x i16>3116  // CHECK:  %{{.*}} = bitcast <4 x i64> %{{.*}} to <16 x i16>3117  // CHECK:  %{{.*}} = bitcast <16 x half> %{{.*}} to <16 x i16>3118  // CHECK:  %{{.*}} = call <16 x i16> @llvm.x86.avx512.vpermi2var.hi.256(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}})3119  // CHECK:  %{{.*}} = bitcast <16 x i16> %{{.*}} to <16 x half>3120  return _mm256_permutex2var_ph(__A, __I, __B);3121}3122 3123__m128h test_mm_permutexvar_ph(__m128i __A, __m128h __B) {3124  // CHECK-LABEL: test_mm_permutexvar_ph3125  // CHECK:  %{{.*}} = bitcast <8 x half> %{{.*}} to <8 x i16>3126  // CHECK:  %{{.*}} = bitcast <2 x i64> %{{.*}} to <8 x i16>3127  // CHECK:  %{{.*}} = call <8 x i16> @llvm.x86.avx512.permvar.hi.128(<8 x i16> %{{.*}}, <8 x i16> %{{.*}})3128  // CHECK:  %{{.*}} = bitcast <8 x i16> %{{.*}} to <8 x half>3129  return _mm_permutexvar_ph(__A, __B);3130}3131 3132__m256h test_mm256_permutexvar_ph(__m256i __A, __m256h __B) {3133  // CHECK-LABEL: test_mm256_permutexvar_ph3134  // CHECK:  %{{.*}} = bitcast <16 x half> %{{.*}} to <16 x i16>3135  // CHECK:  %{{.*}} = bitcast <4 x i64> %{{.*}} to <16 x i16>3136  // CHECK:  %{{.*}} = call <16 x i16> @llvm.x86.avx512.permvar.hi.256(<16 x i16> %{{.*}}, <16 x i16> %{{.*}})3137  // CHECK:  %{{.*}} = bitcast <16 x i16> %{{.*}} to <16 x half>3138  return _mm256_permutexvar_ph(__A, __B);3139}3140 3141_Float16 test_mm256_reduce_add_ph(__m256h __W) {3142  // CHECK-LABEL: test_mm256_reduce_add_ph3143  // CHECK: @llvm.vector.reduce.fadd.v16f16(half 0xH8000, <16 x half> %{{.*}})3144  return _mm256_reduce_add_ph(__W);3145}3146 3147_Float16 test_mm256_reduce_mul_ph(__m256h __W) {3148  // CHECK-LABEL: test_mm256_reduce_mul_ph3149  // CHECK: @llvm.vector.reduce.fmul.v16f16(half 0xH3C00, <16 x half> %{{.*}})3150  return _mm256_reduce_mul_ph(__W);3151}3152 3153_Float16 test_mm256_reduce_max_ph(__m256h __W) {3154  // CHECK-LABEL: test_mm256_reduce_max_ph3155  // CHECK: @llvm.vector.reduce.fmax.v16f16(<16 x half> %{{.*}})3156  return _mm256_reduce_max_ph(__W);3157}3158 3159_Float16 test_mm256_reduce_min_ph(__m256h __W) {3160  // CHECK-LABEL: test_mm256_reduce_min_ph3161  // CHECK: @llvm.vector.reduce.fmin.v16f16(<16 x half> %{{.*}})3162  return _mm256_reduce_min_ph(__W);3163}3164 3165_Float16 test_mm_reduce_add_ph(__m128h __W) {3166  // CHECK-LABEL: test_mm_reduce_add_ph3167  // CHECK: @llvm.vector.reduce.fadd.v8f16(half 0xH8000, <8 x half> %{{.*}})3168  return _mm_reduce_add_ph(__W);3169}3170 3171_Float16 test_mm_reduce_mul_ph(__m128h __W) {3172  // CHECK-LABEL: test_mm_reduce_mul_ph3173  // CHECK: @llvm.vector.reduce.fmul.v8f16(half 0xH3C00, <8 x half> %{{.*}})3174  return _mm_reduce_mul_ph(__W);3175}3176 3177_Float16 test_mm_reduce_min_ph(__m128h __W) {3178  // CHECK-LABEL: test_mm_reduce_min_ph3179  // CHECK: @llvm.vector.reduce.fmin.v8f16(<8 x half> %{{.*}})3180  return _mm_reduce_min_ph(__W);3181}3182 3183_Float16 test_mm_reduce_max_ph(__m128h __W) {3184  // CHECK-LABEL: test_mm_reduce_max_ph3185  // CHECK: @llvm.vector.reduce.fmax.v8f16(<8 x half> %{{.*}})3186  return _mm_reduce_max_ph(__W);3187}3188 3189// tests below are for alias intrinsics.3190__m128h test_mm_mul_pch(__m128h __A, __m128h __B) {3191  // CHECK-LABEL: test_mm_mul_pch3192  // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.1283193  return _mm_mul_pch(__A, __B);3194}3195 3196__m128h test_mm_mask_mul_pch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {3197  // CHECK-LABEL: test_mm_mask_mul_pch3198  // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.1283199  return _mm_mask_mul_pch(__W, __U, __A, __B);3200}3201 3202__m128h test_mm_maskz_mul_pch(__mmask8 __U, __m128h __A, __m128h __B) {3203  // CHECK-LABEL: test_mm_maskz_mul_pch3204  // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.1283205  return _mm_maskz_mul_pch(__U, __A, __B);3206}3207 3208__m256h test_mm256_mul_pch(__m256h __A, __m256h __B) {3209  // CHECK-LABEL: test_mm256_mul_pch3210  // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.2563211  return _mm256_mul_pch(__A, __B);3212}3213 3214__m256h test_mm256_mask_mul_pch(__m256h __W, __mmask8 __U, __m256h __A, __m256h __B) {3215  // CHECK-LABEL: test_mm256_mask_mul_pch3216  // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.2563217  return _mm256_mask_mul_pch(__W, __U, __A, __B);3218}3219 3220__m256h test_mm256_maskz_mul_pch(__mmask8 __U, __m256h __A, __m256h __B) {3221  // CHECK-LABEL: test_mm256_maskz_mul_pch3222  // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.2563223  return _mm256_maskz_mul_pch(__U, __A, __B);3224}3225 3226__m128h test_mm_cmul_pch(__m128h __A, __m128h __B) {3227  // CHECK-LABEL: test_mm_cmul_pch3228  // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.1283229  return _mm_cmul_pch(__A, __B);3230}3231 3232__m128h test_mm_mask_cmul_pch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) {3233  // CHECK-LABEL: test_mm_mask_cmul_pch3234  // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.1283235  return _mm_mask_fcmul_pch(__W, __U, __A, __B);3236}3237 3238__m128h test_mm_maskz_cmul_pch(__mmask8 __U, __m128h __A, __m128h __B) {3239  // CHECK-LABEL: test_mm_maskz_cmul_pch3240  // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.1283241  return _mm_maskz_cmul_pch(__U, __A, __B);3242}3243 3244__m256h test_mm256_cmul_pch(__m256h __A, __m256h __B) {3245  // CHECK-LABEL: test_mm256_cmul_pch3246  // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.2563247  return _mm256_cmul_pch(__A, __B);3248}3249 3250__m256h test_mm256_mask_cmul_pch(__m256h __W, __mmask8 __U, __m256h __A, __m256h __B) {3251  // CHECK-LABEL: test_mm256_mask_cmul_pch3252  // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.2563253  return _mm256_mask_cmul_pch(__W, __U, __A, __B);3254}3255 3256__m256h test_mm256_maskz_cmul_pch(__mmask8 __U, __m256h __A, __m256h __B) {3257  // CHECK-LABEL: test_mm256_maskz_cmul_pch3258  // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.2563259  return _mm256_maskz_cmul_pch(__U, __A, __B);3260}3261