brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.2 KiB · d79edb5 Raw
295 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mcpu=ppc -mtriple=powerpc64-- -mattr=+popcntd < %s      | FileCheck %s --check-prefix=FAST3; RUN: llc -verify-machineinstrs -mcpu=ppc -mtriple=powerpc64-- -mattr=+slow-popcntd < %s | FileCheck %s --check-prefix=SLOW4; RUN: llc -verify-machineinstrs -mcpu=ppc -mtriple=powerpc64-ibm-aix-xcoff -mattr=+popcntd < %s      | FileCheck %s --check-prefix=FAST5; RUN: llc -verify-machineinstrs -mcpu=ppc -mtriple=powerpc64-ibm-aix-xcoff -mattr=+slow-popcntd < %s | FileCheck %s --check-prefix=SLOW6 7define i16 @zpop_i8_i16(i8 %x) {8; FAST-LABEL: zpop_i8_i16:9; FAST:       # %bb.0:10; FAST-NEXT:    clrldi 3, 3, 5611; FAST-NEXT:    popcntd 3, 312; FAST-NEXT:    blr13;14; SLOW-LABEL: zpop_i8_i16:15; SLOW:       # %bb.0:16; SLOW-NEXT:    clrlwi 4, 3, 2417; SLOW-NEXT:    rotlwi 3, 3, 3118; SLOW-NEXT:    andi. 3, 3, 8519; SLOW-NEXT:    sub 3, 4, 320; SLOW-NEXT:    andi. 4, 3, 1310721; SLOW-NEXT:    rotlwi 3, 3, 3022; SLOW-NEXT:    andi. 3, 3, 1310723; SLOW-NEXT:    add 3, 4, 324; SLOW-NEXT:    srwi 4, 3, 425; SLOW-NEXT:    add 3, 3, 426; SLOW-NEXT:    rlwinm 4, 3, 24, 28, 3127; SLOW-NEXT:    clrlwi 3, 3, 2828; SLOW-NEXT:    add 3, 3, 429; SLOW-NEXT:    blr30  %z = zext i8 %x to i1631  %pop = tail call i16 @llvm.ctpop.i16(i16 %z)32  ret i16 %pop33}34 35define i16 @popz_i8_i16(i8 %x) {36; FAST-LABEL: popz_i8_i16:37; FAST:       # %bb.0:38; FAST-NEXT:    clrldi 3, 3, 5639; FAST-NEXT:    popcntd 3, 340; FAST-NEXT:    blr41;42; SLOW-LABEL: popz_i8_i16:43; SLOW:       # %bb.0:44; SLOW-NEXT:    rotlwi 4, 3, 3145; SLOW-NEXT:    andi. 4, 4, 8546; SLOW-NEXT:    sub 3, 3, 447; SLOW-NEXT:    rlwinm 4, 3, 30, 30, 3148; SLOW-NEXT:    rlwimi 4, 3, 30, 26, 2749; SLOW-NEXT:    andi. 3, 3, 5150; SLOW-NEXT:    add 3, 3, 451; SLOW-NEXT:    srwi 4, 3, 452; SLOW-NEXT:    add 3, 3, 453; SLOW-NEXT:    clrlwi 3, 3, 2854; SLOW-NEXT:    blr55  %pop = tail call i8 @llvm.ctpop.i8(i8 %x)56  %z = zext i8 %pop to i1657  ret i16 %z58}59 60define i32 @zpop_i8_i32(i8 %x) {61; FAST-LABEL: zpop_i8_i32:62; FAST:       # %bb.0:63; FAST-NEXT:    clrlwi 3, 3, 2464; FAST-NEXT:    popcntw 3, 365; FAST-NEXT:    blr66;67; SLOW-LABEL: zpop_i8_i32:68; SLOW:       # %bb.0:69; SLOW-NEXT:    clrlwi 5, 3, 2470; SLOW-NEXT:    rotlwi 3, 3, 3171; SLOW-NEXT:    andi. 3, 3, 8572; SLOW-NEXT:    lis 4, 1310773; SLOW-NEXT:    sub 3, 5, 374; SLOW-NEXT:    ori 4, 4, 1310775; SLOW-NEXT:    rotlwi 5, 3, 3076; SLOW-NEXT:    and 3, 3, 477; SLOW-NEXT:    andis. 4, 5, 1310778; SLOW-NEXT:    andi. 5, 5, 1310779; SLOW-NEXT:    or 4, 5, 480; SLOW-NEXT:    add 3, 3, 481; SLOW-NEXT:    lis 5, 385582; SLOW-NEXT:    srwi 4, 3, 483; SLOW-NEXT:    add 3, 3, 484; SLOW-NEXT:    lis 4, 25785; SLOW-NEXT:    ori 5, 5, 385586; SLOW-NEXT:    and 3, 3, 587; SLOW-NEXT:    ori 4, 4, 25788; SLOW-NEXT:    mullw 3, 3, 489; SLOW-NEXT:    srwi 3, 3, 2490; SLOW-NEXT:    blr91  %z = zext i8 %x to i3292  %pop = tail call i32 @llvm.ctpop.i32(i32 %z)93  ret i32 %pop94}95 96define i32 @popz_i8_32(i8 %x) {97; FAST-LABEL: popz_i8_32:98; FAST:       # %bb.0:99; FAST-NEXT:    clrldi 3, 3, 56100; FAST-NEXT:    popcntd 3, 3101; FAST-NEXT:    blr102;103; SLOW-LABEL: popz_i8_32:104; SLOW:       # %bb.0:105; SLOW-NEXT:    rotlwi 4, 3, 31106; SLOW-NEXT:    andi. 4, 4, 85107; SLOW-NEXT:    sub 3, 3, 4108; SLOW-NEXT:    rlwinm 4, 3, 30, 30, 31109; SLOW-NEXT:    rlwimi 4, 3, 30, 26, 27110; SLOW-NEXT:    andi. 3, 3, 51111; SLOW-NEXT:    add 3, 3, 4112; SLOW-NEXT:    srwi 4, 3, 4113; SLOW-NEXT:    add 3, 3, 4114; SLOW-NEXT:    clrlwi 3, 3, 28115; SLOW-NEXT:    blr116  %pop = tail call i8 @llvm.ctpop.i8(i8 %x)117  %z = zext i8 %pop to i32118  ret i32 %z119}120 121define i32 @zpop_i16_i32(i16 %x) {122; FAST-LABEL: zpop_i16_i32:123; FAST:       # %bb.0:124; FAST-NEXT:    clrlwi 3, 3, 16125; FAST-NEXT:    popcntw 3, 3126; FAST-NEXT:    blr127;128; SLOW-LABEL: zpop_i16_i32:129; SLOW:       # %bb.0:130; SLOW-NEXT:    clrlwi 5, 3, 16131; SLOW-NEXT:    rotlwi 3, 3, 31132; SLOW-NEXT:    andi. 3, 3, 21845133; SLOW-NEXT:    lis 4, 13107134; SLOW-NEXT:    sub 3, 5, 3135; SLOW-NEXT:    ori 4, 4, 13107136; SLOW-NEXT:    rotlwi 5, 3, 30137; SLOW-NEXT:    and 3, 3, 4138; SLOW-NEXT:    andis. 4, 5, 13107139; SLOW-NEXT:    andi. 5, 5, 13107140; SLOW-NEXT:    or 4, 5, 4141; SLOW-NEXT:    add 3, 3, 4142; SLOW-NEXT:    lis 5, 3855143; SLOW-NEXT:    srwi 4, 3, 4144; SLOW-NEXT:    add 3, 3, 4145; SLOW-NEXT:    lis 4, 257146; SLOW-NEXT:    ori 5, 5, 3855147; SLOW-NEXT:    and 3, 3, 5148; SLOW-NEXT:    ori 4, 4, 257149; SLOW-NEXT:    mullw 3, 3, 4150; SLOW-NEXT:    srwi 3, 3, 24151; SLOW-NEXT:    blr152  %z = zext i16 %x to i32153  %pop = tail call i32 @llvm.ctpop.i32(i32 %z)154  ret i32 %pop155}156 157define i32 @popz_i16_32(i16 %x) {158; FAST-LABEL: popz_i16_32:159; FAST:       # %bb.0:160; FAST-NEXT:    clrldi 3, 3, 48161; FAST-NEXT:    popcntd 3, 3162; FAST-NEXT:    blr163;164; SLOW-LABEL: popz_i16_32:165; SLOW:       # %bb.0:166; SLOW-NEXT:    rotlwi 4, 3, 31167; SLOW-NEXT:    andi. 4, 4, 21845168; SLOW-NEXT:    sub 3, 3, 4169; SLOW-NEXT:    andi. 4, 3, 13107170; SLOW-NEXT:    rotlwi 3, 3, 30171; SLOW-NEXT:    andi. 3, 3, 13107172; SLOW-NEXT:    add 3, 4, 3173; SLOW-NEXT:    srwi 4, 3, 4174; SLOW-NEXT:    add 3, 3, 4175; SLOW-NEXT:    rlwinm 4, 3, 24, 28, 31176; SLOW-NEXT:    clrlwi 3, 3, 28177; SLOW-NEXT:    add 3, 3, 4178; SLOW-NEXT:    clrldi 3, 3, 32179; SLOW-NEXT:    blr180  %pop = tail call i16 @llvm.ctpop.i16(i16 %x)181  %z = zext i16 %pop to i32182  ret i32 %z183}184 185define i64 @zpop_i32_i64(i32 %x) {186; FAST-LABEL: zpop_i32_i64:187; FAST:       # %bb.0:188; FAST-NEXT:    clrldi 3, 3, 32189; FAST-NEXT:    popcntd 3, 3190; FAST-NEXT:    blr191;192; SLOW-LABEL: zpop_i32_i64:193; SLOW:       # %bb.0:194; SLOW-NEXT:    rlwinm 5, 3, 31, 1, 0195; SLOW-NEXT:    lis 4, 13107196; SLOW-NEXT:    andis. 6, 5, 21845197; SLOW-NEXT:    andi. 5, 5, 21845198; SLOW-NEXT:    ori 4, 4, 13107199; SLOW-NEXT:    or 5, 5, 6200; SLOW-NEXT:    clrldi 3, 3, 32201; SLOW-NEXT:    rldimi 4, 4, 32, 0202; SLOW-NEXT:    sub 3, 3, 5203; SLOW-NEXT:    and 5, 3, 4204; SLOW-NEXT:    rotldi 3, 3, 62205; SLOW-NEXT:    and 3, 3, 4206; SLOW-NEXT:    add 3, 5, 3207; SLOW-NEXT:    lis 4, 3855208; SLOW-NEXT:    rldicl 5, 3, 60, 4209; SLOW-NEXT:    ori 4, 4, 3855210; SLOW-NEXT:    add 3, 3, 5211; SLOW-NEXT:    lis 5, 257212; SLOW-NEXT:    rldimi 4, 4, 32, 0213; SLOW-NEXT:    ori 5, 5, 257214; SLOW-NEXT:    and 3, 3, 4215; SLOW-NEXT:    rldimi 5, 5, 32, 0216; SLOW-NEXT:    mulld 3, 3, 5217; SLOW-NEXT:    rldicl 3, 3, 8, 56218; SLOW-NEXT:    blr219  %z = zext i32 %x to i64220  %pop = tail call i64 @llvm.ctpop.i64(i64 %z)221  ret i64 %pop222}223 224define i64 @popz_i32_i64(i32 %x) {225; FAST-LABEL: popz_i32_i64:226; FAST:       # %bb.0:227; FAST-NEXT:    popcntw 3, 3228; FAST-NEXT:    clrldi 3, 3, 32229; FAST-NEXT:    blr230;231; SLOW-LABEL: popz_i32_i64:232; SLOW:       # %bb.0:233; SLOW-NEXT:    rotlwi 5, 3, 31234; SLOW-NEXT:    andis. 6, 5, 21845235; SLOW-NEXT:    andi. 5, 5, 21845236; SLOW-NEXT:    or 5, 5, 6237; SLOW-NEXT:    lis 4, 13107238; SLOW-NEXT:    sub 3, 3, 5239; SLOW-NEXT:    ori 4, 4, 13107240; SLOW-NEXT:    rotlwi 5, 3, 30241; SLOW-NEXT:    and 3, 3, 4242; SLOW-NEXT:    andis. 4, 5, 13107243; SLOW-NEXT:    andi. 5, 5, 13107244; SLOW-NEXT:    or 4, 5, 4245; SLOW-NEXT:    add 3, 3, 4246; SLOW-NEXT:    lis 5, 3855247; SLOW-NEXT:    srwi 4, 3, 4248; SLOW-NEXT:    add 3, 3, 4249; SLOW-NEXT:    lis 4, 257250; SLOW-NEXT:    ori 5, 5, 3855251; SLOW-NEXT:    and 3, 3, 5252; SLOW-NEXT:    ori 4, 4, 257253; SLOW-NEXT:    mullw 3, 3, 4254; SLOW-NEXT:    rlwinm 3, 3, 8, 24, 31255; SLOW-NEXT:    blr256  %pop = tail call i32 @llvm.ctpop.i32(i32 %x)257  %z = zext i32 %pop to i64258  ret i64 %z259}260 261define i64 @popa_i16_i64(i16 %x) {262; FAST-LABEL: popa_i16_i64:263; FAST:       # %bb.0:264; FAST-NEXT:    clrldi 3, 3, 48265; FAST-NEXT:    popcntd 3, 3266; FAST-NEXT:    rlwinm 3, 3, 0, 27, 27267; FAST-NEXT:    blr268;269; SLOW-LABEL: popa_i16_i64:270; SLOW:       # %bb.0:271; SLOW-NEXT:    rotlwi 4, 3, 31272; SLOW-NEXT:    andi. 4, 4, 21845273; SLOW-NEXT:    sub 3, 3, 4274; SLOW-NEXT:    andi. 4, 3, 13107275; SLOW-NEXT:    rotlwi 3, 3, 30276; SLOW-NEXT:    andi. 3, 3, 13107277; SLOW-NEXT:    add 3, 4, 3278; SLOW-NEXT:    srwi 4, 3, 4279; SLOW-NEXT:    add 3, 3, 4280; SLOW-NEXT:    rlwinm 4, 3, 24, 28, 31281; SLOW-NEXT:    clrlwi 3, 3, 28282; SLOW-NEXT:    add 3, 3, 4283; SLOW-NEXT:    rlwinm 3, 3, 0, 27, 27284; SLOW-NEXT:    blr285  %pop = call i16 @llvm.ctpop.i16(i16 %x)286  %z = zext i16 %pop to i64 ; SimplifyDemandedBits may turn zext (or sext) into aext287  %a = and i64 %z, 16288  ret i64 %a289}290 291declare i8 @llvm.ctpop.i8(i8) nounwind readnone292declare i16 @llvm.ctpop.i16(i16) nounwind readnone293declare i32 @llvm.ctpop.i32(i32) nounwind readnone294declare i64 @llvm.ctpop.i64(i64) nounwind readnone295