brintos

brintos / llvm-project-archived public Read only

0
0
Text · 51.5 KiB · 47bfea9 Raw
1353 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl -mattr=+avx512fp16 | FileCheck %s3 4define signext i16 @test_mm_cvtsi128_si16(<2 x i64> %A) local_unnamed_addr #0 {5; CHECK-LABEL: test_mm_cvtsi128_si16:6; CHECK:       # %bb.0: # %entry7; CHECK-NEXT:    vmovw %xmm0, %eax8; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax9; CHECK-NEXT:    retq10entry:11  %0 = bitcast <2 x i64> %A to <8 x i16>12  %vecext.i = extractelement <8 x i16> %0, i32 013  ret i16 %vecext.i14}15 16define <2 x i64> @test_mm_cvtsi16_si128(i16 signext %A) local_unnamed_addr #0 {17; CHECK-LABEL: test_mm_cvtsi16_si128:18; CHECK:       # %bb.0: # %entry19; CHECK-NEXT:    vmovw %edi, %xmm020; CHECK-NEXT:    retq21entry:22  %vecinit7.i = insertelement <8 x i16> <i16 undef, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, i16 %A, i32 023  %0 = bitcast <8 x i16> %vecinit7.i to <2 x i64>24  ret <2 x i64> %025}26 27define <8 x half> @test_int_x86_avx512_mask_cvt_dq2ph_256(<8 x i32> %x0, <8 x half> %x1, i8 %x2) {28; CHECK-LABEL: test_int_x86_avx512_mask_cvt_dq2ph_256:29; CHECK:       # %bb.0:30; CHECK-NEXT:    kmovd %edi, %k131; CHECK-NEXT:    vcvtdq2ph %ymm0, %xmm1 {%k1}32; CHECK-NEXT:    vmovaps %xmm1, %xmm033; CHECK-NEXT:    vzeroupper34; CHECK-NEXT:    retq35  %mask = bitcast i8 %x2 to <8 x i1>36  %res0 = sitofp <8 x i32> %x0 to <8 x half>37  %res = select <8 x i1> %mask, <8 x half> %res0, <8 x half> %x138  ret <8 x half> %res39}40 41define <8 x half> @test_int_x86_avx512_mask_cvt_dq2ph_256_z(<8 x i32> %x0, i8 %x2) {42; CHECK-LABEL: test_int_x86_avx512_mask_cvt_dq2ph_256_z:43; CHECK:       # %bb.0:44; CHECK-NEXT:    kmovd %edi, %k145; CHECK-NEXT:    vcvtdq2ph %ymm0, %xmm0 {%k1} {z}46; CHECK-NEXT:    vzeroupper47; CHECK-NEXT:    retq48  %mask = bitcast i8 %x2 to <8 x i1>49  %res0 = sitofp <8 x i32> %x0 to <8 x half>50  %res = select <8 x i1> %mask, <8 x half> %res0, <8 x half> zeroinitializer51  ret <8 x half> %res52}53 54define <8 x half> @sint_to_fp_8i32_to_8f16(<8 x i32> %x) {55; CHECK-LABEL: sint_to_fp_8i32_to_8f16:56; CHECK:       # %bb.0:57; CHECK-NEXT:    vcvtdq2ph %ymm0, %xmm058; CHECK-NEXT:    vzeroupper59; CHECK-NEXT:    retq60  %res = sitofp <8 x i32> %x to <8 x half>61  ret <8 x half> %res62}63 64declare <8 x half> @llvm.x86.avx512fp16.mask.vcvtdq2ph.128(<4 x i32>, <8 x half>, i8)65 66define <8 x half> @test_int_x86_avx512_mask_cvt_dq2ph_128(<4 x i32> %x0, <8 x half> %x1, i8 %x2) {67; CHECK-LABEL: test_int_x86_avx512_mask_cvt_dq2ph_128:68; CHECK:       # %bb.0:69; CHECK-NEXT:    kmovd %edi, %k170; CHECK-NEXT:    vcvtdq2ph %xmm0, %xmm1 {%k1}71; CHECK-NEXT:    vmovaps %xmm1, %xmm072; CHECK-NEXT:    retq73  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtdq2ph.128(<4 x i32> %x0, <8 x half> %x1, i8 %x2)74  ret <8 x half> %res75}76 77define <8 x half> @test_int_x86_avx512_mask_cvt_dq2ph_128_nomask(<4 x i32> %x0, <8 x half> %x1) {78; CHECK-LABEL: test_int_x86_avx512_mask_cvt_dq2ph_128_nomask:79; CHECK:       # %bb.0:80; CHECK-NEXT:    vcvtdq2ph %xmm0, %xmm081; CHECK-NEXT:    retq82  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtdq2ph.128(<4 x i32> %x0, <8 x half> %x1, i8 -1)83  ret <8 x half> %res84}85 86define <8 x half> @test_int_x86_avx512_mask_cvt_dq2ph_128_z(<4 x i32> %x0, i8 %x2) {87; CHECK-LABEL: test_int_x86_avx512_mask_cvt_dq2ph_128_z:88; CHECK:       # %bb.0:89; CHECK-NEXT:    kmovd %edi, %k190; CHECK-NEXT:    vcvtdq2ph %xmm0, %xmm0 {%k1} {z}91; CHECK-NEXT:    retq92  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtdq2ph.128(<4 x i32> %x0, <8 x half> zeroinitializer, i8 %x2)93  ret <8 x half> %res94}95 96define <4 x half> @sint_to_fp_4i32_to_4f16(<4 x i32> %x) {97; CHECK-LABEL: sint_to_fp_4i32_to_4f16:98; CHECK:       # %bb.0:99; CHECK-NEXT:    vcvtdq2ph %xmm0, %xmm0100; CHECK-NEXT:    retq101  %res = sitofp <4 x i32> %x to <4 x half>102  ret <4 x half> %res103}104 105define <2 x half> @sint_to_fp_2i32_to_2f16(<2 x i32> %x) {106; CHECK-LABEL: sint_to_fp_2i32_to_2f16:107; CHECK:       # %bb.0:108; CHECK-NEXT:    vcvtdq2ph %xmm0, %xmm0109; CHECK-NEXT:    retq110  %res = sitofp <2 x i32> %x to <2 x half>111  ret <2 x half> %res112}113 114define <4 x i32> @fp_to_sint_4f16_to_4i32(<4 x half> %x) {115; CHECK-LABEL: fp_to_sint_4f16_to_4i32:116; CHECK:       # %bb.0:117; CHECK-NEXT:    vcvttph2dq %xmm0, %xmm0118; CHECK-NEXT:    retq119  %res = fptosi <4 x half> %x to <4 x i32>120  ret <4 x i32> %res121}122 123define <2 x i32> @fp_to_sint_2f16_to_2i32(<2 x half> %x) {124; CHECK-LABEL: fp_to_sint_2f16_to_2i32:125; CHECK:       # %bb.0:126; CHECK-NEXT:    vcvttph2dq %xmm0, %xmm0127; CHECK-NEXT:    retq128  %res = fptosi <2 x half> %x to <2 x i32>129  ret <2 x i32> %res130}131 132define <2 x i16> @fp_to_sint_2f16_to_2i16(<2 x half> %x) {133; CHECK-LABEL: fp_to_sint_2f16_to_2i16:134; CHECK:       # %bb.0:135; CHECK-NEXT:    vcvttph2w %xmm0, %xmm0136; CHECK-NEXT:    retq137  %res = fptosi <2 x half> %x to <2 x i16>138  ret <2 x i16> %res139}140 141define <8 x half> @test_int_x86_avx512_mask_cvt_udq2ph_256(<8 x i32> %x0, <8 x half> %x1, i8 %x2) {142; CHECK-LABEL: test_int_x86_avx512_mask_cvt_udq2ph_256:143; CHECK:       # %bb.0:144; CHECK-NEXT:    kmovd %edi, %k1145; CHECK-NEXT:    vcvtudq2ph %ymm0, %xmm1 {%k1}146; CHECK-NEXT:    vmovaps %xmm1, %xmm0147; CHECK-NEXT:    vzeroupper148; CHECK-NEXT:    retq149  %mask = bitcast i8 %x2 to <8 x i1>150  %res0 = uitofp <8 x i32> %x0 to <8 x half>151  %res = select <8 x i1> %mask, <8 x half> %res0, <8 x half> %x1152  ret <8 x half> %res153}154 155define <8 x half> @test_int_x86_avx512_mask_cvt_udq2ph_256_z(<8 x i32> %x0, i8 %x2) {156; CHECK-LABEL: test_int_x86_avx512_mask_cvt_udq2ph_256_z:157; CHECK:       # %bb.0:158; CHECK-NEXT:    kmovd %edi, %k1159; CHECK-NEXT:    vcvtudq2ph %ymm0, %xmm0 {%k1} {z}160; CHECK-NEXT:    vzeroupper161; CHECK-NEXT:    retq162  %mask = bitcast i8 %x2 to <8 x i1>163  %res0 = uitofp <8 x i32> %x0 to <8 x half>164  %res = select <8 x i1> %mask, <8 x half> %res0, <8 x half> zeroinitializer165  ret <8 x half> %res166}167 168define <8 x half> @uint_to_fp_8i32_to_8f16(<8 x i32> %x) {169; CHECK-LABEL: uint_to_fp_8i32_to_8f16:170; CHECK:       # %bb.0:171; CHECK-NEXT:    vcvtudq2ph %ymm0, %xmm0172; CHECK-NEXT:    vzeroupper173; CHECK-NEXT:    retq174  %res = uitofp <8 x i32> %x to <8 x half>175  ret <8 x half> %res176}177 178define <8 x i32> @fp_to_uint_8f16_to_8i32(<8 x half> %x) {179; CHECK-LABEL: fp_to_uint_8f16_to_8i32:180; CHECK:       # %bb.0:181; CHECK-NEXT:    vcvttph2udq %xmm0, %ymm0182; CHECK-NEXT:    retq183  %res = fptoui <8 x half> %x to <8 x i32>184  ret <8 x i32> %res185}186 187declare <8 x half> @llvm.x86.avx512fp16.mask.vcvtudq2ph.128(<4 x i32>, <8 x half>, i8)188 189define <8 x half> @test_int_x86_avx512_mask_cvt_udq2ph_128(<4 x i32> %x0, <8 x half> %x1, i8 %x2) {190; CHECK-LABEL: test_int_x86_avx512_mask_cvt_udq2ph_128:191; CHECK:       # %bb.0:192; CHECK-NEXT:    kmovd %edi, %k1193; CHECK-NEXT:    vcvtudq2ph %xmm0, %xmm1 {%k1}194; CHECK-NEXT:    vmovaps %xmm1, %xmm0195; CHECK-NEXT:    retq196  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtudq2ph.128(<4 x i32> %x0, <8 x half> %x1, i8 %x2)197  ret <8 x half> %res198}199 200define <8 x half> @test_int_x86_avx512_mask_cvt_udq2ph_128_nomask(<4 x i32> %x0, <8 x half> %x1) {201; CHECK-LABEL: test_int_x86_avx512_mask_cvt_udq2ph_128_nomask:202; CHECK:       # %bb.0:203; CHECK-NEXT:    vcvtudq2ph %xmm0, %xmm0204; CHECK-NEXT:    retq205  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtudq2ph.128(<4 x i32> %x0, <8 x half> %x1, i8 -1)206  ret <8 x half> %res207}208 209define <8 x half> @test_int_x86_avx512_mask_cvt_udq2ph_128_z(<4 x i32> %x0, i8 %x2) {210; CHECK-LABEL: test_int_x86_avx512_mask_cvt_udq2ph_128_z:211; CHECK:       # %bb.0:212; CHECK-NEXT:    kmovd %edi, %k1213; CHECK-NEXT:    vcvtudq2ph %xmm0, %xmm0 {%k1} {z}214; CHECK-NEXT:    retq215  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtudq2ph.128(<4 x i32> %x0, <8 x half> zeroinitializer, i8 %x2)216  ret <8 x half> %res217}218 219define <4 x half> @uint_to_fp_4i32_to_4f16(<4 x i32> %x) {220; CHECK-LABEL: uint_to_fp_4i32_to_4f16:221; CHECK:       # %bb.0:222; CHECK-NEXT:    vcvtudq2ph %xmm0, %xmm0223; CHECK-NEXT:    retq224  %res = uitofp <4 x i32> %x to <4 x half>225  ret <4 x half> %res226}227 228define <2 x half> @uint_to_fp_2i32_to_2f16(<2 x i32> %x) {229; CHECK-LABEL: uint_to_fp_2i32_to_2f16:230; CHECK:       # %bb.0:231; CHECK-NEXT:    vcvtudq2ph %xmm0, %xmm0232; CHECK-NEXT:    retq233  %res = uitofp <2 x i32> %x to <2 x half>234  ret <2 x half> %res235}236 237define <4 x i32> @fp_to_uint_4f16_to_4i32(<4 x half> %x) {238; CHECK-LABEL: fp_to_uint_4f16_to_4i32:239; CHECK:       # %bb.0:240; CHECK-NEXT:    vcvttph2udq %xmm0, %xmm0241; CHECK-NEXT:    retq242  %res = fptoui <4 x half> %x to <4 x i32>243  ret <4 x i32> %res244}245 246define <2 x i32> @fp_to_uint_2f16_to_2i32(<2 x half> %x) {247; CHECK-LABEL: fp_to_uint_2f16_to_2i32:248; CHECK:       # %bb.0:249; CHECK-NEXT:    vcvttph2udq %xmm0, %xmm0250; CHECK-NEXT:    retq251  %res = fptoui <2 x half> %x to <2 x i32>252  ret <2 x i32> %res253}254 255define <2 x i16> @fp_to_uint_2f16_to_2i16(<2 x half> %x) {256; CHECK-LABEL: fp_to_uint_2f16_to_2i16:257; CHECK:       # %bb.0:258; CHECK-NEXT:    vcvttph2uw %xmm0, %xmm0259; CHECK-NEXT:    retq260  %res = fptoui <2 x half> %x to <2 x i16>261  ret <2 x i16> %res262}263 264declare <4 x i32> @llvm.x86.avx512fp16.mask.vcvtph2dq.128(<8 x half>, <4 x i32>, i8)265 266define <4 x i32> @test_int_x86_avx512_cvt_ph2dq_128(<8 x half> %x0) {267; CHECK-LABEL: test_int_x86_avx512_cvt_ph2dq_128:268; CHECK:       # %bb.0:269; CHECK-NEXT:    vcvtph2dq %xmm0, %xmm0270; CHECK-NEXT:    retq271  %res = call <4 x i32> @llvm.x86.avx512fp16.mask.vcvtph2dq.128(<8 x half> %x0, <4 x i32> undef, i8 -1)272  ret <4 x i32> %res273}274 275define <4 x i32> @test_int_x86_avx512_mask_cvt_ph2dq_128(<8 x half> %x0, <4 x i32> %x1, i8 %x2) {276; CHECK-LABEL: test_int_x86_avx512_mask_cvt_ph2dq_128:277; CHECK:       # %bb.0:278; CHECK-NEXT:    kmovd %edi, %k1279; CHECK-NEXT:    vcvtph2dq %xmm0, %xmm1 {%k1}280; CHECK-NEXT:    vmovaps %xmm1, %xmm0281; CHECK-NEXT:    retq282  %res = call <4 x i32> @llvm.x86.avx512fp16.mask.vcvtph2dq.128(<8 x half> %x0, <4 x i32> %x1, i8 %x2)283  ret <4 x i32> %res284}285 286define <4 x i32> @test_int_x86_avx512_maskz_cvt_ph2dq_128(<8 x half> %x0, i8 %x2) {287; CHECK-LABEL: test_int_x86_avx512_maskz_cvt_ph2dq_128:288; CHECK:       # %bb.0:289; CHECK-NEXT:    kmovd %edi, %k1290; CHECK-NEXT:    vcvtph2dq %xmm0, %xmm0 {%k1} {z}291; CHECK-NEXT:    retq292  %res = call <4 x i32> @llvm.x86.avx512fp16.mask.vcvtph2dq.128(<8 x half> %x0, <4 x i32> zeroinitializer, i8 %x2)293  ret <4 x i32> %res294}295 296declare <8 x i32> @llvm.x86.avx512fp16.mask.vcvtph2dq.256(<8 x half>, <8 x i32>, i8)297 298define <8 x i32> @test_int_x86_avx512_cvt_ph2dq_256(<8 x half> %x0) {299; CHECK-LABEL: test_int_x86_avx512_cvt_ph2dq_256:300; CHECK:       # %bb.0:301; CHECK-NEXT:    vcvtph2dq %xmm0, %ymm0302; CHECK-NEXT:    retq303  %res = call <8 x i32> @llvm.x86.avx512fp16.mask.vcvtph2dq.256(<8 x half> %x0, <8 x i32> undef, i8 -1)304  ret <8 x i32> %res305}306 307define <8 x i32> @test_int_x86_avx512_mask_cvt_ph2dq_256(<8 x half> %x0, <8 x i32> %x1, i8 %x2) {308; CHECK-LABEL: test_int_x86_avx512_mask_cvt_ph2dq_256:309; CHECK:       # %bb.0:310; CHECK-NEXT:    kmovd %edi, %k1311; CHECK-NEXT:    vcvtph2dq %xmm0, %ymm1 {%k1}312; CHECK-NEXT:    vmovaps %ymm1, %ymm0313; CHECK-NEXT:    retq314  %res = call <8 x i32> @llvm.x86.avx512fp16.mask.vcvtph2dq.256(<8 x half> %x0, <8 x i32> %x1, i8 %x2)315  ret <8 x i32> %res316}317 318define <8 x i32> @test_int_x86_avx512_maskz_cvt_ph2dq_256(<8 x half> %x0, i8 %x2) {319; CHECK-LABEL: test_int_x86_avx512_maskz_cvt_ph2dq_256:320; CHECK:       # %bb.0:321; CHECK-NEXT:    kmovd %edi, %k1322; CHECK-NEXT:    vcvtph2dq %xmm0, %ymm0 {%k1} {z}323; CHECK-NEXT:    retq324  %res = call <8 x i32> @llvm.x86.avx512fp16.mask.vcvtph2dq.256(<8 x half> %x0, <8 x i32> zeroinitializer, i8 %x2)325  ret <8 x i32> %res326}327 328declare <4 x i32> @llvm.x86.avx512fp16.mask.vcvtph2udq.128(<8 x half>, <4 x i32>, i8)329 330define <4 x i32> @test_int_x86_avx512_cvt_ph2udq_128(<8 x half> %x0) {331; CHECK-LABEL: test_int_x86_avx512_cvt_ph2udq_128:332; CHECK:       # %bb.0:333; CHECK-NEXT:    vcvtph2udq %xmm0, %xmm0334; CHECK-NEXT:    retq335  %res = call <4 x i32> @llvm.x86.avx512fp16.mask.vcvtph2udq.128(<8 x half> %x0, <4 x i32> undef, i8 -1)336  ret <4 x i32> %res337}338 339define <4 x i32> @test_int_x86_avx512_mask_cvt_ph2udq_128(<8 x half> %x0, <4 x i32> %x1, i8 %x2) {340; CHECK-LABEL: test_int_x86_avx512_mask_cvt_ph2udq_128:341; CHECK:       # %bb.0:342; CHECK-NEXT:    kmovd %edi, %k1343; CHECK-NEXT:    vcvtph2udq %xmm0, %xmm1 {%k1}344; CHECK-NEXT:    vmovaps %xmm1, %xmm0345; CHECK-NEXT:    retq346  %res = call <4 x i32> @llvm.x86.avx512fp16.mask.vcvtph2udq.128(<8 x half> %x0, <4 x i32> %x1, i8 %x2)347  ret <4 x i32> %res348}349 350define <4 x i32> @test_int_x86_avx512_maskz_cvt_ph2udq_128(<8 x half> %x0, i8 %x2) {351; CHECK-LABEL: test_int_x86_avx512_maskz_cvt_ph2udq_128:352; CHECK:       # %bb.0:353; CHECK-NEXT:    kmovd %edi, %k1354; CHECK-NEXT:    vcvtph2udq %xmm0, %xmm0 {%k1} {z}355; CHECK-NEXT:    retq356  %res = call <4 x i32> @llvm.x86.avx512fp16.mask.vcvtph2udq.128(<8 x half> %x0, <4 x i32> zeroinitializer, i8 %x2)357  ret <4 x i32> %res358}359 360declare <8 x i32> @llvm.x86.avx512fp16.mask.vcvtph2udq.256(<8 x half>, <8 x i32>, i8)361 362define <8 x i32> @test_int_x86_avx512_cvt_ph2udq_256(<8 x half> %x0) {363; CHECK-LABEL: test_int_x86_avx512_cvt_ph2udq_256:364; CHECK:       # %bb.0:365; CHECK-NEXT:    vcvtph2udq %xmm0, %ymm0366; CHECK-NEXT:    retq367  %res = call <8 x i32> @llvm.x86.avx512fp16.mask.vcvtph2udq.256(<8 x half> %x0, <8 x i32> undef, i8 -1)368  ret <8 x i32> %res369}370 371define <8 x i32> @test_int_x86_avx512_mask_cvt_ph2udq_256(<8 x half> %x0, <8 x i32> %x1, i8 %x2) {372; CHECK-LABEL: test_int_x86_avx512_mask_cvt_ph2udq_256:373; CHECK:       # %bb.0:374; CHECK-NEXT:    kmovd %edi, %k1375; CHECK-NEXT:    vcvtph2udq %xmm0, %ymm1 {%k1}376; CHECK-NEXT:    vmovaps %ymm1, %ymm0377; CHECK-NEXT:    retq378  %res = call <8 x i32> @llvm.x86.avx512fp16.mask.vcvtph2udq.256(<8 x half> %x0, <8 x i32> %x1, i8 %x2)379  ret <8 x i32> %res380}381 382define <8 x i32> @test_int_x86_avx512_maskz_cvt_ph2udq_256(<8 x half> %x0, i8 %x2) {383; CHECK-LABEL: test_int_x86_avx512_maskz_cvt_ph2udq_256:384; CHECK:       # %bb.0:385; CHECK-NEXT:    kmovd %edi, %k1386; CHECK-NEXT:    vcvtph2udq %xmm0, %ymm0 {%k1} {z}387; CHECK-NEXT:    retq388  %res = call <8 x i32> @llvm.x86.avx512fp16.mask.vcvtph2udq.256(<8 x half> %x0, <8 x i32> zeroinitializer, i8 %x2)389  ret <8 x i32> %res390}391 392declare <4 x i32> @llvm.x86.avx512fp16.mask.vcvttph2dq.128(<8 x half>, <4 x i32>, i8)393 394define <4 x i32> @test_int_x86_avx512_cvtt_ph2dq_128(<8 x half> %x0) {395; CHECK-LABEL: test_int_x86_avx512_cvtt_ph2dq_128:396; CHECK:       # %bb.0:397; CHECK-NEXT:    vcvttph2dq %xmm0, %xmm0398; CHECK-NEXT:    retq399  %res = call <4 x i32> @llvm.x86.avx512fp16.mask.vcvttph2dq.128(<8 x half> %x0, <4 x i32> undef, i8 -1)400  ret <4 x i32> %res401}402 403define <4 x i32> @test_int_x86_avx512_mask_cvtt_ph2dq_128(<8 x half> %x0, <4 x i32> %x1, i8 %x2) {404; CHECK-LABEL: test_int_x86_avx512_mask_cvtt_ph2dq_128:405; CHECK:       # %bb.0:406; CHECK-NEXT:    kmovd %edi, %k1407; CHECK-NEXT:    vcvttph2dq %xmm0, %xmm1 {%k1}408; CHECK-NEXT:    vmovaps %xmm1, %xmm0409; CHECK-NEXT:    retq410  %res = call <4 x i32> @llvm.x86.avx512fp16.mask.vcvttph2dq.128(<8 x half> %x0, <4 x i32> %x1, i8 %x2)411  ret <4 x i32> %res412}413 414define <4 x i32> @test_int_x86_avx512_maskz_cvtt_ph2dq_128(<8 x half> %x0, i8 %x2) {415; CHECK-LABEL: test_int_x86_avx512_maskz_cvtt_ph2dq_128:416; CHECK:       # %bb.0:417; CHECK-NEXT:    kmovd %edi, %k1418; CHECK-NEXT:    vcvttph2dq %xmm0, %xmm0 {%k1} {z}419; CHECK-NEXT:    retq420  %res = call <4 x i32> @llvm.x86.avx512fp16.mask.vcvttph2dq.128(<8 x half> %x0, <4 x i32> zeroinitializer, i8 %x2)421  ret <4 x i32> %res422}423 424declare <8 x i32> @llvm.x86.avx512fp16.mask.vcvttph2dq.256(<8 x half>, <8 x i32>, i8)425 426define <8 x i32> @test_int_x86_avx512_cvtt_ph2dq_256(<8 x half> %x0) {427; CHECK-LABEL: test_int_x86_avx512_cvtt_ph2dq_256:428; CHECK:       # %bb.0:429; CHECK-NEXT:    vcvttph2dq %xmm0, %ymm0430; CHECK-NEXT:    retq431  %res = call <8 x i32> @llvm.x86.avx512fp16.mask.vcvttph2dq.256(<8 x half> %x0, <8 x i32> undef, i8 -1)432  ret <8 x i32> %res433}434 435define <8 x i32> @test_int_x86_avx512_mask_cvtt_ph2dq_256(<8 x half> %x0, <8 x i32> %x1, i8 %x2) {436; CHECK-LABEL: test_int_x86_avx512_mask_cvtt_ph2dq_256:437; CHECK:       # %bb.0:438; CHECK-NEXT:    kmovd %edi, %k1439; CHECK-NEXT:    vcvttph2dq %xmm0, %ymm1 {%k1}440; CHECK-NEXT:    vmovaps %ymm1, %ymm0441; CHECK-NEXT:    retq442  %res = call <8 x i32> @llvm.x86.avx512fp16.mask.vcvttph2dq.256(<8 x half> %x0, <8 x i32> %x1, i8 %x2)443  ret <8 x i32> %res444}445 446define <8 x i32> @test_int_x86_avx512_maskz_cvtt_ph2dq_256(<8 x half> %x0, i8 %x2) {447; CHECK-LABEL: test_int_x86_avx512_maskz_cvtt_ph2dq_256:448; CHECK:       # %bb.0:449; CHECK-NEXT:    kmovd %edi, %k1450; CHECK-NEXT:    vcvttph2dq %xmm0, %ymm0 {%k1} {z}451; CHECK-NEXT:    retq452  %res = call <8 x i32> @llvm.x86.avx512fp16.mask.vcvttph2dq.256(<8 x half> %x0, <8 x i32> zeroinitializer, i8 %x2)453  ret <8 x i32> %res454}455 456declare <4 x i32> @llvm.x86.avx512fp16.mask.vcvttph2udq.128(<8 x half>, <4 x i32>, i8)457 458define <4 x i32> @test_int_x86_avx512_cvtt_ph2udq_128(<8 x half> %x0) {459; CHECK-LABEL: test_int_x86_avx512_cvtt_ph2udq_128:460; CHECK:       # %bb.0:461; CHECK-NEXT:    vcvttph2udq %xmm0, %xmm0462; CHECK-NEXT:    retq463  %res = call <4 x i32> @llvm.x86.avx512fp16.mask.vcvttph2udq.128(<8 x half> %x0, <4 x i32> undef, i8 -1)464  ret <4 x i32> %res465}466 467define <4 x i32> @test_int_x86_avx512_mask_cvtt_ph2udq_128(<8 x half> %x0, <4 x i32> %x1, i8 %x2) {468; CHECK-LABEL: test_int_x86_avx512_mask_cvtt_ph2udq_128:469; CHECK:       # %bb.0:470; CHECK-NEXT:    kmovd %edi, %k1471; CHECK-NEXT:    vcvttph2udq %xmm0, %xmm1 {%k1}472; CHECK-NEXT:    vmovaps %xmm1, %xmm0473; CHECK-NEXT:    retq474  %res = call <4 x i32> @llvm.x86.avx512fp16.mask.vcvttph2udq.128(<8 x half> %x0, <4 x i32> %x1, i8 %x2)475  ret <4 x i32> %res476}477 478define <4 x i32> @test_int_x86_avx512_maskz_cvtt_ph2udq_128(<8 x half> %x0, i8 %x2) {479; CHECK-LABEL: test_int_x86_avx512_maskz_cvtt_ph2udq_128:480; CHECK:       # %bb.0:481; CHECK-NEXT:    kmovd %edi, %k1482; CHECK-NEXT:    vcvttph2udq %xmm0, %xmm0 {%k1} {z}483; CHECK-NEXT:    retq484  %res = call <4 x i32> @llvm.x86.avx512fp16.mask.vcvttph2udq.128(<8 x half> %x0, <4 x i32> zeroinitializer, i8 %x2)485  ret <4 x i32> %res486}487 488declare <8 x i32> @llvm.x86.avx512fp16.mask.vcvttph2udq.256(<8 x half>, <8 x i32>, i8)489 490define <8 x i32> @test_int_x86_avx512_cvtt_ph2udq_256(<8 x half> %x0) {491; CHECK-LABEL: test_int_x86_avx512_cvtt_ph2udq_256:492; CHECK:       # %bb.0:493; CHECK-NEXT:    vcvttph2udq %xmm0, %ymm0494; CHECK-NEXT:    retq495  %res = call <8 x i32> @llvm.x86.avx512fp16.mask.vcvttph2udq.256(<8 x half> %x0, <8 x i32> undef, i8 -1)496  ret <8 x i32> %res497}498 499define <8 x i32> @test_int_x86_avx512_mask_cvtt_ph2udq_256(<8 x half> %x0, <8 x i32> %x1, i8 %x2) {500; CHECK-LABEL: test_int_x86_avx512_mask_cvtt_ph2udq_256:501; CHECK:       # %bb.0:502; CHECK-NEXT:    kmovd %edi, %k1503; CHECK-NEXT:    vcvttph2udq %xmm0, %ymm1 {%k1}504; CHECK-NEXT:    vmovaps %ymm1, %ymm0505; CHECK-NEXT:    retq506  %res = call <8 x i32> @llvm.x86.avx512fp16.mask.vcvttph2udq.256(<8 x half> %x0, <8 x i32> %x1, i8 %x2)507  ret <8 x i32> %res508}509 510define <8 x i32> @test_int_x86_avx512_maskz_cvtt_ph2udq_256(<8 x half> %x0, i8 %x2) {511; CHECK-LABEL: test_int_x86_avx512_maskz_cvtt_ph2udq_256:512; CHECK:       # %bb.0:513; CHECK-NEXT:    kmovd %edi, %k1514; CHECK-NEXT:    vcvttph2udq %xmm0, %ymm0 {%k1} {z}515; CHECK-NEXT:    retq516  %res = call <8 x i32> @llvm.x86.avx512fp16.mask.vcvttph2udq.256(<8 x half> %x0, <8 x i32> zeroinitializer, i8 %x2)517  ret <8 x i32> %res518}519 520declare <4 x double> @llvm.x86.avx512fp16.mask.vcvtph2pd.256(<8 x half>, <4 x double>, i8)521 522define <4 x double> @test_int_x86_avx512_mask_cvt_ph2pd_256(<8 x half> %x0, <4 x double> %x1, i8 %x2) {523; CHECK-LABEL: test_int_x86_avx512_mask_cvt_ph2pd_256:524; CHECK:       # %bb.0:525; CHECK-NEXT:    kmovd %edi, %k1526; CHECK-NEXT:    vcvtph2pd %xmm0, %ymm1 {%k1}527; CHECK-NEXT:    vmovaps %ymm1, %ymm0528; CHECK-NEXT:    retq529  %res = call <4 x double> @llvm.x86.avx512fp16.mask.vcvtph2pd.256(<8 x half> %x0, <4 x double> %x1, i8 %x2)530  ret <4 x double> %res531}532 533define <4 x double> @test_int_x86_avx512_mask_cvt_ph2pd_256_nomask(<8 x half> %x0, <4 x double> %x1) {534; CHECK-LABEL: test_int_x86_avx512_mask_cvt_ph2pd_256_nomask:535; CHECK:       # %bb.0:536; CHECK-NEXT:    vcvtph2pd %xmm0, %ymm0537; CHECK-NEXT:    retq538  %res = call <4 x double> @llvm.x86.avx512fp16.mask.vcvtph2pd.256(<8 x half> %x0, <4 x double> %x1, i8 -1)539  ret <4 x double> %res540}541 542declare <2 x double> @llvm.x86.avx512fp16.mask.vcvtph2pd.128(<8 x half>, <2 x double>, i8)543 544define <2 x double> @test_int_x86_avx512_mask_cvt_ph2pd_128(<8 x half> %x0, <2 x double> %x1, i8 %x2) {545; CHECK-LABEL: test_int_x86_avx512_mask_cvt_ph2pd_128:546; CHECK:       # %bb.0:547; CHECK-NEXT:    kmovd %edi, %k1548; CHECK-NEXT:    vcvtph2pd %xmm0, %xmm1 {%k1}549; CHECK-NEXT:    vmovaps %xmm1, %xmm0550; CHECK-NEXT:    retq551  %res = call <2 x double> @llvm.x86.avx512fp16.mask.vcvtph2pd.128(<8 x half> %x0, <2 x double> %x1, i8 %x2)552  ret <2 x double> %res553}554 555define <2 x double> @test_int_x86_avx512_mask_cvt_ph2pd_128_nomask(<8 x half> %x0, <2 x double> %x1) {556; CHECK-LABEL: test_int_x86_avx512_mask_cvt_ph2pd_128_nomask:557; CHECK:       # %bb.0:558; CHECK-NEXT:    vcvtph2pd %xmm0, %xmm0559; CHECK-NEXT:    retq560  %res = call <2 x double> @llvm.x86.avx512fp16.mask.vcvtph2pd.128(<8 x half> %x0, <2 x double> %x1, i8 -1)561  ret <2 x double> %res562}563 564declare <8 x half> @llvm.x86.avx512fp16.mask.vcvtpd2ph.256(<4 x double>, <8 x half>, i8)565 566define <8 x half> @test_int_x86_avx512_mask_cvt_pd2ph_256(<4 x double> %x0, <8 x half> %x1, i8 %x2) {567; CHECK-LABEL: test_int_x86_avx512_mask_cvt_pd2ph_256:568; CHECK:       # %bb.0:569; CHECK-NEXT:    kmovd %edi, %k1570; CHECK-NEXT:    vcvtpd2ph %ymm0, %xmm1 {%k1}571; CHECK-NEXT:    vmovaps %xmm1, %xmm0572; CHECK-NEXT:    vzeroupper573; CHECK-NEXT:    retq574  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtpd2ph.256(<4 x double> %x0, <8 x half> %x1, i8 %x2)575  ret <8 x half> %res576}577 578define <8 x half> @test_int_x86_avx512_mask_cvt_pd2ph_256_load(ptr %px0, <8 x half> %x1, i8 %x2) {579; CHECK-LABEL: test_int_x86_avx512_mask_cvt_pd2ph_256_load:580; CHECK:       # %bb.0:581; CHECK-NEXT:    kmovd %esi, %k1582; CHECK-NEXT:    vcvtpd2phy (%rdi), %xmm0 {%k1}583; CHECK-NEXT:    retq584  %x0 = load <4 x double>, ptr %px0, align 32585  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtpd2ph.256(<4 x double> %x0, <8 x half> %x1, i8 %x2)586  ret <8 x half> %res587}588 589declare <8 x half> @llvm.x86.avx512fp16.mask.vcvtpd2ph.128(<2 x double>, <8 x half>, i8)590 591define <8 x half> @test_int_x86_avx512_mask_cvt_pd2ph_128(<2 x double> %x0, <8 x half> %x1, i8 %x2) {592; CHECK-LABEL: test_int_x86_avx512_mask_cvt_pd2ph_128:593; CHECK:       # %bb.0:594; CHECK-NEXT:    kmovd %edi, %k1595; CHECK-NEXT:    vcvtpd2ph %xmm0, %xmm1 {%k1}596; CHECK-NEXT:    vmovaps %xmm1, %xmm0597; CHECK-NEXT:    retq598  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtpd2ph.128(<2 x double> %x0, <8 x half> %x1, i8 %x2)599  ret <8 x half> %res600}601 602define <8 x half> @test_int_x86_avx512_mask_cvt_pd2ph_128_load(ptr %px0, <8 x half> %x1, i8 %x2) {603; CHECK-LABEL: test_int_x86_avx512_mask_cvt_pd2ph_128_load:604; CHECK:       # %bb.0:605; CHECK-NEXT:    kmovd %esi, %k1606; CHECK-NEXT:    vcvtpd2phx (%rdi), %xmm0 {%k1}607; CHECK-NEXT:    retq608  %x0 = load <2 x double>, ptr %px0, align 16609  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtpd2ph.128(<2 x double> %x0, <8 x half> %x1, i8 %x2)610  ret <8 x half> %res611}612 613declare <8 x half> @llvm.x86.avx512fp16.mask.vcvtqq2ph.256(<4 x i64>, <8 x half>, i8)614 615define <8 x half> @test_int_x86_avx512_mask_cvt_qq2ph_256(<4 x i64> %x0, <8 x half> %x1, i8 %x2) {616; CHECK-LABEL: test_int_x86_avx512_mask_cvt_qq2ph_256:617; CHECK:       # %bb.0:618; CHECK-NEXT:    kmovd %edi, %k1619; CHECK-NEXT:    vcvtqq2ph %ymm0, %xmm1 {%k1}620; CHECK-NEXT:    vmovaps %xmm1, %xmm0621; CHECK-NEXT:    vzeroupper622; CHECK-NEXT:    retq623  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtqq2ph.256(<4 x i64> %x0, <8 x half> %x1, i8 %x2)624  ret <8 x half> %res625}626 627define <8 x half> @test_int_x86_avx512_mask_cvt_qq2ph_256_nomask(<4 x i64> %x0, <8 x half> %x1) {628; CHECK-LABEL: test_int_x86_avx512_mask_cvt_qq2ph_256_nomask:629; CHECK:       # %bb.0:630; CHECK-NEXT:    vcvtqq2ph %ymm0, %xmm0631; CHECK-NEXT:    vzeroupper632; CHECK-NEXT:    retq633  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtqq2ph.256(<4 x i64> %x0, <8 x half> %x1, i8 -1)634  ret <8 x half> %res635}636 637define <8 x half> @test_int_x86_avx512_mask_cvt_qq2ph_256_z(<4 x i64> %x0, i8 %x2) {638; CHECK-LABEL: test_int_x86_avx512_mask_cvt_qq2ph_256_z:639; CHECK:       # %bb.0:640; CHECK-NEXT:    kmovd %edi, %k1641; CHECK-NEXT:    vcvtqq2ph %ymm0, %xmm0 {%k1} {z}642; CHECK-NEXT:    vzeroupper643; CHECK-NEXT:    retq644  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtqq2ph.256(<4 x i64> %x0, <8 x half> zeroinitializer, i8 %x2)645  ret <8 x half> %res646}647 648define <4 x half> @sint_to_fp_4i64_to_4f16(<4 x i64> %x) {649; CHECK-LABEL: sint_to_fp_4i64_to_4f16:650; CHECK:       # %bb.0:651; CHECK-NEXT:    vcvtqq2ph %ymm0, %xmm0652; CHECK-NEXT:    vzeroupper653; CHECK-NEXT:    retq654  %res = sitofp <4 x i64> %x to <4 x half>655  ret <4 x half> %res656}657 658define <4 x i64> @fp_to_sint_4f16_to_4i64(<4 x half> %x) {659; CHECK-LABEL: fp_to_sint_4f16_to_4i64:660; CHECK:       # %bb.0:661; CHECK-NEXT:    vcvttph2qq %xmm0, %ymm0662; CHECK-NEXT:    retq663  %res = fptosi <4 x half> %x to <4 x i64>664  ret <4 x i64> %res665}666 667declare <8 x half> @llvm.x86.avx512fp16.mask.vcvtqq2ph.128(<2 x i64>, <8 x half>, i8)668 669define <8 x half> @test_int_x86_avx512_mask_cvt_qq2ph_128(<2 x i64> %x0, <8 x half> %x1, i8 %x2) {670; CHECK-LABEL: test_int_x86_avx512_mask_cvt_qq2ph_128:671; CHECK:       # %bb.0:672; CHECK-NEXT:    kmovd %edi, %k1673; CHECK-NEXT:    vcvtqq2ph %xmm0, %xmm1 {%k1}674; CHECK-NEXT:    vmovaps %xmm1, %xmm0675; CHECK-NEXT:    retq676  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtqq2ph.128(<2 x i64> %x0, <8 x half> %x1, i8 %x2)677  ret <8 x half> %res678}679 680define <8 x half> @test_int_x86_avx512_mask_cvt_qq2ph_128_nomask(<2 x i64> %x0, <8 x half> %x1) {681; CHECK-LABEL: test_int_x86_avx512_mask_cvt_qq2ph_128_nomask:682; CHECK:       # %bb.0:683; CHECK-NEXT:    vcvtqq2ph %xmm0, %xmm0684; CHECK-NEXT:    retq685  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtqq2ph.128(<2 x i64> %x0, <8 x half> %x1, i8 -1)686  ret <8 x half> %res687}688 689define <8 x half> @test_int_x86_avx512_mask_cvt_qq2ph_128_z(<2 x i64> %x0, i8 %x2) {690; CHECK-LABEL: test_int_x86_avx512_mask_cvt_qq2ph_128_z:691; CHECK:       # %bb.0:692; CHECK-NEXT:    kmovd %edi, %k1693; CHECK-NEXT:    vcvtqq2ph %xmm0, %xmm0 {%k1} {z}694; CHECK-NEXT:    retq695  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtqq2ph.128(<2 x i64> %x0, <8 x half> zeroinitializer, i8 %x2)696  ret <8 x half> %res697}698 699define <2 x half> @sint_to_fp_2i64_to_2f16(<2 x i64> %x) {700; CHECK-LABEL: sint_to_fp_2i64_to_2f16:701; CHECK:       # %bb.0:702; CHECK-NEXT:    vcvtqq2ph %xmm0, %xmm0703; CHECK-NEXT:    retq704  %res = sitofp <2 x i64> %x to <2 x half>705  ret <2 x half> %res706}707 708define <2 x i64> @fp_to_sint_2f16_to_2i64(<2 x half> %x) {709; CHECK-LABEL: fp_to_sint_2f16_to_2i64:710; CHECK:       # %bb.0:711; CHECK-NEXT:    vcvttph2qq %xmm0, %xmm0712; CHECK-NEXT:    retq713  %res = fptosi <2 x half> %x to <2 x i64>714  ret <2 x i64> %res715}716 717declare <8 x half> @llvm.x86.avx512fp16.mask.vcvtuqq2ph.256(<4 x i64>, <8 x half>, i8)718 719define <8 x half> @test_int_x86_avx512_mask_cvt_uqq2ph_256(<4 x i64> %x0, <8 x half> %x1, i8 %x2) {720; CHECK-LABEL: test_int_x86_avx512_mask_cvt_uqq2ph_256:721; CHECK:       # %bb.0:722; CHECK-NEXT:    kmovd %edi, %k1723; CHECK-NEXT:    vcvtuqq2ph %ymm0, %xmm1 {%k1}724; CHECK-NEXT:    vmovaps %xmm1, %xmm0725; CHECK-NEXT:    vzeroupper726; CHECK-NEXT:    retq727  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtuqq2ph.256(<4 x i64> %x0, <8 x half> %x1, i8 %x2)728  ret <8 x half> %res729}730 731define <8 x half> @test_int_x86_avx512_mask_cvt_uqq2ph_256_nomask(<4 x i64> %x0, <8 x half> %x1) {732; CHECK-LABEL: test_int_x86_avx512_mask_cvt_uqq2ph_256_nomask:733; CHECK:       # %bb.0:734; CHECK-NEXT:    vcvtuqq2ph %ymm0, %xmm0735; CHECK-NEXT:    vzeroupper736; CHECK-NEXT:    retq737  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtuqq2ph.256(<4 x i64> %x0, <8 x half> %x1, i8 -1)738  ret <8 x half> %res739}740 741define <8 x half> @test_int_x86_avx512_mask_cvt_uqq2ph_256_z(<4 x i64> %x0, i8 %x2) {742; CHECK-LABEL: test_int_x86_avx512_mask_cvt_uqq2ph_256_z:743; CHECK:       # %bb.0:744; CHECK-NEXT:    kmovd %edi, %k1745; CHECK-NEXT:    vcvtuqq2ph %ymm0, %xmm0 {%k1} {z}746; CHECK-NEXT:    vzeroupper747; CHECK-NEXT:    retq748  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtuqq2ph.256(<4 x i64> %x0, <8 x half> zeroinitializer, i8 %x2)749  ret <8 x half> %res750}751 752define <4 x half> @uint_to_fp_4i64_to_4f16(<4 x i64> %x) {753; CHECK-LABEL: uint_to_fp_4i64_to_4f16:754; CHECK:       # %bb.0:755; CHECK-NEXT:    vcvtuqq2ph %ymm0, %xmm0756; CHECK-NEXT:    vzeroupper757; CHECK-NEXT:    retq758  %res = uitofp <4 x i64> %x to <4 x half>759  ret <4 x half> %res760}761 762define <4 x i64> @fp_to_uint_4f16_to_4i64(<4 x half> %x) {763; CHECK-LABEL: fp_to_uint_4f16_to_4i64:764; CHECK:       # %bb.0:765; CHECK-NEXT:    vcvttph2uqq %xmm0, %ymm0766; CHECK-NEXT:    retq767  %res = fptoui <4 x half> %x to <4 x i64>768  ret <4 x i64> %res769}770 771declare <8 x half> @llvm.x86.avx512fp16.mask.vcvtuqq2ph.128(<2 x i64>, <8 x half>, i8)772 773define <8 x half> @test_int_x86_avx512_mask_cvt_uqq2ph_128(<2 x i64> %x0, <8 x half> %x1, i8 %x2) {774; CHECK-LABEL: test_int_x86_avx512_mask_cvt_uqq2ph_128:775; CHECK:       # %bb.0:776; CHECK-NEXT:    kmovd %edi, %k1777; CHECK-NEXT:    vcvtuqq2ph %xmm0, %xmm1 {%k1}778; CHECK-NEXT:    vmovaps %xmm1, %xmm0779; CHECK-NEXT:    retq780  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtuqq2ph.128(<2 x i64> %x0, <8 x half> %x1, i8 %x2)781  ret <8 x half> %res782}783 784define <8 x half> @test_int_x86_avx512_mask_cvt_uqq2ph_128_nomask(<2 x i64> %x0, <8 x half> %x1) {785; CHECK-LABEL: test_int_x86_avx512_mask_cvt_uqq2ph_128_nomask:786; CHECK:       # %bb.0:787; CHECK-NEXT:    vcvtuqq2ph %xmm0, %xmm0788; CHECK-NEXT:    retq789  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtuqq2ph.128(<2 x i64> %x0, <8 x half> %x1, i8 -1)790  ret <8 x half> %res791}792 793define <8 x half> @test_int_x86_avx512_mask_cvt_uqq2ph_128_z(<2 x i64> %x0, i8 %x2) {794; CHECK-LABEL: test_int_x86_avx512_mask_cvt_uqq2ph_128_z:795; CHECK:       # %bb.0:796; CHECK-NEXT:    kmovd %edi, %k1797; CHECK-NEXT:    vcvtuqq2ph %xmm0, %xmm0 {%k1} {z}798; CHECK-NEXT:    retq799  %res = call <8 x half> @llvm.x86.avx512fp16.mask.vcvtuqq2ph.128(<2 x i64> %x0, <8 x half> zeroinitializer, i8 %x2)800  ret <8 x half> %res801}802 803define <2 x half> @uint_to_fp_2i64_to_2f16(<2 x i64> %x) {804; CHECK-LABEL: uint_to_fp_2i64_to_2f16:805; CHECK:       # %bb.0:806; CHECK-NEXT:    vcvtuqq2ph %xmm0, %xmm0807; CHECK-NEXT:    retq808  %res = uitofp <2 x i64> %x to <2 x half>809  ret <2 x half> %res810}811 812define <2 x i64> @fp_to_uint_2f16_to_2i64(<2 x half> %x) {813; CHECK-LABEL: fp_to_uint_2f16_to_2i64:814; CHECK:       # %bb.0:815; CHECK-NEXT:    vcvttph2uqq %xmm0, %xmm0816; CHECK-NEXT:    retq817  %res = fptoui <2 x half> %x to <2 x i64>818  ret <2 x i64> %res819}820 821declare <2 x i64> @llvm.x86.avx512fp16.mask.vcvttph2qq.128(<8 x half>, <2 x i64>, i8)822 823define <2 x i64> @test_int_x86_avx512_cvtt_ph2qq_128(<8 x half> %x0) {824; CHECK-LABEL: test_int_x86_avx512_cvtt_ph2qq_128:825; CHECK:       # %bb.0:826; CHECK-NEXT:    vcvttph2qq %xmm0, %xmm0827; CHECK-NEXT:    retq828  %res = call <2 x i64> @llvm.x86.avx512fp16.mask.vcvttph2qq.128(<8 x half> %x0, <2 x i64> undef, i8 -1)829  ret <2 x i64> %res830}831 832define <2 x i64> @test_int_x86_avx512_mask_cvtt_ph2qq_128(<8 x half> %x0, <2 x i64> %x1, i8 %x2) {833; CHECK-LABEL: test_int_x86_avx512_mask_cvtt_ph2qq_128:834; CHECK:       # %bb.0:835; CHECK-NEXT:    kmovd %edi, %k1836; CHECK-NEXT:    vcvttph2qq %xmm0, %xmm1 {%k1}837; CHECK-NEXT:    vmovaps %xmm1, %xmm0838; CHECK-NEXT:    retq839  %res = call <2 x i64> @llvm.x86.avx512fp16.mask.vcvttph2qq.128(<8 x half> %x0, <2 x i64> %x1, i8 %x2)840  ret <2 x i64> %res841}842 843define <2 x i64> @test_int_x86_avx512_maskz_cvtt_ph2qq_128(<8 x half> %x0, i8 %x2) {844; CHECK-LABEL: test_int_x86_avx512_maskz_cvtt_ph2qq_128:845; CHECK:       # %bb.0:846; CHECK-NEXT:    kmovd %edi, %k1847; CHECK-NEXT:    vcvttph2qq %xmm0, %xmm0 {%k1} {z}848; CHECK-NEXT:    retq849  %res = call <2 x i64> @llvm.x86.avx512fp16.mask.vcvttph2qq.128(<8 x half> %x0, <2 x i64> zeroinitializer, i8 %x2)850  ret <2 x i64> %res851}852 853declare <4 x i64> @llvm.x86.avx512fp16.mask.vcvttph2qq.256(<8 x half>, <4 x i64>, i8)854 855define <4 x i64> @test_int_x86_avx512_cvtt_ph2qq_256(<8 x half> %x0) {856; CHECK-LABEL: test_int_x86_avx512_cvtt_ph2qq_256:857; CHECK:       # %bb.0:858; CHECK-NEXT:    vcvttph2qq %xmm0, %ymm0859; CHECK-NEXT:    retq860  %res = call <4 x i64> @llvm.x86.avx512fp16.mask.vcvttph2qq.256(<8 x half> %x0, <4 x i64> undef, i8 -1)861  ret <4 x i64> %res862}863 864define <4 x i64> @test_int_x86_avx512_mask_cvtt_ph2qq_256(<8 x half> %x0, <4 x i64> %x1, i8 %x2) {865; CHECK-LABEL: test_int_x86_avx512_mask_cvtt_ph2qq_256:866; CHECK:       # %bb.0:867; CHECK-NEXT:    kmovd %edi, %k1868; CHECK-NEXT:    vcvttph2qq %xmm0, %ymm1 {%k1}869; CHECK-NEXT:    vmovaps %ymm1, %ymm0870; CHECK-NEXT:    retq871  %res = call <4 x i64> @llvm.x86.avx512fp16.mask.vcvttph2qq.256(<8 x half> %x0, <4 x i64> %x1, i8 %x2)872  ret <4 x i64> %res873}874 875define <4 x i64> @test_int_x86_avx512_maskz_cvtt_ph2qq_256(<8 x half> %x0, i8 %x2) {876; CHECK-LABEL: test_int_x86_avx512_maskz_cvtt_ph2qq_256:877; CHECK:       # %bb.0:878; CHECK-NEXT:    kmovd %edi, %k1879; CHECK-NEXT:    vcvttph2qq %xmm0, %ymm0 {%k1} {z}880; CHECK-NEXT:    retq881  %res = call <4 x i64> @llvm.x86.avx512fp16.mask.vcvttph2qq.256(<8 x half> %x0, <4 x i64> zeroinitializer, i8 %x2)882  ret <4 x i64> %res883}884 885declare <2 x i64> @llvm.x86.avx512fp16.mask.vcvttph2uqq.128(<8 x half>, <2 x i64>, i8)886 887define <2 x i64> @test_int_x86_avx512_cvtt_ph2uqq_128(<8 x half> %x0) {888; CHECK-LABEL: test_int_x86_avx512_cvtt_ph2uqq_128:889; CHECK:       # %bb.0:890; CHECK-NEXT:    vcvttph2uqq %xmm0, %xmm0891; CHECK-NEXT:    retq892  %res = call <2 x i64> @llvm.x86.avx512fp16.mask.vcvttph2uqq.128(<8 x half> %x0, <2 x i64> undef, i8 -1)893  ret <2 x i64> %res894}895 896define <2 x i64> @test_int_x86_avx512_mask_cvtt_ph2uqq_128(<8 x half> %x0, <2 x i64> %x1, i8 %x2) {897; CHECK-LABEL: test_int_x86_avx512_mask_cvtt_ph2uqq_128:898; CHECK:       # %bb.0:899; CHECK-NEXT:    kmovd %edi, %k1900; CHECK-NEXT:    vcvttph2uqq %xmm0, %xmm1 {%k1}901; CHECK-NEXT:    vmovaps %xmm1, %xmm0902; CHECK-NEXT:    retq903  %res = call <2 x i64> @llvm.x86.avx512fp16.mask.vcvttph2uqq.128(<8 x half> %x0, <2 x i64> %x1, i8 %x2)904  ret <2 x i64> %res905}906 907define <2 x i64> @test_int_x86_avx512_maskz_cvtt_ph2uqq_128(<8 x half> %x0, i8 %x2) {908; CHECK-LABEL: test_int_x86_avx512_maskz_cvtt_ph2uqq_128:909; CHECK:       # %bb.0:910; CHECK-NEXT:    kmovd %edi, %k1911; CHECK-NEXT:    vcvttph2uqq %xmm0, %xmm0 {%k1} {z}912; CHECK-NEXT:    retq913  %res = call <2 x i64> @llvm.x86.avx512fp16.mask.vcvttph2uqq.128(<8 x half> %x0, <2 x i64> zeroinitializer, i8 %x2)914  ret <2 x i64> %res915}916 917declare <4 x i64> @llvm.x86.avx512fp16.mask.vcvttph2uqq.256(<8 x half>, <4 x i64>, i8)918 919define <4 x i64> @test_int_x86_avx512_cvtt_ph2uqq_256(<8 x half> %x0) {920; CHECK-LABEL: test_int_x86_avx512_cvtt_ph2uqq_256:921; CHECK:       # %bb.0:922; CHECK-NEXT:    vcvttph2uqq %xmm0, %ymm0923; CHECK-NEXT:    retq924  %res = call <4 x i64> @llvm.x86.avx512fp16.mask.vcvttph2uqq.256(<8 x half> %x0, <4 x i64> undef, i8 -1)925  ret <4 x i64> %res926}927 928define <4 x i64> @test_int_x86_avx512_mask_cvtt_ph2uqq_256(<8 x half> %x0, <4 x i64> %x1, i8 %x2) {929; CHECK-LABEL: test_int_x86_avx512_mask_cvtt_ph2uqq_256:930; CHECK:       # %bb.0:931; CHECK-NEXT:    kmovd %edi, %k1932; CHECK-NEXT:    vcvttph2uqq %xmm0, %ymm1 {%k1}933; CHECK-NEXT:    vmovaps %ymm1, %ymm0934; CHECK-NEXT:    retq935  %res = call <4 x i64> @llvm.x86.avx512fp16.mask.vcvttph2uqq.256(<8 x half> %x0, <4 x i64> %x1, i8 %x2)936  ret <4 x i64> %res937}938 939define <4 x i64> @test_int_x86_avx512_maskz_cvtt_ph2uqq_256(<8 x half> %x0, i8 %x2) {940; CHECK-LABEL: test_int_x86_avx512_maskz_cvtt_ph2uqq_256:941; CHECK:       # %bb.0:942; CHECK-NEXT:    kmovd %edi, %k1943; CHECK-NEXT:    vcvttph2uqq %xmm0, %ymm0 {%k1} {z}944; CHECK-NEXT:    retq945  %res = call <4 x i64> @llvm.x86.avx512fp16.mask.vcvttph2uqq.256(<8 x half> %x0, <4 x i64> zeroinitializer, i8 %x2)946  ret <4 x i64> %res947}948 949declare <8 x half> @llvm.sqrt.v8f16(<8 x half>)950declare <16 x half> @llvm.sqrt.v16f16(<16 x half>)951 952define <8 x half> @test_sqrt_ph_128(<8 x half> %a0) {953; CHECK-LABEL: test_sqrt_ph_128:954; CHECK:       # %bb.0:955; CHECK-NEXT:    vsqrtph %xmm0, %xmm0956; CHECK-NEXT:    retq957  %1 = call <8 x half> @llvm.sqrt.v8f16(<8 x half> %a0)958  ret <8 x half> %1959}960 961define <8 x half> @test_sqrt_ph_128_fast(<8 x half> %a0, <8 x half> %a1) {962; CHECK-LABEL: test_sqrt_ph_128_fast:963; CHECK:       # %bb.0:964; CHECK-NEXT:    vrsqrtph %xmm0, %xmm0965; CHECK-NEXT:    vmulph %xmm0, %xmm1, %xmm0966; CHECK-NEXT:    retq967  %1 = call fast <8 x half> @llvm.sqrt.v8f16(<8 x half> %a0)968  %2 = fdiv fast <8 x half> %a1, %1969  ret <8 x half> %2970}971 972define <8 x half> @test_sqrt_ph_128_fast2(<8 x half> %a0, <8 x half> %a1) {973; CHECK-LABEL: test_sqrt_ph_128_fast2:974; CHECK:       # %bb.0:975; CHECK-NEXT:    vsqrtph %xmm0, %xmm0976; CHECK-NEXT:    retq977  %1 = call fast <8 x half> @llvm.sqrt.v8f16(<8 x half> %a0)978  ret <8 x half> %1979}980 981define <8 x half> @test_mask_sqrt_ph_128(<8 x half> %a0, <8 x half> %passthru, i8 %mask) {982; CHECK-LABEL: test_mask_sqrt_ph_128:983; CHECK:       # %bb.0:984; CHECK-NEXT:    kmovd %edi, %k1985; CHECK-NEXT:    vsqrtph %xmm0, %xmm1 {%k1}986; CHECK-NEXT:    vmovaps %xmm1, %xmm0987; CHECK-NEXT:    retq988  %1 = call <8 x half> @llvm.sqrt.v8f16(<8 x half> %a0)989  %2 = bitcast i8 %mask to <8 x i1>990  %3 = select <8 x i1> %2, <8 x half> %1, <8 x half> %passthru991  ret <8 x half> %3992}993 994define <8 x half> @test_maskz_sqrt_ph_128(<8 x half> %a0, i8 %mask) {995; CHECK-LABEL: test_maskz_sqrt_ph_128:996; CHECK:       # %bb.0:997; CHECK-NEXT:    kmovd %edi, %k1998; CHECK-NEXT:    vsqrtph %xmm0, %xmm0 {%k1} {z}999; CHECK-NEXT:    retq1000  %1 = call <8 x half> @llvm.sqrt.v8f16(<8 x half> %a0)1001  %2 = bitcast i8 %mask to <8 x i1>1002  %3 = select <8 x i1> %2, <8 x half> %1, <8 x half> zeroinitializer1003  ret <8 x half> %31004}1005 1006define <16 x half> @test_sqrt_ph_256(<16 x half> %a0) {1007; CHECK-LABEL: test_sqrt_ph_256:1008; CHECK:       # %bb.0:1009; CHECK-NEXT:    vsqrtph %ymm0, %ymm01010; CHECK-NEXT:    retq1011  %1 = call <16 x half> @llvm.sqrt.v16f16(<16 x half> %a0)1012  ret <16 x half> %11013}1014 1015define <16 x half> @test_sqrt_ph_256_fast(<16 x half> %a0, <16 x half> %a1) {1016; CHECK-LABEL: test_sqrt_ph_256_fast:1017; CHECK:       # %bb.0:1018; CHECK-NEXT:    vrsqrtph %ymm0, %ymm01019; CHECK-NEXT:    vmulph %ymm0, %ymm1, %ymm01020; CHECK-NEXT:    retq1021  %1 = call fast <16 x half> @llvm.sqrt.v16f16(<16 x half> %a0)1022  %2 = fdiv fast <16 x half> %a1, %11023  ret <16 x half> %21024}1025 1026define <16 x half> @test_mask_sqrt_ph_256(<16 x half> %a0, <16 x half> %passthru, i16 %mask) {1027; CHECK-LABEL: test_mask_sqrt_ph_256:1028; CHECK:       # %bb.0:1029; CHECK-NEXT:    kmovd %edi, %k11030; CHECK-NEXT:    vsqrtph %ymm0, %ymm1 {%k1}1031; CHECK-NEXT:    vmovaps %ymm1, %ymm01032; CHECK-NEXT:    retq1033  %1 = call <16 x half> @llvm.sqrt.v16f16(<16 x half> %a0)1034  %2 = bitcast i16 %mask to <16 x i1>1035  %3 = select <16 x i1> %2, <16 x half> %1, <16 x half> %passthru1036  ret <16 x half> %31037}1038 1039define <16 x half> @test_maskz_sqrt_ph_256(<16 x half> %a0, i16 %mask) {1040; CHECK-LABEL: test_maskz_sqrt_ph_256:1041; CHECK:       # %bb.0:1042; CHECK-NEXT:    kmovd %edi, %k11043; CHECK-NEXT:    vsqrtph %ymm0, %ymm0 {%k1} {z}1044; CHECK-NEXT:    retq1045  %1 = call <16 x half> @llvm.sqrt.v16f16(<16 x half> %a0)1046  %2 = bitcast i16 %mask to <16 x i1>1047  %3 = select <16 x i1> %2, <16 x half> %1, <16 x half> zeroinitializer1048  ret <16 x half> %31049}1050 1051declare <8 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.128(<8 x half>, <8 x half>, i8)1052declare <16 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.256(<16 x half>, <16 x half>, i16)1053 1054define <8 x half> @test_rsqrt_ph_128(<8 x half> %a0) {1055; CHECK-LABEL: test_rsqrt_ph_128:1056; CHECK:       # %bb.0:1057; CHECK-NEXT:    vrsqrtph %xmm0, %xmm01058; CHECK-NEXT:    retq1059  %res = call <8 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.128(<8 x half> %a0, <8 x half> zeroinitializer, i8 -1)1060  ret <8 x half> %res1061}1062 1063define <16 x half> @test_rsqrt_ph_256(<16 x half> %a0) {1064; CHECK-LABEL: test_rsqrt_ph_256:1065; CHECK:       # %bb.0:1066; CHECK-NEXT:    vrsqrtph %ymm0, %ymm01067; CHECK-NEXT:    retq1068  %res = call <16 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.256(<16 x half> %a0, <16 x half> zeroinitializer, i16 -1)1069  ret <16 x half> %res1070}1071 1072declare <8 x half> @llvm.x86.avx512fp16.mask.rcp.ph.128(<8 x half>, <8 x half>, i8)1073declare <16 x half> @llvm.x86.avx512fp16.mask.rcp.ph.256(<16 x half>, <16 x half>, i16)1074 1075define <8 x half> @test_rcp_ph_128(<8 x half> %a0, <8 x half> %a1, i8 %mask) {1076; CHECK-LABEL: test_rcp_ph_128:1077; CHECK:       # %bb.0:1078; CHECK-NEXT:    kmovd %edi, %k11079; CHECK-NEXT:    vrcpph %xmm0, %xmm1 {%k1}1080; CHECK-NEXT:    vmovaps %xmm1, %xmm01081; CHECK-NEXT:    retq1082  %res = call <8 x half> @llvm.x86.avx512fp16.mask.rcp.ph.128(<8 x half> %a0, <8 x half> %a1, i8 %mask)1083  ret <8 x half> %res1084}1085 1086define <16 x half> @test_rcp_ph_256(<16 x half> %a0, <16 x half> %a1, i16 %mask) {1087; CHECK-LABEL: test_rcp_ph_256:1088; CHECK:       # %bb.0:1089; CHECK-NEXT:    kmovd %edi, %k11090; CHECK-NEXT:    vrcpph %ymm0, %ymm1 {%k1}1091; CHECK-NEXT:    vmovaps %ymm1, %ymm01092; CHECK-NEXT:    retq1093  %res = call <16 x half> @llvm.x86.avx512fp16.mask.rcp.ph.256(<16 x half> %a0, <16 x half> %a1, i16 %mask)1094  ret <16 x half> %res1095}1096 1097declare <8 x half> @llvm.x86.avx512fp16.mask.reduce.ph.128(<8 x half>, i32, <8 x half>, i8)1098declare <16 x half> @llvm.x86.avx512fp16.mask.reduce.ph.256(<16 x half>, i32, <16 x half>, i16)1099 1100define <8 x half>@test_int_x86_avx512_mask_reduce_ph_128(<8 x half> %x0, <8 x half> %x2, i8 %x3) {1101; CHECK-LABEL: test_int_x86_avx512_mask_reduce_ph_128:1102; CHECK:       # %bb.0:1103; CHECK-NEXT:    kmovd %edi, %k11104; CHECK-NEXT:    vreduceph $8, %xmm0, %xmm1 {%k1}1105; CHECK-NEXT:    vreduceph $4, %xmm0, %xmm01106; CHECK-NEXT:    vaddph %xmm0, %xmm1, %xmm01107; CHECK-NEXT:    retq1108  %res = call <8 x half> @llvm.x86.avx512fp16.mask.reduce.ph.128(<8 x half> %x0, i32 8, <8 x half> %x2, i8 %x3)1109  %res1 = call <8 x half> @llvm.x86.avx512fp16.mask.reduce.ph.128(<8 x half> %x0, i32 4, <8 x half> %x2, i8 -1)1110  %res2 = fadd <8 x half> %res, %res11111  ret <8 x half> %res21112}1113 1114define <16 x half>@test_int_x86_avx512_mask_reduce_ph_256(<16 x half> %x0, <16 x half> %x2, i16 %x3) {1115; CHECK-LABEL: test_int_x86_avx512_mask_reduce_ph_256:1116; CHECK:       # %bb.0:1117; CHECK-NEXT:    kmovd %edi, %k11118; CHECK-NEXT:    vreduceph $8, %ymm0, %ymm1 {%k1}1119; CHECK-NEXT:    vreduceph $4, %ymm0, %ymm01120; CHECK-NEXT:    vaddph %ymm0, %ymm1, %ymm01121; CHECK-NEXT:    retq1122  %res = call <16 x half> @llvm.x86.avx512fp16.mask.reduce.ph.256(<16 x half> %x0, i32 8, <16 x half> %x2, i16 %x3)1123  %res1 = call <16 x half> @llvm.x86.avx512fp16.mask.reduce.ph.256(<16 x half> %x0, i32 4, <16 x half> %x2, i16 -1)1124  %res2 = fadd <16 x half> %res, %res11125  ret <16 x half> %res21126}1127 1128declare <8 x i1> @llvm.x86.avx512fp16.fpclass.ph.128(<8 x half>, i32)1129declare <16 x i1> @llvm.x86.avx512fp16.fpclass.ph.256(<16 x half>, i32)1130 1131define i8 @test_int_x86_avx512_fpclass_ph_128(<8 x half> %x0) {1132; CHECK-LABEL: test_int_x86_avx512_fpclass_ph_128:1133; CHECK:       # %bb.0:1134; CHECK-NEXT:    vfpclassph $2, %xmm0, %k1 # k1 = isPositiveZero(xmm0)1135; CHECK-NEXT:    vfpclassph $4, %xmm0, %k0 {%k1}1136; CHECK-NEXT:    kmovd %k0, %eax1137; CHECK-NEXT:    # kill: def $al killed $al killed $eax1138; CHECK-NEXT:    retq1139  %res = call <8 x i1> @llvm.x86.avx512fp16.fpclass.ph.128(<8 x half> %x0, i32 4)1140  %res1 = call <8 x i1> @llvm.x86.avx512fp16.fpclass.ph.128(<8 x half> %x0, i32 2)1141  %1 = and <8 x i1> %res1, %res1142  %2 = bitcast <8 x i1> %1 to i81143  ret i8 %21144}1145 1146define i16 @test_int_x86_avx512_fpclass_ph_256(<16 x half> %x0) {1147; CHECK-LABEL: test_int_x86_avx512_fpclass_ph_256:1148; CHECK:       # %bb.0:1149; CHECK-NEXT:    vfpclassph $2, %ymm0, %k1 # k1 = isPositiveZero(ymm0)1150; CHECK-NEXT:    vfpclassph $4, %ymm0, %k0 {%k1}1151; CHECK-NEXT:    kmovd %k0, %eax1152; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax1153; CHECK-NEXT:    vzeroupper1154; CHECK-NEXT:    retq1155  %res = call <16 x i1> @llvm.x86.avx512fp16.fpclass.ph.256(<16 x half> %x0, i32 4)1156  %res1 = call <16 x i1> @llvm.x86.avx512fp16.fpclass.ph.256(<16 x half> %x0, i32 2)1157  %1 = and <16 x i1> %res1, %res1158  %2 = bitcast <16 x i1> %1 to i161159  ret i16 %21160}1161 1162declare <8 x half> @llvm.x86.avx512fp16.mask.getexp.ph.128(<8 x half>, <8 x half>, i8)1163declare <16 x half> @llvm.x86.avx512fp16.mask.getexp.ph.256(<16 x half>, <16 x half>, i16)1164 1165define <8 x half>@test_int_x86_avx512_getexp_ph_128(<8 x half> %x0) {1166; CHECK-LABEL: test_int_x86_avx512_getexp_ph_128:1167; CHECK:       # %bb.0:1168; CHECK-NEXT:    vgetexpph %xmm0, %xmm01169; CHECK-NEXT:    retq1170  %res = call <8 x half> @llvm.x86.avx512fp16.mask.getexp.ph.128(<8 x half> %x0, <8 x half> zeroinitializer, i8 -1)1171  ret <8 x half> %res1172}1173 1174define <8 x half>@test_int_x86_avx512_mask_getexp_ph_128(<8 x half> %x0, <8 x half> %x1, i8 %x2) {1175; CHECK-LABEL: test_int_x86_avx512_mask_getexp_ph_128:1176; CHECK:       # %bb.0:1177; CHECK-NEXT:    kmovd %edi, %k11178; CHECK-NEXT:    vgetexpph %xmm0, %xmm1 {%k1}1179; CHECK-NEXT:    vmovaps %xmm1, %xmm01180; CHECK-NEXT:    retq1181  %res = call <8 x half> @llvm.x86.avx512fp16.mask.getexp.ph.128(<8 x half> %x0, <8 x half> %x1, i8 %x2)1182  ret <8 x half> %res1183}1184 1185define <8 x half>@test_int_x86_avx512_maskz_getexp_ph_128(<8 x half> %x0, i8 %x2) {1186; CHECK-LABEL: test_int_x86_avx512_maskz_getexp_ph_128:1187; CHECK:       # %bb.0:1188; CHECK-NEXT:    kmovd %edi, %k11189; CHECK-NEXT:    vgetexpph %xmm0, %xmm0 {%k1} {z}1190; CHECK-NEXT:    retq1191  %res = call <8 x half> @llvm.x86.avx512fp16.mask.getexp.ph.128(<8 x half> %x0, <8 x half> zeroinitializer, i8 %x2)1192  ret <8 x half> %res1193}1194 1195define <16 x half>@test_int_x86_avx512_getexp_ph_256(<16 x half> %x0) {1196; CHECK-LABEL: test_int_x86_avx512_getexp_ph_256:1197; CHECK:       # %bb.0:1198; CHECK-NEXT:    vgetexpph %ymm0, %ymm01199; CHECK-NEXT:    retq1200  %res = call <16 x half> @llvm.x86.avx512fp16.mask.getexp.ph.256(<16 x half> %x0, <16 x half> zeroinitializer, i16 -1)1201  ret <16 x half> %res1202}1203 1204define <16 x half>@test_int_x86_avx512_mask_getexp_ph_256(<16 x half> %x0, <16 x half> %x1, i16 %x2) {1205; CHECK-LABEL: test_int_x86_avx512_mask_getexp_ph_256:1206; CHECK:       # %bb.0:1207; CHECK-NEXT:    kmovd %edi, %k11208; CHECK-NEXT:    vgetexpph %ymm0, %ymm1 {%k1}1209; CHECK-NEXT:    vmovaps %ymm1, %ymm01210; CHECK-NEXT:    retq1211  %res = call <16 x half> @llvm.x86.avx512fp16.mask.getexp.ph.256(<16 x half> %x0, <16 x half> %x1, i16 %x2)1212  ret <16 x half> %res1213}1214 1215define <16 x half>@test_int_x86_avx512_maskz_getexp_ph_256(<16 x half> %x0, i16 %x2) {1216; CHECK-LABEL: test_int_x86_avx512_maskz_getexp_ph_256:1217; CHECK:       # %bb.0:1218; CHECK-NEXT:    kmovd %edi, %k11219; CHECK-NEXT:    vgetexpph %ymm0, %ymm0 {%k1} {z}1220; CHECK-NEXT:    retq1221  %res = call <16 x half> @llvm.x86.avx512fp16.mask.getexp.ph.256(<16 x half> %x0, <16 x half> zeroinitializer, i16 %x2)1222  ret <16 x half> %res1223}1224 1225declare <8 x half> @llvm.x86.avx512fp16.mask.getmant.ph.128(<8 x half>, i32, <8 x half>, i8)1226declare <16 x half> @llvm.x86.avx512fp16.mask.getmant.ph.256(<16 x half>, i32, <16 x half>, i16)1227 1228define <8 x half>@test_int_x86_avx512_mask_getmant_ph_128(<8 x half> %x0, <8 x half> %x2, i8 %x3) {1229; CHECK-LABEL: test_int_x86_avx512_mask_getmant_ph_128:1230; CHECK:       # %bb.0:1231; CHECK-NEXT:    kmovd %edi, %k11232; CHECK-NEXT:    vgetmantph $8, %xmm0, %xmm1 {%k1}1233; CHECK-NEXT:    vgetmantph $4, %xmm0, %xmm01234; CHECK-NEXT:    vaddph %xmm0, %xmm1, %xmm01235; CHECK-NEXT:    retq1236  %res = call <8 x half> @llvm.x86.avx512fp16.mask.getmant.ph.128(<8 x half> %x0, i32 8, <8 x half> %x2, i8 %x3)1237  %res1 = call <8 x half> @llvm.x86.avx512fp16.mask.getmant.ph.128(<8 x half> %x0, i32 4, <8 x half> %x2, i8 -1)1238  %res2 = fadd <8 x half> %res, %res11239  ret <8 x half> %res21240}1241 1242define <16 x half>@test_int_x86_avx512_mask_getmant_ph_256(<16 x half> %x0, <16 x half> %x2, i16 %x3) {1243; CHECK-LABEL: test_int_x86_avx512_mask_getmant_ph_256:1244; CHECK:       # %bb.0:1245; CHECK-NEXT:    kmovd %edi, %k11246; CHECK-NEXT:    vgetmantph $8, %ymm0, %ymm1 {%k1}1247; CHECK-NEXT:    vgetmantph $4, %ymm0, %ymm01248; CHECK-NEXT:    vaddph %ymm0, %ymm1, %ymm01249; CHECK-NEXT:    retq1250  %res = call <16 x half> @llvm.x86.avx512fp16.mask.getmant.ph.256(<16 x half> %x0, i32 8, <16 x half> %x2, i16 %x3)1251  %res1 = call <16 x half> @llvm.x86.avx512fp16.mask.getmant.ph.256(<16 x half> %x0, i32 4, <16 x half> %x2, i16 -1)1252  %res2 = fadd <16 x half> %res, %res11253  ret <16 x half> %res21254}1255 1256declare <8 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.128(<8 x half>, i32, <8 x half>, i8)1257declare <16 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.256(<16 x half>, i32, <16 x half>, i16)1258 1259define <8 x half>@test_int_x86_avx512_mask_rndscale_ph_128(<8 x half> %x0, <8 x half> %x2, i8 %x3) {1260; CHECK-LABEL: test_int_x86_avx512_mask_rndscale_ph_128:1261; CHECK:       # %bb.0:1262; CHECK-NEXT:    kmovd %edi, %k11263; CHECK-NEXT:    vrndscaleph $8, %xmm0, %xmm1 {%k1}1264; CHECK-NEXT:    vrndscaleph $4, %xmm0, %xmm01265; CHECK-NEXT:    vaddph %xmm0, %xmm1, %xmm01266; CHECK-NEXT:    retq1267  %res = call <8 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.128(<8 x half> %x0, i32 8, <8 x half> %x2, i8 %x3)1268  %res1 = call <8 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.128(<8 x half> %x0, i32 4, <8 x half> %x2, i8 -1)1269  %res2 = fadd <8 x half> %res, %res11270  ret <8 x half> %res21271}1272 1273define <16 x half>@test_int_x86_avx512_mask_rndscale_ph_256(<16 x half> %x0, <16 x half> %x2, i16 %x3) {1274; CHECK-LABEL: test_int_x86_avx512_mask_rndscale_ph_256:1275; CHECK:       # %bb.0:1276; CHECK-NEXT:    kmovd %edi, %k11277; CHECK-NEXT:    vrndscaleph $8, %ymm0, %ymm1 {%k1}1278; CHECK-NEXT:    vrndscaleph $4, %ymm0, %ymm01279; CHECK-NEXT:    vaddph %ymm0, %ymm1, %ymm01280; CHECK-NEXT:    retq1281  %res = call <16 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.256(<16 x half> %x0, i32 8, <16 x half> %x2, i16 %x3)1282  %res1 = call <16 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.256(<16 x half> %x0, i32 4, <16 x half> %x2, i16 -1)1283  %res2 = fadd <16 x half> %res, %res11284  ret <16 x half> %res21285}1286 1287declare <8 x half> @llvm.x86.avx512fp16.mask.scalef.ph.128(<8 x half>, <8 x half>, <8 x half>, i8)1288declare <16 x half> @llvm.x86.avx512fp16.mask.scalef.ph.256(<16 x half>, <16 x half>, <16 x half>, i16)1289 1290define <8 x half>@test_int_x86_avx512_scalef_ph_128(<8 x half> %x0, <8 x half> %x1) {1291; CHECK-LABEL: test_int_x86_avx512_scalef_ph_128:1292; CHECK:       # %bb.0:1293; CHECK-NEXT:    vscalefph %xmm1, %xmm0, %xmm01294; CHECK-NEXT:    retq1295  %res = call <8 x half> @llvm.x86.avx512fp16.mask.scalef.ph.128(<8 x half> %x0, <8 x half> %x1, <8 x half> zeroinitializer, i8 -1)1296  ret <8 x half> %res1297}1298 1299define <8 x half>@test_int_x86_avx512_mask_scalef_ph_128(<8 x half> %x0, <8 x half> %x1, <8 x half> %x2, i8 %x3) {1300; CHECK-LABEL: test_int_x86_avx512_mask_scalef_ph_128:1301; CHECK:       # %bb.0:1302; CHECK-NEXT:    kmovd %edi, %k11303; CHECK-NEXT:    vscalefph %xmm1, %xmm0, %xmm2 {%k1}1304; CHECK-NEXT:    vmovaps %xmm2, %xmm01305; CHECK-NEXT:    retq1306  %mask = bitcast i8 %x3 to <8 x i1>1307  %res = call <8 x half> @llvm.x86.avx512fp16.mask.scalef.ph.128(<8 x half> %x0, <8 x half> %x1, <8 x half> %x2, i8 %x3)1308  ret <8 x half> %res1309}1310 1311define <8 x half>@test_int_x86_avx512_maskz_scalef_ph_128(<8 x half> %x0, <8 x half> %x1, i8 %x3) {1312; CHECK-LABEL: test_int_x86_avx512_maskz_scalef_ph_128:1313; CHECK:       # %bb.0:1314; CHECK-NEXT:    kmovd %edi, %k11315; CHECK-NEXT:    vscalefph %xmm1, %xmm0, %xmm0 {%k1} {z}1316; CHECK-NEXT:    retq1317  %mask = bitcast i8 %x3 to <8 x i1>1318  %res = call <8 x half> @llvm.x86.avx512fp16.mask.scalef.ph.128(<8 x half> %x0, <8 x half> %x1, <8 x half> zeroinitializer, i8 %x3)1319  ret <8 x half> %res1320}1321 1322define <16 x half>@test_int_x86_avx512_scalef_ph_256(<16 x half> %x0, <16 x half> %x1) {1323; CHECK-LABEL: test_int_x86_avx512_scalef_ph_256:1324; CHECK:       # %bb.0:1325; CHECK-NEXT:    vscalefph %ymm1, %ymm0, %ymm01326; CHECK-NEXT:    retq1327  %res = call <16 x half> @llvm.x86.avx512fp16.mask.scalef.ph.256(<16 x half> %x0, <16 x half> %x1, <16 x half> zeroinitializer, i16 -1)1328  ret <16 x half> %res1329}1330 1331define <16 x half>@test_int_x86_avx512_mask_scalef_ph_256(<16 x half> %x0, <16 x half> %x1, <16 x half> %x2, i16 %x3) {1332; CHECK-LABEL: test_int_x86_avx512_mask_scalef_ph_256:1333; CHECK:       # %bb.0:1334; CHECK-NEXT:    kmovd %edi, %k11335; CHECK-NEXT:    vscalefph %ymm1, %ymm0, %ymm2 {%k1}1336; CHECK-NEXT:    vmovaps %ymm2, %ymm01337; CHECK-NEXT:    retq1338  %mask = bitcast i16 %x3 to <16 x i1>1339  %res = call <16 x half> @llvm.x86.avx512fp16.mask.scalef.ph.256(<16 x half> %x0, <16 x half> %x1, <16 x half> %x2, i16 %x3)1340  ret <16 x half> %res1341}1342 1343define <16 x half>@test_int_x86_avx512_maskz_scalef_ph_256(<16 x half> %x0, <16 x half> %x1, i16 %x3) {1344; CHECK-LABEL: test_int_x86_avx512_maskz_scalef_ph_256:1345; CHECK:       # %bb.0:1346; CHECK-NEXT:    kmovd %edi, %k11347; CHECK-NEXT:    vscalefph %ymm1, %ymm0, %ymm0 {%k1} {z}1348; CHECK-NEXT:    retq1349  %mask = bitcast i16 %x3 to <16 x i1>1350  %res = call <16 x half> @llvm.x86.avx512fp16.mask.scalef.ph.256(<16 x half> %x0, <16 x half> %x1, <16 x half> zeroinitializer, i16 %x3)1351  ret <16 x half> %res1352}1353