Home | History | Annotate | Download | only in NVPTX
      1 ; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s
      2 ; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 | FileCheck %s
      3 
      4 ;; These tests should run for all targets
      5 
      6 ;;===-- Basic instruction selection tests ---------------------------------===;;
      7 
      8 
      9 ;;; i64
     10 
     11 define i64 @add_i64(i64 %a, i64 %b) {
     12 ; CHECK: add.s64 %rl{{[0-9]+}}, %rl{{[0-9]+}}, %rl{{[0-9]+}}
     13 ; CHECK: ret
     14   %ret = add i64 %a, %b
     15   ret i64 %ret
     16 }
     17 
     18 define i64 @sub_i64(i64 %a, i64 %b) {
     19 ; CHECK: sub.s64 %rl{{[0-9]+}}, %rl{{[0-9]+}}, %rl{{[0-9]+}}
     20 ; CHECK: ret
     21   %ret = sub i64 %a, %b
     22   ret i64 %ret
     23 }
     24 
     25 define i64 @mul_i64(i64 %a, i64 %b) {
     26 ; CHECK: mul.lo.s64 %rl{{[0-9]+}}, %rl{{[0-9]+}}, %rl{{[0-9]+}}
     27 ; CHECK: ret
     28   %ret = mul i64 %a, %b
     29   ret i64 %ret
     30 }
     31 
     32 define i64 @sdiv_i64(i64 %a, i64 %b) {
     33 ; CHECK: div.s64 %rl{{[0-9]+}}, %rl{{[0-9]+}}, %rl{{[0-9]+}}
     34 ; CHECK: ret
     35   %ret = sdiv i64 %a, %b
     36   ret i64 %ret
     37 }
     38 
     39 define i64 @udiv_i64(i64 %a, i64 %b) {
     40 ; CHECK: div.u64 %rl{{[0-9]+}}, %rl{{[0-9]+}}, %rl{{[0-9]+}}
     41 ; CHECK: ret
     42   %ret = udiv i64 %a, %b
     43   ret i64 %ret
     44 }
     45 
     46 define i64 @srem_i64(i64 %a, i64 %b) {
     47 ; CHECK: rem.s64 %rl{{[0-9]+}}, %rl{{[0-9]+}}, %rl{{[0-9]+}}
     48 ; CHECK: ret
     49   %ret = srem i64 %a, %b
     50   ret i64 %ret
     51 }
     52 
     53 define i64 @urem_i64(i64 %a, i64 %b) {
     54 ; CHECK: rem.u64 %rl{{[0-9]+}}, %rl{{[0-9]+}}, %rl{{[0-9]+}}
     55 ; CHECK: ret
     56   %ret = urem i64 %a, %b
     57   ret i64 %ret
     58 }
     59 
     60 define i64 @and_i64(i64 %a, i64 %b) {
     61 ; CHECK: and.b64 %rl{{[0-9]+}}, %rl{{[0-9]+}}, %rl{{[0-9]+}}
     62 ; CHECK: ret
     63   %ret = and i64 %a, %b
     64   ret i64 %ret
     65 }
     66 
     67 define i64 @or_i64(i64 %a, i64 %b) {
     68 ; CHECK: or.b64 %rl{{[0-9]+}}, %rl{{[0-9]+}}, %rl{{[0-9]+}}
     69 ; CHECK: ret
     70   %ret = or i64 %a, %b
     71   ret i64 %ret
     72 }
     73 
     74 define i64 @xor_i64(i64 %a, i64 %b) {
     75 ; CHECK: xor.b64 %rl{{[0-9]+}}, %rl{{[0-9]+}}, %rl{{[0-9]+}}
     76 ; CHECK: ret
     77   %ret = xor i64 %a, %b
     78   ret i64 %ret
     79 }
     80 
     81 define i64 @shl_i64(i64 %a, i64 %b) {
     82 ; PTX requires 32-bit shift amount
     83 ; CHECK: shl.b64 %rl{{[0-9]+}}, %rl{{[0-9]+}}, %r{{[0-9]+}}
     84 ; CHECK: ret
     85   %ret = shl i64 %a, %b
     86   ret i64 %ret
     87 }
     88 
     89 define i64 @ashr_i64(i64 %a, i64 %b) {
     90 ; PTX requires 32-bit shift amount
     91 ; CHECK: shr.s64 %rl{{[0-9]+}}, %rl{{[0-9]+}}, %r{{[0-9]+}}
     92 ; CHECK: ret
     93   %ret = ashr i64 %a, %b
     94   ret i64 %ret
     95 }
     96 
     97 define i64 @lshr_i64(i64 %a, i64 %b) {
     98 ; PTX requires 32-bit shift amount
     99 ; CHECK: shr.u64 %rl{{[0-9]+}}, %rl{{[0-9]+}}, %r{{[0-9]+}}
    100 ; CHECK: ret
    101   %ret = lshr i64 %a, %b
    102   ret i64 %ret
    103 }
    104 
    105 
    106 ;;; i32
    107 
    108 define i32 @add_i32(i32 %a, i32 %b) {
    109 ; CHECK: add.s32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
    110 ; CHECK: ret
    111   %ret = add i32 %a, %b
    112   ret i32 %ret
    113 }
    114 
    115 define i32 @sub_i32(i32 %a, i32 %b) {
    116 ; CHECK: sub.s32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
    117 ; CHECK: ret
    118   %ret = sub i32 %a, %b
    119   ret i32 %ret
    120 }
    121 
    122 define i32 @mul_i32(i32 %a, i32 %b) {
    123 ; CHECK: mul.lo.s32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
    124 ; CHECK: ret
    125   %ret = mul i32 %a, %b
    126   ret i32 %ret
    127 }
    128 
    129 define i32 @sdiv_i32(i32 %a, i32 %b) {
    130 ; CHECK: div.s32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
    131 ; CHECK: ret
    132   %ret = sdiv i32 %a, %b
    133   ret i32 %ret
    134 }
    135 
    136 define i32 @udiv_i32(i32 %a, i32 %b) {
    137 ; CHECK: div.u32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
    138 ; CHECK: ret
    139   %ret = udiv i32 %a, %b
    140   ret i32 %ret
    141 }
    142 
    143 define i32 @srem_i32(i32 %a, i32 %b) {
    144 ; CHECK: rem.s32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
    145 ; CHECK: ret
    146   %ret = srem i32 %a, %b
    147   ret i32 %ret
    148 }
    149 
    150 define i32 @urem_i32(i32 %a, i32 %b) {
    151 ; CHECK: rem.u32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
    152 ; CHECK: ret
    153   %ret = urem i32 %a, %b
    154   ret i32 %ret
    155 }
    156 
    157 define i32 @and_i32(i32 %a, i32 %b) {
    158 ; CHECK: and.b32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
    159 ; CHECK: ret
    160   %ret = and i32 %a, %b
    161   ret i32 %ret
    162 }
    163 
    164 define i32 @or_i32(i32 %a, i32 %b) {
    165 ; CHECK: or.b32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
    166 ; CHECK: ret
    167   %ret = or i32 %a, %b
    168   ret i32 %ret
    169 }
    170 
    171 define i32 @xor_i32(i32 %a, i32 %b) {
    172 ; CHECK: xor.b32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
    173 ; CHECK: ret
    174   %ret = xor i32 %a, %b
    175   ret i32 %ret
    176 }
    177 
    178 define i32 @shl_i32(i32 %a, i32 %b) {
    179 ; CHECK: shl.b32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
    180 ; CHECK: ret
    181   %ret = shl i32 %a, %b
    182   ret i32 %ret
    183 }
    184 
    185 define i32 @ashr_i32(i32 %a, i32 %b) {
    186 ; CHECK: shr.s32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
    187 ; CHECK: ret
    188   %ret = ashr i32 %a, %b
    189   ret i32 %ret
    190 }
    191 
    192 define i32 @lshr_i32(i32 %a, i32 %b) {
    193 ; CHECK: shr.u32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
    194 ; CHECK: ret
    195   %ret = lshr i32 %a, %b
    196   ret i32 %ret
    197 }
    198 
    199 ;;; i16
    200 
    201 define i16 @add_i16(i16 %a, i16 %b) {
    202 ; CHECK: add.s16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}
    203 ; CHECK: ret
    204   %ret = add i16 %a, %b
    205   ret i16 %ret
    206 }
    207 
    208 define i16 @sub_i16(i16 %a, i16 %b) {
    209 ; CHECK: sub.s16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}
    210 ; CHECK: ret
    211   %ret = sub i16 %a, %b
    212   ret i16 %ret
    213 }
    214 
    215 define i16 @mul_i16(i16 %a, i16 %b) {
    216 ; CHECK: mul.lo.s16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}
    217 ; CHECK: ret
    218   %ret = mul i16 %a, %b
    219   ret i16 %ret
    220 }
    221 
    222 define i16 @sdiv_i16(i16 %a, i16 %b) {
    223 ; CHECK: div.s16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}
    224 ; CHECK: ret
    225   %ret = sdiv i16 %a, %b
    226   ret i16 %ret
    227 }
    228 
    229 define i16 @udiv_i16(i16 %a, i16 %b) {
    230 ; CHECK: div.u16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}
    231 ; CHECK: ret
    232   %ret = udiv i16 %a, %b
    233   ret i16 %ret
    234 }
    235 
    236 define i16 @srem_i16(i16 %a, i16 %b) {
    237 ; CHECK: rem.s16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}
    238 ; CHECK: ret
    239   %ret = srem i16 %a, %b
    240   ret i16 %ret
    241 }
    242 
    243 define i16 @urem_i16(i16 %a, i16 %b) {
    244 ; CHECK: rem.u16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}
    245 ; CHECK: ret
    246   %ret = urem i16 %a, %b
    247   ret i16 %ret
    248 }
    249 
    250 define i16 @and_i16(i16 %a, i16 %b) {
    251 ; CHECK: and.b16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}
    252 ; CHECK: ret
    253   %ret = and i16 %a, %b
    254   ret i16 %ret
    255 }
    256 
    257 define i16 @or_i16(i16 %a, i16 %b) {
    258 ; CHECK: or.b16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}
    259 ; CHECK: ret
    260   %ret = or i16 %a, %b
    261   ret i16 %ret
    262 }
    263 
    264 define i16 @xor_i16(i16 %a, i16 %b) {
    265 ; CHECK: xor.b16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}
    266 ; CHECK: ret
    267   %ret = xor i16 %a, %b
    268   ret i16 %ret
    269 }
    270 
    271 define i16 @shl_i16(i16 %a, i16 %b) {
    272 ; PTX requires 32-bit shift amount
    273 ; CHECK: shl.b16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %r{{[0-9]+}}
    274 ; CHECK: ret
    275   %ret = shl i16 %a, %b
    276   ret i16 %ret
    277 }
    278 
    279 define i16 @ashr_i16(i16 %a, i16 %b) {
    280 ; PTX requires 32-bit shift amount
    281 ; CHECK: shr.s16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %r{{[0-9]+}}
    282 ; CHECK: ret
    283   %ret = ashr i16 %a, %b
    284   ret i16 %ret
    285 }
    286 
    287 define i16 @lshr_i16(i16 %a, i16 %b) {
    288 ; PTX requires 32-bit shift amount
    289 ; CHECK: shr.u16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %r{{[0-9]+}}
    290 ; CHECK: ret
    291   %ret = lshr i16 %a, %b
    292   ret i16 %ret
    293 }
    294