brintos

brintos / llvm-project-archived public Read only

0
0
Text · 77.0 KiB · cfb5fac Raw
2050 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefixes=SSE,SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse3 | FileCheck %s --check-prefixes=SSE,SSE34; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefixes=SSE,SSSE35; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE,SSE416; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=NOBW,AVX,AVX1OR27; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=NOBW,AVX,AVX1OR28; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl | FileCheck %s --check-prefixes=NOBW,AVX,AVX512VL9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512bw,+avx512dq | FileCheck %s --check-prefixes=AVX512VLBWDQ10; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq,+avx512cd,+avx512vl | FileCheck %s --check-prefixes=NOBW,AVX512,AVX512VLCD11; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq,+avx512cd | FileCheck %s --check-prefixes=NOBW,AVX512,AVX512CD12;13; Just one 32-bit run to make sure we do reasonable things for i64 lzcnt.14; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=X86-SSE15 16define <2 x i64> @testv2i64(<2 x i64> %in) nounwind {17; SSE2-LABEL: testv2i64:18; SSE2:       # %bb.0:19; SSE2-NEXT:    movdqa %xmm0, %xmm120; SSE2-NEXT:    psrlq $1, %xmm121; SSE2-NEXT:    por %xmm1, %xmm022; SSE2-NEXT:    movdqa %xmm0, %xmm123; SSE2-NEXT:    psrlq $2, %xmm124; SSE2-NEXT:    por %xmm1, %xmm025; SSE2-NEXT:    movdqa %xmm0, %xmm126; SSE2-NEXT:    psrlq $4, %xmm127; SSE2-NEXT:    por %xmm1, %xmm028; SSE2-NEXT:    movdqa %xmm0, %xmm129; SSE2-NEXT:    psrlq $8, %xmm130; SSE2-NEXT:    por %xmm1, %xmm031; SSE2-NEXT:    movdqa %xmm0, %xmm132; SSE2-NEXT:    psrlq $16, %xmm133; SSE2-NEXT:    por %xmm1, %xmm034; SSE2-NEXT:    movdqa %xmm0, %xmm135; SSE2-NEXT:    psrlq $32, %xmm136; SSE2-NEXT:    por %xmm1, %xmm037; SSE2-NEXT:    pcmpeqd %xmm1, %xmm138; SSE2-NEXT:    pxor %xmm1, %xmm039; SSE2-NEXT:    movdqa %xmm0, %xmm140; SSE2-NEXT:    psrlw $1, %xmm141; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm142; SSE2-NEXT:    psubb %xmm1, %xmm043; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]44; SSE2-NEXT:    movdqa %xmm0, %xmm245; SSE2-NEXT:    pand %xmm1, %xmm246; SSE2-NEXT:    psrlw $2, %xmm047; SSE2-NEXT:    pand %xmm1, %xmm048; SSE2-NEXT:    paddb %xmm2, %xmm049; SSE2-NEXT:    movdqa %xmm0, %xmm150; SSE2-NEXT:    psrlw $4, %xmm151; SSE2-NEXT:    paddb %xmm1, %xmm052; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm053; SSE2-NEXT:    pxor %xmm1, %xmm154; SSE2-NEXT:    psadbw %xmm1, %xmm055; SSE2-NEXT:    retq56;57; SSE3-LABEL: testv2i64:58; SSE3:       # %bb.0:59; SSE3-NEXT:    movdqa %xmm0, %xmm160; SSE3-NEXT:    psrlq $1, %xmm161; SSE3-NEXT:    por %xmm1, %xmm062; SSE3-NEXT:    movdqa %xmm0, %xmm163; SSE3-NEXT:    psrlq $2, %xmm164; SSE3-NEXT:    por %xmm1, %xmm065; SSE3-NEXT:    movdqa %xmm0, %xmm166; SSE3-NEXT:    psrlq $4, %xmm167; SSE3-NEXT:    por %xmm1, %xmm068; SSE3-NEXT:    movdqa %xmm0, %xmm169; SSE3-NEXT:    psrlq $8, %xmm170; SSE3-NEXT:    por %xmm1, %xmm071; SSE3-NEXT:    movdqa %xmm0, %xmm172; SSE3-NEXT:    psrlq $16, %xmm173; SSE3-NEXT:    por %xmm1, %xmm074; SSE3-NEXT:    movdqa %xmm0, %xmm175; SSE3-NEXT:    psrlq $32, %xmm176; SSE3-NEXT:    por %xmm1, %xmm077; SSE3-NEXT:    pcmpeqd %xmm1, %xmm178; SSE3-NEXT:    pxor %xmm1, %xmm079; SSE3-NEXT:    movdqa %xmm0, %xmm180; SSE3-NEXT:    psrlw $1, %xmm181; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm182; SSE3-NEXT:    psubb %xmm1, %xmm083; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]84; SSE3-NEXT:    movdqa %xmm0, %xmm285; SSE3-NEXT:    pand %xmm1, %xmm286; SSE3-NEXT:    psrlw $2, %xmm087; SSE3-NEXT:    pand %xmm1, %xmm088; SSE3-NEXT:    paddb %xmm2, %xmm089; SSE3-NEXT:    movdqa %xmm0, %xmm190; SSE3-NEXT:    psrlw $4, %xmm191; SSE3-NEXT:    paddb %xmm1, %xmm092; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm093; SSE3-NEXT:    pxor %xmm1, %xmm194; SSE3-NEXT:    psadbw %xmm1, %xmm095; SSE3-NEXT:    retq96;97; SSSE3-LABEL: testv2i64:98; SSSE3:       # %bb.0:99; SSSE3-NEXT:    movq {{.*#+}} xmm2 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]100; SSSE3-NEXT:    movdqa %xmm2, %xmm3101; SSSE3-NEXT:    pshufb %xmm0, %xmm3102; SSSE3-NEXT:    movdqa %xmm0, %xmm1103; SSSE3-NEXT:    psrlw $4, %xmm1104; SSSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1105; SSSE3-NEXT:    pxor %xmm4, %xmm4106; SSSE3-NEXT:    pshufb %xmm1, %xmm2107; SSSE3-NEXT:    pcmpeqb %xmm4, %xmm1108; SSSE3-NEXT:    pand %xmm3, %xmm1109; SSSE3-NEXT:    paddb %xmm2, %xmm1110; SSSE3-NEXT:    movdqa %xmm0, %xmm2111; SSSE3-NEXT:    pcmpeqb %xmm4, %xmm2112; SSSE3-NEXT:    psrlw $8, %xmm2113; SSSE3-NEXT:    pand %xmm1, %xmm2114; SSSE3-NEXT:    psrlw $8, %xmm1115; SSSE3-NEXT:    paddw %xmm2, %xmm1116; SSSE3-NEXT:    movdqa %xmm0, %xmm2117; SSSE3-NEXT:    pcmpeqw %xmm4, %xmm2118; SSSE3-NEXT:    psrld $16, %xmm2119; SSSE3-NEXT:    pand %xmm1, %xmm2120; SSSE3-NEXT:    psrld $16, %xmm1121; SSSE3-NEXT:    paddd %xmm2, %xmm1122; SSSE3-NEXT:    pcmpeqd %xmm4, %xmm0123; SSSE3-NEXT:    psrlq $32, %xmm0124; SSSE3-NEXT:    pand %xmm1, %xmm0125; SSSE3-NEXT:    psrlq $32, %xmm1126; SSSE3-NEXT:    paddq %xmm1, %xmm0127; SSSE3-NEXT:    retq128;129; SSE41-LABEL: testv2i64:130; SSE41:       # %bb.0:131; SSE41-NEXT:    movq {{.*#+}} xmm2 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]132; SSE41-NEXT:    movdqa %xmm2, %xmm3133; SSE41-NEXT:    pshufb %xmm0, %xmm3134; SSE41-NEXT:    movdqa %xmm0, %xmm1135; SSE41-NEXT:    psrlw $4, %xmm1136; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1137; SSE41-NEXT:    pxor %xmm4, %xmm4138; SSE41-NEXT:    pshufb %xmm1, %xmm2139; SSE41-NEXT:    pcmpeqb %xmm4, %xmm1140; SSE41-NEXT:    pand %xmm3, %xmm1141; SSE41-NEXT:    paddb %xmm2, %xmm1142; SSE41-NEXT:    movdqa %xmm0, %xmm2143; SSE41-NEXT:    pcmpeqb %xmm4, %xmm2144; SSE41-NEXT:    psrlw $8, %xmm2145; SSE41-NEXT:    pand %xmm1, %xmm2146; SSE41-NEXT:    psrlw $8, %xmm1147; SSE41-NEXT:    paddw %xmm2, %xmm1148; SSE41-NEXT:    movdqa %xmm0, %xmm2149; SSE41-NEXT:    pcmpeqw %xmm4, %xmm2150; SSE41-NEXT:    psrld $16, %xmm2151; SSE41-NEXT:    pand %xmm1, %xmm2152; SSE41-NEXT:    psrld $16, %xmm1153; SSE41-NEXT:    paddd %xmm2, %xmm1154; SSE41-NEXT:    pcmpeqd %xmm4, %xmm0155; SSE41-NEXT:    psrlq $32, %xmm0156; SSE41-NEXT:    pand %xmm1, %xmm0157; SSE41-NEXT:    psrlq $32, %xmm1158; SSE41-NEXT:    paddq %xmm1, %xmm0159; SSE41-NEXT:    retq160;161; AVX1OR2-LABEL: testv2i64:162; AVX1OR2:       # %bb.0:163; AVX1OR2-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]164; AVX1OR2-NEXT:    vpshufb %xmm0, %xmm1, %xmm2165; AVX1OR2-NEXT:    vpsrlw $4, %xmm0, %xmm3166; AVX1OR2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm3167; AVX1OR2-NEXT:    vpxor %xmm4, %xmm4, %xmm4168; AVX1OR2-NEXT:    vpcmpeqb %xmm4, %xmm3, %xmm5169; AVX1OR2-NEXT:    vpand %xmm5, %xmm2, %xmm2170; AVX1OR2-NEXT:    vpshufb %xmm3, %xmm1, %xmm1171; AVX1OR2-NEXT:    vpaddb %xmm1, %xmm2, %xmm1172; AVX1OR2-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm2173; AVX1OR2-NEXT:    vpsrlw $8, %xmm2, %xmm2174; AVX1OR2-NEXT:    vpand %xmm2, %xmm1, %xmm2175; AVX1OR2-NEXT:    vpsrlw $8, %xmm1, %xmm1176; AVX1OR2-NEXT:    vpaddw %xmm2, %xmm1, %xmm1177; AVX1OR2-NEXT:    vpcmpeqw %xmm4, %xmm0, %xmm2178; AVX1OR2-NEXT:    vpsrld $16, %xmm2, %xmm2179; AVX1OR2-NEXT:    vpand %xmm2, %xmm1, %xmm2180; AVX1OR2-NEXT:    vpsrld $16, %xmm1, %xmm1181; AVX1OR2-NEXT:    vpaddd %xmm2, %xmm1, %xmm1182; AVX1OR2-NEXT:    vpcmpeqd %xmm4, %xmm0, %xmm0183; AVX1OR2-NEXT:    vpsrlq $32, %xmm0, %xmm0184; AVX1OR2-NEXT:    vpand %xmm0, %xmm1, %xmm0185; AVX1OR2-NEXT:    vpsrlq $32, %xmm1, %xmm1186; AVX1OR2-NEXT:    vpaddq %xmm0, %xmm1, %xmm0187; AVX1OR2-NEXT:    retq188;189; AVX512VL-LABEL: testv2i64:190; AVX512VL:       # %bb.0:191; AVX512VL-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]192; AVX512VL-NEXT:    vpshufb %xmm0, %xmm1, %xmm2193; AVX512VL-NEXT:    vpsrlw $4, %xmm0, %xmm3194; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm3, %xmm3195; AVX512VL-NEXT:    vpxor %xmm4, %xmm4, %xmm4196; AVX512VL-NEXT:    vpcmpeqb %xmm4, %xmm3, %xmm5197; AVX512VL-NEXT:    vpand %xmm5, %xmm2, %xmm2198; AVX512VL-NEXT:    vpshufb %xmm3, %xmm1, %xmm1199; AVX512VL-NEXT:    vpaddb %xmm1, %xmm2, %xmm1200; AVX512VL-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm2201; AVX512VL-NEXT:    vpsrlw $8, %xmm2, %xmm2202; AVX512VL-NEXT:    vpand %xmm2, %xmm1, %xmm2203; AVX512VL-NEXT:    vpsrlw $8, %xmm1, %xmm1204; AVX512VL-NEXT:    vpaddw %xmm2, %xmm1, %xmm1205; AVX512VL-NEXT:    vpcmpeqw %xmm4, %xmm0, %xmm2206; AVX512VL-NEXT:    vpsrld $16, %xmm2, %xmm2207; AVX512VL-NEXT:    vpand %xmm2, %xmm1, %xmm2208; AVX512VL-NEXT:    vpsrld $16, %xmm1, %xmm1209; AVX512VL-NEXT:    vpaddd %xmm2, %xmm1, %xmm1210; AVX512VL-NEXT:    vpcmpeqd %xmm4, %xmm0, %xmm0211; AVX512VL-NEXT:    vpsrlq $32, %xmm0, %xmm0212; AVX512VL-NEXT:    vpand %xmm0, %xmm1, %xmm0213; AVX512VL-NEXT:    vpsrlq $32, %xmm1, %xmm1214; AVX512VL-NEXT:    vpaddq %xmm0, %xmm1, %xmm0215; AVX512VL-NEXT:    retq216;217; AVX512VLBWDQ-LABEL: testv2i64:218; AVX512VLBWDQ:       # %bb.0:219; AVX512VLBWDQ-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]220; AVX512VLBWDQ-NEXT:    vpshufb %xmm0, %xmm1, %xmm2221; AVX512VLBWDQ-NEXT:    vpsrlw $4, %xmm0, %xmm3222; AVX512VLBWDQ-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm3, %xmm3223; AVX512VLBWDQ-NEXT:    vpxor %xmm4, %xmm4, %xmm4224; AVX512VLBWDQ-NEXT:    vpcmpeqb %xmm4, %xmm3, %xmm5225; AVX512VLBWDQ-NEXT:    vpand %xmm5, %xmm2, %xmm2226; AVX512VLBWDQ-NEXT:    vpshufb %xmm3, %xmm1, %xmm1227; AVX512VLBWDQ-NEXT:    vpaddb %xmm1, %xmm2, %xmm1228; AVX512VLBWDQ-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm2229; AVX512VLBWDQ-NEXT:    vpsrlw $8, %xmm2, %xmm2230; AVX512VLBWDQ-NEXT:    vpand %xmm2, %xmm1, %xmm2231; AVX512VLBWDQ-NEXT:    vpsrlw $8, %xmm1, %xmm1232; AVX512VLBWDQ-NEXT:    vpaddw %xmm2, %xmm1, %xmm1233; AVX512VLBWDQ-NEXT:    vpcmpeqw %xmm4, %xmm0, %xmm2234; AVX512VLBWDQ-NEXT:    vpsrld $16, %xmm2, %xmm2235; AVX512VLBWDQ-NEXT:    vpand %xmm2, %xmm1, %xmm2236; AVX512VLBWDQ-NEXT:    vpsrld $16, %xmm1, %xmm1237; AVX512VLBWDQ-NEXT:    vpaddd %xmm2, %xmm1, %xmm1238; AVX512VLBWDQ-NEXT:    vpcmpeqd %xmm4, %xmm0, %xmm0239; AVX512VLBWDQ-NEXT:    vpsrlq $32, %xmm0, %xmm0240; AVX512VLBWDQ-NEXT:    vpand %xmm0, %xmm1, %xmm0241; AVX512VLBWDQ-NEXT:    vpsrlq $32, %xmm1, %xmm1242; AVX512VLBWDQ-NEXT:    vpaddq %xmm0, %xmm1, %xmm0243; AVX512VLBWDQ-NEXT:    retq244;245; AVX512VLCD-LABEL: testv2i64:246; AVX512VLCD:       # %bb.0:247; AVX512VLCD-NEXT:    vplzcntq %xmm0, %xmm0248; AVX512VLCD-NEXT:    retq249;250; AVX512CD-LABEL: testv2i64:251; AVX512CD:       # %bb.0:252; AVX512CD-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0253; AVX512CD-NEXT:    vplzcntq %zmm0, %zmm0254; AVX512CD-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0255; AVX512CD-NEXT:    vzeroupper256; AVX512CD-NEXT:    retq257;258; X86-SSE-LABEL: testv2i64:259; X86-SSE:       # %bb.0:260; X86-SSE-NEXT:    movq {{.*#+}} xmm3 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]261; X86-SSE-NEXT:    movdqa %xmm3, %xmm4262; X86-SSE-NEXT:    pshufb %xmm0, %xmm4263; X86-SSE-NEXT:    movdqa %xmm0, %xmm1264; X86-SSE-NEXT:    psrlw $4, %xmm1265; X86-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1266; X86-SSE-NEXT:    pxor %xmm2, %xmm2267; X86-SSE-NEXT:    pshufb %xmm1, %xmm3268; X86-SSE-NEXT:    pcmpeqb %xmm2, %xmm1269; X86-SSE-NEXT:    pand %xmm4, %xmm1270; X86-SSE-NEXT:    paddb %xmm3, %xmm1271; X86-SSE-NEXT:    movdqa %xmm0, %xmm3272; X86-SSE-NEXT:    pcmpeqb %xmm2, %xmm3273; X86-SSE-NEXT:    psrlw $8, %xmm3274; X86-SSE-NEXT:    pand %xmm1, %xmm3275; X86-SSE-NEXT:    psrlw $8, %xmm1276; X86-SSE-NEXT:    paddw %xmm3, %xmm1277; X86-SSE-NEXT:    movdqa %xmm0, %xmm3278; X86-SSE-NEXT:    pcmpeqw %xmm2, %xmm3279; X86-SSE-NEXT:    psrld $16, %xmm3280; X86-SSE-NEXT:    pand %xmm1, %xmm3281; X86-SSE-NEXT:    psrld $16, %xmm1282; X86-SSE-NEXT:    paddd %xmm3, %xmm1283; X86-SSE-NEXT:    pcmpeqd %xmm2, %xmm0284; X86-SSE-NEXT:    psrlq $32, %xmm0285; X86-SSE-NEXT:    pand %xmm1, %xmm0286; X86-SSE-NEXT:    psrlq $32, %xmm1287; X86-SSE-NEXT:    paddq %xmm1, %xmm0288; X86-SSE-NEXT:    retl289 290  %out = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %in, i1 0)291  ret <2 x i64> %out292}293 294define <2 x i64> @testv2i64u(<2 x i64> %in) nounwind {295; SSE2-LABEL: testv2i64u:296; SSE2:       # %bb.0:297; SSE2-NEXT:    movdqa %xmm0, %xmm1298; SSE2-NEXT:    psrlq $1, %xmm1299; SSE2-NEXT:    por %xmm1, %xmm0300; SSE2-NEXT:    movdqa %xmm0, %xmm1301; SSE2-NEXT:    psrlq $2, %xmm1302; SSE2-NEXT:    por %xmm1, %xmm0303; SSE2-NEXT:    movdqa %xmm0, %xmm1304; SSE2-NEXT:    psrlq $4, %xmm1305; SSE2-NEXT:    por %xmm1, %xmm0306; SSE2-NEXT:    movdqa %xmm0, %xmm1307; SSE2-NEXT:    psrlq $8, %xmm1308; SSE2-NEXT:    por %xmm1, %xmm0309; SSE2-NEXT:    movdqa %xmm0, %xmm1310; SSE2-NEXT:    psrlq $16, %xmm1311; SSE2-NEXT:    por %xmm1, %xmm0312; SSE2-NEXT:    movdqa %xmm0, %xmm1313; SSE2-NEXT:    psrlq $32, %xmm1314; SSE2-NEXT:    por %xmm1, %xmm0315; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1316; SSE2-NEXT:    pxor %xmm1, %xmm0317; SSE2-NEXT:    movdqa %xmm0, %xmm1318; SSE2-NEXT:    psrlw $1, %xmm1319; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1320; SSE2-NEXT:    psubb %xmm1, %xmm0321; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]322; SSE2-NEXT:    movdqa %xmm0, %xmm2323; SSE2-NEXT:    pand %xmm1, %xmm2324; SSE2-NEXT:    psrlw $2, %xmm0325; SSE2-NEXT:    pand %xmm1, %xmm0326; SSE2-NEXT:    paddb %xmm2, %xmm0327; SSE2-NEXT:    movdqa %xmm0, %xmm1328; SSE2-NEXT:    psrlw $4, %xmm1329; SSE2-NEXT:    paddb %xmm1, %xmm0330; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0331; SSE2-NEXT:    pxor %xmm1, %xmm1332; SSE2-NEXT:    psadbw %xmm1, %xmm0333; SSE2-NEXT:    retq334;335; SSE3-LABEL: testv2i64u:336; SSE3:       # %bb.0:337; SSE3-NEXT:    movdqa %xmm0, %xmm1338; SSE3-NEXT:    psrlq $1, %xmm1339; SSE3-NEXT:    por %xmm1, %xmm0340; SSE3-NEXT:    movdqa %xmm0, %xmm1341; SSE3-NEXT:    psrlq $2, %xmm1342; SSE3-NEXT:    por %xmm1, %xmm0343; SSE3-NEXT:    movdqa %xmm0, %xmm1344; SSE3-NEXT:    psrlq $4, %xmm1345; SSE3-NEXT:    por %xmm1, %xmm0346; SSE3-NEXT:    movdqa %xmm0, %xmm1347; SSE3-NEXT:    psrlq $8, %xmm1348; SSE3-NEXT:    por %xmm1, %xmm0349; SSE3-NEXT:    movdqa %xmm0, %xmm1350; SSE3-NEXT:    psrlq $16, %xmm1351; SSE3-NEXT:    por %xmm1, %xmm0352; SSE3-NEXT:    movdqa %xmm0, %xmm1353; SSE3-NEXT:    psrlq $32, %xmm1354; SSE3-NEXT:    por %xmm1, %xmm0355; SSE3-NEXT:    pcmpeqd %xmm1, %xmm1356; SSE3-NEXT:    pxor %xmm1, %xmm0357; SSE3-NEXT:    movdqa %xmm0, %xmm1358; SSE3-NEXT:    psrlw $1, %xmm1359; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1360; SSE3-NEXT:    psubb %xmm1, %xmm0361; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]362; SSE3-NEXT:    movdqa %xmm0, %xmm2363; SSE3-NEXT:    pand %xmm1, %xmm2364; SSE3-NEXT:    psrlw $2, %xmm0365; SSE3-NEXT:    pand %xmm1, %xmm0366; SSE3-NEXT:    paddb %xmm2, %xmm0367; SSE3-NEXT:    movdqa %xmm0, %xmm1368; SSE3-NEXT:    psrlw $4, %xmm1369; SSE3-NEXT:    paddb %xmm1, %xmm0370; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0371; SSE3-NEXT:    pxor %xmm1, %xmm1372; SSE3-NEXT:    psadbw %xmm1, %xmm0373; SSE3-NEXT:    retq374;375; SSSE3-LABEL: testv2i64u:376; SSSE3:       # %bb.0:377; SSSE3-NEXT:    movq {{.*#+}} xmm2 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]378; SSSE3-NEXT:    movdqa %xmm2, %xmm3379; SSSE3-NEXT:    pshufb %xmm0, %xmm3380; SSSE3-NEXT:    movdqa %xmm0, %xmm1381; SSSE3-NEXT:    psrlw $4, %xmm1382; SSSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1383; SSSE3-NEXT:    pxor %xmm4, %xmm4384; SSSE3-NEXT:    pshufb %xmm1, %xmm2385; SSSE3-NEXT:    pcmpeqb %xmm4, %xmm1386; SSSE3-NEXT:    pand %xmm3, %xmm1387; SSSE3-NEXT:    paddb %xmm2, %xmm1388; SSSE3-NEXT:    movdqa %xmm0, %xmm2389; SSSE3-NEXT:    pcmpeqb %xmm4, %xmm2390; SSSE3-NEXT:    psrlw $8, %xmm2391; SSSE3-NEXT:    pand %xmm1, %xmm2392; SSSE3-NEXT:    psrlw $8, %xmm1393; SSSE3-NEXT:    paddw %xmm2, %xmm1394; SSSE3-NEXT:    movdqa %xmm0, %xmm2395; SSSE3-NEXT:    pcmpeqw %xmm4, %xmm2396; SSSE3-NEXT:    psrld $16, %xmm2397; SSSE3-NEXT:    pand %xmm1, %xmm2398; SSSE3-NEXT:    psrld $16, %xmm1399; SSSE3-NEXT:    paddd %xmm2, %xmm1400; SSSE3-NEXT:    pcmpeqd %xmm4, %xmm0401; SSSE3-NEXT:    psrlq $32, %xmm0402; SSSE3-NEXT:    pand %xmm1, %xmm0403; SSSE3-NEXT:    psrlq $32, %xmm1404; SSSE3-NEXT:    paddq %xmm1, %xmm0405; SSSE3-NEXT:    retq406;407; SSE41-LABEL: testv2i64u:408; SSE41:       # %bb.0:409; SSE41-NEXT:    movq {{.*#+}} xmm2 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]410; SSE41-NEXT:    movdqa %xmm2, %xmm3411; SSE41-NEXT:    pshufb %xmm0, %xmm3412; SSE41-NEXT:    movdqa %xmm0, %xmm1413; SSE41-NEXT:    psrlw $4, %xmm1414; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1415; SSE41-NEXT:    pxor %xmm4, %xmm4416; SSE41-NEXT:    pshufb %xmm1, %xmm2417; SSE41-NEXT:    pcmpeqb %xmm4, %xmm1418; SSE41-NEXT:    pand %xmm3, %xmm1419; SSE41-NEXT:    paddb %xmm2, %xmm1420; SSE41-NEXT:    movdqa %xmm0, %xmm2421; SSE41-NEXT:    pcmpeqb %xmm4, %xmm2422; SSE41-NEXT:    psrlw $8, %xmm2423; SSE41-NEXT:    pand %xmm1, %xmm2424; SSE41-NEXT:    psrlw $8, %xmm1425; SSE41-NEXT:    paddw %xmm2, %xmm1426; SSE41-NEXT:    movdqa %xmm0, %xmm2427; SSE41-NEXT:    pcmpeqw %xmm4, %xmm2428; SSE41-NEXT:    psrld $16, %xmm2429; SSE41-NEXT:    pand %xmm1, %xmm2430; SSE41-NEXT:    psrld $16, %xmm1431; SSE41-NEXT:    paddd %xmm2, %xmm1432; SSE41-NEXT:    pcmpeqd %xmm4, %xmm0433; SSE41-NEXT:    psrlq $32, %xmm0434; SSE41-NEXT:    pand %xmm1, %xmm0435; SSE41-NEXT:    psrlq $32, %xmm1436; SSE41-NEXT:    paddq %xmm1, %xmm0437; SSE41-NEXT:    retq438;439; AVX1OR2-LABEL: testv2i64u:440; AVX1OR2:       # %bb.0:441; AVX1OR2-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]442; AVX1OR2-NEXT:    vpshufb %xmm0, %xmm1, %xmm2443; AVX1OR2-NEXT:    vpsrlw $4, %xmm0, %xmm3444; AVX1OR2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm3445; AVX1OR2-NEXT:    vpxor %xmm4, %xmm4, %xmm4446; AVX1OR2-NEXT:    vpcmpeqb %xmm4, %xmm3, %xmm5447; AVX1OR2-NEXT:    vpand %xmm5, %xmm2, %xmm2448; AVX1OR2-NEXT:    vpshufb %xmm3, %xmm1, %xmm1449; AVX1OR2-NEXT:    vpaddb %xmm1, %xmm2, %xmm1450; AVX1OR2-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm2451; AVX1OR2-NEXT:    vpsrlw $8, %xmm2, %xmm2452; AVX1OR2-NEXT:    vpand %xmm2, %xmm1, %xmm2453; AVX1OR2-NEXT:    vpsrlw $8, %xmm1, %xmm1454; AVX1OR2-NEXT:    vpaddw %xmm2, %xmm1, %xmm1455; AVX1OR2-NEXT:    vpcmpeqw %xmm4, %xmm0, %xmm2456; AVX1OR2-NEXT:    vpsrld $16, %xmm2, %xmm2457; AVX1OR2-NEXT:    vpand %xmm2, %xmm1, %xmm2458; AVX1OR2-NEXT:    vpsrld $16, %xmm1, %xmm1459; AVX1OR2-NEXT:    vpaddd %xmm2, %xmm1, %xmm1460; AVX1OR2-NEXT:    vpcmpeqd %xmm4, %xmm0, %xmm0461; AVX1OR2-NEXT:    vpsrlq $32, %xmm0, %xmm0462; AVX1OR2-NEXT:    vpand %xmm0, %xmm1, %xmm0463; AVX1OR2-NEXT:    vpsrlq $32, %xmm1, %xmm1464; AVX1OR2-NEXT:    vpaddq %xmm0, %xmm1, %xmm0465; AVX1OR2-NEXT:    retq466;467; AVX512VL-LABEL: testv2i64u:468; AVX512VL:       # %bb.0:469; AVX512VL-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]470; AVX512VL-NEXT:    vpshufb %xmm0, %xmm1, %xmm2471; AVX512VL-NEXT:    vpsrlw $4, %xmm0, %xmm3472; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm3, %xmm3473; AVX512VL-NEXT:    vpxor %xmm4, %xmm4, %xmm4474; AVX512VL-NEXT:    vpcmpeqb %xmm4, %xmm3, %xmm5475; AVX512VL-NEXT:    vpand %xmm5, %xmm2, %xmm2476; AVX512VL-NEXT:    vpshufb %xmm3, %xmm1, %xmm1477; AVX512VL-NEXT:    vpaddb %xmm1, %xmm2, %xmm1478; AVX512VL-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm2479; AVX512VL-NEXT:    vpsrlw $8, %xmm2, %xmm2480; AVX512VL-NEXT:    vpand %xmm2, %xmm1, %xmm2481; AVX512VL-NEXT:    vpsrlw $8, %xmm1, %xmm1482; AVX512VL-NEXT:    vpaddw %xmm2, %xmm1, %xmm1483; AVX512VL-NEXT:    vpcmpeqw %xmm4, %xmm0, %xmm2484; AVX512VL-NEXT:    vpsrld $16, %xmm2, %xmm2485; AVX512VL-NEXT:    vpand %xmm2, %xmm1, %xmm2486; AVX512VL-NEXT:    vpsrld $16, %xmm1, %xmm1487; AVX512VL-NEXT:    vpaddd %xmm2, %xmm1, %xmm1488; AVX512VL-NEXT:    vpcmpeqd %xmm4, %xmm0, %xmm0489; AVX512VL-NEXT:    vpsrlq $32, %xmm0, %xmm0490; AVX512VL-NEXT:    vpand %xmm0, %xmm1, %xmm0491; AVX512VL-NEXT:    vpsrlq $32, %xmm1, %xmm1492; AVX512VL-NEXT:    vpaddq %xmm0, %xmm1, %xmm0493; AVX512VL-NEXT:    retq494;495; AVX512VLBWDQ-LABEL: testv2i64u:496; AVX512VLBWDQ:       # %bb.0:497; AVX512VLBWDQ-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]498; AVX512VLBWDQ-NEXT:    vpshufb %xmm0, %xmm1, %xmm2499; AVX512VLBWDQ-NEXT:    vpsrlw $4, %xmm0, %xmm3500; AVX512VLBWDQ-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm3, %xmm3501; AVX512VLBWDQ-NEXT:    vpxor %xmm4, %xmm4, %xmm4502; AVX512VLBWDQ-NEXT:    vpcmpeqb %xmm4, %xmm3, %xmm5503; AVX512VLBWDQ-NEXT:    vpand %xmm5, %xmm2, %xmm2504; AVX512VLBWDQ-NEXT:    vpshufb %xmm3, %xmm1, %xmm1505; AVX512VLBWDQ-NEXT:    vpaddb %xmm1, %xmm2, %xmm1506; AVX512VLBWDQ-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm2507; AVX512VLBWDQ-NEXT:    vpsrlw $8, %xmm2, %xmm2508; AVX512VLBWDQ-NEXT:    vpand %xmm2, %xmm1, %xmm2509; AVX512VLBWDQ-NEXT:    vpsrlw $8, %xmm1, %xmm1510; AVX512VLBWDQ-NEXT:    vpaddw %xmm2, %xmm1, %xmm1511; AVX512VLBWDQ-NEXT:    vpcmpeqw %xmm4, %xmm0, %xmm2512; AVX512VLBWDQ-NEXT:    vpsrld $16, %xmm2, %xmm2513; AVX512VLBWDQ-NEXT:    vpand %xmm2, %xmm1, %xmm2514; AVX512VLBWDQ-NEXT:    vpsrld $16, %xmm1, %xmm1515; AVX512VLBWDQ-NEXT:    vpaddd %xmm2, %xmm1, %xmm1516; AVX512VLBWDQ-NEXT:    vpcmpeqd %xmm4, %xmm0, %xmm0517; AVX512VLBWDQ-NEXT:    vpsrlq $32, %xmm0, %xmm0518; AVX512VLBWDQ-NEXT:    vpand %xmm0, %xmm1, %xmm0519; AVX512VLBWDQ-NEXT:    vpsrlq $32, %xmm1, %xmm1520; AVX512VLBWDQ-NEXT:    vpaddq %xmm0, %xmm1, %xmm0521; AVX512VLBWDQ-NEXT:    retq522;523; AVX512VLCD-LABEL: testv2i64u:524; AVX512VLCD:       # %bb.0:525; AVX512VLCD-NEXT:    vplzcntq %xmm0, %xmm0526; AVX512VLCD-NEXT:    retq527;528; AVX512CD-LABEL: testv2i64u:529; AVX512CD:       # %bb.0:530; AVX512CD-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0531; AVX512CD-NEXT:    vplzcntq %zmm0, %zmm0532; AVX512CD-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0533; AVX512CD-NEXT:    vzeroupper534; AVX512CD-NEXT:    retq535;536; X86-SSE-LABEL: testv2i64u:537; X86-SSE:       # %bb.0:538; X86-SSE-NEXT:    movq {{.*#+}} xmm3 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]539; X86-SSE-NEXT:    movdqa %xmm3, %xmm4540; X86-SSE-NEXT:    pshufb %xmm0, %xmm4541; X86-SSE-NEXT:    movdqa %xmm0, %xmm1542; X86-SSE-NEXT:    psrlw $4, %xmm1543; X86-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1544; X86-SSE-NEXT:    pxor %xmm2, %xmm2545; X86-SSE-NEXT:    pshufb %xmm1, %xmm3546; X86-SSE-NEXT:    pcmpeqb %xmm2, %xmm1547; X86-SSE-NEXT:    pand %xmm4, %xmm1548; X86-SSE-NEXT:    paddb %xmm3, %xmm1549; X86-SSE-NEXT:    movdqa %xmm0, %xmm3550; X86-SSE-NEXT:    pcmpeqb %xmm2, %xmm3551; X86-SSE-NEXT:    psrlw $8, %xmm3552; X86-SSE-NEXT:    pand %xmm1, %xmm3553; X86-SSE-NEXT:    psrlw $8, %xmm1554; X86-SSE-NEXT:    paddw %xmm3, %xmm1555; X86-SSE-NEXT:    movdqa %xmm0, %xmm3556; X86-SSE-NEXT:    pcmpeqw %xmm2, %xmm3557; X86-SSE-NEXT:    psrld $16, %xmm3558; X86-SSE-NEXT:    pand %xmm1, %xmm3559; X86-SSE-NEXT:    psrld $16, %xmm1560; X86-SSE-NEXT:    paddd %xmm3, %xmm1561; X86-SSE-NEXT:    pcmpeqd %xmm2, %xmm0562; X86-SSE-NEXT:    psrlq $32, %xmm0563; X86-SSE-NEXT:    pand %xmm1, %xmm0564; X86-SSE-NEXT:    psrlq $32, %xmm1565; X86-SSE-NEXT:    paddq %xmm1, %xmm0566; X86-SSE-NEXT:    retl567 568  %out = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %in, i1 -1)569  ret <2 x i64> %out570}571 572define <4 x i32> @testv4i32(<4 x i32> %in) nounwind {573; SSE2-LABEL: testv4i32:574; SSE2:       # %bb.0:575; SSE2-NEXT:    movdqa %xmm0, %xmm1576; SSE2-NEXT:    psrld $1, %xmm1577; SSE2-NEXT:    por %xmm1, %xmm0578; SSE2-NEXT:    movdqa %xmm0, %xmm1579; SSE2-NEXT:    psrld $2, %xmm1580; SSE2-NEXT:    por %xmm1, %xmm0581; SSE2-NEXT:    movdqa %xmm0, %xmm1582; SSE2-NEXT:    psrld $4, %xmm1583; SSE2-NEXT:    por %xmm1, %xmm0584; SSE2-NEXT:    movdqa %xmm0, %xmm1585; SSE2-NEXT:    psrld $8, %xmm1586; SSE2-NEXT:    por %xmm1, %xmm0587; SSE2-NEXT:    movdqa %xmm0, %xmm1588; SSE2-NEXT:    psrld $16, %xmm1589; SSE2-NEXT:    por %xmm1, %xmm0590; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1591; SSE2-NEXT:    pxor %xmm1, %xmm0592; SSE2-NEXT:    movdqa %xmm0, %xmm1593; SSE2-NEXT:    psrlw $1, %xmm1594; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1595; SSE2-NEXT:    psubb %xmm1, %xmm0596; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]597; SSE2-NEXT:    movdqa %xmm0, %xmm2598; SSE2-NEXT:    pand %xmm1, %xmm2599; SSE2-NEXT:    psrlw $2, %xmm0600; SSE2-NEXT:    pand %xmm1, %xmm0601; SSE2-NEXT:    paddb %xmm2, %xmm0602; SSE2-NEXT:    movdqa %xmm0, %xmm1603; SSE2-NEXT:    psrlw $4, %xmm1604; SSE2-NEXT:    paddb %xmm1, %xmm0605; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0606; SSE2-NEXT:    pxor %xmm1, %xmm1607; SSE2-NEXT:    movdqa %xmm0, %xmm2608; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]609; SSE2-NEXT:    psadbw %xmm1, %xmm2610; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]611; SSE2-NEXT:    psadbw %xmm1, %xmm0612; SSE2-NEXT:    packuswb %xmm2, %xmm0613; SSE2-NEXT:    retq614;615; SSE3-LABEL: testv4i32:616; SSE3:       # %bb.0:617; SSE3-NEXT:    movdqa %xmm0, %xmm1618; SSE3-NEXT:    psrld $1, %xmm1619; SSE3-NEXT:    por %xmm1, %xmm0620; SSE3-NEXT:    movdqa %xmm0, %xmm1621; SSE3-NEXT:    psrld $2, %xmm1622; SSE3-NEXT:    por %xmm1, %xmm0623; SSE3-NEXT:    movdqa %xmm0, %xmm1624; SSE3-NEXT:    psrld $4, %xmm1625; SSE3-NEXT:    por %xmm1, %xmm0626; SSE3-NEXT:    movdqa %xmm0, %xmm1627; SSE3-NEXT:    psrld $8, %xmm1628; SSE3-NEXT:    por %xmm1, %xmm0629; SSE3-NEXT:    movdqa %xmm0, %xmm1630; SSE3-NEXT:    psrld $16, %xmm1631; SSE3-NEXT:    por %xmm1, %xmm0632; SSE3-NEXT:    pcmpeqd %xmm1, %xmm1633; SSE3-NEXT:    pxor %xmm1, %xmm0634; SSE3-NEXT:    movdqa %xmm0, %xmm1635; SSE3-NEXT:    psrlw $1, %xmm1636; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1637; SSE3-NEXT:    psubb %xmm1, %xmm0638; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]639; SSE3-NEXT:    movdqa %xmm0, %xmm2640; SSE3-NEXT:    pand %xmm1, %xmm2641; SSE3-NEXT:    psrlw $2, %xmm0642; SSE3-NEXT:    pand %xmm1, %xmm0643; SSE3-NEXT:    paddb %xmm2, %xmm0644; SSE3-NEXT:    movdqa %xmm0, %xmm1645; SSE3-NEXT:    psrlw $4, %xmm1646; SSE3-NEXT:    paddb %xmm1, %xmm0647; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0648; SSE3-NEXT:    pxor %xmm1, %xmm1649; SSE3-NEXT:    movdqa %xmm0, %xmm2650; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]651; SSE3-NEXT:    psadbw %xmm1, %xmm2652; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]653; SSE3-NEXT:    psadbw %xmm1, %xmm0654; SSE3-NEXT:    packuswb %xmm2, %xmm0655; SSE3-NEXT:    retq656;657; SSSE3-LABEL: testv4i32:658; SSSE3:       # %bb.0:659; SSSE3-NEXT:    movq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]660; SSSE3-NEXT:    movdqa %xmm1, %xmm2661; SSSE3-NEXT:    pshufb %xmm0, %xmm2662; SSSE3-NEXT:    movdqa %xmm0, %xmm3663; SSSE3-NEXT:    psrlw $4, %xmm3664; SSSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3665; SSSE3-NEXT:    pxor %xmm4, %xmm4666; SSSE3-NEXT:    pshufb %xmm3, %xmm1667; SSSE3-NEXT:    pcmpeqb %xmm4, %xmm3668; SSSE3-NEXT:    pand %xmm2, %xmm3669; SSSE3-NEXT:    paddb %xmm1, %xmm3670; SSSE3-NEXT:    movdqa %xmm0, %xmm1671; SSSE3-NEXT:    pcmpeqb %xmm4, %xmm1672; SSSE3-NEXT:    psrlw $8, %xmm1673; SSSE3-NEXT:    pand %xmm3, %xmm1674; SSSE3-NEXT:    psrlw $8, %xmm3675; SSSE3-NEXT:    paddw %xmm1, %xmm3676; SSSE3-NEXT:    pcmpeqw %xmm4, %xmm0677; SSSE3-NEXT:    psrld $16, %xmm0678; SSSE3-NEXT:    pand %xmm3, %xmm0679; SSSE3-NEXT:    psrld $16, %xmm3680; SSSE3-NEXT:    paddd %xmm3, %xmm0681; SSSE3-NEXT:    retq682;683; SSE41-LABEL: testv4i32:684; SSE41:       # %bb.0:685; SSE41-NEXT:    movq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]686; SSE41-NEXT:    movdqa %xmm1, %xmm2687; SSE41-NEXT:    pshufb %xmm0, %xmm2688; SSE41-NEXT:    movdqa %xmm0, %xmm3689; SSE41-NEXT:    psrlw $4, %xmm3690; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3691; SSE41-NEXT:    pxor %xmm4, %xmm4692; SSE41-NEXT:    pshufb %xmm3, %xmm1693; SSE41-NEXT:    pcmpeqb %xmm4, %xmm3694; SSE41-NEXT:    pand %xmm2, %xmm3695; SSE41-NEXT:    paddb %xmm1, %xmm3696; SSE41-NEXT:    movdqa %xmm0, %xmm1697; SSE41-NEXT:    pcmpeqb %xmm4, %xmm1698; SSE41-NEXT:    psrlw $8, %xmm1699; SSE41-NEXT:    pand %xmm3, %xmm1700; SSE41-NEXT:    psrlw $8, %xmm3701; SSE41-NEXT:    paddw %xmm1, %xmm3702; SSE41-NEXT:    pcmpeqw %xmm4, %xmm0703; SSE41-NEXT:    psrld $16, %xmm0704; SSE41-NEXT:    pand %xmm3, %xmm0705; SSE41-NEXT:    psrld $16, %xmm3706; SSE41-NEXT:    paddd %xmm3, %xmm0707; SSE41-NEXT:    retq708;709; AVX1OR2-LABEL: testv4i32:710; AVX1OR2:       # %bb.0:711; AVX1OR2-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]712; AVX1OR2-NEXT:    vpshufb %xmm0, %xmm1, %xmm2713; AVX1OR2-NEXT:    vpsrlw $4, %xmm0, %xmm3714; AVX1OR2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm3715; AVX1OR2-NEXT:    vpxor %xmm4, %xmm4, %xmm4716; AVX1OR2-NEXT:    vpcmpeqb %xmm4, %xmm3, %xmm5717; AVX1OR2-NEXT:    vpand %xmm5, %xmm2, %xmm2718; AVX1OR2-NEXT:    vpshufb %xmm3, %xmm1, %xmm1719; AVX1OR2-NEXT:    vpaddb %xmm1, %xmm2, %xmm1720; AVX1OR2-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm2721; AVX1OR2-NEXT:    vpsrlw $8, %xmm2, %xmm2722; AVX1OR2-NEXT:    vpand %xmm2, %xmm1, %xmm2723; AVX1OR2-NEXT:    vpsrlw $8, %xmm1, %xmm1724; AVX1OR2-NEXT:    vpaddw %xmm2, %xmm1, %xmm1725; AVX1OR2-NEXT:    vpcmpeqw %xmm4, %xmm0, %xmm0726; AVX1OR2-NEXT:    vpsrld $16, %xmm0, %xmm0727; AVX1OR2-NEXT:    vpand %xmm0, %xmm1, %xmm0728; AVX1OR2-NEXT:    vpsrld $16, %xmm1, %xmm1729; AVX1OR2-NEXT:    vpaddd %xmm0, %xmm1, %xmm0730; AVX1OR2-NEXT:    retq731;732; AVX512VL-LABEL: testv4i32:733; AVX512VL:       # %bb.0:734; AVX512VL-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]735; AVX512VL-NEXT:    vpshufb %xmm0, %xmm1, %xmm2736; AVX512VL-NEXT:    vpsrlw $4, %xmm0, %xmm3737; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm3, %xmm3738; AVX512VL-NEXT:    vpxor %xmm4, %xmm4, %xmm4739; AVX512VL-NEXT:    vpcmpeqb %xmm4, %xmm3, %xmm5740; AVX512VL-NEXT:    vpand %xmm5, %xmm2, %xmm2741; AVX512VL-NEXT:    vpshufb %xmm3, %xmm1, %xmm1742; AVX512VL-NEXT:    vpaddb %xmm1, %xmm2, %xmm1743; AVX512VL-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm2744; AVX512VL-NEXT:    vpsrlw $8, %xmm2, %xmm2745; AVX512VL-NEXT:    vpand %xmm2, %xmm1, %xmm2746; AVX512VL-NEXT:    vpsrlw $8, %xmm1, %xmm1747; AVX512VL-NEXT:    vpaddw %xmm2, %xmm1, %xmm1748; AVX512VL-NEXT:    vpcmpeqw %xmm4, %xmm0, %xmm0749; AVX512VL-NEXT:    vpsrld $16, %xmm0, %xmm0750; AVX512VL-NEXT:    vpand %xmm0, %xmm1, %xmm0751; AVX512VL-NEXT:    vpsrld $16, %xmm1, %xmm1752; AVX512VL-NEXT:    vpaddd %xmm0, %xmm1, %xmm0753; AVX512VL-NEXT:    retq754;755; AVX512VLBWDQ-LABEL: testv4i32:756; AVX512VLBWDQ:       # %bb.0:757; AVX512VLBWDQ-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]758; AVX512VLBWDQ-NEXT:    vpshufb %xmm0, %xmm1, %xmm2759; AVX512VLBWDQ-NEXT:    vpsrlw $4, %xmm0, %xmm3760; AVX512VLBWDQ-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm3, %xmm3761; AVX512VLBWDQ-NEXT:    vpxor %xmm4, %xmm4, %xmm4762; AVX512VLBWDQ-NEXT:    vpcmpeqb %xmm4, %xmm3, %xmm5763; AVX512VLBWDQ-NEXT:    vpand %xmm5, %xmm2, %xmm2764; AVX512VLBWDQ-NEXT:    vpshufb %xmm3, %xmm1, %xmm1765; AVX512VLBWDQ-NEXT:    vpaddb %xmm1, %xmm2, %xmm1766; AVX512VLBWDQ-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm2767; AVX512VLBWDQ-NEXT:    vpsrlw $8, %xmm2, %xmm2768; AVX512VLBWDQ-NEXT:    vpand %xmm2, %xmm1, %xmm2769; AVX512VLBWDQ-NEXT:    vpsrlw $8, %xmm1, %xmm1770; AVX512VLBWDQ-NEXT:    vpaddw %xmm2, %xmm1, %xmm1771; AVX512VLBWDQ-NEXT:    vpcmpeqw %xmm4, %xmm0, %xmm0772; AVX512VLBWDQ-NEXT:    vpsrld $16, %xmm0, %xmm0773; AVX512VLBWDQ-NEXT:    vpand %xmm0, %xmm1, %xmm0774; AVX512VLBWDQ-NEXT:    vpsrld $16, %xmm1, %xmm1775; AVX512VLBWDQ-NEXT:    vpaddd %xmm0, %xmm1, %xmm0776; AVX512VLBWDQ-NEXT:    retq777;778; AVX512VLCD-LABEL: testv4i32:779; AVX512VLCD:       # %bb.0:780; AVX512VLCD-NEXT:    vplzcntd %xmm0, %xmm0781; AVX512VLCD-NEXT:    retq782;783; AVX512CD-LABEL: testv4i32:784; AVX512CD:       # %bb.0:785; AVX512CD-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0786; AVX512CD-NEXT:    vplzcntd %zmm0, %zmm0787; AVX512CD-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0788; AVX512CD-NEXT:    vzeroupper789; AVX512CD-NEXT:    retq790;791; X86-SSE-LABEL: testv4i32:792; X86-SSE:       # %bb.0:793; X86-SSE-NEXT:    movq {{.*#+}} xmm3 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]794; X86-SSE-NEXT:    movdqa %xmm3, %xmm4795; X86-SSE-NEXT:    pshufb %xmm0, %xmm4796; X86-SSE-NEXT:    movdqa %xmm0, %xmm1797; X86-SSE-NEXT:    psrlw $4, %xmm1798; X86-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1799; X86-SSE-NEXT:    pxor %xmm2, %xmm2800; X86-SSE-NEXT:    pshufb %xmm1, %xmm3801; X86-SSE-NEXT:    pcmpeqb %xmm2, %xmm1802; X86-SSE-NEXT:    pand %xmm4, %xmm1803; X86-SSE-NEXT:    paddb %xmm3, %xmm1804; X86-SSE-NEXT:    movdqa %xmm0, %xmm3805; X86-SSE-NEXT:    pcmpeqb %xmm2, %xmm3806; X86-SSE-NEXT:    psrlw $8, %xmm3807; X86-SSE-NEXT:    pand %xmm1, %xmm3808; X86-SSE-NEXT:    psrlw $8, %xmm1809; X86-SSE-NEXT:    paddw %xmm3, %xmm1810; X86-SSE-NEXT:    pcmpeqw %xmm2, %xmm0811; X86-SSE-NEXT:    psrld $16, %xmm0812; X86-SSE-NEXT:    pand %xmm1, %xmm0813; X86-SSE-NEXT:    psrld $16, %xmm1814; X86-SSE-NEXT:    paddd %xmm1, %xmm0815; X86-SSE-NEXT:    retl816 817  %out = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %in, i1 0)818  ret <4 x i32> %out819}820 821define <4 x i32> @testv4i32u(<4 x i32> %in) nounwind {822; SSE2-LABEL: testv4i32u:823; SSE2:       # %bb.0:824; SSE2-NEXT:    movdqa %xmm0, %xmm1825; SSE2-NEXT:    psrld $1, %xmm1826; SSE2-NEXT:    por %xmm1, %xmm0827; SSE2-NEXT:    movdqa %xmm0, %xmm1828; SSE2-NEXT:    psrld $2, %xmm1829; SSE2-NEXT:    por %xmm1, %xmm0830; SSE2-NEXT:    movdqa %xmm0, %xmm1831; SSE2-NEXT:    psrld $4, %xmm1832; SSE2-NEXT:    por %xmm1, %xmm0833; SSE2-NEXT:    movdqa %xmm0, %xmm1834; SSE2-NEXT:    psrld $8, %xmm1835; SSE2-NEXT:    por %xmm1, %xmm0836; SSE2-NEXT:    movdqa %xmm0, %xmm1837; SSE2-NEXT:    psrld $16, %xmm1838; SSE2-NEXT:    por %xmm1, %xmm0839; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1840; SSE2-NEXT:    pxor %xmm1, %xmm0841; SSE2-NEXT:    movdqa %xmm0, %xmm1842; SSE2-NEXT:    psrlw $1, %xmm1843; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1844; SSE2-NEXT:    psubb %xmm1, %xmm0845; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]846; SSE2-NEXT:    movdqa %xmm0, %xmm2847; SSE2-NEXT:    pand %xmm1, %xmm2848; SSE2-NEXT:    psrlw $2, %xmm0849; SSE2-NEXT:    pand %xmm1, %xmm0850; SSE2-NEXT:    paddb %xmm2, %xmm0851; SSE2-NEXT:    movdqa %xmm0, %xmm1852; SSE2-NEXT:    psrlw $4, %xmm1853; SSE2-NEXT:    paddb %xmm1, %xmm0854; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0855; SSE2-NEXT:    pxor %xmm1, %xmm1856; SSE2-NEXT:    movdqa %xmm0, %xmm2857; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]858; SSE2-NEXT:    psadbw %xmm1, %xmm2859; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]860; SSE2-NEXT:    psadbw %xmm1, %xmm0861; SSE2-NEXT:    packuswb %xmm2, %xmm0862; SSE2-NEXT:    retq863;864; SSE3-LABEL: testv4i32u:865; SSE3:       # %bb.0:866; SSE3-NEXT:    movdqa %xmm0, %xmm1867; SSE3-NEXT:    psrld $1, %xmm1868; SSE3-NEXT:    por %xmm1, %xmm0869; SSE3-NEXT:    movdqa %xmm0, %xmm1870; SSE3-NEXT:    psrld $2, %xmm1871; SSE3-NEXT:    por %xmm1, %xmm0872; SSE3-NEXT:    movdqa %xmm0, %xmm1873; SSE3-NEXT:    psrld $4, %xmm1874; SSE3-NEXT:    por %xmm1, %xmm0875; SSE3-NEXT:    movdqa %xmm0, %xmm1876; SSE3-NEXT:    psrld $8, %xmm1877; SSE3-NEXT:    por %xmm1, %xmm0878; SSE3-NEXT:    movdqa %xmm0, %xmm1879; SSE3-NEXT:    psrld $16, %xmm1880; SSE3-NEXT:    por %xmm1, %xmm0881; SSE3-NEXT:    pcmpeqd %xmm1, %xmm1882; SSE3-NEXT:    pxor %xmm1, %xmm0883; SSE3-NEXT:    movdqa %xmm0, %xmm1884; SSE3-NEXT:    psrlw $1, %xmm1885; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1886; SSE3-NEXT:    psubb %xmm1, %xmm0887; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]888; SSE3-NEXT:    movdqa %xmm0, %xmm2889; SSE3-NEXT:    pand %xmm1, %xmm2890; SSE3-NEXT:    psrlw $2, %xmm0891; SSE3-NEXT:    pand %xmm1, %xmm0892; SSE3-NEXT:    paddb %xmm2, %xmm0893; SSE3-NEXT:    movdqa %xmm0, %xmm1894; SSE3-NEXT:    psrlw $4, %xmm1895; SSE3-NEXT:    paddb %xmm1, %xmm0896; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0897; SSE3-NEXT:    pxor %xmm1, %xmm1898; SSE3-NEXT:    movdqa %xmm0, %xmm2899; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]900; SSE3-NEXT:    psadbw %xmm1, %xmm2901; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]902; SSE3-NEXT:    psadbw %xmm1, %xmm0903; SSE3-NEXT:    packuswb %xmm2, %xmm0904; SSE3-NEXT:    retq905;906; SSSE3-LABEL: testv4i32u:907; SSSE3:       # %bb.0:908; SSSE3-NEXT:    movq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]909; SSSE3-NEXT:    movdqa %xmm1, %xmm2910; SSSE3-NEXT:    pshufb %xmm0, %xmm2911; SSSE3-NEXT:    movdqa %xmm0, %xmm3912; SSSE3-NEXT:    psrlw $4, %xmm3913; SSSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3914; SSSE3-NEXT:    pxor %xmm4, %xmm4915; SSSE3-NEXT:    pshufb %xmm3, %xmm1916; SSSE3-NEXT:    pcmpeqb %xmm4, %xmm3917; SSSE3-NEXT:    pand %xmm2, %xmm3918; SSSE3-NEXT:    paddb %xmm1, %xmm3919; SSSE3-NEXT:    movdqa %xmm0, %xmm1920; SSSE3-NEXT:    pcmpeqb %xmm4, %xmm1921; SSSE3-NEXT:    psrlw $8, %xmm1922; SSSE3-NEXT:    pand %xmm3, %xmm1923; SSSE3-NEXT:    psrlw $8, %xmm3924; SSSE3-NEXT:    paddw %xmm1, %xmm3925; SSSE3-NEXT:    pcmpeqw %xmm4, %xmm0926; SSSE3-NEXT:    psrld $16, %xmm0927; SSSE3-NEXT:    pand %xmm3, %xmm0928; SSSE3-NEXT:    psrld $16, %xmm3929; SSSE3-NEXT:    paddd %xmm3, %xmm0930; SSSE3-NEXT:    retq931;932; SSE41-LABEL: testv4i32u:933; SSE41:       # %bb.0:934; SSE41-NEXT:    movq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]935; SSE41-NEXT:    movdqa %xmm1, %xmm2936; SSE41-NEXT:    pshufb %xmm0, %xmm2937; SSE41-NEXT:    movdqa %xmm0, %xmm3938; SSE41-NEXT:    psrlw $4, %xmm3939; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3940; SSE41-NEXT:    pxor %xmm4, %xmm4941; SSE41-NEXT:    pshufb %xmm3, %xmm1942; SSE41-NEXT:    pcmpeqb %xmm4, %xmm3943; SSE41-NEXT:    pand %xmm2, %xmm3944; SSE41-NEXT:    paddb %xmm1, %xmm3945; SSE41-NEXT:    movdqa %xmm0, %xmm1946; SSE41-NEXT:    pcmpeqb %xmm4, %xmm1947; SSE41-NEXT:    psrlw $8, %xmm1948; SSE41-NEXT:    pand %xmm3, %xmm1949; SSE41-NEXT:    psrlw $8, %xmm3950; SSE41-NEXT:    paddw %xmm1, %xmm3951; SSE41-NEXT:    pcmpeqw %xmm4, %xmm0952; SSE41-NEXT:    psrld $16, %xmm0953; SSE41-NEXT:    pand %xmm3, %xmm0954; SSE41-NEXT:    psrld $16, %xmm3955; SSE41-NEXT:    paddd %xmm3, %xmm0956; SSE41-NEXT:    retq957;958; AVX1OR2-LABEL: testv4i32u:959; AVX1OR2:       # %bb.0:960; AVX1OR2-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]961; AVX1OR2-NEXT:    vpshufb %xmm0, %xmm1, %xmm2962; AVX1OR2-NEXT:    vpsrlw $4, %xmm0, %xmm3963; AVX1OR2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm3964; AVX1OR2-NEXT:    vpxor %xmm4, %xmm4, %xmm4965; AVX1OR2-NEXT:    vpcmpeqb %xmm4, %xmm3, %xmm5966; AVX1OR2-NEXT:    vpand %xmm5, %xmm2, %xmm2967; AVX1OR2-NEXT:    vpshufb %xmm3, %xmm1, %xmm1968; AVX1OR2-NEXT:    vpaddb %xmm1, %xmm2, %xmm1969; AVX1OR2-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm2970; AVX1OR2-NEXT:    vpsrlw $8, %xmm2, %xmm2971; AVX1OR2-NEXT:    vpand %xmm2, %xmm1, %xmm2972; AVX1OR2-NEXT:    vpsrlw $8, %xmm1, %xmm1973; AVX1OR2-NEXT:    vpaddw %xmm2, %xmm1, %xmm1974; AVX1OR2-NEXT:    vpcmpeqw %xmm4, %xmm0, %xmm0975; AVX1OR2-NEXT:    vpsrld $16, %xmm0, %xmm0976; AVX1OR2-NEXT:    vpand %xmm0, %xmm1, %xmm0977; AVX1OR2-NEXT:    vpsrld $16, %xmm1, %xmm1978; AVX1OR2-NEXT:    vpaddd %xmm0, %xmm1, %xmm0979; AVX1OR2-NEXT:    retq980;981; AVX512VL-LABEL: testv4i32u:982; AVX512VL:       # %bb.0:983; AVX512VL-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]984; AVX512VL-NEXT:    vpshufb %xmm0, %xmm1, %xmm2985; AVX512VL-NEXT:    vpsrlw $4, %xmm0, %xmm3986; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm3, %xmm3987; AVX512VL-NEXT:    vpxor %xmm4, %xmm4, %xmm4988; AVX512VL-NEXT:    vpcmpeqb %xmm4, %xmm3, %xmm5989; AVX512VL-NEXT:    vpand %xmm5, %xmm2, %xmm2990; AVX512VL-NEXT:    vpshufb %xmm3, %xmm1, %xmm1991; AVX512VL-NEXT:    vpaddb %xmm1, %xmm2, %xmm1992; AVX512VL-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm2993; AVX512VL-NEXT:    vpsrlw $8, %xmm2, %xmm2994; AVX512VL-NEXT:    vpand %xmm2, %xmm1, %xmm2995; AVX512VL-NEXT:    vpsrlw $8, %xmm1, %xmm1996; AVX512VL-NEXT:    vpaddw %xmm2, %xmm1, %xmm1997; AVX512VL-NEXT:    vpcmpeqw %xmm4, %xmm0, %xmm0998; AVX512VL-NEXT:    vpsrld $16, %xmm0, %xmm0999; AVX512VL-NEXT:    vpand %xmm0, %xmm1, %xmm01000; AVX512VL-NEXT:    vpsrld $16, %xmm1, %xmm11001; AVX512VL-NEXT:    vpaddd %xmm0, %xmm1, %xmm01002; AVX512VL-NEXT:    retq1003;1004; AVX512VLBWDQ-LABEL: testv4i32u:1005; AVX512VLBWDQ:       # %bb.0:1006; AVX512VLBWDQ-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1007; AVX512VLBWDQ-NEXT:    vpshufb %xmm0, %xmm1, %xmm21008; AVX512VLBWDQ-NEXT:    vpsrlw $4, %xmm0, %xmm31009; AVX512VLBWDQ-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm3, %xmm31010; AVX512VLBWDQ-NEXT:    vpxor %xmm4, %xmm4, %xmm41011; AVX512VLBWDQ-NEXT:    vpcmpeqb %xmm4, %xmm3, %xmm51012; AVX512VLBWDQ-NEXT:    vpand %xmm5, %xmm2, %xmm21013; AVX512VLBWDQ-NEXT:    vpshufb %xmm3, %xmm1, %xmm11014; AVX512VLBWDQ-NEXT:    vpaddb %xmm1, %xmm2, %xmm11015; AVX512VLBWDQ-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm21016; AVX512VLBWDQ-NEXT:    vpsrlw $8, %xmm2, %xmm21017; AVX512VLBWDQ-NEXT:    vpand %xmm2, %xmm1, %xmm21018; AVX512VLBWDQ-NEXT:    vpsrlw $8, %xmm1, %xmm11019; AVX512VLBWDQ-NEXT:    vpaddw %xmm2, %xmm1, %xmm11020; AVX512VLBWDQ-NEXT:    vpcmpeqw %xmm4, %xmm0, %xmm01021; AVX512VLBWDQ-NEXT:    vpsrld $16, %xmm0, %xmm01022; AVX512VLBWDQ-NEXT:    vpand %xmm0, %xmm1, %xmm01023; AVX512VLBWDQ-NEXT:    vpsrld $16, %xmm1, %xmm11024; AVX512VLBWDQ-NEXT:    vpaddd %xmm0, %xmm1, %xmm01025; AVX512VLBWDQ-NEXT:    retq1026;1027; AVX512VLCD-LABEL: testv4i32u:1028; AVX512VLCD:       # %bb.0:1029; AVX512VLCD-NEXT:    vplzcntd %xmm0, %xmm01030; AVX512VLCD-NEXT:    retq1031;1032; AVX512CD-LABEL: testv4i32u:1033; AVX512CD:       # %bb.0:1034; AVX512CD-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01035; AVX512CD-NEXT:    vplzcntd %zmm0, %zmm01036; AVX512CD-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01037; AVX512CD-NEXT:    vzeroupper1038; AVX512CD-NEXT:    retq1039;1040; X86-SSE-LABEL: testv4i32u:1041; X86-SSE:       # %bb.0:1042; X86-SSE-NEXT:    movq {{.*#+}} xmm3 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1043; X86-SSE-NEXT:    movdqa %xmm3, %xmm41044; X86-SSE-NEXT:    pshufb %xmm0, %xmm41045; X86-SSE-NEXT:    movdqa %xmm0, %xmm11046; X86-SSE-NEXT:    psrlw $4, %xmm11047; X86-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm11048; X86-SSE-NEXT:    pxor %xmm2, %xmm21049; X86-SSE-NEXT:    pshufb %xmm1, %xmm31050; X86-SSE-NEXT:    pcmpeqb %xmm2, %xmm11051; X86-SSE-NEXT:    pand %xmm4, %xmm11052; X86-SSE-NEXT:    paddb %xmm3, %xmm11053; X86-SSE-NEXT:    movdqa %xmm0, %xmm31054; X86-SSE-NEXT:    pcmpeqb %xmm2, %xmm31055; X86-SSE-NEXT:    psrlw $8, %xmm31056; X86-SSE-NEXT:    pand %xmm1, %xmm31057; X86-SSE-NEXT:    psrlw $8, %xmm11058; X86-SSE-NEXT:    paddw %xmm3, %xmm11059; X86-SSE-NEXT:    pcmpeqw %xmm2, %xmm01060; X86-SSE-NEXT:    psrld $16, %xmm01061; X86-SSE-NEXT:    pand %xmm1, %xmm01062; X86-SSE-NEXT:    psrld $16, %xmm11063; X86-SSE-NEXT:    paddd %xmm1, %xmm01064; X86-SSE-NEXT:    retl1065 1066  %out = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %in, i1 -1)1067  ret <4 x i32> %out1068}1069 1070define <8 x i16> @testv8i16(<8 x i16> %in) nounwind {1071; SSE2-LABEL: testv8i16:1072; SSE2:       # %bb.0:1073; SSE2-NEXT:    movdqa %xmm0, %xmm11074; SSE2-NEXT:    psrlw $1, %xmm11075; SSE2-NEXT:    por %xmm1, %xmm01076; SSE2-NEXT:    movdqa %xmm0, %xmm11077; SSE2-NEXT:    psrlw $2, %xmm11078; SSE2-NEXT:    por %xmm1, %xmm01079; SSE2-NEXT:    movdqa %xmm0, %xmm11080; SSE2-NEXT:    psrlw $4, %xmm11081; SSE2-NEXT:    por %xmm1, %xmm01082; SSE2-NEXT:    movdqa %xmm0, %xmm11083; SSE2-NEXT:    psrlw $8, %xmm11084; SSE2-NEXT:    por %xmm1, %xmm01085; SSE2-NEXT:    pcmpeqd %xmm1, %xmm11086; SSE2-NEXT:    pxor %xmm1, %xmm01087; SSE2-NEXT:    movdqa %xmm0, %xmm11088; SSE2-NEXT:    psrlw $1, %xmm11089; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11090; SSE2-NEXT:    psubb %xmm1, %xmm01091; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]1092; SSE2-NEXT:    movdqa %xmm0, %xmm21093; SSE2-NEXT:    pand %xmm1, %xmm21094; SSE2-NEXT:    psrlw $2, %xmm01095; SSE2-NEXT:    pand %xmm1, %xmm01096; SSE2-NEXT:    paddb %xmm2, %xmm01097; SSE2-NEXT:    movdqa %xmm0, %xmm11098; SSE2-NEXT:    psrlw $4, %xmm11099; SSE2-NEXT:    paddb %xmm1, %xmm01100; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01101; SSE2-NEXT:    movdqa %xmm0, %xmm11102; SSE2-NEXT:    psllw $8, %xmm11103; SSE2-NEXT:    paddb %xmm1, %xmm01104; SSE2-NEXT:    psrlw $8, %xmm01105; SSE2-NEXT:    retq1106;1107; SSE3-LABEL: testv8i16:1108; SSE3:       # %bb.0:1109; SSE3-NEXT:    movdqa %xmm0, %xmm11110; SSE3-NEXT:    psrlw $1, %xmm11111; SSE3-NEXT:    por %xmm1, %xmm01112; SSE3-NEXT:    movdqa %xmm0, %xmm11113; SSE3-NEXT:    psrlw $2, %xmm11114; SSE3-NEXT:    por %xmm1, %xmm01115; SSE3-NEXT:    movdqa %xmm0, %xmm11116; SSE3-NEXT:    psrlw $4, %xmm11117; SSE3-NEXT:    por %xmm1, %xmm01118; SSE3-NEXT:    movdqa %xmm0, %xmm11119; SSE3-NEXT:    psrlw $8, %xmm11120; SSE3-NEXT:    por %xmm1, %xmm01121; SSE3-NEXT:    pcmpeqd %xmm1, %xmm11122; SSE3-NEXT:    pxor %xmm1, %xmm01123; SSE3-NEXT:    movdqa %xmm0, %xmm11124; SSE3-NEXT:    psrlw $1, %xmm11125; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11126; SSE3-NEXT:    psubb %xmm1, %xmm01127; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]1128; SSE3-NEXT:    movdqa %xmm0, %xmm21129; SSE3-NEXT:    pand %xmm1, %xmm21130; SSE3-NEXT:    psrlw $2, %xmm01131; SSE3-NEXT:    pand %xmm1, %xmm01132; SSE3-NEXT:    paddb %xmm2, %xmm01133; SSE3-NEXT:    movdqa %xmm0, %xmm11134; SSE3-NEXT:    psrlw $4, %xmm11135; SSE3-NEXT:    paddb %xmm1, %xmm01136; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01137; SSE3-NEXT:    movdqa %xmm0, %xmm11138; SSE3-NEXT:    psllw $8, %xmm11139; SSE3-NEXT:    paddb %xmm1, %xmm01140; SSE3-NEXT:    psrlw $8, %xmm01141; SSE3-NEXT:    retq1142;1143; SSSE3-LABEL: testv8i16:1144; SSSE3:       # %bb.0:1145; SSSE3-NEXT:    movq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1146; SSSE3-NEXT:    movdqa %xmm1, %xmm21147; SSSE3-NEXT:    pshufb %xmm0, %xmm21148; SSSE3-NEXT:    movdqa %xmm0, %xmm31149; SSSE3-NEXT:    psrlw $4, %xmm31150; SSSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm31151; SSSE3-NEXT:    pxor %xmm4, %xmm41152; SSSE3-NEXT:    pshufb %xmm3, %xmm11153; SSSE3-NEXT:    pcmpeqb %xmm4, %xmm31154; SSSE3-NEXT:    pand %xmm2, %xmm31155; SSSE3-NEXT:    paddb %xmm1, %xmm31156; SSSE3-NEXT:    pcmpeqb %xmm4, %xmm01157; SSSE3-NEXT:    psrlw $8, %xmm01158; SSSE3-NEXT:    pand %xmm3, %xmm01159; SSSE3-NEXT:    psrlw $8, %xmm31160; SSSE3-NEXT:    paddw %xmm3, %xmm01161; SSSE3-NEXT:    retq1162;1163; SSE41-LABEL: testv8i16:1164; SSE41:       # %bb.0:1165; SSE41-NEXT:    movq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1166; SSE41-NEXT:    movdqa %xmm1, %xmm21167; SSE41-NEXT:    pshufb %xmm0, %xmm21168; SSE41-NEXT:    movdqa %xmm0, %xmm31169; SSE41-NEXT:    psrlw $4, %xmm31170; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm31171; SSE41-NEXT:    pxor %xmm4, %xmm41172; SSE41-NEXT:    pshufb %xmm3, %xmm11173; SSE41-NEXT:    pcmpeqb %xmm4, %xmm31174; SSE41-NEXT:    pand %xmm2, %xmm31175; SSE41-NEXT:    paddb %xmm1, %xmm31176; SSE41-NEXT:    pcmpeqb %xmm4, %xmm01177; SSE41-NEXT:    psrlw $8, %xmm01178; SSE41-NEXT:    pand %xmm3, %xmm01179; SSE41-NEXT:    psrlw $8, %xmm31180; SSE41-NEXT:    paddw %xmm3, %xmm01181; SSE41-NEXT:    retq1182;1183; AVX1OR2-LABEL: testv8i16:1184; AVX1OR2:       # %bb.0:1185; AVX1OR2-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1186; AVX1OR2-NEXT:    vpshufb %xmm0, %xmm1, %xmm21187; AVX1OR2-NEXT:    vpsrlw $4, %xmm0, %xmm31188; AVX1OR2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm31189; AVX1OR2-NEXT:    vpxor %xmm4, %xmm4, %xmm41190; AVX1OR2-NEXT:    vpcmpeqb %xmm4, %xmm3, %xmm51191; AVX1OR2-NEXT:    vpand %xmm5, %xmm2, %xmm21192; AVX1OR2-NEXT:    vpshufb %xmm3, %xmm1, %xmm11193; AVX1OR2-NEXT:    vpaddb %xmm1, %xmm2, %xmm11194; AVX1OR2-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm01195; AVX1OR2-NEXT:    vpsrlw $8, %xmm0, %xmm01196; AVX1OR2-NEXT:    vpand %xmm0, %xmm1, %xmm01197; AVX1OR2-NEXT:    vpsrlw $8, %xmm1, %xmm11198; AVX1OR2-NEXT:    vpaddw %xmm0, %xmm1, %xmm01199; AVX1OR2-NEXT:    retq1200;1201; AVX512VL-LABEL: testv8i16:1202; AVX512VL:       # %bb.0:1203; AVX512VL-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1204; AVX512VL-NEXT:    vpshufb %xmm0, %xmm1, %xmm21205; AVX512VL-NEXT:    vpsrlw $4, %xmm0, %xmm31206; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm3, %xmm31207; AVX512VL-NEXT:    vpxor %xmm4, %xmm4, %xmm41208; AVX512VL-NEXT:    vpcmpeqb %xmm4, %xmm3, %xmm51209; AVX512VL-NEXT:    vpand %xmm5, %xmm2, %xmm21210; AVX512VL-NEXT:    vpshufb %xmm3, %xmm1, %xmm11211; AVX512VL-NEXT:    vpaddb %xmm1, %xmm2, %xmm11212; AVX512VL-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm01213; AVX512VL-NEXT:    vpsrlw $8, %xmm0, %xmm01214; AVX512VL-NEXT:    vpand %xmm0, %xmm1, %xmm01215; AVX512VL-NEXT:    vpsrlw $8, %xmm1, %xmm11216; AVX512VL-NEXT:    vpaddw %xmm0, %xmm1, %xmm01217; AVX512VL-NEXT:    retq1218;1219; AVX512VLBWDQ-LABEL: testv8i16:1220; AVX512VLBWDQ:       # %bb.0:1221; AVX512VLBWDQ-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1222; AVX512VLBWDQ-NEXT:    vpshufb %xmm0, %xmm1, %xmm21223; AVX512VLBWDQ-NEXT:    vpsrlw $4, %xmm0, %xmm31224; AVX512VLBWDQ-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm3, %xmm31225; AVX512VLBWDQ-NEXT:    vpxor %xmm4, %xmm4, %xmm41226; AVX512VLBWDQ-NEXT:    vpcmpeqb %xmm4, %xmm3, %xmm51227; AVX512VLBWDQ-NEXT:    vpand %xmm5, %xmm2, %xmm21228; AVX512VLBWDQ-NEXT:    vpshufb %xmm3, %xmm1, %xmm11229; AVX512VLBWDQ-NEXT:    vpaddb %xmm1, %xmm2, %xmm11230; AVX512VLBWDQ-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm01231; AVX512VLBWDQ-NEXT:    vpsrlw $8, %xmm0, %xmm01232; AVX512VLBWDQ-NEXT:    vpand %xmm0, %xmm1, %xmm01233; AVX512VLBWDQ-NEXT:    vpsrlw $8, %xmm1, %xmm11234; AVX512VLBWDQ-NEXT:    vpaddw %xmm0, %xmm1, %xmm01235; AVX512VLBWDQ-NEXT:    retq1236;1237; AVX512VLCD-LABEL: testv8i16:1238; AVX512VLCD:       # %bb.0:1239; AVX512VLCD-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],zero1240; AVX512VLCD-NEXT:    vplzcntd %ymm0, %ymm01241; AVX512VLCD-NEXT:    vpmovdw %ymm0, %xmm01242; AVX512VLCD-NEXT:    vpsubw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01243; AVX512VLCD-NEXT:    vzeroupper1244; AVX512VLCD-NEXT:    retq1245;1246; AVX512CD-LABEL: testv8i16:1247; AVX512CD:       # %bb.0:1248; AVX512CD-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],zero1249; AVX512CD-NEXT:    vplzcntd %zmm0, %zmm01250; AVX512CD-NEXT:    vpmovdw %zmm0, %ymm01251; AVX512CD-NEXT:    vpsubw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01252; AVX512CD-NEXT:    vzeroupper1253; AVX512CD-NEXT:    retq1254;1255; X86-SSE-LABEL: testv8i16:1256; X86-SSE:       # %bb.0:1257; X86-SSE-NEXT:    movq {{.*#+}} xmm2 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1258; X86-SSE-NEXT:    movdqa %xmm2, %xmm31259; X86-SSE-NEXT:    pshufb %xmm0, %xmm31260; X86-SSE-NEXT:    movdqa %xmm0, %xmm11261; X86-SSE-NEXT:    psrlw $4, %xmm11262; X86-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm11263; X86-SSE-NEXT:    pxor %xmm4, %xmm41264; X86-SSE-NEXT:    pshufb %xmm1, %xmm21265; X86-SSE-NEXT:    pcmpeqb %xmm4, %xmm11266; X86-SSE-NEXT:    pand %xmm3, %xmm11267; X86-SSE-NEXT:    paddb %xmm2, %xmm11268; X86-SSE-NEXT:    pcmpeqb %xmm4, %xmm01269; X86-SSE-NEXT:    psrlw $8, %xmm01270; X86-SSE-NEXT:    pand %xmm1, %xmm01271; X86-SSE-NEXT:    psrlw $8, %xmm11272; X86-SSE-NEXT:    paddw %xmm1, %xmm01273; X86-SSE-NEXT:    retl1274  %out = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %in, i1 0)1275  ret <8 x i16> %out1276}1277 1278define <8 x i16> @testv8i16u(<8 x i16> %in) nounwind {1279; SSE2-LABEL: testv8i16u:1280; SSE2:       # %bb.0:1281; SSE2-NEXT:    movdqa %xmm0, %xmm11282; SSE2-NEXT:    psrlw $1, %xmm11283; SSE2-NEXT:    por %xmm1, %xmm01284; SSE2-NEXT:    movdqa %xmm0, %xmm11285; SSE2-NEXT:    psrlw $2, %xmm11286; SSE2-NEXT:    por %xmm1, %xmm01287; SSE2-NEXT:    movdqa %xmm0, %xmm11288; SSE2-NEXT:    psrlw $4, %xmm11289; SSE2-NEXT:    por %xmm1, %xmm01290; SSE2-NEXT:    movdqa %xmm0, %xmm11291; SSE2-NEXT:    psrlw $8, %xmm11292; SSE2-NEXT:    por %xmm1, %xmm01293; SSE2-NEXT:    pcmpeqd %xmm1, %xmm11294; SSE2-NEXT:    pxor %xmm1, %xmm01295; SSE2-NEXT:    movdqa %xmm0, %xmm11296; SSE2-NEXT:    psrlw $1, %xmm11297; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11298; SSE2-NEXT:    psubb %xmm1, %xmm01299; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]1300; SSE2-NEXT:    movdqa %xmm0, %xmm21301; SSE2-NEXT:    pand %xmm1, %xmm21302; SSE2-NEXT:    psrlw $2, %xmm01303; SSE2-NEXT:    pand %xmm1, %xmm01304; SSE2-NEXT:    paddb %xmm2, %xmm01305; SSE2-NEXT:    movdqa %xmm0, %xmm11306; SSE2-NEXT:    psrlw $4, %xmm11307; SSE2-NEXT:    paddb %xmm1, %xmm01308; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01309; SSE2-NEXT:    movdqa %xmm0, %xmm11310; SSE2-NEXT:    psllw $8, %xmm11311; SSE2-NEXT:    paddb %xmm1, %xmm01312; SSE2-NEXT:    psrlw $8, %xmm01313; SSE2-NEXT:    retq1314;1315; SSE3-LABEL: testv8i16u:1316; SSE3:       # %bb.0:1317; SSE3-NEXT:    movdqa %xmm0, %xmm11318; SSE3-NEXT:    psrlw $1, %xmm11319; SSE3-NEXT:    por %xmm1, %xmm01320; SSE3-NEXT:    movdqa %xmm0, %xmm11321; SSE3-NEXT:    psrlw $2, %xmm11322; SSE3-NEXT:    por %xmm1, %xmm01323; SSE3-NEXT:    movdqa %xmm0, %xmm11324; SSE3-NEXT:    psrlw $4, %xmm11325; SSE3-NEXT:    por %xmm1, %xmm01326; SSE3-NEXT:    movdqa %xmm0, %xmm11327; SSE3-NEXT:    psrlw $8, %xmm11328; SSE3-NEXT:    por %xmm1, %xmm01329; SSE3-NEXT:    pcmpeqd %xmm1, %xmm11330; SSE3-NEXT:    pxor %xmm1, %xmm01331; SSE3-NEXT:    movdqa %xmm0, %xmm11332; SSE3-NEXT:    psrlw $1, %xmm11333; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11334; SSE3-NEXT:    psubb %xmm1, %xmm01335; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]1336; SSE3-NEXT:    movdqa %xmm0, %xmm21337; SSE3-NEXT:    pand %xmm1, %xmm21338; SSE3-NEXT:    psrlw $2, %xmm01339; SSE3-NEXT:    pand %xmm1, %xmm01340; SSE3-NEXT:    paddb %xmm2, %xmm01341; SSE3-NEXT:    movdqa %xmm0, %xmm11342; SSE3-NEXT:    psrlw $4, %xmm11343; SSE3-NEXT:    paddb %xmm1, %xmm01344; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01345; SSE3-NEXT:    movdqa %xmm0, %xmm11346; SSE3-NEXT:    psllw $8, %xmm11347; SSE3-NEXT:    paddb %xmm1, %xmm01348; SSE3-NEXT:    psrlw $8, %xmm01349; SSE3-NEXT:    retq1350;1351; SSSE3-LABEL: testv8i16u:1352; SSSE3:       # %bb.0:1353; SSSE3-NEXT:    movq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1354; SSSE3-NEXT:    movdqa %xmm1, %xmm21355; SSSE3-NEXT:    pshufb %xmm0, %xmm21356; SSSE3-NEXT:    movdqa %xmm0, %xmm31357; SSSE3-NEXT:    psrlw $4, %xmm31358; SSSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm31359; SSSE3-NEXT:    pxor %xmm4, %xmm41360; SSSE3-NEXT:    pshufb %xmm3, %xmm11361; SSSE3-NEXT:    pcmpeqb %xmm4, %xmm31362; SSSE3-NEXT:    pand %xmm2, %xmm31363; SSSE3-NEXT:    paddb %xmm1, %xmm31364; SSSE3-NEXT:    pcmpeqb %xmm4, %xmm01365; SSSE3-NEXT:    psrlw $8, %xmm01366; SSSE3-NEXT:    pand %xmm3, %xmm01367; SSSE3-NEXT:    psrlw $8, %xmm31368; SSSE3-NEXT:    paddw %xmm3, %xmm01369; SSSE3-NEXT:    retq1370;1371; SSE41-LABEL: testv8i16u:1372; SSE41:       # %bb.0:1373; SSE41-NEXT:    movq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1374; SSE41-NEXT:    movdqa %xmm1, %xmm21375; SSE41-NEXT:    pshufb %xmm0, %xmm21376; SSE41-NEXT:    movdqa %xmm0, %xmm31377; SSE41-NEXT:    psrlw $4, %xmm31378; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm31379; SSE41-NEXT:    pxor %xmm4, %xmm41380; SSE41-NEXT:    pshufb %xmm3, %xmm11381; SSE41-NEXT:    pcmpeqb %xmm4, %xmm31382; SSE41-NEXT:    pand %xmm2, %xmm31383; SSE41-NEXT:    paddb %xmm1, %xmm31384; SSE41-NEXT:    pcmpeqb %xmm4, %xmm01385; SSE41-NEXT:    psrlw $8, %xmm01386; SSE41-NEXT:    pand %xmm3, %xmm01387; SSE41-NEXT:    psrlw $8, %xmm31388; SSE41-NEXT:    paddw %xmm3, %xmm01389; SSE41-NEXT:    retq1390;1391; AVX1OR2-LABEL: testv8i16u:1392; AVX1OR2:       # %bb.0:1393; AVX1OR2-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1394; AVX1OR2-NEXT:    vpshufb %xmm0, %xmm1, %xmm21395; AVX1OR2-NEXT:    vpsrlw $4, %xmm0, %xmm31396; AVX1OR2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm31397; AVX1OR2-NEXT:    vpxor %xmm4, %xmm4, %xmm41398; AVX1OR2-NEXT:    vpcmpeqb %xmm4, %xmm3, %xmm51399; AVX1OR2-NEXT:    vpand %xmm5, %xmm2, %xmm21400; AVX1OR2-NEXT:    vpshufb %xmm3, %xmm1, %xmm11401; AVX1OR2-NEXT:    vpaddb %xmm1, %xmm2, %xmm11402; AVX1OR2-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm01403; AVX1OR2-NEXT:    vpsrlw $8, %xmm0, %xmm01404; AVX1OR2-NEXT:    vpand %xmm0, %xmm1, %xmm01405; AVX1OR2-NEXT:    vpsrlw $8, %xmm1, %xmm11406; AVX1OR2-NEXT:    vpaddw %xmm0, %xmm1, %xmm01407; AVX1OR2-NEXT:    retq1408;1409; AVX512VL-LABEL: testv8i16u:1410; AVX512VL:       # %bb.0:1411; AVX512VL-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1412; AVX512VL-NEXT:    vpshufb %xmm0, %xmm1, %xmm21413; AVX512VL-NEXT:    vpsrlw $4, %xmm0, %xmm31414; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm3, %xmm31415; AVX512VL-NEXT:    vpxor %xmm4, %xmm4, %xmm41416; AVX512VL-NEXT:    vpcmpeqb %xmm4, %xmm3, %xmm51417; AVX512VL-NEXT:    vpand %xmm5, %xmm2, %xmm21418; AVX512VL-NEXT:    vpshufb %xmm3, %xmm1, %xmm11419; AVX512VL-NEXT:    vpaddb %xmm1, %xmm2, %xmm11420; AVX512VL-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm01421; AVX512VL-NEXT:    vpsrlw $8, %xmm0, %xmm01422; AVX512VL-NEXT:    vpand %xmm0, %xmm1, %xmm01423; AVX512VL-NEXT:    vpsrlw $8, %xmm1, %xmm11424; AVX512VL-NEXT:    vpaddw %xmm0, %xmm1, %xmm01425; AVX512VL-NEXT:    retq1426;1427; AVX512VLBWDQ-LABEL: testv8i16u:1428; AVX512VLBWDQ:       # %bb.0:1429; AVX512VLBWDQ-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1430; AVX512VLBWDQ-NEXT:    vpshufb %xmm0, %xmm1, %xmm21431; AVX512VLBWDQ-NEXT:    vpsrlw $4, %xmm0, %xmm31432; AVX512VLBWDQ-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm3, %xmm31433; AVX512VLBWDQ-NEXT:    vpxor %xmm4, %xmm4, %xmm41434; AVX512VLBWDQ-NEXT:    vpcmpeqb %xmm4, %xmm3, %xmm51435; AVX512VLBWDQ-NEXT:    vpand %xmm5, %xmm2, %xmm21436; AVX512VLBWDQ-NEXT:    vpshufb %xmm3, %xmm1, %xmm11437; AVX512VLBWDQ-NEXT:    vpaddb %xmm1, %xmm2, %xmm11438; AVX512VLBWDQ-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm01439; AVX512VLBWDQ-NEXT:    vpsrlw $8, %xmm0, %xmm01440; AVX512VLBWDQ-NEXT:    vpand %xmm0, %xmm1, %xmm01441; AVX512VLBWDQ-NEXT:    vpsrlw $8, %xmm1, %xmm11442; AVX512VLBWDQ-NEXT:    vpaddw %xmm0, %xmm1, %xmm01443; AVX512VLBWDQ-NEXT:    retq1444;1445; AVX512VLCD-LABEL: testv8i16u:1446; AVX512VLCD:       # %bb.0:1447; AVX512VLCD-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],zero1448; AVX512VLCD-NEXT:    vplzcntd %ymm0, %ymm01449; AVX512VLCD-NEXT:    vpmovdw %ymm0, %xmm01450; AVX512VLCD-NEXT:    vpsubw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01451; AVX512VLCD-NEXT:    vzeroupper1452; AVX512VLCD-NEXT:    retq1453;1454; AVX512CD-LABEL: testv8i16u:1455; AVX512CD:       # %bb.0:1456; AVX512CD-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],zero1457; AVX512CD-NEXT:    vplzcntd %zmm0, %zmm01458; AVX512CD-NEXT:    vpmovdw %zmm0, %ymm01459; AVX512CD-NEXT:    vpsubw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01460; AVX512CD-NEXT:    vzeroupper1461; AVX512CD-NEXT:    retq1462;1463; X86-SSE-LABEL: testv8i16u:1464; X86-SSE:       # %bb.0:1465; X86-SSE-NEXT:    movq {{.*#+}} xmm2 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1466; X86-SSE-NEXT:    movdqa %xmm2, %xmm31467; X86-SSE-NEXT:    pshufb %xmm0, %xmm31468; X86-SSE-NEXT:    movdqa %xmm0, %xmm11469; X86-SSE-NEXT:    psrlw $4, %xmm11470; X86-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm11471; X86-SSE-NEXT:    pxor %xmm4, %xmm41472; X86-SSE-NEXT:    pshufb %xmm1, %xmm21473; X86-SSE-NEXT:    pcmpeqb %xmm4, %xmm11474; X86-SSE-NEXT:    pand %xmm3, %xmm11475; X86-SSE-NEXT:    paddb %xmm2, %xmm11476; X86-SSE-NEXT:    pcmpeqb %xmm4, %xmm01477; X86-SSE-NEXT:    psrlw $8, %xmm01478; X86-SSE-NEXT:    pand %xmm1, %xmm01479; X86-SSE-NEXT:    psrlw $8, %xmm11480; X86-SSE-NEXT:    paddw %xmm1, %xmm01481; X86-SSE-NEXT:    retl1482  %out = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %in, i1 -1)1483  ret <8 x i16> %out1484}1485 1486define <16 x i8> @testv16i8(<16 x i8> %in) nounwind {1487; SSE2-LABEL: testv16i8:1488; SSE2:       # %bb.0:1489; SSE2-NEXT:    movdqa %xmm0, %xmm11490; SSE2-NEXT:    psrlw $1, %xmm11491; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11492; SSE2-NEXT:    por %xmm1, %xmm01493; SSE2-NEXT:    movdqa %xmm0, %xmm11494; SSE2-NEXT:    psrlw $2, %xmm11495; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11496; SSE2-NEXT:    por %xmm1, %xmm01497; SSE2-NEXT:    movdqa %xmm0, %xmm11498; SSE2-NEXT:    psrlw $4, %xmm11499; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]1500; SSE2-NEXT:    pand %xmm2, %xmm11501; SSE2-NEXT:    por %xmm1, %xmm01502; SSE2-NEXT:    pcmpeqd %xmm1, %xmm11503; SSE2-NEXT:    pxor %xmm1, %xmm01504; SSE2-NEXT:    movdqa %xmm0, %xmm11505; SSE2-NEXT:    psrlw $1, %xmm11506; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11507; SSE2-NEXT:    psubb %xmm1, %xmm01508; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]1509; SSE2-NEXT:    movdqa %xmm0, %xmm31510; SSE2-NEXT:    pand %xmm1, %xmm31511; SSE2-NEXT:    psrlw $2, %xmm01512; SSE2-NEXT:    pand %xmm1, %xmm01513; SSE2-NEXT:    paddb %xmm3, %xmm01514; SSE2-NEXT:    movdqa %xmm0, %xmm11515; SSE2-NEXT:    psrlw $4, %xmm11516; SSE2-NEXT:    paddb %xmm1, %xmm01517; SSE2-NEXT:    pand %xmm2, %xmm01518; SSE2-NEXT:    retq1519;1520; SSE3-LABEL: testv16i8:1521; SSE3:       # %bb.0:1522; SSE3-NEXT:    movdqa %xmm0, %xmm11523; SSE3-NEXT:    psrlw $1, %xmm11524; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11525; SSE3-NEXT:    por %xmm1, %xmm01526; SSE3-NEXT:    movdqa %xmm0, %xmm11527; SSE3-NEXT:    psrlw $2, %xmm11528; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11529; SSE3-NEXT:    por %xmm1, %xmm01530; SSE3-NEXT:    movdqa %xmm0, %xmm11531; SSE3-NEXT:    psrlw $4, %xmm11532; SSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]1533; SSE3-NEXT:    pand %xmm2, %xmm11534; SSE3-NEXT:    por %xmm1, %xmm01535; SSE3-NEXT:    pcmpeqd %xmm1, %xmm11536; SSE3-NEXT:    pxor %xmm1, %xmm01537; SSE3-NEXT:    movdqa %xmm0, %xmm11538; SSE3-NEXT:    psrlw $1, %xmm11539; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11540; SSE3-NEXT:    psubb %xmm1, %xmm01541; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]1542; SSE3-NEXT:    movdqa %xmm0, %xmm31543; SSE3-NEXT:    pand %xmm1, %xmm31544; SSE3-NEXT:    psrlw $2, %xmm01545; SSE3-NEXT:    pand %xmm1, %xmm01546; SSE3-NEXT:    paddb %xmm3, %xmm01547; SSE3-NEXT:    movdqa %xmm0, %xmm11548; SSE3-NEXT:    psrlw $4, %xmm11549; SSE3-NEXT:    paddb %xmm1, %xmm01550; SSE3-NEXT:    pand %xmm2, %xmm01551; SSE3-NEXT:    retq1552;1553; SSSE3-LABEL: testv16i8:1554; SSSE3:       # %bb.0:1555; SSSE3-NEXT:    movq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1556; SSSE3-NEXT:    movdqa %xmm1, %xmm21557; SSSE3-NEXT:    pshufb %xmm0, %xmm21558; SSSE3-NEXT:    psrlw $4, %xmm01559; SSSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01560; SSSE3-NEXT:    pxor %xmm3, %xmm31561; SSSE3-NEXT:    pcmpeqb %xmm0, %xmm31562; SSSE3-NEXT:    pand %xmm2, %xmm31563; SSSE3-NEXT:    pshufb %xmm0, %xmm11564; SSSE3-NEXT:    paddb %xmm3, %xmm11565; SSSE3-NEXT:    movdqa %xmm1, %xmm01566; SSSE3-NEXT:    retq1567;1568; SSE41-LABEL: testv16i8:1569; SSE41:       # %bb.0:1570; SSE41-NEXT:    movq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1571; SSE41-NEXT:    movdqa %xmm1, %xmm21572; SSE41-NEXT:    pshufb %xmm0, %xmm21573; SSE41-NEXT:    psrlw $4, %xmm01574; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01575; SSE41-NEXT:    pxor %xmm3, %xmm31576; SSE41-NEXT:    pcmpeqb %xmm0, %xmm31577; SSE41-NEXT:    pand %xmm2, %xmm31578; SSE41-NEXT:    pshufb %xmm0, %xmm11579; SSE41-NEXT:    paddb %xmm3, %xmm11580; SSE41-NEXT:    movdqa %xmm1, %xmm01581; SSE41-NEXT:    retq1582;1583; AVX1OR2-LABEL: testv16i8:1584; AVX1OR2:       # %bb.0:1585; AVX1OR2-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1586; AVX1OR2-NEXT:    vpshufb %xmm0, %xmm1, %xmm21587; AVX1OR2-NEXT:    vpsrlw $4, %xmm0, %xmm01588; AVX1OR2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01589; AVX1OR2-NEXT:    vpxor %xmm3, %xmm3, %xmm31590; AVX1OR2-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm31591; AVX1OR2-NEXT:    vpand %xmm3, %xmm2, %xmm21592; AVX1OR2-NEXT:    vpshufb %xmm0, %xmm1, %xmm01593; AVX1OR2-NEXT:    vpaddb %xmm0, %xmm2, %xmm01594; AVX1OR2-NEXT:    retq1595;1596; AVX512VL-LABEL: testv16i8:1597; AVX512VL:       # %bb.0:1598; AVX512VL-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1599; AVX512VL-NEXT:    vpshufb %xmm0, %xmm1, %xmm21600; AVX512VL-NEXT:    vpsrlw $4, %xmm0, %xmm01601; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm01602; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm31603; AVX512VL-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm31604; AVX512VL-NEXT:    vpand %xmm3, %xmm2, %xmm21605; AVX512VL-NEXT:    vpshufb %xmm0, %xmm1, %xmm01606; AVX512VL-NEXT:    vpaddb %xmm0, %xmm2, %xmm01607; AVX512VL-NEXT:    retq1608;1609; AVX512VLBWDQ-LABEL: testv16i8:1610; AVX512VLBWDQ:       # %bb.0:1611; AVX512VLBWDQ-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1612; AVX512VLBWDQ-NEXT:    vpshufb %xmm0, %xmm1, %xmm21613; AVX512VLBWDQ-NEXT:    vpsrlw $4, %xmm0, %xmm01614; AVX512VLBWDQ-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm01615; AVX512VLBWDQ-NEXT:    vpxor %xmm3, %xmm3, %xmm31616; AVX512VLBWDQ-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm31617; AVX512VLBWDQ-NEXT:    vpand %xmm3, %xmm2, %xmm21618; AVX512VLBWDQ-NEXT:    vpshufb %xmm0, %xmm1, %xmm01619; AVX512VLBWDQ-NEXT:    vpaddb %xmm0, %xmm2, %xmm01620; AVX512VLBWDQ-NEXT:    retq1621;1622; AVX512-LABEL: testv16i8:1623; AVX512:       # %bb.0:1624; 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,zero1625; AVX512-NEXT:    vplzcntd %zmm0, %zmm01626; AVX512-NEXT:    vpmovdb %zmm0, %xmm01627; AVX512-NEXT:    vpsubb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01628; AVX512-NEXT:    vzeroupper1629; AVX512-NEXT:    retq1630;1631; X86-SSE-LABEL: testv16i8:1632; X86-SSE:       # %bb.0:1633; X86-SSE-NEXT:    movq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1634; X86-SSE-NEXT:    movdqa %xmm1, %xmm21635; X86-SSE-NEXT:    pshufb %xmm0, %xmm21636; X86-SSE-NEXT:    psrlw $4, %xmm01637; X86-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01638; X86-SSE-NEXT:    pxor %xmm3, %xmm31639; X86-SSE-NEXT:    pcmpeqb %xmm0, %xmm31640; X86-SSE-NEXT:    pand %xmm2, %xmm31641; X86-SSE-NEXT:    pshufb %xmm0, %xmm11642; X86-SSE-NEXT:    paddb %xmm3, %xmm11643; X86-SSE-NEXT:    movdqa %xmm1, %xmm01644; X86-SSE-NEXT:    retl1645  %out = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %in, i1 0)1646  ret <16 x i8> %out1647}1648 1649define <16 x i8> @testv16i8u(<16 x i8> %in) nounwind {1650; SSE2-LABEL: testv16i8u:1651; SSE2:       # %bb.0:1652; SSE2-NEXT:    movdqa %xmm0, %xmm11653; SSE2-NEXT:    psrlw $1, %xmm11654; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11655; SSE2-NEXT:    por %xmm1, %xmm01656; SSE2-NEXT:    movdqa %xmm0, %xmm11657; SSE2-NEXT:    psrlw $2, %xmm11658; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11659; SSE2-NEXT:    por %xmm1, %xmm01660; SSE2-NEXT:    movdqa %xmm0, %xmm11661; SSE2-NEXT:    psrlw $4, %xmm11662; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]1663; SSE2-NEXT:    pand %xmm2, %xmm11664; SSE2-NEXT:    por %xmm1, %xmm01665; SSE2-NEXT:    pcmpeqd %xmm1, %xmm11666; SSE2-NEXT:    pxor %xmm1, %xmm01667; SSE2-NEXT:    movdqa %xmm0, %xmm11668; SSE2-NEXT:    psrlw $1, %xmm11669; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11670; SSE2-NEXT:    psubb %xmm1, %xmm01671; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]1672; SSE2-NEXT:    movdqa %xmm0, %xmm31673; SSE2-NEXT:    pand %xmm1, %xmm31674; SSE2-NEXT:    psrlw $2, %xmm01675; SSE2-NEXT:    pand %xmm1, %xmm01676; SSE2-NEXT:    paddb %xmm3, %xmm01677; SSE2-NEXT:    movdqa %xmm0, %xmm11678; SSE2-NEXT:    psrlw $4, %xmm11679; SSE2-NEXT:    paddb %xmm1, %xmm01680; SSE2-NEXT:    pand %xmm2, %xmm01681; SSE2-NEXT:    retq1682;1683; SSE3-LABEL: testv16i8u:1684; SSE3:       # %bb.0:1685; SSE3-NEXT:    movdqa %xmm0, %xmm11686; SSE3-NEXT:    psrlw $1, %xmm11687; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11688; SSE3-NEXT:    por %xmm1, %xmm01689; SSE3-NEXT:    movdqa %xmm0, %xmm11690; SSE3-NEXT:    psrlw $2, %xmm11691; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11692; SSE3-NEXT:    por %xmm1, %xmm01693; SSE3-NEXT:    movdqa %xmm0, %xmm11694; SSE3-NEXT:    psrlw $4, %xmm11695; SSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]1696; SSE3-NEXT:    pand %xmm2, %xmm11697; SSE3-NEXT:    por %xmm1, %xmm01698; SSE3-NEXT:    pcmpeqd %xmm1, %xmm11699; SSE3-NEXT:    pxor %xmm1, %xmm01700; SSE3-NEXT:    movdqa %xmm0, %xmm11701; SSE3-NEXT:    psrlw $1, %xmm11702; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11703; SSE3-NEXT:    psubb %xmm1, %xmm01704; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]1705; SSE3-NEXT:    movdqa %xmm0, %xmm31706; SSE3-NEXT:    pand %xmm1, %xmm31707; SSE3-NEXT:    psrlw $2, %xmm01708; SSE3-NEXT:    pand %xmm1, %xmm01709; SSE3-NEXT:    paddb %xmm3, %xmm01710; SSE3-NEXT:    movdqa %xmm0, %xmm11711; SSE3-NEXT:    psrlw $4, %xmm11712; SSE3-NEXT:    paddb %xmm1, %xmm01713; SSE3-NEXT:    pand %xmm2, %xmm01714; SSE3-NEXT:    retq1715;1716; SSSE3-LABEL: testv16i8u:1717; SSSE3:       # %bb.0:1718; SSSE3-NEXT:    movq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1719; SSSE3-NEXT:    movdqa %xmm1, %xmm21720; SSSE3-NEXT:    pshufb %xmm0, %xmm21721; SSSE3-NEXT:    psrlw $4, %xmm01722; SSSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01723; SSSE3-NEXT:    pxor %xmm3, %xmm31724; SSSE3-NEXT:    pcmpeqb %xmm0, %xmm31725; SSSE3-NEXT:    pand %xmm2, %xmm31726; SSSE3-NEXT:    pshufb %xmm0, %xmm11727; SSSE3-NEXT:    paddb %xmm3, %xmm11728; SSSE3-NEXT:    movdqa %xmm1, %xmm01729; SSSE3-NEXT:    retq1730;1731; SSE41-LABEL: testv16i8u:1732; SSE41:       # %bb.0:1733; SSE41-NEXT:    movq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1734; SSE41-NEXT:    movdqa %xmm1, %xmm21735; SSE41-NEXT:    pshufb %xmm0, %xmm21736; SSE41-NEXT:    psrlw $4, %xmm01737; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01738; SSE41-NEXT:    pxor %xmm3, %xmm31739; SSE41-NEXT:    pcmpeqb %xmm0, %xmm31740; SSE41-NEXT:    pand %xmm2, %xmm31741; SSE41-NEXT:    pshufb %xmm0, %xmm11742; SSE41-NEXT:    paddb %xmm3, %xmm11743; SSE41-NEXT:    movdqa %xmm1, %xmm01744; SSE41-NEXT:    retq1745;1746; AVX1OR2-LABEL: testv16i8u:1747; AVX1OR2:       # %bb.0:1748; AVX1OR2-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1749; AVX1OR2-NEXT:    vpshufb %xmm0, %xmm1, %xmm21750; AVX1OR2-NEXT:    vpsrlw $4, %xmm0, %xmm01751; AVX1OR2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01752; AVX1OR2-NEXT:    vpxor %xmm3, %xmm3, %xmm31753; AVX1OR2-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm31754; AVX1OR2-NEXT:    vpand %xmm3, %xmm2, %xmm21755; AVX1OR2-NEXT:    vpshufb %xmm0, %xmm1, %xmm01756; AVX1OR2-NEXT:    vpaddb %xmm0, %xmm2, %xmm01757; AVX1OR2-NEXT:    retq1758;1759; AVX512VL-LABEL: testv16i8u:1760; AVX512VL:       # %bb.0:1761; AVX512VL-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1762; AVX512VL-NEXT:    vpshufb %xmm0, %xmm1, %xmm21763; AVX512VL-NEXT:    vpsrlw $4, %xmm0, %xmm01764; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm01765; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm31766; AVX512VL-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm31767; AVX512VL-NEXT:    vpand %xmm3, %xmm2, %xmm21768; AVX512VL-NEXT:    vpshufb %xmm0, %xmm1, %xmm01769; AVX512VL-NEXT:    vpaddb %xmm0, %xmm2, %xmm01770; AVX512VL-NEXT:    retq1771;1772; AVX512VLBWDQ-LABEL: testv16i8u:1773; AVX512VLBWDQ:       # %bb.0:1774; AVX512VLBWDQ-NEXT:    vmovq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1775; AVX512VLBWDQ-NEXT:    vpshufb %xmm0, %xmm1, %xmm21776; AVX512VLBWDQ-NEXT:    vpsrlw $4, %xmm0, %xmm01777; AVX512VLBWDQ-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm01778; AVX512VLBWDQ-NEXT:    vpxor %xmm3, %xmm3, %xmm31779; AVX512VLBWDQ-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm31780; AVX512VLBWDQ-NEXT:    vpand %xmm3, %xmm2, %xmm21781; AVX512VLBWDQ-NEXT:    vpshufb %xmm0, %xmm1, %xmm01782; AVX512VLBWDQ-NEXT:    vpaddb %xmm0, %xmm2, %xmm01783; AVX512VLBWDQ-NEXT:    retq1784;1785; AVX512-LABEL: testv16i8u:1786; AVX512:       # %bb.0:1787; 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,zero1788; AVX512-NEXT:    vplzcntd %zmm0, %zmm01789; AVX512-NEXT:    vpmovdb %zmm0, %xmm01790; AVX512-NEXT:    vpsubb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01791; AVX512-NEXT:    vzeroupper1792; AVX512-NEXT:    retq1793;1794; X86-SSE-LABEL: testv16i8u:1795; X86-SSE:       # %bb.0:1796; X86-SSE-NEXT:    movq {{.*#+}} xmm1 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]1797; X86-SSE-NEXT:    movdqa %xmm1, %xmm21798; X86-SSE-NEXT:    pshufb %xmm0, %xmm21799; X86-SSE-NEXT:    psrlw $4, %xmm01800; X86-SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm01801; X86-SSE-NEXT:    pxor %xmm3, %xmm31802; X86-SSE-NEXT:    pcmpeqb %xmm0, %xmm31803; X86-SSE-NEXT:    pand %xmm2, %xmm31804; X86-SSE-NEXT:    pshufb %xmm0, %xmm11805; X86-SSE-NEXT:    paddb %xmm3, %xmm11806; X86-SSE-NEXT:    movdqa %xmm1, %xmm01807; X86-SSE-NEXT:    retl1808  %out = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %in, i1 -1)1809  ret <16 x i8> %out1810}1811 1812define <2 x i64> @foldv2i64() nounwind {1813; SSE-LABEL: foldv2i64:1814; SSE:       # %bb.0:1815; SSE-NEXT:    movss {{.*#+}} xmm0 = [55,0,0,0]1816; SSE-NEXT:    retq1817;1818; AVX1OR2-LABEL: foldv2i64:1819; AVX1OR2:       # %bb.0:1820; AVX1OR2-NEXT:    vmovss {{.*#+}} xmm0 = [55,0,0,0]1821; AVX1OR2-NEXT:    retq1822;1823; AVX512VL-LABEL: foldv2i64:1824; AVX512VL:       # %bb.0:1825; AVX512VL-NEXT:    vpmovsxbq {{.*#+}} xmm0 = [55,0]1826; AVX512VL-NEXT:    retq1827;1828; AVX512VLBWDQ-LABEL: foldv2i64:1829; AVX512VLBWDQ:       # %bb.0:1830; AVX512VLBWDQ-NEXT:    vpmovsxbq {{.*#+}} xmm0 = [55,0]1831; AVX512VLBWDQ-NEXT:    retq1832;1833; AVX512-LABEL: foldv2i64:1834; AVX512:       # %bb.0:1835; AVX512-NEXT:    vpmovsxbq {{.*#+}} xmm0 = [55,0]1836; AVX512-NEXT:    retq1837;1838; X86-SSE-LABEL: foldv2i64:1839; X86-SSE:       # %bb.0:1840; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = [55,0,0,0]1841; X86-SSE-NEXT:    retl1842  %out = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> <i64 256, i64 -1>, i1 0)1843  ret <2 x i64> %out1844}1845 1846define <2 x i64> @foldv2i64u() nounwind {1847; SSE-LABEL: foldv2i64u:1848; SSE:       # %bb.0:1849; SSE-NEXT:    movss {{.*#+}} xmm0 = [55,0,0,0]1850; SSE-NEXT:    retq1851;1852; AVX1OR2-LABEL: foldv2i64u:1853; AVX1OR2:       # %bb.0:1854; AVX1OR2-NEXT:    vmovss {{.*#+}} xmm0 = [55,0,0,0]1855; AVX1OR2-NEXT:    retq1856;1857; AVX512VL-LABEL: foldv2i64u:1858; AVX512VL:       # %bb.0:1859; AVX512VL-NEXT:    vpmovsxbq {{.*#+}} xmm0 = [55,0]1860; AVX512VL-NEXT:    retq1861;1862; AVX512VLBWDQ-LABEL: foldv2i64u:1863; AVX512VLBWDQ:       # %bb.0:1864; AVX512VLBWDQ-NEXT:    vpmovsxbq {{.*#+}} xmm0 = [55,0]1865; AVX512VLBWDQ-NEXT:    retq1866;1867; AVX512-LABEL: foldv2i64u:1868; AVX512:       # %bb.0:1869; AVX512-NEXT:    vpmovsxbq {{.*#+}} xmm0 = [55,0]1870; AVX512-NEXT:    retq1871;1872; X86-SSE-LABEL: foldv2i64u:1873; X86-SSE:       # %bb.0:1874; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = [55,0,0,0]1875; X86-SSE-NEXT:    retl1876  %out = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> <i64 256, i64 -1>, i1 -1)1877  ret <2 x i64> %out1878}1879 1880define <4 x i32> @foldv4i32() nounwind {1881; SSE-LABEL: foldv4i32:1882; SSE:       # %bb.0:1883; SSE-NEXT:    movaps {{.*#+}} xmm0 = [23,0,32,24]1884; SSE-NEXT:    retq1885;1886; AVX1OR2-LABEL: foldv4i32:1887; AVX1OR2:       # %bb.0:1888; AVX1OR2-NEXT:    vmovaps {{.*#+}} xmm0 = [23,0,32,24]1889; AVX1OR2-NEXT:    retq1890;1891; AVX512VL-LABEL: foldv4i32:1892; AVX512VL:       # %bb.0:1893; AVX512VL-NEXT:    vpmovsxbd {{.*#+}} xmm0 = [23,0,32,24]1894; AVX512VL-NEXT:    retq1895;1896; AVX512VLBWDQ-LABEL: foldv4i32:1897; AVX512VLBWDQ:       # %bb.0:1898; AVX512VLBWDQ-NEXT:    vpmovsxbd {{.*#+}} xmm0 = [23,0,32,24]1899; AVX512VLBWDQ-NEXT:    retq1900;1901; AVX512-LABEL: foldv4i32:1902; AVX512:       # %bb.0:1903; AVX512-NEXT:    vpmovsxbd {{.*#+}} xmm0 = [23,0,32,24]1904; AVX512-NEXT:    retq1905;1906; X86-SSE-LABEL: foldv4i32:1907; X86-SSE:       # %bb.0:1908; X86-SSE-NEXT:    movaps {{.*#+}} xmm0 = [23,0,32,24]1909; X86-SSE-NEXT:    retl1910  %out = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> <i32 256, i32 -1, i32 0, i32 255>, i1 0)1911  ret <4 x i32> %out1912}1913 1914define <4 x i32> @foldv4i32u() nounwind {1915; SSE-LABEL: foldv4i32u:1916; SSE:       # %bb.0:1917; SSE-NEXT:    movaps {{.*#+}} xmm0 = [23,0,32,24]1918; SSE-NEXT:    retq1919;1920; AVX1OR2-LABEL: foldv4i32u:1921; AVX1OR2:       # %bb.0:1922; AVX1OR2-NEXT:    vmovaps {{.*#+}} xmm0 = [23,0,32,24]1923; AVX1OR2-NEXT:    retq1924;1925; AVX512VL-LABEL: foldv4i32u:1926; AVX512VL:       # %bb.0:1927; AVX512VL-NEXT:    vpmovsxbd {{.*#+}} xmm0 = [23,0,32,24]1928; AVX512VL-NEXT:    retq1929;1930; AVX512VLBWDQ-LABEL: foldv4i32u:1931; AVX512VLBWDQ:       # %bb.0:1932; AVX512VLBWDQ-NEXT:    vpmovsxbd {{.*#+}} xmm0 = [23,0,32,24]1933; AVX512VLBWDQ-NEXT:    retq1934;1935; AVX512-LABEL: foldv4i32u:1936; AVX512:       # %bb.0:1937; AVX512-NEXT:    vpmovsxbd {{.*#+}} xmm0 = [23,0,32,24]1938; AVX512-NEXT:    retq1939;1940; X86-SSE-LABEL: foldv4i32u:1941; X86-SSE:       # %bb.0:1942; X86-SSE-NEXT:    movaps {{.*#+}} xmm0 = [23,0,32,24]1943; X86-SSE-NEXT:    retl1944  %out = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> <i32 256, i32 -1, i32 0, i32 255>, i1 -1)1945  ret <4 x i32> %out1946}1947 1948define <8 x i16> @foldv8i16() nounwind {1949; SSE-LABEL: foldv8i16:1950; SSE:       # %bb.0:1951; SSE-NEXT:    movaps {{.*#+}} xmm0 = [7,0,16,8,16,13,11,9]1952; SSE-NEXT:    retq1953;1954; NOBW-LABEL: foldv8i16:1955; NOBW:       # %bb.0:1956; NOBW-NEXT:    vmovaps {{.*#+}} xmm0 = [7,0,16,8,16,13,11,9]1957; NOBW-NEXT:    retq1958;1959; AVX512VLBWDQ-LABEL: foldv8i16:1960; AVX512VLBWDQ:       # %bb.0:1961; AVX512VLBWDQ-NEXT:    vmovaps {{.*#+}} xmm0 = [7,0,16,8,16,13,11,9]1962; AVX512VLBWDQ-NEXT:    retq1963;1964; X86-SSE-LABEL: foldv8i16:1965; X86-SSE:       # %bb.0:1966; X86-SSE-NEXT:    movaps {{.*#+}} xmm0 = [7,0,16,8,16,13,11,9]1967; X86-SSE-NEXT:    retl1968  %out = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> <i16 256, i16 -1, i16 0, i16 255, i16 -65536, i16 7, i16 24, i16 88>, i1 0)1969  ret <8 x i16> %out1970}1971 1972define <8 x i16> @foldv8i16u() nounwind {1973; SSE-LABEL: foldv8i16u:1974; SSE:       # %bb.0:1975; SSE-NEXT:    movaps {{.*#+}} xmm0 = [7,0,16,8,16,13,11,9]1976; SSE-NEXT:    retq1977;1978; NOBW-LABEL: foldv8i16u:1979; NOBW:       # %bb.0:1980; NOBW-NEXT:    vmovaps {{.*#+}} xmm0 = [7,0,16,8,16,13,11,9]1981; NOBW-NEXT:    retq1982;1983; AVX512VLBWDQ-LABEL: foldv8i16u:1984; AVX512VLBWDQ:       # %bb.0:1985; AVX512VLBWDQ-NEXT:    vmovaps {{.*#+}} xmm0 = [7,0,16,8,16,13,11,9]1986; AVX512VLBWDQ-NEXT:    retq1987;1988; X86-SSE-LABEL: foldv8i16u:1989; X86-SSE:       # %bb.0:1990; X86-SSE-NEXT:    movaps {{.*#+}} xmm0 = [7,0,16,8,16,13,11,9]1991; X86-SSE-NEXT:    retl1992  %out = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> <i16 256, i16 -1, i16 0, i16 255, i16 -65536, i16 7, i16 24, i16 88>, i1 -1)1993  ret <8 x i16> %out1994}1995 1996define <16 x i8> @foldv16i8() nounwind {1997; SSE-LABEL: foldv16i8:1998; SSE:       # %bb.0:1999; SSE-NEXT:    movaps {{.*#+}} xmm0 = [8,0,8,0,8,5,3,1,0,0,7,6,5,4,3,2]2000; SSE-NEXT:    retq2001;2002; NOBW-LABEL: foldv16i8:2003; NOBW:       # %bb.0:2004; NOBW-NEXT:    vmovaps {{.*#+}} xmm0 = [8,0,8,0,8,5,3,1,0,0,7,6,5,4,3,2]2005; NOBW-NEXT:    retq2006;2007; AVX512VLBWDQ-LABEL: foldv16i8:2008; AVX512VLBWDQ:       # %bb.0:2009; AVX512VLBWDQ-NEXT:    vmovaps {{.*#+}} xmm0 = [8,0,8,0,8,5,3,1,0,0,7,6,5,4,3,2]2010; AVX512VLBWDQ-NEXT:    retq2011;2012; X86-SSE-LABEL: foldv16i8:2013; X86-SSE:       # %bb.0:2014; X86-SSE-NEXT:    movaps {{.*#+}} xmm0 = [8,0,8,0,8,5,3,1,0,0,7,6,5,4,3,2]2015; X86-SSE-NEXT:    retl2016  %out = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> <i8 256, i8 -1, i8 0, i8 255, i8 -65536, i8 7, i8 24, i8 88, i8 -2, i8 254, i8 1, i8 2, i8 4, i8 8, i8 16, i8 32>, i1 0)2017  ret <16 x i8> %out2018}2019 2020define <16 x i8> @foldv16i8u() nounwind {2021; SSE-LABEL: foldv16i8u:2022; SSE:       # %bb.0:2023; SSE-NEXT:    movaps {{.*#+}} xmm0 = [8,0,8,0,8,5,3,1,0,0,7,6,5,4,3,2]2024; SSE-NEXT:    retq2025;2026; NOBW-LABEL: foldv16i8u:2027; NOBW:       # %bb.0:2028; NOBW-NEXT:    vmovaps {{.*#+}} xmm0 = [8,0,8,0,8,5,3,1,0,0,7,6,5,4,3,2]2029; NOBW-NEXT:    retq2030;2031; AVX512VLBWDQ-LABEL: foldv16i8u:2032; AVX512VLBWDQ:       # %bb.0:2033; AVX512VLBWDQ-NEXT:    vmovaps {{.*#+}} xmm0 = [8,0,8,0,8,5,3,1,0,0,7,6,5,4,3,2]2034; AVX512VLBWDQ-NEXT:    retq2035;2036; X86-SSE-LABEL: foldv16i8u:2037; X86-SSE:       # %bb.0:2038; X86-SSE-NEXT:    movaps {{.*#+}} xmm0 = [8,0,8,0,8,5,3,1,0,0,7,6,5,4,3,2]2039; X86-SSE-NEXT:    retl2040  %out = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> <i8 256, i8 -1, i8 0, i8 255, i8 -65536, i8 7, i8 24, i8 88, i8 -2, i8 254, i8 1, i8 2, i8 4, i8 8, i8 16, i8 32>, i1 -1)2041  ret <16 x i8> %out2042}2043 2044declare <2 x i64> @llvm.ctlz.v2i64(<2 x i64>, i1)2045declare <4 x i32> @llvm.ctlz.v4i32(<4 x i32>, i1)2046declare <8 x i16> @llvm.ctlz.v8i16(<8 x i16>, i1)2047declare <16 x i8> @llvm.ctlz.v16i8(<16 x i8>, i1)2048;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:2049; AVX: {{.*}}2050