brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.7 KiB · 5f13e97 Raw
124 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,+avx512cd,+prefer-256-bit | FileCheck %s --check-prefix=AVX2563; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512cd,-prefer-256-bit | FileCheck %s --check-prefixes=AVX512,AVX512VL4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512cd,+prefer-256-bit | FileCheck %s --check-prefixes=AVX512,AVX512F5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512cd,-prefer-256-bit | FileCheck %s --check-prefixes=AVX512,AVX512F6 7define <8 x i16> @testv8i16(<8 x i16> %in) {8; AVX256-LABEL: testv8i16:9; AVX256:       # %bb.0:10; AVX256-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero11; AVX256-NEXT:    vplzcntd %ymm0, %ymm012; AVX256-NEXT:    vpmovdw %ymm0, %xmm013; AVX256-NEXT:    vpsubw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm014; AVX256-NEXT:    vzeroupper15; AVX256-NEXT:    retq16;17; AVX512VL-LABEL: testv8i16:18; AVX512VL:       # %bb.0:19; AVX512VL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero20; AVX512VL-NEXT:    vplzcntd %ymm0, %ymm021; AVX512VL-NEXT:    vpmovdw %ymm0, %xmm022; AVX512VL-NEXT:    vpsubw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm023; AVX512VL-NEXT:    vzeroupper24; AVX512VL-NEXT:    retq25;26; AVX512F-LABEL: testv8i16:27; AVX512F:       # %bb.0:28; AVX512F-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero29; AVX512F-NEXT:    vplzcntd %zmm0, %zmm030; AVX512F-NEXT:    vpmovdw %zmm0, %ymm031; AVX512F-NEXT:    vpsubw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm032; AVX512F-NEXT:    vzeroupper33; AVX512F-NEXT:    retq34  %out = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %in, i1 false)35  ret <8 x i16> %out36}37 38define <16 x i8> @testv16i8(<16 x i8> %in) {39; AVX256-LABEL: testv16i8:40; AVX256:       # %bb.0:41; AVX256-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]42; AVX256-NEXT:    vpshufb %xmm0, %xmm1, %xmm243; AVX256-NEXT:    vpsrlw $4, %xmm0, %xmm044; AVX256-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm045; AVX256-NEXT:    vpxor %xmm3, %xmm3, %xmm346; AVX256-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm347; AVX256-NEXT:    vpand %xmm3, %xmm2, %xmm248; AVX256-NEXT:    vpshufb %xmm0, %xmm1, %xmm049; AVX256-NEXT:    vpaddb %xmm0, %xmm2, %xmm050; AVX256-NEXT:    retq51;52; AVX512-LABEL: testv16i8:53; AVX512:       # %bb.0:54; AVX512-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero55; AVX512-NEXT:    vplzcntd %zmm0, %zmm056; AVX512-NEXT:    vpmovdb %zmm0, %xmm057; AVX512-NEXT:    vpsubb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm058; AVX512-NEXT:    vzeroupper59; AVX512-NEXT:    retq60  %out = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %in, i1 false)61  ret <16 x i8> %out62}63 64define <16 x i16> @testv16i16(<16 x i16> %in) {65; AVX256-LABEL: testv16i16:66; AVX256:       # %bb.0:67; AVX256-NEXT:    vpmovzxwd {{.*#+}} ymm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero68; AVX256-NEXT:    vplzcntd %ymm1, %ymm169; AVX256-NEXT:    vpmovdw %ymm1, %xmm170; AVX256-NEXT:    vextracti128 $1, %ymm0, %xmm071; AVX256-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero72; AVX256-NEXT:    vplzcntd %ymm0, %ymm073; AVX256-NEXT:    vpmovdw %ymm0, %xmm074; AVX256-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm075; AVX256-NEXT:    vpsubw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm076; AVX256-NEXT:    retq77;78; AVX512-LABEL: testv16i16:79; AVX512:       # %bb.0:80; AVX512-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero81; AVX512-NEXT:    vplzcntd %zmm0, %zmm082; AVX512-NEXT:    vpmovdw %zmm0, %ymm083; AVX512-NEXT:    vpsubw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm084; AVX512-NEXT:    retq85  %out = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %in, i1 false)86  ret <16 x i16> %out87}88 89define <32 x i8> @testv32i8(<32 x i8> %in) {90; AVX256-LABEL: testv32i8:91; AVX256:       # %bb.0:92; AVX256-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0,4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]93; AVX256-NEXT:    # ymm1 = mem[0,1,0,1]94; AVX256-NEXT:    vpshufb %ymm0, %ymm1, %ymm295; AVX256-NEXT:    vpsrlw $4, %ymm0, %ymm096; AVX256-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm097; AVX256-NEXT:    vpxor %xmm3, %xmm3, %xmm398; AVX256-NEXT:    vpcmpeqb %ymm3, %ymm0, %ymm399; AVX256-NEXT:    vpand %ymm3, %ymm2, %ymm2100; AVX256-NEXT:    vpshufb %ymm0, %ymm1, %ymm0101; AVX256-NEXT:    vpaddb %ymm0, %ymm2, %ymm0102; AVX256-NEXT:    retq103;104; AVX512-LABEL: testv32i8:105; AVX512:       # %bb.0:106; AVX512-NEXT:    vpmovzxbd {{.*#+}} zmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero107; AVX512-NEXT:    vplzcntd %zmm1, %zmm1108; AVX512-NEXT:    vpmovdb %zmm1, %xmm1109; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm0110; AVX512-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero111; AVX512-NEXT:    vplzcntd %zmm0, %zmm0112; AVX512-NEXT:    vpmovdb %zmm0, %xmm0113; AVX512-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0114; AVX512-NEXT:    vpsubb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0115; AVX512-NEXT:    retq116  %out = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %in, i1 false)117  ret <32 x i8> %out118}119 120declare <8 x i16> @llvm.ctlz.v8i16(<8 x i16>, i1)121declare <16 x i8> @llvm.ctlz.v16i8(<16 x i8>, i1)122declare <16 x i16> @llvm.ctlz.v16i16(<16 x i16>, i1)123declare <32 x i8> @llvm.ctlz.v32i8(<32 x i8>, i1)124