brintos

brintos / llvm-project-archived public Read only

0
0
Text · 40.5 KiB · d35a365 Raw
687 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq,+avx512cd,-avx512bw | FileCheck %s --check-prefix=AVX512CD3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq,+avx512cd,+avx512bw | FileCheck %s --check-prefix=AVX512CDBW4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq,-avx512cd,+avx512bw | FileCheck %s --check-prefix=AVX512BW5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq,-avx512cd,-avx512bw | FileCheck %s --check-prefix=AVX512DQ6 7define <8 x i64> @testv8i64(<8 x i64> %in) nounwind {8; AVX512CD-LABEL: testv8i64:9; AVX512CD:       # %bb.0:10; AVX512CD-NEXT:    vplzcntq %zmm0, %zmm011; AVX512CD-NEXT:    retq12;13; AVX512CDBW-LABEL: testv8i64:14; AVX512CDBW:       # %bb.0:15; AVX512CDBW-NEXT:    vplzcntq %zmm0, %zmm016; AVX512CDBW-NEXT:    retq17;18; AVX512BW-LABEL: testv8i64:19; AVX512BW:       # %bb.0:20; AVX512BW-NEXT:    vpsrlq $1, %zmm0, %zmm121; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm022; AVX512BW-NEXT:    vpsrlq $2, %zmm0, %zmm123; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm024; AVX512BW-NEXT:    vpsrlq $4, %zmm0, %zmm125; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm026; AVX512BW-NEXT:    vpsrlq $8, %zmm0, %zmm127; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm028; AVX512BW-NEXT:    vpsrlq $16, %zmm0, %zmm129; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm030; AVX512BW-NEXT:    vpsrlq $32, %zmm0, %zmm131; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm032; AVX512BW-NEXT:    vpbroadcastb {{.*#+}} zmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]33; AVX512BW-NEXT:    vpandnq %zmm1, %zmm0, %zmm234; AVX512BW-NEXT:    vbroadcasti32x4 {{.*#+}} zmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]35; AVX512BW-NEXT:    # zmm3 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]36; AVX512BW-NEXT:    vpshufb %zmm2, %zmm3, %zmm237; AVX512BW-NEXT:    vpternlogq {{.*#+}} zmm0 = ~zmm038; AVX512BW-NEXT:    vpsrlw $4, %zmm0, %zmm039; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm040; AVX512BW-NEXT:    vpshufb %zmm0, %zmm3, %zmm041; AVX512BW-NEXT:    vpaddb %zmm2, %zmm0, %zmm042; AVX512BW-NEXT:    vpxor %xmm1, %xmm1, %xmm143; AVX512BW-NEXT:    vpsadbw %zmm1, %zmm0, %zmm044; AVX512BW-NEXT:    retq45;46; AVX512DQ-LABEL: testv8i64:47; AVX512DQ:       # %bb.0:48; AVX512DQ-NEXT:    vpsrlq $1, %zmm0, %zmm149; AVX512DQ-NEXT:    vporq %zmm1, %zmm0, %zmm050; AVX512DQ-NEXT:    vpsrlq $2, %zmm0, %zmm151; AVX512DQ-NEXT:    vporq %zmm1, %zmm0, %zmm052; AVX512DQ-NEXT:    vpsrlq $4, %zmm0, %zmm153; AVX512DQ-NEXT:    vporq %zmm1, %zmm0, %zmm054; AVX512DQ-NEXT:    vpsrlq $8, %zmm0, %zmm155; AVX512DQ-NEXT:    vporq %zmm1, %zmm0, %zmm056; AVX512DQ-NEXT:    vpsrlq $16, %zmm0, %zmm157; AVX512DQ-NEXT:    vporq %zmm1, %zmm0, %zmm058; AVX512DQ-NEXT:    vpsrlq $32, %zmm0, %zmm159; AVX512DQ-NEXT:    vporq %zmm1, %zmm0, %zmm060; AVX512DQ-NEXT:    vpbroadcastb {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]61; AVX512DQ-NEXT:    vpandn %ymm1, %ymm0, %ymm262; AVX512DQ-NEXT:    vpternlogq {{.*#+}} zmm0 = ~zmm063; AVX512DQ-NEXT:    vextracti64x4 $1, %zmm0, %ymm364; AVX512DQ-NEXT:    vpand %ymm1, %ymm3, %ymm465; AVX512DQ-NEXT:    vbroadcasti128 {{.*#+}} ymm5 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]66; AVX512DQ-NEXT:    # ymm5 = mem[0,1,0,1]67; AVX512DQ-NEXT:    vpshufb %ymm4, %ymm5, %ymm468; AVX512DQ-NEXT:    vpsrlw $4, %ymm3, %ymm369; AVX512DQ-NEXT:    vpand %ymm1, %ymm3, %ymm370; AVX512DQ-NEXT:    vpshufb %ymm3, %ymm5, %ymm371; AVX512DQ-NEXT:    vpaddb %ymm4, %ymm3, %ymm372; AVX512DQ-NEXT:    vpxor %xmm4, %xmm4, %xmm473; AVX512DQ-NEXT:    vpsadbw %ymm4, %ymm3, %ymm374; AVX512DQ-NEXT:    vpshufb %ymm2, %ymm5, %ymm275; AVX512DQ-NEXT:    vpsrlw $4, %ymm0, %ymm076; AVX512DQ-NEXT:    vpand %ymm1, %ymm0, %ymm077; AVX512DQ-NEXT:    vpshufb %ymm0, %ymm5, %ymm078; AVX512DQ-NEXT:    vpaddb %ymm2, %ymm0, %ymm079; AVX512DQ-NEXT:    vpsadbw %ymm4, %ymm0, %ymm080; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm3, %zmm0, %zmm081; AVX512DQ-NEXT:    retq82  %out = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %in, i1 0)83  ret <8 x i64> %out84}85 86define <8 x i64> @testv8i64u(<8 x i64> %in) nounwind {87; AVX512CD-LABEL: testv8i64u:88; AVX512CD:       # %bb.0:89; AVX512CD-NEXT:    vplzcntq %zmm0, %zmm090; AVX512CD-NEXT:    retq91;92; AVX512CDBW-LABEL: testv8i64u:93; AVX512CDBW:       # %bb.0:94; AVX512CDBW-NEXT:    vplzcntq %zmm0, %zmm095; AVX512CDBW-NEXT:    retq96;97; AVX512BW-LABEL: testv8i64u:98; AVX512BW:       # %bb.0:99; AVX512BW-NEXT:    vpsrlq $1, %zmm0, %zmm1100; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm0101; AVX512BW-NEXT:    vpsrlq $2, %zmm0, %zmm1102; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm0103; AVX512BW-NEXT:    vpsrlq $4, %zmm0, %zmm1104; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm0105; AVX512BW-NEXT:    vpsrlq $8, %zmm0, %zmm1106; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm0107; AVX512BW-NEXT:    vpsrlq $16, %zmm0, %zmm1108; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm0109; AVX512BW-NEXT:    vpsrlq $32, %zmm0, %zmm1110; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm0111; AVX512BW-NEXT:    vpbroadcastb {{.*#+}} zmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]112; AVX512BW-NEXT:    vpandnq %zmm1, %zmm0, %zmm2113; AVX512BW-NEXT:    vbroadcasti32x4 {{.*#+}} zmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]114; AVX512BW-NEXT:    # zmm3 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]115; AVX512BW-NEXT:    vpshufb %zmm2, %zmm3, %zmm2116; AVX512BW-NEXT:    vpternlogq {{.*#+}} zmm0 = ~zmm0117; AVX512BW-NEXT:    vpsrlw $4, %zmm0, %zmm0118; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm0119; AVX512BW-NEXT:    vpshufb %zmm0, %zmm3, %zmm0120; AVX512BW-NEXT:    vpaddb %zmm2, %zmm0, %zmm0121; AVX512BW-NEXT:    vpxor %xmm1, %xmm1, %xmm1122; AVX512BW-NEXT:    vpsadbw %zmm1, %zmm0, %zmm0123; AVX512BW-NEXT:    retq124;125; AVX512DQ-LABEL: testv8i64u:126; AVX512DQ:       # %bb.0:127; AVX512DQ-NEXT:    vpsrlq $1, %zmm0, %zmm1128; AVX512DQ-NEXT:    vporq %zmm1, %zmm0, %zmm0129; AVX512DQ-NEXT:    vpsrlq $2, %zmm0, %zmm1130; AVX512DQ-NEXT:    vporq %zmm1, %zmm0, %zmm0131; AVX512DQ-NEXT:    vpsrlq $4, %zmm0, %zmm1132; AVX512DQ-NEXT:    vporq %zmm1, %zmm0, %zmm0133; AVX512DQ-NEXT:    vpsrlq $8, %zmm0, %zmm1134; AVX512DQ-NEXT:    vporq %zmm1, %zmm0, %zmm0135; AVX512DQ-NEXT:    vpsrlq $16, %zmm0, %zmm1136; AVX512DQ-NEXT:    vporq %zmm1, %zmm0, %zmm0137; AVX512DQ-NEXT:    vpsrlq $32, %zmm0, %zmm1138; AVX512DQ-NEXT:    vporq %zmm1, %zmm0, %zmm0139; AVX512DQ-NEXT:    vpbroadcastb {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]140; AVX512DQ-NEXT:    vpandn %ymm1, %ymm0, %ymm2141; AVX512DQ-NEXT:    vpternlogq {{.*#+}} zmm0 = ~zmm0142; AVX512DQ-NEXT:    vextracti64x4 $1, %zmm0, %ymm3143; AVX512DQ-NEXT:    vpand %ymm1, %ymm3, %ymm4144; AVX512DQ-NEXT:    vbroadcasti128 {{.*#+}} ymm5 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]145; AVX512DQ-NEXT:    # ymm5 = mem[0,1,0,1]146; AVX512DQ-NEXT:    vpshufb %ymm4, %ymm5, %ymm4147; AVX512DQ-NEXT:    vpsrlw $4, %ymm3, %ymm3148; AVX512DQ-NEXT:    vpand %ymm1, %ymm3, %ymm3149; AVX512DQ-NEXT:    vpshufb %ymm3, %ymm5, %ymm3150; AVX512DQ-NEXT:    vpaddb %ymm4, %ymm3, %ymm3151; AVX512DQ-NEXT:    vpxor %xmm4, %xmm4, %xmm4152; AVX512DQ-NEXT:    vpsadbw %ymm4, %ymm3, %ymm3153; AVX512DQ-NEXT:    vpshufb %ymm2, %ymm5, %ymm2154; AVX512DQ-NEXT:    vpsrlw $4, %ymm0, %ymm0155; AVX512DQ-NEXT:    vpand %ymm1, %ymm0, %ymm0156; AVX512DQ-NEXT:    vpshufb %ymm0, %ymm5, %ymm0157; AVX512DQ-NEXT:    vpaddb %ymm2, %ymm0, %ymm0158; AVX512DQ-NEXT:    vpsadbw %ymm4, %ymm0, %ymm0159; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm3, %zmm0, %zmm0160; AVX512DQ-NEXT:    retq161  %out = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %in, i1 -1)162  ret <8 x i64> %out163}164 165define <16 x i32> @testv16i32(<16 x i32> %in) nounwind {166; AVX512CD-LABEL: testv16i32:167; AVX512CD:       # %bb.0:168; AVX512CD-NEXT:    vplzcntd %zmm0, %zmm0169; AVX512CD-NEXT:    retq170;171; AVX512CDBW-LABEL: testv16i32:172; AVX512CDBW:       # %bb.0:173; AVX512CDBW-NEXT:    vplzcntd %zmm0, %zmm0174; AVX512CDBW-NEXT:    retq175;176; AVX512BW-LABEL: testv16i32:177; AVX512BW:       # %bb.0:178; AVX512BW-NEXT:    vpsrld $1, %zmm0, %zmm1179; AVX512BW-NEXT:    vpord %zmm1, %zmm0, %zmm0180; AVX512BW-NEXT:    vpsrld $2, %zmm0, %zmm1181; AVX512BW-NEXT:    vpord %zmm1, %zmm0, %zmm0182; AVX512BW-NEXT:    vpsrld $4, %zmm0, %zmm1183; AVX512BW-NEXT:    vpord %zmm1, %zmm0, %zmm0184; AVX512BW-NEXT:    vpsrld $8, %zmm0, %zmm1185; AVX512BW-NEXT:    vpord %zmm1, %zmm0, %zmm0186; AVX512BW-NEXT:    vpsrld $16, %zmm0, %zmm1187; AVX512BW-NEXT:    vpord %zmm1, %zmm0, %zmm0188; AVX512BW-NEXT:    vpbroadcastb {{.*#+}} zmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]189; AVX512BW-NEXT:    vpandnq %zmm1, %zmm0, %zmm2190; AVX512BW-NEXT:    vbroadcasti32x4 {{.*#+}} zmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]191; AVX512BW-NEXT:    # zmm3 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]192; AVX512BW-NEXT:    vpshufb %zmm2, %zmm3, %zmm2193; AVX512BW-NEXT:    vpternlogq {{.*#+}} zmm0 = ~zmm0194; AVX512BW-NEXT:    vpsrlw $4, %zmm0, %zmm0195; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm0196; AVX512BW-NEXT:    vpshufb %zmm0, %zmm3, %zmm0197; AVX512BW-NEXT:    vpaddb %zmm2, %zmm0, %zmm0198; AVX512BW-NEXT:    vpxor %xmm1, %xmm1, %xmm1199; AVX512BW-NEXT:    vpunpckhdq {{.*#+}} zmm2 = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]200; AVX512BW-NEXT:    vpsadbw %zmm1, %zmm2, %zmm2201; AVX512BW-NEXT:    vpunpckldq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]202; AVX512BW-NEXT:    vpsadbw %zmm1, %zmm0, %zmm0203; AVX512BW-NEXT:    vpackuswb %zmm2, %zmm0, %zmm0204; AVX512BW-NEXT:    retq205;206; AVX512DQ-LABEL: testv16i32:207; AVX512DQ:       # %bb.0:208; AVX512DQ-NEXT:    vpsrld $1, %zmm0, %zmm1209; AVX512DQ-NEXT:    vpord %zmm1, %zmm0, %zmm0210; AVX512DQ-NEXT:    vpsrld $2, %zmm0, %zmm1211; AVX512DQ-NEXT:    vpord %zmm1, %zmm0, %zmm0212; AVX512DQ-NEXT:    vpsrld $4, %zmm0, %zmm1213; AVX512DQ-NEXT:    vpord %zmm1, %zmm0, %zmm0214; AVX512DQ-NEXT:    vpsrld $8, %zmm0, %zmm1215; AVX512DQ-NEXT:    vpord %zmm1, %zmm0, %zmm0216; AVX512DQ-NEXT:    vpsrld $16, %zmm0, %zmm1217; AVX512DQ-NEXT:    vpord %zmm1, %zmm0, %zmm1218; AVX512DQ-NEXT:    vpbroadcastb {{.*#+}} ymm0 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]219; AVX512DQ-NEXT:    vpandn %ymm0, %ymm1, %ymm2220; AVX512DQ-NEXT:    vpternlogq {{.*#+}} zmm1 = ~zmm1221; AVX512DQ-NEXT:    vextracti64x4 $1, %zmm1, %ymm3222; AVX512DQ-NEXT:    vpand %ymm0, %ymm3, %ymm4223; AVX512DQ-NEXT:    vbroadcasti128 {{.*#+}} ymm5 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]224; AVX512DQ-NEXT:    # ymm5 = mem[0,1,0,1]225; AVX512DQ-NEXT:    vpshufb %ymm4, %ymm5, %ymm4226; AVX512DQ-NEXT:    vpsrlw $4, %ymm3, %ymm3227; AVX512DQ-NEXT:    vpand %ymm0, %ymm3, %ymm3228; AVX512DQ-NEXT:    vpshufb %ymm3, %ymm5, %ymm3229; AVX512DQ-NEXT:    vpaddb %ymm4, %ymm3, %ymm3230; AVX512DQ-NEXT:    vpxor %xmm4, %xmm4, %xmm4231; AVX512DQ-NEXT:    vpunpckhdq {{.*#+}} ymm6 = ymm3[2],ymm4[2],ymm3[3],ymm4[3],ymm3[6],ymm4[6],ymm3[7],ymm4[7]232; AVX512DQ-NEXT:    vpsadbw %ymm4, %ymm6, %ymm6233; AVX512DQ-NEXT:    vpunpckldq {{.*#+}} ymm3 = ymm3[0],ymm4[0],ymm3[1],ymm4[1],ymm3[4],ymm4[4],ymm3[5],ymm4[5]234; AVX512DQ-NEXT:    vpsadbw %ymm4, %ymm3, %ymm3235; AVX512DQ-NEXT:    vpackuswb %ymm6, %ymm3, %ymm3236; AVX512DQ-NEXT:    vpshufb %ymm2, %ymm5, %ymm2237; AVX512DQ-NEXT:    vpsrlw $4, %ymm1, %ymm1238; AVX512DQ-NEXT:    vpand %ymm0, %ymm1, %ymm0239; AVX512DQ-NEXT:    vpshufb %ymm0, %ymm5, %ymm0240; AVX512DQ-NEXT:    vpaddb %ymm2, %ymm0, %ymm0241; AVX512DQ-NEXT:    vpunpckhdq {{.*#+}} ymm1 = ymm0[2],ymm4[2],ymm0[3],ymm4[3],ymm0[6],ymm4[6],ymm0[7],ymm4[7]242; AVX512DQ-NEXT:    vpsadbw %ymm4, %ymm1, %ymm1243; AVX512DQ-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm4[0],ymm0[1],ymm4[1],ymm0[4],ymm4[4],ymm0[5],ymm4[5]244; AVX512DQ-NEXT:    vpsadbw %ymm4, %ymm0, %ymm0245; AVX512DQ-NEXT:    vpackuswb %ymm1, %ymm0, %ymm0246; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm3, %zmm0, %zmm0247; AVX512DQ-NEXT:    retq248  %out = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %in, i1 0)249  ret <16 x i32> %out250}251 252define <16 x i32> @testv16i32u(<16 x i32> %in) nounwind {253; AVX512CD-LABEL: testv16i32u:254; AVX512CD:       # %bb.0:255; AVX512CD-NEXT:    vplzcntd %zmm0, %zmm0256; AVX512CD-NEXT:    retq257;258; AVX512CDBW-LABEL: testv16i32u:259; AVX512CDBW:       # %bb.0:260; AVX512CDBW-NEXT:    vplzcntd %zmm0, %zmm0261; AVX512CDBW-NEXT:    retq262;263; AVX512BW-LABEL: testv16i32u:264; AVX512BW:       # %bb.0:265; AVX512BW-NEXT:    vpsrld $1, %zmm0, %zmm1266; AVX512BW-NEXT:    vpord %zmm1, %zmm0, %zmm0267; AVX512BW-NEXT:    vpsrld $2, %zmm0, %zmm1268; AVX512BW-NEXT:    vpord %zmm1, %zmm0, %zmm0269; AVX512BW-NEXT:    vpsrld $4, %zmm0, %zmm1270; AVX512BW-NEXT:    vpord %zmm1, %zmm0, %zmm0271; AVX512BW-NEXT:    vpsrld $8, %zmm0, %zmm1272; AVX512BW-NEXT:    vpord %zmm1, %zmm0, %zmm0273; AVX512BW-NEXT:    vpsrld $16, %zmm0, %zmm1274; AVX512BW-NEXT:    vpord %zmm1, %zmm0, %zmm0275; AVX512BW-NEXT:    vpbroadcastb {{.*#+}} zmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]276; AVX512BW-NEXT:    vpandnq %zmm1, %zmm0, %zmm2277; AVX512BW-NEXT:    vbroadcasti32x4 {{.*#+}} zmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]278; AVX512BW-NEXT:    # zmm3 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]279; AVX512BW-NEXT:    vpshufb %zmm2, %zmm3, %zmm2280; AVX512BW-NEXT:    vpternlogq {{.*#+}} zmm0 = ~zmm0281; AVX512BW-NEXT:    vpsrlw $4, %zmm0, %zmm0282; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm0283; AVX512BW-NEXT:    vpshufb %zmm0, %zmm3, %zmm0284; AVX512BW-NEXT:    vpaddb %zmm2, %zmm0, %zmm0285; AVX512BW-NEXT:    vpxor %xmm1, %xmm1, %xmm1286; AVX512BW-NEXT:    vpunpckhdq {{.*#+}} zmm2 = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]287; AVX512BW-NEXT:    vpsadbw %zmm1, %zmm2, %zmm2288; AVX512BW-NEXT:    vpunpckldq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]289; AVX512BW-NEXT:    vpsadbw %zmm1, %zmm0, %zmm0290; AVX512BW-NEXT:    vpackuswb %zmm2, %zmm0, %zmm0291; AVX512BW-NEXT:    retq292;293; AVX512DQ-LABEL: testv16i32u:294; AVX512DQ:       # %bb.0:295; AVX512DQ-NEXT:    vpsrld $1, %zmm0, %zmm1296; AVX512DQ-NEXT:    vpord %zmm1, %zmm0, %zmm0297; AVX512DQ-NEXT:    vpsrld $2, %zmm0, %zmm1298; AVX512DQ-NEXT:    vpord %zmm1, %zmm0, %zmm0299; AVX512DQ-NEXT:    vpsrld $4, %zmm0, %zmm1300; AVX512DQ-NEXT:    vpord %zmm1, %zmm0, %zmm0301; AVX512DQ-NEXT:    vpsrld $8, %zmm0, %zmm1302; AVX512DQ-NEXT:    vpord %zmm1, %zmm0, %zmm0303; AVX512DQ-NEXT:    vpsrld $16, %zmm0, %zmm1304; AVX512DQ-NEXT:    vpord %zmm1, %zmm0, %zmm1305; AVX512DQ-NEXT:    vpbroadcastb {{.*#+}} ymm0 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]306; AVX512DQ-NEXT:    vpandn %ymm0, %ymm1, %ymm2307; AVX512DQ-NEXT:    vpternlogq {{.*#+}} zmm1 = ~zmm1308; AVX512DQ-NEXT:    vextracti64x4 $1, %zmm1, %ymm3309; AVX512DQ-NEXT:    vpand %ymm0, %ymm3, %ymm4310; AVX512DQ-NEXT:    vbroadcasti128 {{.*#+}} ymm5 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]311; AVX512DQ-NEXT:    # ymm5 = mem[0,1,0,1]312; AVX512DQ-NEXT:    vpshufb %ymm4, %ymm5, %ymm4313; AVX512DQ-NEXT:    vpsrlw $4, %ymm3, %ymm3314; AVX512DQ-NEXT:    vpand %ymm0, %ymm3, %ymm3315; AVX512DQ-NEXT:    vpshufb %ymm3, %ymm5, %ymm3316; AVX512DQ-NEXT:    vpaddb %ymm4, %ymm3, %ymm3317; AVX512DQ-NEXT:    vpxor %xmm4, %xmm4, %xmm4318; AVX512DQ-NEXT:    vpunpckhdq {{.*#+}} ymm6 = ymm3[2],ymm4[2],ymm3[3],ymm4[3],ymm3[6],ymm4[6],ymm3[7],ymm4[7]319; AVX512DQ-NEXT:    vpsadbw %ymm4, %ymm6, %ymm6320; AVX512DQ-NEXT:    vpunpckldq {{.*#+}} ymm3 = ymm3[0],ymm4[0],ymm3[1],ymm4[1],ymm3[4],ymm4[4],ymm3[5],ymm4[5]321; AVX512DQ-NEXT:    vpsadbw %ymm4, %ymm3, %ymm3322; AVX512DQ-NEXT:    vpackuswb %ymm6, %ymm3, %ymm3323; AVX512DQ-NEXT:    vpshufb %ymm2, %ymm5, %ymm2324; AVX512DQ-NEXT:    vpsrlw $4, %ymm1, %ymm1325; AVX512DQ-NEXT:    vpand %ymm0, %ymm1, %ymm0326; AVX512DQ-NEXT:    vpshufb %ymm0, %ymm5, %ymm0327; AVX512DQ-NEXT:    vpaddb %ymm2, %ymm0, %ymm0328; AVX512DQ-NEXT:    vpunpckhdq {{.*#+}} ymm1 = ymm0[2],ymm4[2],ymm0[3],ymm4[3],ymm0[6],ymm4[6],ymm0[7],ymm4[7]329; AVX512DQ-NEXT:    vpsadbw %ymm4, %ymm1, %ymm1330; AVX512DQ-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm4[0],ymm0[1],ymm4[1],ymm0[4],ymm4[4],ymm0[5],ymm4[5]331; AVX512DQ-NEXT:    vpsadbw %ymm4, %ymm0, %ymm0332; AVX512DQ-NEXT:    vpackuswb %ymm1, %ymm0, %ymm0333; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm3, %zmm0, %zmm0334; AVX512DQ-NEXT:    retq335  %out = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %in, i1 -1)336  ret <16 x i32> %out337}338 339define <32 x i16> @testv32i16(<32 x i16> %in) nounwind {340; AVX512CD-LABEL: testv32i16:341; AVX512CD:       # %bb.0:342; AVX512CD-NEXT:    vextracti64x4 $1, %zmm0, %ymm1343; AVX512CD-NEXT:    vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero344; AVX512CD-NEXT:    vplzcntd %zmm1, %zmm1345; AVX512CD-NEXT:    vpmovdw %zmm1, %ymm1346; AVX512CD-NEXT:    vpbroadcastw {{.*#+}} ymm2 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]347; AVX512CD-NEXT:    vpsubw %ymm2, %ymm1, %ymm1348; AVX512CD-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],zero349; AVX512CD-NEXT:    vplzcntd %zmm0, %zmm0350; AVX512CD-NEXT:    vpmovdw %zmm0, %ymm0351; AVX512CD-NEXT:    vpsubw %ymm2, %ymm0, %ymm0352; AVX512CD-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0353; AVX512CD-NEXT:    retq354;355; AVX512CDBW-LABEL: testv32i16:356; AVX512CDBW:       # %bb.0:357; AVX512CDBW-NEXT:    vpmovzxwd {{.*#+}} zmm1 = 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],zero358; AVX512CDBW-NEXT:    vplzcntd %zmm1, %zmm1359; AVX512CDBW-NEXT:    vpmovdw %zmm1, %ymm1360; AVX512CDBW-NEXT:    vextracti64x4 $1, %zmm0, %ymm0361; AVX512CDBW-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],zero362; AVX512CDBW-NEXT:    vplzcntd %zmm0, %zmm0363; AVX512CDBW-NEXT:    vpmovdw %zmm0, %ymm0364; AVX512CDBW-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0365; AVX512CDBW-NEXT:    vpsubw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0366; AVX512CDBW-NEXT:    retq367;368; AVX512BW-LABEL: testv32i16:369; AVX512BW:       # %bb.0:370; AVX512BW-NEXT:    vpsrlw $4, %zmm0, %zmm1371; AVX512BW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm1, %zmm1372; AVX512BW-NEXT:    vptestnmb %zmm1, %zmm1, %k1373; AVX512BW-NEXT:    vbroadcasti32x4 {{.*#+}} zmm2 = [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,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]374; AVX512BW-NEXT:    # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]375; AVX512BW-NEXT:    vpshufb %zmm0, %zmm2, %zmm3 {%k1} {z}376; AVX512BW-NEXT:    vpshufb %zmm1, %zmm2, %zmm1377; AVX512BW-NEXT:    vpaddb %zmm1, %zmm3, %zmm1378; AVX512BW-NEXT:    vptestnmb %zmm0, %zmm0, %k0379; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0380; AVX512BW-NEXT:    vpsrlw $8, %zmm0, %zmm0381; AVX512BW-NEXT:    vpandq %zmm0, %zmm1, %zmm0382; AVX512BW-NEXT:    vpsrlw $8, %zmm1, %zmm1383; AVX512BW-NEXT:    vpaddw %zmm0, %zmm1, %zmm0384; AVX512BW-NEXT:    retq385;386; AVX512DQ-LABEL: testv32i16:387; AVX512DQ:       # %bb.0:388; AVX512DQ-NEXT:    vextracti64x4 $1, %zmm0, %ymm1389; AVX512DQ-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [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]390; AVX512DQ-NEXT:    # ymm2 = mem[0,1,0,1]391; AVX512DQ-NEXT:    vpshufb %ymm1, %ymm2, %ymm3392; AVX512DQ-NEXT:    vpsrlw $4, %ymm1, %ymm4393; AVX512DQ-NEXT:    vpbroadcastb {{.*#+}} ymm5 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]394; AVX512DQ-NEXT:    vpand %ymm5, %ymm4, %ymm4395; AVX512DQ-NEXT:    vpxor %xmm6, %xmm6, %xmm6396; AVX512DQ-NEXT:    vpcmpeqb %ymm6, %ymm4, %ymm7397; AVX512DQ-NEXT:    vpand %ymm7, %ymm3, %ymm3398; AVX512DQ-NEXT:    vpshufb %ymm4, %ymm2, %ymm4399; AVX512DQ-NEXT:    vpaddb %ymm4, %ymm3, %ymm3400; AVX512DQ-NEXT:    vpcmpeqb %ymm6, %ymm1, %ymm1401; AVX512DQ-NEXT:    vpsrlw $8, %ymm1, %ymm1402; AVX512DQ-NEXT:    vpand %ymm1, %ymm3, %ymm1403; AVX512DQ-NEXT:    vpsrlw $8, %ymm3, %ymm3404; AVX512DQ-NEXT:    vpaddw %ymm1, %ymm3, %ymm1405; AVX512DQ-NEXT:    vpshufb %ymm0, %ymm2, %ymm3406; AVX512DQ-NEXT:    vpsrlw $4, %ymm0, %ymm4407; AVX512DQ-NEXT:    vpand %ymm5, %ymm4, %ymm4408; AVX512DQ-NEXT:    vpcmpeqb %ymm6, %ymm4, %ymm5409; AVX512DQ-NEXT:    vpand %ymm5, %ymm3, %ymm3410; AVX512DQ-NEXT:    vpshufb %ymm4, %ymm2, %ymm2411; AVX512DQ-NEXT:    vpaddb %ymm2, %ymm3, %ymm2412; AVX512DQ-NEXT:    vpcmpeqb %ymm6, %ymm0, %ymm0413; AVX512DQ-NEXT:    vpsrlw $8, %ymm0, %ymm0414; AVX512DQ-NEXT:    vpand %ymm0, %ymm2, %ymm0415; AVX512DQ-NEXT:    vpsrlw $8, %ymm2, %ymm2416; AVX512DQ-NEXT:    vpaddw %ymm0, %ymm2, %ymm0417; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0418; AVX512DQ-NEXT:    retq419  %out = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %in, i1 0)420  ret <32 x i16> %out421}422 423define <32 x i16> @testv32i16u(<32 x i16> %in) nounwind {424; AVX512CD-LABEL: testv32i16u:425; AVX512CD:       # %bb.0:426; AVX512CD-NEXT:    vextracti64x4 $1, %zmm0, %ymm1427; AVX512CD-NEXT:    vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero428; AVX512CD-NEXT:    vplzcntd %zmm1, %zmm1429; AVX512CD-NEXT:    vpmovdw %zmm1, %ymm1430; AVX512CD-NEXT:    vpbroadcastw {{.*#+}} ymm2 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]431; AVX512CD-NEXT:    vpsubw %ymm2, %ymm1, %ymm1432; AVX512CD-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],zero433; AVX512CD-NEXT:    vplzcntd %zmm0, %zmm0434; AVX512CD-NEXT:    vpmovdw %zmm0, %ymm0435; AVX512CD-NEXT:    vpsubw %ymm2, %ymm0, %ymm0436; AVX512CD-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0437; AVX512CD-NEXT:    retq438;439; AVX512CDBW-LABEL: testv32i16u:440; AVX512CDBW:       # %bb.0:441; AVX512CDBW-NEXT:    vpmovzxwd {{.*#+}} zmm1 = 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],zero442; AVX512CDBW-NEXT:    vplzcntd %zmm1, %zmm1443; AVX512CDBW-NEXT:    vpmovdw %zmm1, %ymm1444; AVX512CDBW-NEXT:    vextracti64x4 $1, %zmm0, %ymm0445; AVX512CDBW-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],zero446; AVX512CDBW-NEXT:    vplzcntd %zmm0, %zmm0447; AVX512CDBW-NEXT:    vpmovdw %zmm0, %ymm0448; AVX512CDBW-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0449; AVX512CDBW-NEXT:    vpsubw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0450; AVX512CDBW-NEXT:    retq451;452; AVX512BW-LABEL: testv32i16u:453; AVX512BW:       # %bb.0:454; AVX512BW-NEXT:    vpsrlw $4, %zmm0, %zmm1455; AVX512BW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm1, %zmm1456; AVX512BW-NEXT:    vptestnmb %zmm1, %zmm1, %k1457; AVX512BW-NEXT:    vbroadcasti32x4 {{.*#+}} zmm2 = [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,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]458; AVX512BW-NEXT:    # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]459; AVX512BW-NEXT:    vpshufb %zmm0, %zmm2, %zmm3 {%k1} {z}460; AVX512BW-NEXT:    vpshufb %zmm1, %zmm2, %zmm1461; AVX512BW-NEXT:    vpaddb %zmm1, %zmm3, %zmm1462; AVX512BW-NEXT:    vptestnmb %zmm0, %zmm0, %k0463; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0464; AVX512BW-NEXT:    vpsrlw $8, %zmm0, %zmm0465; AVX512BW-NEXT:    vpandq %zmm0, %zmm1, %zmm0466; AVX512BW-NEXT:    vpsrlw $8, %zmm1, %zmm1467; AVX512BW-NEXT:    vpaddw %zmm0, %zmm1, %zmm0468; AVX512BW-NEXT:    retq469;470; AVX512DQ-LABEL: testv32i16u:471; AVX512DQ:       # %bb.0:472; AVX512DQ-NEXT:    vextracti64x4 $1, %zmm0, %ymm1473; AVX512DQ-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [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]474; AVX512DQ-NEXT:    # ymm2 = mem[0,1,0,1]475; AVX512DQ-NEXT:    vpshufb %ymm1, %ymm2, %ymm3476; AVX512DQ-NEXT:    vpsrlw $4, %ymm1, %ymm4477; AVX512DQ-NEXT:    vpbroadcastb {{.*#+}} ymm5 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]478; AVX512DQ-NEXT:    vpand %ymm5, %ymm4, %ymm4479; AVX512DQ-NEXT:    vpxor %xmm6, %xmm6, %xmm6480; AVX512DQ-NEXT:    vpcmpeqb %ymm6, %ymm4, %ymm7481; AVX512DQ-NEXT:    vpand %ymm7, %ymm3, %ymm3482; AVX512DQ-NEXT:    vpshufb %ymm4, %ymm2, %ymm4483; AVX512DQ-NEXT:    vpaddb %ymm4, %ymm3, %ymm3484; AVX512DQ-NEXT:    vpcmpeqb %ymm6, %ymm1, %ymm1485; AVX512DQ-NEXT:    vpsrlw $8, %ymm1, %ymm1486; AVX512DQ-NEXT:    vpand %ymm1, %ymm3, %ymm1487; AVX512DQ-NEXT:    vpsrlw $8, %ymm3, %ymm3488; AVX512DQ-NEXT:    vpaddw %ymm1, %ymm3, %ymm1489; AVX512DQ-NEXT:    vpshufb %ymm0, %ymm2, %ymm3490; AVX512DQ-NEXT:    vpsrlw $4, %ymm0, %ymm4491; AVX512DQ-NEXT:    vpand %ymm5, %ymm4, %ymm4492; AVX512DQ-NEXT:    vpcmpeqb %ymm6, %ymm4, %ymm5493; AVX512DQ-NEXT:    vpand %ymm5, %ymm3, %ymm3494; AVX512DQ-NEXT:    vpshufb %ymm4, %ymm2, %ymm2495; AVX512DQ-NEXT:    vpaddb %ymm2, %ymm3, %ymm2496; AVX512DQ-NEXT:    vpcmpeqb %ymm6, %ymm0, %ymm0497; AVX512DQ-NEXT:    vpsrlw $8, %ymm0, %ymm0498; AVX512DQ-NEXT:    vpand %ymm0, %ymm2, %ymm0499; AVX512DQ-NEXT:    vpsrlw $8, %ymm2, %ymm2500; AVX512DQ-NEXT:    vpaddw %ymm0, %ymm2, %ymm0501; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0502; AVX512DQ-NEXT:    retq503  %out = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %in, i1 -1)504  ret <32 x i16> %out505}506 507define <64 x i8> @testv64i8(<64 x i8> %in) nounwind {508; AVX512CD-LABEL: testv64i8:509; AVX512CD:       # %bb.0:510; AVX512CD-NEXT:    vextracti64x4 $1, %zmm0, %ymm1511; AVX512CD-NEXT:    vpmovzxbd {{.*#+}} zmm2 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero512; AVX512CD-NEXT:    vplzcntd %zmm2, %zmm2513; AVX512CD-NEXT:    vpmovdb %zmm2, %xmm2514; AVX512CD-NEXT:    vextracti128 $1, %ymm1, %xmm1515; AVX512CD-NEXT:    vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero516; AVX512CD-NEXT:    vplzcntd %zmm1, %zmm1517; AVX512CD-NEXT:    vpmovdb %zmm1, %xmm1518; AVX512CD-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1519; AVX512CD-NEXT:    vpbroadcastb {{.*#+}} ymm2 = [24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24]520; AVX512CD-NEXT:    vpsubb %ymm2, %ymm1, %ymm1521; AVX512CD-NEXT:    vpmovzxbd {{.*#+}} zmm3 = 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,zero522; AVX512CD-NEXT:    vplzcntd %zmm3, %zmm3523; AVX512CD-NEXT:    vpmovdb %zmm3, %xmm3524; AVX512CD-NEXT:    vextracti128 $1, %ymm0, %xmm0525; AVX512CD-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,zero526; AVX512CD-NEXT:    vplzcntd %zmm0, %zmm0527; AVX512CD-NEXT:    vpmovdb %zmm0, %xmm0528; AVX512CD-NEXT:    vinserti128 $1, %xmm0, %ymm3, %ymm0529; AVX512CD-NEXT:    vpsubb %ymm2, %ymm0, %ymm0530; AVX512CD-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0531; AVX512CD-NEXT:    retq532;533; AVX512CDBW-LABEL: testv64i8:534; AVX512CDBW:       # %bb.0:535; AVX512CDBW-NEXT:    vextracti64x4 $1, %zmm0, %ymm1536; AVX512CDBW-NEXT:    vpmovzxbd {{.*#+}} zmm2 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero537; AVX512CDBW-NEXT:    vplzcntd %zmm2, %zmm2538; AVX512CDBW-NEXT:    vpmovdb %zmm2, %xmm2539; AVX512CDBW-NEXT:    vextracti128 $1, %ymm1, %xmm1540; AVX512CDBW-NEXT:    vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero541; AVX512CDBW-NEXT:    vplzcntd %zmm1, %zmm1542; AVX512CDBW-NEXT:    vpmovdb %zmm1, %xmm1543; AVX512CDBW-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1544; AVX512CDBW-NEXT:    vpmovzxbd {{.*#+}} zmm2 = 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,zero545; AVX512CDBW-NEXT:    vplzcntd %zmm2, %zmm2546; AVX512CDBW-NEXT:    vpmovdb %zmm2, %xmm2547; AVX512CDBW-NEXT:    vextracti128 $1, %ymm0, %xmm0548; AVX512CDBW-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,zero549; AVX512CDBW-NEXT:    vplzcntd %zmm0, %zmm0550; AVX512CDBW-NEXT:    vpmovdb %zmm0, %xmm0551; AVX512CDBW-NEXT:    vinserti128 $1, %xmm0, %ymm2, %ymm0552; AVX512CDBW-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0553; AVX512CDBW-NEXT:    vpsubb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0554; AVX512CDBW-NEXT:    retq555;556; AVX512BW-LABEL: testv64i8:557; AVX512BW:       # %bb.0:558; AVX512BW-NEXT:    vpsrlw $4, %zmm0, %zmm1559; AVX512BW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm1, %zmm1560; AVX512BW-NEXT:    vptestnmb %zmm1, %zmm1, %k1561; AVX512BW-NEXT:    vbroadcasti32x4 {{.*#+}} zmm2 = [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,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]562; AVX512BW-NEXT:    # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]563; AVX512BW-NEXT:    vpshufb %zmm0, %zmm2, %zmm0 {%k1} {z}564; AVX512BW-NEXT:    vpshufb %zmm1, %zmm2, %zmm1565; AVX512BW-NEXT:    vpaddb %zmm1, %zmm0, %zmm0566; AVX512BW-NEXT:    retq567;568; AVX512DQ-LABEL: testv64i8:569; AVX512DQ:       # %bb.0:570; AVX512DQ-NEXT:    vextracti64x4 $1, %zmm0, %ymm1571; AVX512DQ-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [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]572; AVX512DQ-NEXT:    # ymm2 = mem[0,1,0,1]573; AVX512DQ-NEXT:    vpshufb %ymm1, %ymm2, %ymm3574; AVX512DQ-NEXT:    vpsrlw $4, %ymm1, %ymm1575; AVX512DQ-NEXT:    vpbroadcastb {{.*#+}} ymm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]576; AVX512DQ-NEXT:    vpand %ymm4, %ymm1, %ymm1577; AVX512DQ-NEXT:    vpxor %xmm5, %xmm5, %xmm5578; AVX512DQ-NEXT:    vpcmpeqb %ymm5, %ymm1, %ymm6579; AVX512DQ-NEXT:    vpand %ymm6, %ymm3, %ymm3580; AVX512DQ-NEXT:    vpshufb %ymm1, %ymm2, %ymm1581; AVX512DQ-NEXT:    vpaddb %ymm1, %ymm3, %ymm1582; AVX512DQ-NEXT:    vpshufb %ymm0, %ymm2, %ymm3583; AVX512DQ-NEXT:    vpsrlw $4, %ymm0, %ymm0584; AVX512DQ-NEXT:    vpand %ymm4, %ymm0, %ymm0585; AVX512DQ-NEXT:    vpcmpeqb %ymm5, %ymm0, %ymm4586; AVX512DQ-NEXT:    vpand %ymm4, %ymm3, %ymm3587; AVX512DQ-NEXT:    vpshufb %ymm0, %ymm2, %ymm0588; AVX512DQ-NEXT:    vpaddb %ymm0, %ymm3, %ymm0589; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0590; AVX512DQ-NEXT:    retq591  %out = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %in, i1 0)592  ret <64 x i8> %out593}594 595define <64 x i8> @testv64i8u(<64 x i8> %in) nounwind {596; AVX512CD-LABEL: testv64i8u:597; AVX512CD:       # %bb.0:598; AVX512CD-NEXT:    vextracti64x4 $1, %zmm0, %ymm1599; AVX512CD-NEXT:    vpmovzxbd {{.*#+}} zmm2 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero600; AVX512CD-NEXT:    vplzcntd %zmm2, %zmm2601; AVX512CD-NEXT:    vpmovdb %zmm2, %xmm2602; AVX512CD-NEXT:    vextracti128 $1, %ymm1, %xmm1603; AVX512CD-NEXT:    vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero604; AVX512CD-NEXT:    vplzcntd %zmm1, %zmm1605; AVX512CD-NEXT:    vpmovdb %zmm1, %xmm1606; AVX512CD-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1607; AVX512CD-NEXT:    vpbroadcastb {{.*#+}} ymm2 = [24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24]608; AVX512CD-NEXT:    vpsubb %ymm2, %ymm1, %ymm1609; AVX512CD-NEXT:    vpmovzxbd {{.*#+}} zmm3 = 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,zero610; AVX512CD-NEXT:    vplzcntd %zmm3, %zmm3611; AVX512CD-NEXT:    vpmovdb %zmm3, %xmm3612; AVX512CD-NEXT:    vextracti128 $1, %ymm0, %xmm0613; AVX512CD-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,zero614; AVX512CD-NEXT:    vplzcntd %zmm0, %zmm0615; AVX512CD-NEXT:    vpmovdb %zmm0, %xmm0616; AVX512CD-NEXT:    vinserti128 $1, %xmm0, %ymm3, %ymm0617; AVX512CD-NEXT:    vpsubb %ymm2, %ymm0, %ymm0618; AVX512CD-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0619; AVX512CD-NEXT:    retq620;621; AVX512CDBW-LABEL: testv64i8u:622; AVX512CDBW:       # %bb.0:623; AVX512CDBW-NEXT:    vextracti64x4 $1, %zmm0, %ymm1624; AVX512CDBW-NEXT:    vpmovzxbd {{.*#+}} zmm2 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero625; AVX512CDBW-NEXT:    vplzcntd %zmm2, %zmm2626; AVX512CDBW-NEXT:    vpmovdb %zmm2, %xmm2627; AVX512CDBW-NEXT:    vextracti128 $1, %ymm1, %xmm1628; AVX512CDBW-NEXT:    vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero629; AVX512CDBW-NEXT:    vplzcntd %zmm1, %zmm1630; AVX512CDBW-NEXT:    vpmovdb %zmm1, %xmm1631; AVX512CDBW-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1632; AVX512CDBW-NEXT:    vpmovzxbd {{.*#+}} zmm2 = 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,zero633; AVX512CDBW-NEXT:    vplzcntd %zmm2, %zmm2634; AVX512CDBW-NEXT:    vpmovdb %zmm2, %xmm2635; AVX512CDBW-NEXT:    vextracti128 $1, %ymm0, %xmm0636; AVX512CDBW-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,zero637; AVX512CDBW-NEXT:    vplzcntd %zmm0, %zmm0638; AVX512CDBW-NEXT:    vpmovdb %zmm0, %xmm0639; AVX512CDBW-NEXT:    vinserti128 $1, %xmm0, %ymm2, %ymm0640; AVX512CDBW-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0641; AVX512CDBW-NEXT:    vpsubb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0642; AVX512CDBW-NEXT:    retq643;644; AVX512BW-LABEL: testv64i8u:645; AVX512BW:       # %bb.0:646; AVX512BW-NEXT:    vpsrlw $4, %zmm0, %zmm1647; AVX512BW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm1, %zmm1648; AVX512BW-NEXT:    vptestnmb %zmm1, %zmm1, %k1649; AVX512BW-NEXT:    vbroadcasti32x4 {{.*#+}} zmm2 = [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,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]650; AVX512BW-NEXT:    # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]651; AVX512BW-NEXT:    vpshufb %zmm0, %zmm2, %zmm0 {%k1} {z}652; AVX512BW-NEXT:    vpshufb %zmm1, %zmm2, %zmm1653; AVX512BW-NEXT:    vpaddb %zmm1, %zmm0, %zmm0654; AVX512BW-NEXT:    retq655;656; AVX512DQ-LABEL: testv64i8u:657; AVX512DQ:       # %bb.0:658; AVX512DQ-NEXT:    vextracti64x4 $1, %zmm0, %ymm1659; AVX512DQ-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [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]660; AVX512DQ-NEXT:    # ymm2 = mem[0,1,0,1]661; AVX512DQ-NEXT:    vpshufb %ymm1, %ymm2, %ymm3662; AVX512DQ-NEXT:    vpsrlw $4, %ymm1, %ymm1663; AVX512DQ-NEXT:    vpbroadcastb {{.*#+}} ymm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]664; AVX512DQ-NEXT:    vpand %ymm4, %ymm1, %ymm1665; AVX512DQ-NEXT:    vpxor %xmm5, %xmm5, %xmm5666; AVX512DQ-NEXT:    vpcmpeqb %ymm5, %ymm1, %ymm6667; AVX512DQ-NEXT:    vpand %ymm6, %ymm3, %ymm3668; AVX512DQ-NEXT:    vpshufb %ymm1, %ymm2, %ymm1669; AVX512DQ-NEXT:    vpaddb %ymm1, %ymm3, %ymm1670; AVX512DQ-NEXT:    vpshufb %ymm0, %ymm2, %ymm3671; AVX512DQ-NEXT:    vpsrlw $4, %ymm0, %ymm0672; AVX512DQ-NEXT:    vpand %ymm4, %ymm0, %ymm0673; AVX512DQ-NEXT:    vpcmpeqb %ymm5, %ymm0, %ymm4674; AVX512DQ-NEXT:    vpand %ymm4, %ymm3, %ymm3675; AVX512DQ-NEXT:    vpshufb %ymm0, %ymm2, %ymm0676; AVX512DQ-NEXT:    vpaddb %ymm0, %ymm3, %ymm0677; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0678; AVX512DQ-NEXT:    retq679  %out = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %in, i1 -1)680  ret <64 x i8> %out681}682 683declare <8 x i64> @llvm.ctlz.v8i64(<8 x i64>, i1)684declare <16 x i32> @llvm.ctlz.v16i32(<16 x i32>, i1)685declare <32 x i16> @llvm.ctlz.v32i16(<32 x i16>, i1)686declare <64 x i8> @llvm.ctlz.v64i8(<64 x i8>, i1)687