319 lines · c
1// RUN: %clang_cc1 %s -flax-vector-conversions=none -ffreestanding -triple=x86_64 -target-feature +avx10.2 \2// RUN: -emit-llvm -o - -Wno-invalid-feature-combination -Wall -Werror | FileCheck %s3// RUN: %clang_cc1 %s -flax-vector-conversions=none -ffreestanding -triple=i386 -target-feature +avx10.2 \4// RUN: -emit-llvm -o - -Wno-invalid-feature-combination -Wall -Werror | FileCheck %s5 6#include <immintrin.h>7 8__m512h test_mm512_cvtx2ps_ph(__m512 __A, __m512 __B) {9 // CHECK-LABEL: @test_mm512_cvtx2ps_ph(10 // CHECK: call <32 x half> @llvm.x86.avx10.mask.vcvt2ps2phx.51211 return _mm512_cvtx2ps_ph(__A, __B);12}13 14__m512h test_mm512_mask_cvtx2ps_ph(__m512h __W, __mmask32 __U, __m512 __A, __m512 __B) {15 // CHECK-LABEL: @test_mm512_mask_cvtx2ps_ph(16 // CHECK: call <32 x half> @llvm.x86.avx10.mask.vcvt2ps2phx.51217 return _mm512_mask_cvtx2ps_ph(__W, __U, __A, __B);18}19 20__m512h test_mm512_maskz_cvtx2ps_ph(__mmask32 __U, __m512 __A, __m512 __B) {21 // CHECK-LABEL: @test_mm512_maskz_cvtx2ps_ph(22 // CHECK: call <32 x half> @llvm.x86.avx10.mask.vcvt2ps2phx.51223 return _mm512_maskz_cvtx2ps_ph(__U, __A, __B);24}25 26__m512h test_mm512_cvtx_round2ps_ph(__m512 __A, __m512 __B) {27 // CHECK-LABEL: @test_mm512_cvtx_round2ps_ph(28 // CHECK: call <32 x half> @llvm.x86.avx10.mask.vcvt2ps2phx.51229 return _mm512_cvtx_round2ps_ph(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);30}31 32__m512h test_mm512_mask_cvtx_round2ps_ph(__m512h __W, __mmask32 __U, __m512 __A, __m512 __B) {33// CHECK-LABEL: @test_mm512_mask_cvtx_round2ps_ph(34// CHECK: call <32 x half> @llvm.x86.avx10.mask.vcvt2ps2phx.51235 return _mm512_mask_cvtx_round2ps_ph(__W, __U, __A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);36}37 38__m512h test_mm512_maskz_cvtx_round2ps_ph(__mmask32 __U, __m512 __A, __m512 __B) {39// CHECK-LABEL: @test_mm512_maskz_cvtx_round2ps_ph(40// CHECK: call <32 x half> @llvm.x86.avx10.mask.vcvt2ps2phx.51241 return _mm512_maskz_cvtx_round2ps_ph(__U, __A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);42}43 44__m256i test_mm512_cvtbiasph_bf8(__m512i __A, __m512h __B) {45 // CHECK-LABEL: @test_mm512_cvtbiasph_bf8(46 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2bf8512(47 return _mm512_cvtbiasph_bf8(__A, __B);48}49 50__m256i test_mm512_mask_cvtbiasph_bf8(__m256i __W, __mmask32 __U, __m512i __A, __m512h __B) {51 // CHECK-LABEL: @test_mm512_mask_cvtbiasph_bf8(52 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2bf8512(53 return _mm512_mask_cvtbiasph_bf8(__W, __U, __A, __B);54}55 56__m256i test_mm512_maskz_cvtbiasph_bf8(__mmask32 __U, __m512i __A, __m512h __B) {57 // CHECK-LABEL: @test_mm512_maskz_cvtbiasph_bf8(58 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2bf8512(59 return _mm512_maskz_cvtbiasph_bf8(__U, __A, __B);60}61 62__m256i test_mm512_cvts_biasph_bf8(__m512i __A, __m512h __B) {63 // CHECK-LABEL: @test_mm512_cvts_biasph_bf8(64 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2bf8s512(65 return _mm512_cvts_biasph_bf8(__A, __B);66}67 68__m256i test_mm512_mask_cvts_biasph_bf8(__m256i __W, __mmask32 __U, __m512i __A, __m512h __B) {69 // CHECK-LABEL: @test_mm512_mask_cvts_biasph_bf8(70 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2bf8s512(71 return _mm512_mask_cvts_biasph_bf8(__W, __U, __A, __B);72}73 74__m256i test_mm512_maskz_cvts_biasph_bf8(__mmask32 __U, __m512i __A, __m512h __B) {75 // CHECK-LABEL: @test_mm512_maskz_cvts_biasph_bf8(76 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2bf8s512(77 return _mm512_maskz_cvts_biasph_bf8(__U, __A, __B);78}79 80__m256i test_mm512_cvtbiasph_hf8(__m512i __A, __m512h __B) {81 // CHECK-LABEL: @test_mm512_cvtbiasph_hf8(82 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2hf8512(83 return _mm512_cvtbiasph_hf8(__A, __B);84}85 86__m256i test_mm512_mask_cvtbiasph_hf8(__m256i __W, __mmask32 __U, __m512i __A, __m512h __B) {87 // CHECK-LABEL: @test_mm512_mask_cvtbiasph_hf8(88 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2hf8512(89 return _mm512_mask_cvtbiasph_hf8(__W, __U, __A, __B);90}91 92__m256i test_mm512_maskz_cvtbiasph_hf8(__mmask32 __U, __m512i __A, __m512h __B) {93 // CHECK-LABEL: @test_mm512_maskz_cvtbiasph_hf8(94 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2hf8512(95 return _mm512_maskz_cvtbiasph_hf8(__U, __A, __B);96}97 98__m256i test_mm512_cvts_biasph_hf8(__m512i __A, __m512h __B) {99 // CHECK-LABEL: @test_mm512_cvts_biasph_hf8(100 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2hf8s512(101 return _mm512_cvts_biasph_hf8(__A, __B);102}103 104__m256i test_mm512_mask_cvts_biasph_hf8(__m256i __W, __mmask32 __U, __m512i __A, __m512h __B) {105 // CHECK-LABEL: @test_mm512_mask_cvts_biasph_hf8(106 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2hf8s512(107 return _mm512_mask_cvts_biasph_hf8(__W, __U, __A, __B);108}109 110__m256i test_mm512_maskz_cvts_biasph_hf8(__mmask32 __U, __m512i __A, __m512h __B) {111 // CHECK-LABEL: @test_mm512_maskz_cvts_biasph_hf8(112 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtbiasph2hf8s512(113 return _mm512_maskz_cvts_biasph_hf8(__U, __A, __B);114}115 116__m512i test_mm512_cvt2ph_bf8(__m512h __A, __m512h __B) {117 // CHECK-LABEL: @test_mm512_cvt2ph_bf8(118 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvt2ph2bf8512(119 return _mm512_cvt2ph_bf8(__A, __B);120}121 122__m512i test_mm512_mask_cvt2ph_bf8(__m512i __W, __mmask32 __U, __m512h __A, __m512h __B) {123 // CHECK-LABEL: @test_mm512_mask_cvt2ph_bf8(124 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvt2ph2bf8512(125 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}126 // CHECK: ret <8 x i64> %{{.*}}127 return _mm512_mask_cvt2ph_bf8(__W, __U, __A, __B);128}129 130__m512i test_mm512_maskz_cvt2ph_bf8(__mmask32 __U, __m512h __A, __m512h __B) {131 // CHECK-LABEL: @test_mm512_maskz_cvt2ph_bf8(132 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvt2ph2bf8512(133 // CHECK: zeroinitializer134 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}135 return _mm512_maskz_cvt2ph_bf8(__U, __A, __B);136}137 138__m512i test_mm512_cvts_2ph_bf8(__m512h __A, __m512h __B) {139 // CHECK-LABEL: @test_mm512_cvts_2ph_bf8(140 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvt2ph2bf8s512(141 return _mm512_cvts_2ph_bf8(__A, __B);142}143 144__m512i test_mm512_mask_cvts_2ph_bf8(__m512i __W, __mmask64 __U, __m512h __A, __m512h __B) {145 // CHECK-LABEL: @test_mm512_mask_cvts_2ph_bf8(146 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvt2ph2bf8s512(147 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}148 // CHECK: ret <8 x i64> %{{.*}}149 return _mm512_mask_cvts_2ph_bf8(__W, __U, __A, __B);150}151 152__m512i test_mm512_maskz_cvts_2ph_bf8(__mmask64 __U, __m512h __A, __m512h __B) {153 // CHECK-LABEL: @test_mm512_maskz_cvts_2ph_bf8(154 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvt2ph2bf8s512(155 // CHECK: zeroinitializer156 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}157 return _mm512_maskz_cvts_2ph_bf8(__U, __A, __B);158}159 160__m512i test_mm512_cvt2ph_hf8(__m512h __A, __m512h __B) {161 // CHECK-LABEL: @test_mm512_cvt2ph_hf8(162 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvt2ph2hf8512(163 return _mm512_cvt2ph_hf8(__A, __B);164}165 166__m512i test_mm512_mask_cvt2ph_hf8(__m512i __W, __mmask64 __U, __m512h __A, __m512h __B) {167 // CHECK-LABEL: @test_mm512_mask_cvt2ph_hf8(168 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvt2ph2hf8512(169 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}170 // CHECK: ret <8 x i64> %{{.*}}171 return _mm512_mask_cvt2ph_hf8(__W, __U, __A, __B);172}173 174__m512i test_mm512_maskz_cvt2ph_hf8(__mmask64 __U, __m512h __A, __m512h __B) {175 // CHECK-LABEL: @test_mm512_maskz_cvt2ph_hf8(176 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvt2ph2hf8512(177 // CHECK: zeroinitializer178 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}179 return _mm512_maskz_cvt2ph_hf8(__U, __A, __B);180}181 182__m512i test_mm512_cvts_2ph_hf8(__m512h __A, __m512h __B) {183 // CHECK-LABEL: @test_mm512_cvts_2ph_hf8(184 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvt2ph2hf8s512(185 return _mm512_cvts_2ph_hf8(__A, __B);186}187 188__m512i test_mm512_mask_cvts_2ph_hf8(__m512i __W, __mmask64 __U, __m512h __A, __m512h __B) {189 // CHECK-LABEL: @test_mm512_mask_cvts_2ph_hf8(190 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvt2ph2hf8s512(191 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}192 // CHECK: ret <8 x i64> %{{.*}}193 return _mm512_mask_cvts_2ph_hf8(__W, __U, __A, __B);194}195 196__m512i test_mm512_maskz_cvts_2ph_hf8(__mmask64 __U, __m512h __A, __m512h __B) {197 // CHECK-LABEL: @test_mm512_maskz_cvts_2ph_hf8(198 // CHECK: call <64 x i8> @llvm.x86.avx10.vcvt2ph2hf8s512(199 // CHECK: zeroinitializer200 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}201 return _mm512_maskz_cvts_2ph_hf8(__U, __A, __B);202}203 204__m512h test_mm512_cvthf8_ph(__m256i __A) {205 // CHECK-LABEL: @test_mm512_cvthf8_ph(206 // CHECK: call <32 x half> @llvm.x86.avx10.mask.vcvthf82ph512(207 return _mm512_cvthf8_ph(__A);208}209 210__m512h test_mm512_mask_cvthf8_ph(__m512h __A, __mmask32 __B, __m256i __C) {211 // CHECK-LABEL: @test_mm512_mask_cvthf8_ph(212 // CHECK: call <32 x half> @llvm.x86.avx10.mask.vcvthf82ph512(213 return _mm512_mask_cvthf8_ph(__A, __B, __C);214}215 216__m512h test_mm512_maskz_cvthf8_ph(__mmask32 __A, __m256i __B) {217 // CHECK-LABEL: @test_mm512_maskz_cvthf8_ph(218 // CHECK: call <32 x half> @llvm.x86.avx10.mask.vcvthf82ph512(219 return _mm512_maskz_cvthf8_ph(__A, __B);220}221 222__m256i test_mm512_cvtph_bf8(__m512h __A) {223 // CHECK-LABEL: @test_mm512_cvtph_bf8(224 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtph2bf8512(225 return _mm512_cvtph_bf8(__A);226}227 228__m256i test_mm512_mask_cvtph_bf8(__m256i __A, __mmask32 __B, __m512h __C) {229 // CHECK-LABEL: @test_mm512_mask_cvtph_bf8(230 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtph2bf8512(231 return _mm512_mask_cvtph_bf8(__A, __B, __C);232}233 234__m256i test_mm512_maskz_cvtph_bf8(__mmask32 __A, __m512h __B) {235 // CHECK-LABEL: @test_mm512_maskz_cvtph_bf8(236 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtph2bf8512(237 return _mm512_maskz_cvtph_bf8(__A, __B);238}239 240__m256i test_mm512_cvts_ph_bf8(__m512h __A) {241 // CHECK-LABEL: @test_mm512_cvts_ph_bf8(242 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtph2bf8s512(243 return _mm512_cvts_ph_bf8(__A);244}245 246__m256i test_mm512_mask_cvts_ph_bf8(__m256i __A, __mmask32 __B, __m512h __C) {247 // CHECK-LABEL: @test_mm512_mask_cvts_ph_bf8(248 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtph2bf8s512(249 return _mm512_mask_cvts_ph_bf8(__A, __B, __C);250}251 252__m256i test_mm512_maskz_cvts_ph_bf8(__mmask32 __A, __m512h __B) {253 // CHECK-LABEL: @test_mm512_maskz_cvts_ph_bf8(254 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtph2bf8s512(255 return _mm512_maskz_cvts_ph_bf8(__A, __B);256}257 258__m256i test_mm512_cvtph_hf8(__m512h __A) {259 // CHECK-LABEL: @test_mm512_cvtph_hf8(260 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtph2hf8512(261 return _mm512_cvtph_hf8(__A);262}263 264__m256i test_mm512_mask_cvtph_hf8(__m256i __A, __mmask32 __B, __m512h __C) {265 // CHECK-LABEL: @test_mm512_mask_cvtph_hf8(266 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtph2hf8512(267 return _mm512_mask_cvtph_hf8(__A, __B, __C);268}269 270__m256i test_mm512_maskz_cvtph_hf8(__mmask32 __A, __m512h __B) {271 // CHECK-LABEL: @test_mm512_maskz_cvtph_hf8(272 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtph2hf8512(273 return _mm512_maskz_cvtph_hf8(__A, __B);274}275 276__m256i test_mm512_cvts_ph_hf8(__m512h __A) {277 // CHECK-LABEL: @test_mm512_cvts_ph_hf8(278 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtph2hf8s512(279 return _mm512_cvts_ph_hf8(__A);280}281 282__m256i test_mm512_mask_cvts_ph_hf8(__m256i __A, __mmask32 __B, __m512h __C) {283 // CHECK-LABEL: @test_mm512_mask_cvts_ph_hf8(284 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtph2hf8s512(285 return _mm512_mask_cvts_ph_hf8(__A, __B, __C);286}287 288__m256i test_mm512_maskz_cvts_ph_hf8(__mmask32 __A, __m512h __B) {289 // CHECK-LABEL: @test_mm512_maskz_cvts_ph_hf8(290 // CHECK: call <32 x i8> @llvm.x86.avx10.mask.vcvtph2hf8s512(291 return _mm512_maskz_cvts_ph_hf8(__A, __B);292}293 294__m512h test_mm512_cvtbf8_ph(__m256i A) {295 // CHECK-LABEL: @test_mm512_cvtbf8_ph296 // CHECK: sext <32 x i8> %{{.*}} to <32 x i16>297 // CHECK: @llvm.x86.avx512.pslli.w.512298 // CHECK: ret <32 x half> %{{.*}}299 return _mm512_cvtbf8_ph(A);300}301 302__m512h test_mm512_mask_cvtbf8_ph(__m512h S, __mmask32 M, __m256i A) {303 // CHECK-LABEL: @test_mm512_mask_cvtbf8_ph304 // CHECK: sext <32 x i8> %{{.*}} to <32 x i16>305 // CHECK: @llvm.x86.avx512.pslli.w.512306 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}307 // CHECK: ret <32 x half> %{{.*}}308 return _mm512_mask_cvtbf8_ph(S, M, A);309}310 311__m512h test_mm512_maskz_cvtbf8_ph(__mmask32 M, __m256i A) {312 // CHECK-LABEL: @test_mm512_maskz_cvtbf8_ph313 // CHECK: sext <32 x i8> %{{.*}} to <32 x i16>314 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}315 // CHECK: @llvm.x86.avx512.pslli.w.512316 // CHECK: ret <32 x half> %{{.*}}317 return _mm512_maskz_cvtbf8_ph(M, A);318}319