Home | History | Annotate | Download | only in PowerPC
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s
      3 ; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s
      4 
      5 define zeroext i32 @ReverseBits(i32 zeroext %n) {
      6 ; CHECK-LABEL: ReverseBits:
      7 ; CHECK:       # %bb.0: # %entry
      8 ; CHECK-NEXT:    lis 4, -21846
      9 ; CHECK-NEXT:    lis 5, 21845
     10 ; CHECK-NEXT:    slwi 6, 3, 1
     11 ; CHECK-NEXT:    srwi 3, 3, 1
     12 ; CHECK-NEXT:    ori 4, 4, 43690
     13 ; CHECK-NEXT:    ori 5, 5, 21845
     14 ; CHECK-NEXT:    and 4, 6, 4
     15 ; CHECK-NEXT:    and 3, 3, 5
     16 ; CHECK-NEXT:    lis 5, 13107
     17 ; CHECK-NEXT:    or 3, 3, 4
     18 ; CHECK-NEXT:    lis 4, -13108
     19 ; CHECK-NEXT:    ori 5, 5, 13107
     20 ; CHECK-NEXT:    slwi 6, 3, 2
     21 ; CHECK-NEXT:    ori 4, 4, 52428
     22 ; CHECK-NEXT:    srwi 3, 3, 2
     23 ; CHECK-NEXT:    and 4, 6, 4
     24 ; CHECK-NEXT:    and 3, 3, 5
     25 ; CHECK-NEXT:    lis 5, 3855
     26 ; CHECK-NEXT:    or 3, 3, 4
     27 ; CHECK-NEXT:    lis 4, -3856
     28 ; CHECK-NEXT:    ori 5, 5, 3855
     29 ; CHECK-NEXT:    slwi 6, 3, 4
     30 ; CHECK-NEXT:    ori 4, 4, 61680
     31 ; CHECK-NEXT:    srwi 3, 3, 4
     32 ; CHECK-NEXT:    and 4, 6, 4
     33 ; CHECK-NEXT:    and 3, 3, 5
     34 ; CHECK-NEXT:    or 3, 3, 4
     35 ; CHECK-NEXT:    rotlwi 4, 3, 24
     36 ; CHECK-NEXT:    rlwimi 4, 3, 8, 8, 15
     37 ; CHECK-NEXT:    rlwimi 4, 3, 8, 24, 31
     38 ; CHECK-NEXT:    rldicl 3, 4, 0, 32
     39 ; CHECK-NEXT:    clrldi 3, 3, 32
     40 ; CHECK-NEXT:    blr
     41 entry:
     42   %shr = lshr i32 %n, 1
     43   %and = and i32 %shr, 1431655765
     44   %and1 = shl i32 %n, 1
     45   %shl = and i32 %and1, -1431655766
     46   %or = or i32 %and, %shl
     47   %shr2 = lshr i32 %or, 2
     48   %and3 = and i32 %shr2, 858993459
     49   %and4 = shl i32 %or, 2
     50   %shl5 = and i32 %and4, -858993460
     51   %or6 = or i32 %and3, %shl5
     52   %shr7 = lshr i32 %or6, 4
     53   %and8 = and i32 %shr7, 252645135
     54   %and9 = shl i32 %or6, 4
     55   %shl10 = and i32 %and9, -252645136
     56   %or11 = or i32 %and8, %shl10
     57   %shr13 = lshr i32 %or11, 24
     58   %and14 = lshr i32 %or11, 8
     59   %shr15 = and i32 %and14, 65280
     60   %and17 = shl i32 %or11, 8
     61   %shl18 = and i32 %and17, 16711680
     62   %shl21 = shl i32 %or11, 24
     63   %or16 = or i32 %shl21, %shr13
     64   %or19 = or i32 %or16, %shr15
     65   %or22 = or i32 %or19, %shl18
     66   ret i32 %or22
     67 }
     68 
     69 define i64 @ReverseBits64(i64 %n) {
     70 ; CHECK-LABEL: ReverseBits64:
     71 ; CHECK:       # %bb.0: # %entry
     72 ; CHECK-NEXT:    lis 4, -21846
     73 ; CHECK-NEXT:    lis 5, 21845
     74 ; CHECK-NEXT:    lis 6, -13108
     75 ; CHECK-NEXT:    lis 7, 13107
     76 ; CHECK-NEXT:    sldi 8, 3, 1
     77 ; CHECK-NEXT:    rldicl 3, 3, 63, 1
     78 ; CHECK-NEXT:    ori 4, 4, 43690
     79 ; CHECK-NEXT:    ori 5, 5, 21845
     80 ; CHECK-NEXT:    ori 6, 6, 52428
     81 ; CHECK-NEXT:    ori 7, 7, 13107
     82 ; CHECK-NEXT:    sldi 4, 4, 32
     83 ; CHECK-NEXT:    sldi 5, 5, 32
     84 ; CHECK-NEXT:    oris 4, 4, 43690
     85 ; CHECK-NEXT:    oris 5, 5, 21845
     86 ; CHECK-NEXT:    ori 4, 4, 43690
     87 ; CHECK-NEXT:    ori 5, 5, 21845
     88 ; CHECK-NEXT:    and 4, 8, 4
     89 ; CHECK-NEXT:    and 3, 3, 5
     90 ; CHECK-NEXT:    sldi 5, 6, 32
     91 ; CHECK-NEXT:    sldi 6, 7, 32
     92 ; CHECK-NEXT:    lis 7, 3855
     93 ; CHECK-NEXT:    or 3, 3, 4
     94 ; CHECK-NEXT:    oris 4, 5, 52428
     95 ; CHECK-NEXT:    oris 5, 6, 13107
     96 ; CHECK-NEXT:    lis 6, -3856
     97 ; CHECK-NEXT:    ori 7, 7, 3855
     98 ; CHECK-NEXT:    sldi 8, 3, 2
     99 ; CHECK-NEXT:    ori 4, 4, 52428
    100 ; CHECK-NEXT:    rldicl 3, 3, 62, 2
    101 ; CHECK-NEXT:    ori 5, 5, 13107
    102 ; CHECK-NEXT:    ori 6, 6, 61680
    103 ; CHECK-NEXT:    and 4, 8, 4
    104 ; CHECK-NEXT:    and 3, 3, 5
    105 ; CHECK-NEXT:    sldi 5, 6, 32
    106 ; CHECK-NEXT:    sldi 6, 7, 32
    107 ; CHECK-NEXT:    or 3, 3, 4
    108 ; CHECK-NEXT:    oris 4, 5, 61680
    109 ; CHECK-NEXT:    oris 5, 6, 3855
    110 ; CHECK-NEXT:    sldi 6, 3, 4
    111 ; CHECK-NEXT:    ori 4, 4, 61680
    112 ; CHECK-NEXT:    rldicl 3, 3, 60, 4
    113 ; CHECK-NEXT:    ori 5, 5, 3855
    114 ; CHECK-NEXT:    and 4, 6, 4
    115 ; CHECK-NEXT:    and 3, 3, 5
    116 ; CHECK-NEXT:    or 3, 3, 4
    117 ; CHECK-NEXT:    rldicl 4, 3, 32, 32
    118 ; CHECK-NEXT:    rlwinm 5, 3, 24, 0, 31
    119 ; CHECK-NEXT:    rlwinm 6, 4, 24, 0, 31
    120 ; CHECK-NEXT:    rlwimi 5, 3, 8, 8, 15
    121 ; CHECK-NEXT:    rlwimi 5, 3, 8, 24, 31
    122 ; CHECK-NEXT:    rlwimi 6, 4, 8, 8, 15
    123 ; CHECK-NEXT:    rlwimi 6, 4, 8, 24, 31
    124 ; CHECK-NEXT:    sldi 3, 5, 32
    125 ; CHECK-NEXT:    or 3, 3, 6
    126 ; CHECK-NEXT:    blr
    127 entry:
    128   %shr = lshr i64 %n, 1
    129   %and = and i64 %shr, 6148914691236517205
    130   %and1 = shl i64 %n, 1
    131   %shl = and i64 %and1, -6148914691236517206
    132   %or = or i64 %and, %shl
    133   %shr2 = lshr i64 %or, 2
    134   %and3 = and i64 %shr2, 3689348814741910323
    135   %and4 = shl i64 %or, 2
    136   %shl5 = and i64 %and4, -3689348814741910324
    137   %or6 = or i64 %and3, %shl5
    138   %shr7 = lshr i64 %or6, 4
    139   %and8 = and i64 %shr7, 1085102592571150095
    140   %and9 = shl i64 %or6, 4
    141   %shl10 = and i64 %and9, -1085102592571150096
    142   %or11 = or i64 %and8, %shl10
    143   %shr13 = lshr i64 %or11, 56
    144   %and14 = lshr i64 %or11, 40
    145   %shr15 = and i64 %and14, 65280
    146   %and17 = lshr i64 %or11, 24
    147   %shr18 = and i64 %and17, 16711680
    148   %and20 = lshr i64 %or11, 8
    149   %shr21 = and i64 %and20, 4278190080
    150   %and23 = shl i64 %or11, 8
    151   %shl24 = and i64 %and23, 1095216660480
    152   %and26 = shl i64 %or11, 24
    153   %shl27 = and i64 %and26, 280375465082880
    154   %and29 = shl i64 %or11, 40
    155   %shl30 = and i64 %and29, 71776119061217280
    156   %shl33 = shl i64 %or11, 56
    157   %or16 = or i64 %shl33, %shr13
    158   %or19 = or i64 %or16, %shr15
    159   %or22 = or i64 %or19, %shr18
    160   %or25 = or i64 %or22, %shr21
    161   %or28 = or i64 %or25, %shl24
    162   %or31 = or i64 %or28, %shl27
    163   %or34 = or i64 %or31, %shl30
    164   ret i64 %or34
    165 }
    166