brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.7 KiB · b62a07e Raw
199 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx,+f16c | FileCheck %s -check-prefixes=AVX13; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx2,+f16c | FileCheck %s -check-prefixes=AVX24; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512vl | FileCheck %s -check-prefixes=AVX5125 6define <8 x half> @test_uitofp_v8i32_v8f16(<8 x i32> %a) {7; AVX1-LABEL: test_uitofp_v8i32_v8f16:8; AVX1:       # %bb.0:9; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm110; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm211; AVX1-NEXT:    vpsrld $16, %xmm2, %xmm212; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm113; AVX1-NEXT:    vcvtdq2ps %ymm1, %ymm114; AVX1-NEXT:    vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm115; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm016; AVX1-NEXT:    vcvtdq2ps %ymm0, %ymm017; AVX1-NEXT:    vaddps %ymm0, %ymm1, %ymm018; AVX1-NEXT:    vcvtps2ph $4, %ymm0, %xmm019; AVX1-NEXT:    vzeroupper20; AVX1-NEXT:    retq21;22; AVX2-LABEL: test_uitofp_v8i32_v8f16:23; AVX2:       # %bb.0:24; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [1258291200,1258291200,1258291200,1258291200,1258291200,1258291200,1258291200,1258291200]25; AVX2-NEXT:    vpblendw {{.*#+}} ymm1 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7],ymm0[8],ymm1[9],ymm0[10],ymm1[11],ymm0[12],ymm1[13],ymm0[14],ymm1[15]26; AVX2-NEXT:    vpsrld $16, %ymm0, %ymm027; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm2 = [1392508928,1392508928,1392508928,1392508928,1392508928,1392508928,1392508928,1392508928]28; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0],ymm2[1],ymm0[2],ymm2[3],ymm0[4],ymm2[5],ymm0[6],ymm2[7],ymm0[8],ymm2[9],ymm0[10],ymm2[11],ymm0[12],ymm2[13],ymm0[14],ymm2[15]29; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm2 = [5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11]30; AVX2-NEXT:    vsubps %ymm2, %ymm0, %ymm031; AVX2-NEXT:    vaddps %ymm0, %ymm1, %ymm032; AVX2-NEXT:    vcvtps2ph $4, %ymm0, %xmm033; AVX2-NEXT:    vzeroupper34; AVX2-NEXT:    retq35;36; AVX512-LABEL: test_uitofp_v8i32_v8f16:37; AVX512:       # %bb.0:38; AVX512-NEXT:    vcvtudq2ps %ymm0, %ymm039; AVX512-NEXT:    vcvtps2ph $4, %ymm0, %xmm040; AVX512-NEXT:    vzeroupper41; AVX512-NEXT:    retq42  %vec = uitofp <8 x i32> %a to <8 x half>43  ret <8 x half> %vec44}45 46define <8 x half> @test_strict_uitofp_v8i32_v8f16(<8 x i32> %a) {47; AVX1-LABEL: test_strict_uitofp_v8i32_v8f16:48; AVX1:       # %bb.0:49; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm150; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm251; AVX1-NEXT:    vpsrld $16, %xmm2, %xmm252; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm153; AVX1-NEXT:    vcvtdq2ps %ymm1, %ymm154; AVX1-NEXT:    vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm155; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm056; AVX1-NEXT:    vcvtdq2ps %ymm0, %ymm057; AVX1-NEXT:    vaddps %ymm0, %ymm1, %ymm058; AVX1-NEXT:    vcvtps2ph $4, %ymm0, %xmm059; AVX1-NEXT:    vzeroupper60; AVX1-NEXT:    retq61;62; AVX2-LABEL: test_strict_uitofp_v8i32_v8f16:63; AVX2:       # %bb.0:64; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [1258291200,1258291200,1258291200,1258291200,1258291200,1258291200,1258291200,1258291200]65; AVX2-NEXT:    vpblendw {{.*#+}} ymm1 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7],ymm0[8],ymm1[9],ymm0[10],ymm1[11],ymm0[12],ymm1[13],ymm0[14],ymm1[15]66; AVX2-NEXT:    vpsrld $16, %ymm0, %ymm067; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm2 = [1392508928,1392508928,1392508928,1392508928,1392508928,1392508928,1392508928,1392508928]68; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0],ymm2[1],ymm0[2],ymm2[3],ymm0[4],ymm2[5],ymm0[6],ymm2[7],ymm0[8],ymm2[9],ymm0[10],ymm2[11],ymm0[12],ymm2[13],ymm0[14],ymm2[15]69; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm2 = [5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11]70; AVX2-NEXT:    vsubps %ymm2, %ymm0, %ymm071; AVX2-NEXT:    vaddps %ymm0, %ymm1, %ymm072; AVX2-NEXT:    vcvtps2ph $4, %ymm0, %xmm073; AVX2-NEXT:    vzeroupper74; AVX2-NEXT:    retq75;76; AVX512-LABEL: test_strict_uitofp_v8i32_v8f16:77; AVX512:       # %bb.0:78; AVX512-NEXT:    vcvtudq2ps %ymm0, %ymm079; AVX512-NEXT:    vcvtps2ph $4, %ymm0, %xmm080; AVX512-NEXT:    vzeroupper81; AVX512-NEXT:    retq82  %vec = tail call <8 x half> @llvm.experimental.constrained.uitofp.f16.i32(<8 x i32> %a, metadata !"round.dynamic", metadata !"fpexcept.strict")83  ret <8 x half> %vec84}85 86define <16 x half> @test_uitofp_v16i32_v16f16(<16 x i32> %a) {87; AVX1-LABEL: test_uitofp_v16i32_v16f16:88; AVX1:       # %bb.0:89; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm290; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm391; AVX1-NEXT:    vpsrld $16, %xmm3, %xmm392; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm2, %ymm293; AVX1-NEXT:    vcvtdq2ps %ymm2, %ymm294; AVX1-NEXT:    vbroadcastss {{.*#+}} ymm3 = [6.5536E+4,6.5536E+4,6.5536E+4,6.5536E+4,6.5536E+4,6.5536E+4,6.5536E+4,6.5536E+4]95; AVX1-NEXT:    vmulps %ymm3, %ymm2, %ymm296; AVX1-NEXT:    vbroadcastss {{.*#+}} ymm4 = [65535,65535,65535,65535,65535,65535,65535,65535]97; AVX1-NEXT:    vandps %ymm4, %ymm0, %ymm098; AVX1-NEXT:    vcvtdq2ps %ymm0, %ymm099; AVX1-NEXT:    vaddps %ymm0, %ymm2, %ymm0100; AVX1-NEXT:    vcvtps2ph $4, %ymm0, %xmm0101; AVX1-NEXT:    vpsrld $16, %xmm1, %xmm2102; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5103; AVX1-NEXT:    vpsrld $16, %xmm5, %xmm5104; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm2, %ymm2105; AVX1-NEXT:    vcvtdq2ps %ymm2, %ymm2106; AVX1-NEXT:    vmulps %ymm3, %ymm2, %ymm2107; AVX1-NEXT:    vandps %ymm4, %ymm1, %ymm1108; AVX1-NEXT:    vcvtdq2ps %ymm1, %ymm1109; AVX1-NEXT:    vaddps %ymm1, %ymm2, %ymm1110; AVX1-NEXT:    vcvtps2ph $4, %ymm1, %xmm1111; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0112; AVX1-NEXT:    retq113;114; AVX2-LABEL: test_uitofp_v16i32_v16f16:115; AVX2:       # %bb.0:116; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm2 = [1258291200,1258291200,1258291200,1258291200,1258291200,1258291200,1258291200,1258291200]117; AVX2-NEXT:    vpblendw {{.*#+}} ymm3 = ymm0[0],ymm2[1],ymm0[2],ymm2[3],ymm0[4],ymm2[5],ymm0[6],ymm2[7],ymm0[8],ymm2[9],ymm0[10],ymm2[11],ymm0[12],ymm2[13],ymm0[14],ymm2[15]118; AVX2-NEXT:    vpsrld $16, %ymm0, %ymm0119; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm4 = [1392508928,1392508928,1392508928,1392508928,1392508928,1392508928,1392508928,1392508928]120; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0],ymm4[1],ymm0[2],ymm4[3],ymm0[4],ymm4[5],ymm0[6],ymm4[7],ymm0[8],ymm4[9],ymm0[10],ymm4[11],ymm0[12],ymm4[13],ymm0[14],ymm4[15]121; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm5 = [5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11]122; AVX2-NEXT:    vsubps %ymm5, %ymm0, %ymm0123; AVX2-NEXT:    vaddps %ymm0, %ymm3, %ymm0124; AVX2-NEXT:    vcvtps2ph $4, %ymm0, %xmm0125; AVX2-NEXT:    vpblendw {{.*#+}} ymm2 = ymm1[0],ymm2[1],ymm1[2],ymm2[3],ymm1[4],ymm2[5],ymm1[6],ymm2[7],ymm1[8],ymm2[9],ymm1[10],ymm2[11],ymm1[12],ymm2[13],ymm1[14],ymm2[15]126; AVX2-NEXT:    vpsrld $16, %ymm1, %ymm1127; AVX2-NEXT:    vpblendw {{.*#+}} ymm1 = ymm1[0],ymm4[1],ymm1[2],ymm4[3],ymm1[4],ymm4[5],ymm1[6],ymm4[7],ymm1[8],ymm4[9],ymm1[10],ymm4[11],ymm1[12],ymm4[13],ymm1[14],ymm4[15]128; AVX2-NEXT:    vsubps %ymm5, %ymm1, %ymm1129; AVX2-NEXT:    vaddps %ymm1, %ymm2, %ymm1130; AVX2-NEXT:    vcvtps2ph $4, %ymm1, %xmm1131; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0132; AVX2-NEXT:    retq133;134; AVX512-LABEL: test_uitofp_v16i32_v16f16:135; AVX512:       # %bb.0:136; AVX512-NEXT:    vcvtudq2ps %zmm0, %zmm0137; AVX512-NEXT:    vcvtps2ph $4, %zmm0, %ymm0138; AVX512-NEXT:    retq139  %vec = uitofp <16 x i32> %a to <16 x half>140  ret <16 x half> %vec141}142 143define <16 x half> @test_strict_uitofp_v16i32_v16f16(<16 x i32> %a) {144; AVX1-LABEL: test_strict_uitofp_v16i32_v16f16:145; AVX1:       # %bb.0:146; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm2147; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3148; AVX1-NEXT:    vpsrld $16, %xmm3, %xmm3149; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm2, %ymm2150; AVX1-NEXT:    vcvtdq2ps %ymm2, %ymm2151; AVX1-NEXT:    vbroadcastss {{.*#+}} ymm3 = [6.5536E+4,6.5536E+4,6.5536E+4,6.5536E+4,6.5536E+4,6.5536E+4,6.5536E+4,6.5536E+4]152; AVX1-NEXT:    vmulps %ymm3, %ymm2, %ymm2153; AVX1-NEXT:    vbroadcastss {{.*#+}} ymm4 = [65535,65535,65535,65535,65535,65535,65535,65535]154; AVX1-NEXT:    vandps %ymm4, %ymm0, %ymm0155; AVX1-NEXT:    vcvtdq2ps %ymm0, %ymm0156; AVX1-NEXT:    vaddps %ymm0, %ymm2, %ymm0157; AVX1-NEXT:    vcvtps2ph $4, %ymm0, %xmm0158; AVX1-NEXT:    vpsrld $16, %xmm1, %xmm2159; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5160; AVX1-NEXT:    vpsrld $16, %xmm5, %xmm5161; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm2, %ymm2162; AVX1-NEXT:    vcvtdq2ps %ymm2, %ymm2163; AVX1-NEXT:    vmulps %ymm3, %ymm2, %ymm2164; AVX1-NEXT:    vandps %ymm4, %ymm1, %ymm1165; AVX1-NEXT:    vcvtdq2ps %ymm1, %ymm1166; AVX1-NEXT:    vaddps %ymm1, %ymm2, %ymm1167; AVX1-NEXT:    vcvtps2ph $4, %ymm1, %xmm1168; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0169; AVX1-NEXT:    retq170;171; AVX2-LABEL: test_strict_uitofp_v16i32_v16f16:172; AVX2:       # %bb.0:173; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm2 = [1258291200,1258291200,1258291200,1258291200,1258291200,1258291200,1258291200,1258291200]174; AVX2-NEXT:    vpblendw {{.*#+}} ymm3 = ymm0[0],ymm2[1],ymm0[2],ymm2[3],ymm0[4],ymm2[5],ymm0[6],ymm2[7],ymm0[8],ymm2[9],ymm0[10],ymm2[11],ymm0[12],ymm2[13],ymm0[14],ymm2[15]175; AVX2-NEXT:    vpsrld $16, %ymm0, %ymm0176; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm4 = [1392508928,1392508928,1392508928,1392508928,1392508928,1392508928,1392508928,1392508928]177; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0],ymm4[1],ymm0[2],ymm4[3],ymm0[4],ymm4[5],ymm0[6],ymm4[7],ymm0[8],ymm4[9],ymm0[10],ymm4[11],ymm0[12],ymm4[13],ymm0[14],ymm4[15]178; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm5 = [5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11]179; AVX2-NEXT:    vsubps %ymm5, %ymm0, %ymm0180; AVX2-NEXT:    vaddps %ymm0, %ymm3, %ymm0181; AVX2-NEXT:    vcvtps2ph $4, %ymm0, %xmm0182; AVX2-NEXT:    vpblendw {{.*#+}} ymm2 = ymm1[0],ymm2[1],ymm1[2],ymm2[3],ymm1[4],ymm2[5],ymm1[6],ymm2[7],ymm1[8],ymm2[9],ymm1[10],ymm2[11],ymm1[12],ymm2[13],ymm1[14],ymm2[15]183; AVX2-NEXT:    vpsrld $16, %ymm1, %ymm1184; AVX2-NEXT:    vpblendw {{.*#+}} ymm1 = ymm1[0],ymm4[1],ymm1[2],ymm4[3],ymm1[4],ymm4[5],ymm1[6],ymm4[7],ymm1[8],ymm4[9],ymm1[10],ymm4[11],ymm1[12],ymm4[13],ymm1[14],ymm4[15]185; AVX2-NEXT:    vsubps %ymm5, %ymm1, %ymm1186; AVX2-NEXT:    vaddps %ymm1, %ymm2, %ymm1187; AVX2-NEXT:    vcvtps2ph $4, %ymm1, %xmm1188; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0189; AVX2-NEXT:    retq190;191; AVX512-LABEL: test_strict_uitofp_v16i32_v16f16:192; AVX512:       # %bb.0:193; AVX512-NEXT:    vcvtudq2ps %zmm0, %zmm0194; AVX512-NEXT:    vcvtps2ph $4, %zmm0, %ymm0195; AVX512-NEXT:    retq196  %vec = tail call <16 x half> @llvm.experimental.constrained.uitofp.f16.i32(<16 x i32> %a, metadata !"round.dynamic", metadata !"fpexcept.strict")197  ret <16 x half> %vec198}199