brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.8 KiB · 370f88d Raw
215 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s3 4declare <2 x i64> @llvm.cttz.v2i64(<2 x i64>, i1)5declare <2 x i64> @llvm.ctlz.v2i64(<2 x i64>, i1)6declare <2 x i64> @llvm.ctpop.v2i64(<2 x i64>)7 8define <2 x i64> @footz(<2 x i64> %a) nounwind {9; CHECK-LABEL: footz:10; CHECK:       # %bb.0:11; CHECK-NEXT:    pcmpeqd %xmm1, %xmm112; CHECK-NEXT:    paddq %xmm0, %xmm113; CHECK-NEXT:    pandn %xmm1, %xmm014; CHECK-NEXT:    movdqa %xmm0, %xmm115; CHECK-NEXT:    psrlw $1, %xmm116; CHECK-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm117; CHECK-NEXT:    psubb %xmm1, %xmm018; CHECK-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]19; CHECK-NEXT:    movdqa %xmm0, %xmm220; CHECK-NEXT:    pand %xmm1, %xmm221; CHECK-NEXT:    psrlw $2, %xmm022; CHECK-NEXT:    pand %xmm1, %xmm023; CHECK-NEXT:    paddb %xmm2, %xmm024; CHECK-NEXT:    movdqa %xmm0, %xmm125; CHECK-NEXT:    psrlw $4, %xmm126; CHECK-NEXT:    paddb %xmm1, %xmm027; CHECK-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm028; CHECK-NEXT:    pxor %xmm1, %xmm129; CHECK-NEXT:    psadbw %xmm1, %xmm030; CHECK-NEXT:    retq31  %c = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 true)32  ret <2 x i64> %c33 34}35define <2 x i64> @foolz(<2 x i64> %a) nounwind {36; CHECK-LABEL: foolz:37; CHECK:       # %bb.0:38; CHECK-NEXT:    movdqa %xmm0, %xmm139; CHECK-NEXT:    psrlq $1, %xmm140; CHECK-NEXT:    por %xmm1, %xmm041; CHECK-NEXT:    movdqa %xmm0, %xmm142; CHECK-NEXT:    psrlq $2, %xmm143; CHECK-NEXT:    por %xmm1, %xmm044; CHECK-NEXT:    movdqa %xmm0, %xmm145; CHECK-NEXT:    psrlq $4, %xmm146; CHECK-NEXT:    por %xmm1, %xmm047; CHECK-NEXT:    movdqa %xmm0, %xmm148; CHECK-NEXT:    psrlq $8, %xmm149; CHECK-NEXT:    por %xmm1, %xmm050; CHECK-NEXT:    movdqa %xmm0, %xmm151; CHECK-NEXT:    psrlq $16, %xmm152; CHECK-NEXT:    por %xmm1, %xmm053; CHECK-NEXT:    movdqa %xmm0, %xmm154; CHECK-NEXT:    psrlq $32, %xmm155; CHECK-NEXT:    por %xmm1, %xmm056; CHECK-NEXT:    pcmpeqd %xmm1, %xmm157; CHECK-NEXT:    pxor %xmm1, %xmm058; CHECK-NEXT:    movdqa %xmm0, %xmm159; CHECK-NEXT:    psrlw $1, %xmm160; CHECK-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm161; CHECK-NEXT:    psubb %xmm1, %xmm062; CHECK-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]63; CHECK-NEXT:    movdqa %xmm0, %xmm264; CHECK-NEXT:    pand %xmm1, %xmm265; CHECK-NEXT:    psrlw $2, %xmm066; CHECK-NEXT:    pand %xmm1, %xmm067; CHECK-NEXT:    paddb %xmm2, %xmm068; CHECK-NEXT:    movdqa %xmm0, %xmm169; CHECK-NEXT:    psrlw $4, %xmm170; CHECK-NEXT:    paddb %xmm1, %xmm071; CHECK-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm072; CHECK-NEXT:    pxor %xmm1, %xmm173; CHECK-NEXT:    psadbw %xmm1, %xmm074; CHECK-NEXT:    retq75  %c = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 true)76  ret <2 x i64> %c77 78}79 80define <2 x i64> @foopop(<2 x i64> %a) nounwind {81; CHECK-LABEL: foopop:82; CHECK:       # %bb.0:83; CHECK-NEXT:    movdqa %xmm0, %xmm184; CHECK-NEXT:    psrlw $1, %xmm185; CHECK-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm186; CHECK-NEXT:    psubb %xmm1, %xmm087; CHECK-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]88; CHECK-NEXT:    movdqa %xmm0, %xmm289; CHECK-NEXT:    pand %xmm1, %xmm290; CHECK-NEXT:    psrlw $2, %xmm091; CHECK-NEXT:    pand %xmm1, %xmm092; CHECK-NEXT:    paddb %xmm2, %xmm093; CHECK-NEXT:    movdqa %xmm0, %xmm194; CHECK-NEXT:    psrlw $4, %xmm195; CHECK-NEXT:    paddb %xmm1, %xmm096; CHECK-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm097; CHECK-NEXT:    pxor %xmm1, %xmm198; CHECK-NEXT:    psadbw %xmm1, %xmm099; CHECK-NEXT:    retq100  %c = call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %a)101  ret <2 x i64> %c102}103 104declare <2 x i32> @llvm.cttz.v2i32(<2 x i32>, i1)105declare <2 x i32> @llvm.ctlz.v2i32(<2 x i32>, i1)106declare <2 x i32> @llvm.ctpop.v2i32(<2 x i32>)107 108define <2 x i32> @promtz(<2 x i32> %a) nounwind {109; CHECK-LABEL: promtz:110; CHECK:       # %bb.0:111; CHECK-NEXT:    pcmpeqd %xmm1, %xmm1112; CHECK-NEXT:    paddd %xmm0, %xmm1113; CHECK-NEXT:    pandn %xmm1, %xmm0114; CHECK-NEXT:    movdqa %xmm0, %xmm1115; CHECK-NEXT:    psrlw $1, %xmm1116; CHECK-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1117; CHECK-NEXT:    psubb %xmm1, %xmm0118; CHECK-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]119; CHECK-NEXT:    movdqa %xmm0, %xmm2120; CHECK-NEXT:    pand %xmm1, %xmm2121; CHECK-NEXT:    psrlw $2, %xmm0122; CHECK-NEXT:    pand %xmm1, %xmm0123; CHECK-NEXT:    paddb %xmm2, %xmm0124; CHECK-NEXT:    movdqa %xmm0, %xmm1125; CHECK-NEXT:    psrlw $4, %xmm1126; CHECK-NEXT:    paddb %xmm1, %xmm0127; CHECK-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0128; CHECK-NEXT:    pxor %xmm1, %xmm1129; CHECK-NEXT:    movdqa %xmm0, %xmm2130; CHECK-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]131; CHECK-NEXT:    psadbw %xmm1, %xmm2132; CHECK-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]133; CHECK-NEXT:    psadbw %xmm1, %xmm0134; CHECK-NEXT:    packuswb %xmm2, %xmm0135; CHECK-NEXT:    retq136  %c = call <2 x i32> @llvm.cttz.v2i32(<2 x i32> %a, i1 false)137  ret <2 x i32> %c138 139}140define <2 x i32> @promlz(<2 x i32> %a) nounwind {141; CHECK-LABEL: promlz:142; CHECK:       # %bb.0:143; CHECK-NEXT:    movdqa %xmm0, %xmm1144; CHECK-NEXT:    psrld $1, %xmm1145; CHECK-NEXT:    por %xmm1, %xmm0146; CHECK-NEXT:    movdqa %xmm0, %xmm1147; CHECK-NEXT:    psrld $2, %xmm1148; CHECK-NEXT:    por %xmm1, %xmm0149; CHECK-NEXT:    movdqa %xmm0, %xmm1150; CHECK-NEXT:    psrld $4, %xmm1151; CHECK-NEXT:    por %xmm1, %xmm0152; CHECK-NEXT:    movdqa %xmm0, %xmm1153; CHECK-NEXT:    psrld $8, %xmm1154; CHECK-NEXT:    por %xmm1, %xmm0155; CHECK-NEXT:    movdqa %xmm0, %xmm1156; CHECK-NEXT:    psrld $16, %xmm1157; CHECK-NEXT:    por %xmm1, %xmm0158; CHECK-NEXT:    pcmpeqd %xmm1, %xmm1159; CHECK-NEXT:    pxor %xmm1, %xmm0160; CHECK-NEXT:    movdqa %xmm0, %xmm1161; CHECK-NEXT:    psrlw $1, %xmm1162; CHECK-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1163; CHECK-NEXT:    psubb %xmm1, %xmm0164; CHECK-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]165; CHECK-NEXT:    movdqa %xmm0, %xmm2166; CHECK-NEXT:    pand %xmm1, %xmm2167; CHECK-NEXT:    psrlw $2, %xmm0168; CHECK-NEXT:    pand %xmm1, %xmm0169; CHECK-NEXT:    paddb %xmm2, %xmm0170; CHECK-NEXT:    movdqa %xmm0, %xmm1171; CHECK-NEXT:    psrlw $4, %xmm1172; CHECK-NEXT:    paddb %xmm1, %xmm0173; CHECK-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0174; CHECK-NEXT:    pxor %xmm1, %xmm1175; CHECK-NEXT:    movdqa %xmm0, %xmm2176; CHECK-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]177; CHECK-NEXT:    psadbw %xmm1, %xmm2178; CHECK-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]179; CHECK-NEXT:    psadbw %xmm1, %xmm0180; CHECK-NEXT:    packuswb %xmm2, %xmm0181; CHECK-NEXT:    retq182  %c = call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> %a, i1 false)183  ret <2 x i32> %c184 185}186 187define <2 x i32> @prompop(<2 x i32> %a) nounwind {188; CHECK-LABEL: prompop:189; CHECK:       # %bb.0:190; CHECK-NEXT:    movdqa %xmm0, %xmm1191; CHECK-NEXT:    psrlw $1, %xmm1192; CHECK-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1193; CHECK-NEXT:    psubb %xmm1, %xmm0194; CHECK-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]195; CHECK-NEXT:    movdqa %xmm0, %xmm2196; CHECK-NEXT:    pand %xmm1, %xmm2197; CHECK-NEXT:    psrlw $2, %xmm0198; CHECK-NEXT:    pand %xmm1, %xmm0199; CHECK-NEXT:    paddb %xmm2, %xmm0200; CHECK-NEXT:    movdqa %xmm0, %xmm1201; CHECK-NEXT:    psrlw $4, %xmm1202; CHECK-NEXT:    paddb %xmm1, %xmm0203; CHECK-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0204; CHECK-NEXT:    pxor %xmm1, %xmm1205; CHECK-NEXT:    movdqa %xmm0, %xmm2206; CHECK-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]207; CHECK-NEXT:    psadbw %xmm1, %xmm2208; CHECK-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]209; CHECK-NEXT:    psadbw %xmm1, %xmm0210; CHECK-NEXT:    packuswb %xmm2, %xmm0211; CHECK-NEXT:    retq212  %c = call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> %a)213  ret <2 x i32> %c214}215