Home | History | Annotate | Download | only in PowerPC
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc < %s | FileCheck %s
      3 target triple = "powerpc64le-linux-gnu"
      4 
      5 define i8 @test000(i8 %a, i8 %b) {
      6 ; CHECK-LABEL: test000:
      7 ; CHECK:       # %bb.0:
      8 ; CHECK-NEXT:    rlwinm 4, 4, 0, 29, 31
      9 ; CHECK-NEXT:    slw 3, 3, 4
     10 ; CHECK-NEXT:    blr
     11   %rem = and i8 %b, 7
     12   %shl = shl i8 %a, %rem
     13   ret i8 %shl
     14 }
     15 
     16 define i16 @test001(i16 %a, i16 %b) {
     17 ; CHECK-LABEL: test001:
     18 ; CHECK:       # %bb.0:
     19 ; CHECK-NEXT:    rlwinm 4, 4, 0, 28, 31
     20 ; CHECK-NEXT:    slw 3, 3, 4
     21 ; CHECK-NEXT:    blr
     22   %rem = and i16 %b, 15
     23   %shl = shl i16 %a, %rem
     24   ret i16 %shl
     25 }
     26 
     27 define i32 @test002(i32 %a, i32 %b) {
     28 ; CHECK-LABEL: test002:
     29 ; CHECK:       # %bb.0:
     30 ; CHECK-NEXT:    rlwinm 4, 4, 0, 27, 31
     31 ; CHECK-NEXT:    slw 3, 3, 4
     32 ; CHECK-NEXT:    blr
     33   %rem = and i32 %b, 31
     34   %shl = shl i32 %a, %rem
     35   ret i32 %shl
     36 }
     37 
     38 define i64 @test003(i64 %a, i64 %b) {
     39 ; CHECK-LABEL: test003:
     40 ; CHECK:       # %bb.0:
     41 ; CHECK-NEXT:    rlwinm 4, 4, 0, 26, 31
     42 ; CHECK-NEXT:    sld 3, 3, 4
     43 ; CHECK-NEXT:    blr
     44   %rem = and i64 %b, 63
     45   %shl = shl i64 %a, %rem
     46   ret i64 %shl
     47 }
     48 
     49 define <16 x i8> @test010(<16 x i8> %a, <16 x i8> %b) {
     50 ; CHECK-LABEL: test010:
     51 ; CHECK:       # %bb.0:
     52 ; CHECK-NEXT:    vslb 2, 2, 3
     53 ; CHECK-NEXT:    blr
     54   %rem = and <16 x i8> %b, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
     55   %shl = shl <16 x i8> %a, %rem
     56   ret <16 x i8> %shl
     57 }
     58 
     59 define <8 x i16> @test011(<8 x i16> %a, <8 x i16> %b) {
     60 ; CHECK-LABEL: test011:
     61 ; CHECK:       # %bb.0:
     62 ; CHECK-NEXT:    vslh 2, 2, 3
     63 ; CHECK-NEXT:    blr
     64   %rem = and <8 x i16> %b, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>
     65   %shl = shl <8 x i16> %a, %rem
     66   ret <8 x i16> %shl
     67 }
     68 
     69 define <4 x i32> @test012(<4 x i32> %a, <4 x i32> %b) {
     70 ; CHECK-LABEL: test012:
     71 ; CHECK:       # %bb.0:
     72 ; CHECK-NEXT:    vslw 2, 2, 3
     73 ; CHECK-NEXT:    blr
     74   %rem = and <4 x i32> %b, <i32 31, i32 31, i32 31, i32 31>
     75   %shl = shl <4 x i32> %a, %rem
     76   ret <4 x i32> %shl
     77 }
     78 
     79 define <2 x i64> @test013(<2 x i64> %a, <2 x i64> %b) {
     80 ; CHECK-LABEL: test013:
     81 ; CHECK:       # %bb.0:
     82 ; CHECK-NEXT:    vsld 2, 2, 3
     83 ; CHECK-NEXT:    blr
     84   %rem = and <2 x i64> %b, <i64 63, i64 63>
     85   %shl = shl <2 x i64> %a, %rem
     86   ret <2 x i64> %shl
     87 }
     88 
     89 define i8 @test100(i8 %a, i8 %b) {
     90 ; CHECK-LABEL: test100:
     91 ; CHECK:       # %bb.0:
     92 ; CHECK-NEXT:    rlwinm 3, 3, 0, 24, 31
     93 ; CHECK-NEXT:    rlwinm 4, 4, 0, 29, 31
     94 ; CHECK-NEXT:    srw 3, 3, 4
     95 ; CHECK-NEXT:    blr
     96   %rem = and i8 %b, 7
     97   %lshr = lshr i8 %a, %rem
     98   ret i8 %lshr
     99 }
    100 
    101 define i16 @test101(i16 %a, i16 %b) {
    102 ; CHECK-LABEL: test101:
    103 ; CHECK:       # %bb.0:
    104 ; CHECK-NEXT:    rlwinm 3, 3, 0, 16, 31
    105 ; CHECK-NEXT:    rlwinm 4, 4, 0, 28, 31
    106 ; CHECK-NEXT:    srw 3, 3, 4
    107 ; CHECK-NEXT:    blr
    108   %rem = and i16 %b, 15
    109   %lshr = lshr i16 %a, %rem
    110   ret i16 %lshr
    111 }
    112 
    113 define i32 @test102(i32 %a, i32 %b) {
    114 ; CHECK-LABEL: test102:
    115 ; CHECK:       # %bb.0:
    116 ; CHECK-NEXT:    rlwinm 4, 4, 0, 27, 31
    117 ; CHECK-NEXT:    srw 3, 3, 4
    118 ; CHECK-NEXT:    blr
    119   %rem = and i32 %b, 31
    120   %lshr = lshr i32 %a, %rem
    121   ret i32 %lshr
    122 }
    123 
    124 define i64 @test103(i64 %a, i64 %b) {
    125 ; CHECK-LABEL: test103:
    126 ; CHECK:       # %bb.0:
    127 ; CHECK-NEXT:    rlwinm 4, 4, 0, 26, 31
    128 ; CHECK-NEXT:    srd 3, 3, 4
    129 ; CHECK-NEXT:    blr
    130   %rem = and i64 %b, 63
    131   %lshr = lshr i64 %a, %rem
    132   ret i64 %lshr
    133 }
    134 
    135 define <16 x i8> @test110(<16 x i8> %a, <16 x i8> %b) {
    136 ; CHECK-LABEL: test110:
    137 ; CHECK:       # %bb.0:
    138 ; CHECK-NEXT:    vsrb 2, 2, 3
    139 ; CHECK-NEXT:    blr
    140   %rem = and <16 x i8> %b, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
    141   %lshr = lshr <16 x i8> %a, %rem
    142   ret <16 x i8> %lshr
    143 }
    144 
    145 define <8 x i16> @test111(<8 x i16> %a, <8 x i16> %b) {
    146 ; CHECK-LABEL: test111:
    147 ; CHECK:       # %bb.0:
    148 ; CHECK-NEXT:    vsrh 2, 2, 3
    149 ; CHECK-NEXT:    blr
    150   %rem = and <8 x i16> %b, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>
    151   %lshr = lshr <8 x i16> %a, %rem
    152   ret <8 x i16> %lshr
    153 }
    154 
    155 define <4 x i32> @test112(<4 x i32> %a, <4 x i32> %b) {
    156 ; CHECK-LABEL: test112:
    157 ; CHECK:       # %bb.0:
    158 ; CHECK-NEXT:    vsrw 2, 2, 3
    159 ; CHECK-NEXT:    blr
    160   %rem = and <4 x i32> %b, <i32 31, i32 31, i32 31, i32 31>
    161   %lshr = lshr <4 x i32> %a, %rem
    162   ret <4 x i32> %lshr
    163 }
    164 
    165 define <2 x i64> @test113(<2 x i64> %a, <2 x i64> %b) {
    166 ; CHECK-LABEL: test113:
    167 ; CHECK:       # %bb.0:
    168 ; CHECK-NEXT:    vsrd 2, 2, 3
    169 ; CHECK-NEXT:    blr
    170   %rem = and <2 x i64> %b, <i64 63, i64 63>
    171   %lshr = lshr <2 x i64> %a, %rem
    172   ret <2 x i64> %lshr
    173 }
    174 
    175 define i8 @test200(i8 %a, i8 %b) {
    176 ; CHECK-LABEL: test200:
    177 ; CHECK:       # %bb.0:
    178 ; CHECK-NEXT:    extsb 3, 3
    179 ; CHECK-NEXT:    rlwinm 4, 4, 0, 29, 31
    180 ; CHECK-NEXT:    sraw 3, 3, 4
    181 ; CHECK-NEXT:    blr
    182   %rem = and i8 %b, 7
    183   %ashr = ashr i8 %a, %rem
    184   ret i8 %ashr
    185 }
    186 
    187 define i16 @test201(i16 %a, i16 %b) {
    188 ; CHECK-LABEL: test201:
    189 ; CHECK:       # %bb.0:
    190 ; CHECK-NEXT:    extsh 3, 3
    191 ; CHECK-NEXT:    rlwinm 4, 4, 0, 28, 31
    192 ; CHECK-NEXT:    sraw 3, 3, 4
    193 ; CHECK-NEXT:    blr
    194   %rem = and i16 %b, 15
    195   %ashr = ashr i16 %a, %rem
    196   ret i16 %ashr
    197 }
    198 
    199 define i32 @test202(i32 %a, i32 %b) {
    200 ; CHECK-LABEL: test202:
    201 ; CHECK:       # %bb.0:
    202 ; CHECK-NEXT:    rlwinm 4, 4, 0, 27, 31
    203 ; CHECK-NEXT:    sraw 3, 3, 4
    204 ; CHECK-NEXT:    blr
    205   %rem = and i32 %b, 31
    206   %ashr = ashr i32 %a, %rem
    207   ret i32 %ashr
    208 }
    209 
    210 define i64 @test203(i64 %a, i64 %b) {
    211 ; CHECK-LABEL: test203:
    212 ; CHECK:       # %bb.0:
    213 ; CHECK-NEXT:    rlwinm 4, 4, 0, 26, 31
    214 ; CHECK-NEXT:    srad 3, 3, 4
    215 ; CHECK-NEXT:    blr
    216   %rem = and i64 %b, 63
    217   %ashr = ashr i64 %a, %rem
    218   ret i64 %ashr
    219 }
    220 
    221 define <16 x i8> @test210(<16 x i8> %a, <16 x i8> %b) {
    222 ; CHECK-LABEL: test210:
    223 ; CHECK:       # %bb.0:
    224 ; CHECK-NEXT:    vsrab 2, 2, 3
    225 ; CHECK-NEXT:    blr
    226   %rem = and <16 x i8> %b, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
    227   %ashr = ashr <16 x i8> %a, %rem
    228   ret <16 x i8> %ashr
    229 }
    230 
    231 define <8 x i16> @test211(<8 x i16> %a, <8 x i16> %b) {
    232 ; CHECK-LABEL: test211:
    233 ; CHECK:       # %bb.0:
    234 ; CHECK-NEXT:    vsrah 2, 2, 3
    235 ; CHECK-NEXT:    blr
    236   %rem = and <8 x i16> %b, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>
    237   %ashr = ashr <8 x i16> %a, %rem
    238   ret <8 x i16> %ashr
    239 }
    240 
    241 define <4 x i32> @test212(<4 x i32> %a, <4 x i32> %b) {
    242 ; CHECK-LABEL: test212:
    243 ; CHECK:       # %bb.0:
    244 ; CHECK-NEXT:    vsraw 2, 2, 3
    245 ; CHECK-NEXT:    blr
    246   %rem = and <4 x i32> %b, <i32 31, i32 31, i32 31, i32 31>
    247   %ashr = ashr <4 x i32> %a, %rem
    248   ret <4 x i32> %ashr
    249 }
    250 
    251 define <2 x i64> @test213(<2 x i64> %a, <2 x i64> %b) {
    252 ; CHECK-LABEL: test213:
    253 ; CHECK:       # %bb.0:
    254 ; CHECK-NEXT:    vsrad 2, 2, 3
    255 ; CHECK-NEXT:    blr
    256   %rem = and <2 x i64> %b, <i64 63, i64 63>
    257   %ashr = ashr <2 x i64> %a, %rem
    258   ret <2 x i64> %ashr
    259 }
    260