167 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s3; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s4; RUN: llc -mtriple=powerpc64-ibm-aix-xcoff -mcpu=pwr8 -vec-extabi < %s | FileCheck %s5 6define zeroext i32 @ReverseBits(i32 zeroext %n) {7; CHECK-LABEL: ReverseBits:8; CHECK: # %bb.0: # %entry9; CHECK-NEXT: lis 4, -2184610; CHECK-NEXT: slwi 5, 3, 111; CHECK-NEXT: srwi 3, 3, 112; CHECK-NEXT: ori 4, 4, 4369013; CHECK-NEXT: and 4, 5, 414; CHECK-NEXT: lis 5, 2184515; CHECK-NEXT: ori 5, 5, 2184516; CHECK-NEXT: and 3, 3, 517; CHECK-NEXT: lis 5, -1310818; CHECK-NEXT: or 3, 3, 419; CHECK-NEXT: ori 5, 5, 5242820; CHECK-NEXT: slwi 4, 3, 221; CHECK-NEXT: srwi 3, 3, 222; CHECK-NEXT: and 4, 4, 523; CHECK-NEXT: lis 5, 1310724; CHECK-NEXT: ori 5, 5, 1310725; CHECK-NEXT: and 3, 3, 526; CHECK-NEXT: lis 5, -385627; CHECK-NEXT: or 3, 3, 428; CHECK-NEXT: ori 5, 5, 6168029; CHECK-NEXT: slwi 4, 3, 430; CHECK-NEXT: srwi 3, 3, 431; CHECK-NEXT: and 4, 4, 532; CHECK-NEXT: lis 5, 385533; CHECK-NEXT: ori 5, 5, 385534; CHECK-NEXT: and 3, 3, 535; CHECK-NEXT: or 3, 3, 436; CHECK-NEXT: rotlwi 4, 3, 2437; CHECK-NEXT: rlwimi 4, 3, 8, 8, 1538; CHECK-NEXT: rlwimi 4, 3, 8, 24, 3139; CHECK-NEXT: rldicl 3, 4, 0, 3240; CHECK-NEXT: clrldi 3, 3, 3241; CHECK-NEXT: blr42entry:43 %shr = lshr i32 %n, 144 %and = and i32 %shr, 143165576545 %and1 = shl i32 %n, 146 %shl = and i32 %and1, -143165576647 %or = or i32 %and, %shl48 %shr2 = lshr i32 %or, 249 %and3 = and i32 %shr2, 85899345950 %and4 = shl i32 %or, 251 %shl5 = and i32 %and4, -85899346052 %or6 = or i32 %and3, %shl553 %shr7 = lshr i32 %or6, 454 %and8 = and i32 %shr7, 25264513555 %and9 = shl i32 %or6, 456 %shl10 = and i32 %and9, -25264513657 %or11 = or i32 %and8, %shl1058 %shr13 = lshr i32 %or11, 2459 %and14 = lshr i32 %or11, 860 %shr15 = and i32 %and14, 6528061 %and17 = shl i32 %or11, 862 %shl18 = and i32 %and17, 1671168063 %shl21 = shl i32 %or11, 2464 %or16 = or i32 %shl21, %shr1365 %or19 = or i32 %or16, %shr1566 %or22 = or i32 %or19, %shl1867 ret i32 %or2268}69 70define i64 @ReverseBits64(i64 %n) {71; CHECK-LABEL: ReverseBits64:72; CHECK: # %bb.0: # %entry73; CHECK-NEXT: lis 4, -2184674; CHECK-NEXT: sldi 5, 3, 175; CHECK-NEXT: rldicl 3, 3, 63, 176; CHECK-NEXT: ori 4, 4, 4369077; CHECK-NEXT: sldi 4, 4, 3278; CHECK-NEXT: oris 4, 4, 4369079; CHECK-NEXT: ori 4, 4, 4369080; CHECK-NEXT: and 4, 5, 481; CHECK-NEXT: lis 5, 2184582; CHECK-NEXT: ori 5, 5, 2184583; CHECK-NEXT: sldi 5, 5, 3284; CHECK-NEXT: oris 5, 5, 2184585; CHECK-NEXT: ori 5, 5, 2184586; CHECK-NEXT: and 3, 3, 587; CHECK-NEXT: lis 5, -1310888; CHECK-NEXT: ori 5, 5, 5242889; CHECK-NEXT: or 3, 3, 490; CHECK-NEXT: sldi 5, 5, 3291; CHECK-NEXT: sldi 4, 3, 292; CHECK-NEXT: rldicl 3, 3, 62, 293; CHECK-NEXT: oris 5, 5, 5242894; CHECK-NEXT: ori 5, 5, 5242895; CHECK-NEXT: and 4, 4, 596; CHECK-NEXT: lis 5, 1310797; CHECK-NEXT: ori 5, 5, 1310798; CHECK-NEXT: sldi 5, 5, 3299; CHECK-NEXT: oris 5, 5, 13107100; CHECK-NEXT: ori 5, 5, 13107101; CHECK-NEXT: and 3, 3, 5102; CHECK-NEXT: lis 5, -3856103; CHECK-NEXT: ori 5, 5, 61680104; CHECK-NEXT: or 3, 3, 4105; CHECK-NEXT: sldi 5, 5, 32106; CHECK-NEXT: sldi 4, 3, 4107; CHECK-NEXT: rldicl 3, 3, 60, 4108; CHECK-NEXT: oris 5, 5, 61680109; CHECK-NEXT: ori 5, 5, 61680110; CHECK-NEXT: and 4, 4, 5111; CHECK-NEXT: lis 5, 3855112; CHECK-NEXT: ori 5, 5, 3855113; CHECK-NEXT: sldi 5, 5, 32114; CHECK-NEXT: oris 5, 5, 3855115; CHECK-NEXT: ori 5, 5, 3855116; CHECK-NEXT: and 3, 3, 5117; CHECK-NEXT: or 3, 3, 4118; CHECK-NEXT: rldicl 4, 3, 32, 32119; CHECK-NEXT: rotlwi 5, 4, 24120; CHECK-NEXT: rlwimi 5, 4, 8, 8, 15121; CHECK-NEXT: rlwimi 5, 4, 8, 24, 31122; CHECK-NEXT: rotlwi 4, 3, 24123; CHECK-NEXT: rlwimi 4, 3, 8, 8, 15124; CHECK-NEXT: rlwimi 4, 3, 8, 24, 31125; CHECK-NEXT: sldi 3, 4, 32126; CHECK-NEXT: or 3, 3, 5127; CHECK-NEXT: blr128entry:129 %shr = lshr i64 %n, 1130 %and = and i64 %shr, 6148914691236517205131 %and1 = shl i64 %n, 1132 %shl = and i64 %and1, -6148914691236517206133 %or = or i64 %and, %shl134 %shr2 = lshr i64 %or, 2135 %and3 = and i64 %shr2, 3689348814741910323136 %and4 = shl i64 %or, 2137 %shl5 = and i64 %and4, -3689348814741910324138 %or6 = or i64 %and3, %shl5139 %shr7 = lshr i64 %or6, 4140 %and8 = and i64 %shr7, 1085102592571150095141 %and9 = shl i64 %or6, 4142 %shl10 = and i64 %and9, -1085102592571150096143 %or11 = or i64 %and8, %shl10144 %shr13 = lshr i64 %or11, 56145 %and14 = lshr i64 %or11, 40146 %shr15 = and i64 %and14, 65280147 %and17 = lshr i64 %or11, 24148 %shr18 = and i64 %and17, 16711680149 %and20 = lshr i64 %or11, 8150 %shr21 = and i64 %and20, 4278190080151 %and23 = shl i64 %or11, 8152 %shl24 = and i64 %and23, 1095216660480153 %and26 = shl i64 %or11, 24154 %shl27 = and i64 %and26, 280375465082880155 %and29 = shl i64 %or11, 40156 %shl30 = and i64 %and29, 71776119061217280157 %shl33 = shl i64 %or11, 56158 %or16 = or i64 %shl33, %shr13159 %or19 = or i64 %or16, %shr15160 %or22 = or i64 %or19, %shr18161 %or25 = or i64 %or22, %shr21162 %or28 = or i64 %or25, %shl24163 %or31 = or i64 %or28, %shl27164 %or34 = or i64 %or31, %shl30165 ret i64 %or34166}167