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