brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.6 KiB · a232122 Raw
235 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=avx512fp16,avx512vl -O3 | FileCheck %s --check-prefixes=CHECK3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512fp16,avx512vl -O3 | FileCheck %s --check-prefixes=CHECK4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512fp16 -O3 | FileCheck %s --check-prefixes=NOVL5 6 7declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f16(<4 x half>, metadata)8declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f16(<4 x half>, metadata)9declare <8 x i32> @llvm.experimental.constrained.fptosi.v8i32.v8f16(<8 x half>, metadata)10declare <8 x i32> @llvm.experimental.constrained.fptoui.v8i32.v8f16(<8 x half>, metadata)11declare <16 x i16> @llvm.experimental.constrained.fptosi.v16i16.v16f16(<16 x half>, metadata)12declare <16 x i16> @llvm.experimental.constrained.fptoui.v16i16.v16f16(<16 x half>, metadata)13declare <16 x i8> @llvm.experimental.constrained.fptosi.v16i8.v16f16(<16 x half>, metadata)14declare <16 x i8> @llvm.experimental.constrained.fptoui.v16i8.v16f16(<16 x half>, metadata)15declare <16 x i1> @llvm.experimental.constrained.fptosi.v16i1.v16f16(<16 x half>, metadata)16declare <16 x i1> @llvm.experimental.constrained.fptoui.v16i1.v16f16(<16 x half>, metadata)17 18define <4 x i64> @strict_vector_fptosi_v4f16_to_v4i64(<4 x half> %a) #0 {19; CHECK-LABEL: strict_vector_fptosi_v4f16_to_v4i64:20; CHECK:       # %bb.0:21; CHECK-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero22; CHECK-NEXT:    vcvttph2qq %xmm0, %ymm023; CHECK-NEXT:    ret{{[l|q]}}24;25; NOVL-LABEL: strict_vector_fptosi_v4f16_to_v4i64:26; NOVL:       # %bb.0:27; NOVL-NEXT:    vpsrlq $48, %xmm0, %xmm128; NOVL-NEXT:    vcvttsh2si %xmm1, %rax29; NOVL-NEXT:    vmovq %rax, %xmm130; NOVL-NEXT:    vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]31; NOVL-NEXT:    vcvttsh2si %xmm2, %rax32; NOVL-NEXT:    vmovq %rax, %xmm233; NOVL-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]34; NOVL-NEXT:    vcvttsh2si %xmm0, %rax35; NOVL-NEXT:    vmovq %rax, %xmm236; NOVL-NEXT:    vpsrld $16, %xmm0, %xmm037; NOVL-NEXT:    vcvttsh2si %xmm0, %rax38; NOVL-NEXT:    vmovq %rax, %xmm039; NOVL-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]40; NOVL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm041; NOVL-NEXT:    retq42  %ret = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f16(<4 x half> %a,43                                              metadata !"fpexcept.strict") #044  ret <4 x i64> %ret45}46 47define <4 x i64> @strict_vector_fptoui_v4f16_to_v4i64(<4 x half> %a) #0 {48; CHECK-LABEL: strict_vector_fptoui_v4f16_to_v4i64:49; CHECK:       # %bb.0:50; CHECK-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero51; CHECK-NEXT:    vcvttph2uqq %xmm0, %ymm052; CHECK-NEXT:    ret{{[l|q]}}53;54; NOVL-LABEL: strict_vector_fptoui_v4f16_to_v4i64:55; NOVL:       # %bb.0:56; NOVL-NEXT:    vpsrlq $48, %xmm0, %xmm157; NOVL-NEXT:    vcvttsh2usi %xmm1, %rax58; NOVL-NEXT:    vmovq %rax, %xmm159; NOVL-NEXT:    vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]60; NOVL-NEXT:    vcvttsh2usi %xmm2, %rax61; NOVL-NEXT:    vmovq %rax, %xmm262; NOVL-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]63; NOVL-NEXT:    vcvttsh2usi %xmm0, %rax64; NOVL-NEXT:    vmovq %rax, %xmm265; NOVL-NEXT:    vpsrld $16, %xmm0, %xmm066; NOVL-NEXT:    vcvttsh2usi %xmm0, %rax67; NOVL-NEXT:    vmovq %rax, %xmm068; NOVL-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]69; NOVL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm070; NOVL-NEXT:    retq71  %ret = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f16(<4 x half> %a,72                                              metadata !"fpexcept.strict") #073  ret <4 x i64> %ret74}75 76define <8 x i32> @strict_vector_fptosi_v8f16_to_v8i32(<8 x half> %a) #0 {77; CHECK-LABEL: strict_vector_fptosi_v8f16_to_v8i32:78; CHECK:       # %bb.0:79; CHECK-NEXT:    vcvttph2dq %xmm0, %ymm080; CHECK-NEXT:    ret{{[l|q]}}81;82; NOVL-LABEL: strict_vector_fptosi_v8f16_to_v8i32:83; NOVL:       # %bb.0:84; NOVL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm085; NOVL-NEXT:    vxorps %xmm1, %xmm1, %xmm186; NOVL-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]87; NOVL-NEXT:    vcvttph2dq %ymm0, %zmm088; NOVL-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm089; NOVL-NEXT:    retq90  %ret = call <8 x i32> @llvm.experimental.constrained.fptosi.v8i32.v8f16(<8 x half> %a,91                                              metadata !"fpexcept.strict") #092  ret <8 x i32> %ret93}94 95define <8 x i32> @strict_vector_fptoui_v8f16_to_v8i32(<8 x half> %a) #0 {96; CHECK-LABEL: strict_vector_fptoui_v8f16_to_v8i32:97; CHECK:       # %bb.0:98; CHECK-NEXT:    vcvttph2udq %xmm0, %ymm099; CHECK-NEXT:    ret{{[l|q]}}100;101; NOVL-LABEL: strict_vector_fptoui_v8f16_to_v8i32:102; NOVL:       # %bb.0:103; NOVL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0104; NOVL-NEXT:    vxorps %xmm1, %xmm1, %xmm1105; NOVL-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]106; NOVL-NEXT:    vcvttph2udq %ymm0, %zmm0107; NOVL-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0108; NOVL-NEXT:    retq109  %ret = call <8 x i32> @llvm.experimental.constrained.fptoui.v8i32.v8f16(<8 x half> %a,110                                              metadata !"fpexcept.strict") #0111  ret <8 x i32> %ret112}113 114define <16 x i16> @strict_vector_fptosi_v16f16_to_v16i16(<16 x half> %a) #0 {115; CHECK-LABEL: strict_vector_fptosi_v16f16_to_v16i16:116; CHECK:       # %bb.0:117; CHECK-NEXT:    vcvttph2w %ymm0, %ymm0118; CHECK-NEXT:    ret{{[l|q]}}119;120; NOVL-LABEL: strict_vector_fptosi_v16f16_to_v16i16:121; NOVL:       # %bb.0:122; NOVL-NEXT:    vxorps %xmm1, %xmm1, %xmm1123; NOVL-NEXT:    vinsertf64x4 $0, %ymm0, %zmm1, %zmm0124; NOVL-NEXT:    vcvttph2w %zmm0, %zmm0125; NOVL-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0126; NOVL-NEXT:    retq127  %ret = call <16 x i16> @llvm.experimental.constrained.fptosi.v16i16.v16f16(<16 x half> %a,128                                              metadata !"fpexcept.strict") #0129  ret <16 x i16> %ret130}131 132define <16 x i16> @strict_vector_fptoui_v16f16_to_v16i16(<16 x half> %a) #0 {133; CHECK-LABEL: strict_vector_fptoui_v16f16_to_v16i16:134; CHECK:       # %bb.0:135; CHECK-NEXT:    vcvttph2uw %ymm0, %ymm0136; CHECK-NEXT:    ret{{[l|q]}}137;138; NOVL-LABEL: strict_vector_fptoui_v16f16_to_v16i16:139; NOVL:       # %bb.0:140; NOVL-NEXT:    vxorps %xmm1, %xmm1, %xmm1141; NOVL-NEXT:    vinsertf64x4 $0, %ymm0, %zmm1, %zmm0142; NOVL-NEXT:    vcvttph2uw %zmm0, %zmm0143; NOVL-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0144; NOVL-NEXT:    retq145  %ret = call <16 x i16> @llvm.experimental.constrained.fptoui.v16i16.v16f16(<16 x half> %a,146                                              metadata !"fpexcept.strict") #0147  ret <16 x i16> %ret148}149 150define <16 x i8> @strict_vector_fptosi_v16f16_to_v16i8(<16 x half> %a) #0 {151; CHECK-LABEL: strict_vector_fptosi_v16f16_to_v16i8:152; CHECK:       # %bb.0:153; CHECK-NEXT:    vcvttph2dq %ymm0, %zmm0154; CHECK-NEXT:    vpmovdb %zmm0, %xmm0155; CHECK-NEXT:    vzeroupper156; CHECK-NEXT:    ret{{[l|q]}}157;158; NOVL-LABEL: strict_vector_fptosi_v16f16_to_v16i8:159; NOVL:       # %bb.0:160; NOVL-NEXT:    vcvttph2dq %ymm0, %zmm0161; NOVL-NEXT:    vpmovdb %zmm0, %xmm0162; NOVL-NEXT:    vzeroupper163; NOVL-NEXT:    retq164  %ret = call <16 x i8> @llvm.experimental.constrained.fptosi.v16i8.v16f16(<16 x half> %a,165                                              metadata !"fpexcept.strict") #0166  ret <16 x i8> %ret167}168 169define <16 x i8> @strict_vector_fptoui_v16f16_to_v16i8(<16 x half> %a) #0 {170; CHECK-LABEL: strict_vector_fptoui_v16f16_to_v16i8:171; CHECK:       # %bb.0:172; CHECK-NEXT:    vcvttph2dq %ymm0, %zmm0173; CHECK-NEXT:    vpmovdb %zmm0, %xmm0174; CHECK-NEXT:    vzeroupper175; CHECK-NEXT:    ret{{[l|q]}}176;177; NOVL-LABEL: strict_vector_fptoui_v16f16_to_v16i8:178; NOVL:       # %bb.0:179; NOVL-NEXT:    vcvttph2dq %ymm0, %zmm0180; NOVL-NEXT:    vpmovdb %zmm0, %xmm0181; NOVL-NEXT:    vzeroupper182; NOVL-NEXT:    retq183  %ret = call <16 x i8> @llvm.experimental.constrained.fptoui.v16i8.v16f16(<16 x half> %a,184                                              metadata !"fpexcept.strict") #0185  ret <16 x i8> %ret186}187 188define <16 x i1> @strict_vector_fptosi_v16f16_to_v16i1(<16 x half> %a) #0 {189; CHECK-LABEL: strict_vector_fptosi_v16f16_to_v16i1:190; CHECK:       # %bb.0:191; CHECK-NEXT:    vcvttph2dq %ymm0, %zmm0192; CHECK-NEXT:    vptestmd %zmm0, %zmm0, %k0193; CHECK-NEXT:    vpmovm2b %k0, %xmm0194; CHECK-NEXT:    vzeroupper195; CHECK-NEXT:    ret{{[l|q]}}196;197; NOVL-LABEL: strict_vector_fptosi_v16f16_to_v16i1:198; NOVL:       # %bb.0:199; NOVL-NEXT:    vcvttph2dq %ymm0, %zmm0200; NOVL-NEXT:    vptestmd %zmm0, %zmm0, %k0201; NOVL-NEXT:    vpmovm2b %k0, %zmm0202; NOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0203; NOVL-NEXT:    vzeroupper204; NOVL-NEXT:    retq205  %ret = call <16 x i1> @llvm.experimental.constrained.fptosi.v16i1.v16f16(<16 x half> %a,206                                              metadata !"fpexcept.strict") #0207  ret <16 x i1> %ret208}209 210define <16 x i1> @strict_vector_fptoui_v16f16_to_v16i1(<16 x half> %a) #0 {211; CHECK-LABEL: strict_vector_fptoui_v16f16_to_v16i1:212; CHECK:       # %bb.0:213; CHECK-NEXT:    vcvttph2dq %ymm0, %zmm0214; CHECK-NEXT:    vpslld $31, %zmm0, %zmm0215; CHECK-NEXT:    vptestmd %zmm0, %zmm0, %k0216; CHECK-NEXT:    vpmovm2b %k0, %xmm0217; CHECK-NEXT:    vzeroupper218; CHECK-NEXT:    ret{{[l|q]}}219;220; NOVL-LABEL: strict_vector_fptoui_v16f16_to_v16i1:221; NOVL:       # %bb.0:222; NOVL-NEXT:    vcvttph2dq %ymm0, %zmm0223; NOVL-NEXT:    vpslld $31, %zmm0, %zmm0224; NOVL-NEXT:    vptestmd %zmm0, %zmm0, %k0225; NOVL-NEXT:    vpmovm2b %k0, %zmm0226; NOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0227; NOVL-NEXT:    vzeroupper228; NOVL-NEXT:    retq229  %ret = call <16 x i1> @llvm.experimental.constrained.fptoui.v16i1.v16f16(<16 x half> %a,230                                              metadata !"fpexcept.strict") #0231  ret <16 x i1> %ret232}233 234attributes #0 = { strictfp }235