Home | History | Annotate | Download | only in NVPTX
      1 ; RUN: llc < %s -march=nvptx -mcpu=sm_20 -O2 | FileCheck %s
      2 
      3 ; *************************************
      4 ; * Cases with no min/max
      5 
      6 define i32 @ab_eq_i32(i32 %a, i32 %b) {
      7 ; LABEL: @ab_slt_i32
      8 ; CHECK-NOT: min
      9 ; CHECK-NOT: max
     10   %cmp = icmp eq i32 %a, %b
     11   %sel = select i1 %cmp, i32 %a, i32 %b
     12   ret i32 %sel
     13 }
     14 
     15 define i64 @ba_ne_i64(i64 %a, i64 %b) {
     16 ; LABEL: @ab_ne_i64
     17 ; CHECK-NOT: min
     18 ; CHECK-NOT: max
     19   %cmp = icmp ne i64 %a, %b
     20   %sel = select i1 %cmp, i64 %b, i64 %a
     21   ret i64 %sel
     22 }
     23 
     24 ; *************************************
     25 ; * All variations with i16
     26 
     27 ; *** ab, unsigned, i16
     28 define i16 @ab_ugt_i16(i16 %a, i16 %b) {
     29 ; LABEL: @ab_ugt_i16
     30 ; CHECK: max.u16
     31   %cmp = icmp ugt i16 %a, %b
     32   %sel = select i1 %cmp, i16 %a, i16 %b
     33   ret i16 %sel
     34 }
     35 
     36 define i16 @ab_uge_i16(i16 %a, i16 %b) {
     37 ; LABEL: @ab_uge_i16
     38 ; CHECK: max.u16
     39   %cmp = icmp uge i16 %a, %b
     40   %sel = select i1 %cmp, i16 %a, i16 %b
     41   ret i16 %sel
     42 }
     43 
     44 define i16 @ab_ult_i16(i16 %a, i16 %b) {
     45 ; LABEL: @ab_ult_i16
     46 ; CHECK: min.u16
     47   %cmp = icmp ult i16 %a, %b
     48   %sel = select i1 %cmp, i16 %a, i16 %b
     49   ret i16 %sel
     50 }
     51 
     52 define i16 @ab_ule_i16(i16 %a, i16 %b) {
     53 ; LABEL: @ab_ule_i16
     54 ; CHECK: min.u16
     55   %cmp = icmp ule i16 %a, %b
     56   %sel = select i1 %cmp, i16 %a, i16 %b
     57   ret i16 %sel
     58 }
     59 
     60 ; *** ab, signed, i16
     61 define i16 @ab_sgt_i16(i16 %a, i16 %b) {
     62 ; LABEL: @ab_ugt_i16
     63 ; CHECK: max.s16
     64   %cmp = icmp sgt i16 %a, %b
     65   %sel = select i1 %cmp, i16 %a, i16 %b
     66   ret i16 %sel
     67 }
     68 
     69 define i16 @ab_sge_i16(i16 %a, i16 %b) {
     70 ; LABEL: @ab_sge_i16
     71 ; CHECK: max.s16
     72   %cmp = icmp sge i16 %a, %b
     73   %sel = select i1 %cmp, i16 %a, i16 %b
     74   ret i16 %sel
     75 }
     76 
     77 define i16 @ab_slt_i16(i16 %a, i16 %b) {
     78 ; LABEL: @ab_slt_i16
     79 ; CHECK: min.s16
     80   %cmp = icmp slt i16 %a, %b
     81   %sel = select i1 %cmp, i16 %a, i16 %b
     82   ret i16 %sel
     83 }
     84 
     85 define i16 @ab_sle_i16(i16 %a, i16 %b) {
     86 ; LABEL: @ab_sle_i16
     87 ; CHECK: min.s16
     88   %cmp = icmp sle i16 %a, %b
     89   %sel = select i1 %cmp, i16 %a, i16 %b
     90   ret i16 %sel
     91 }
     92 
     93 ; *** ba, unsigned, i16
     94 define i16 @ba_ugt_i16(i16 %a, i16 %b) {
     95 ; LABEL: @ba_ugt_i16
     96 ; CHECK: min.u16
     97   %cmp = icmp ugt i16 %a, %b
     98   %sel = select i1 %cmp, i16 %b, i16 %a
     99   ret i16 %sel
    100 }
    101 
    102 define i16 @ba_uge_i16(i16 %a, i16 %b) {
    103 ; LABEL: @ba_uge_i16
    104 ; CHECK: min.u16
    105   %cmp = icmp uge i16 %a, %b
    106   %sel = select i1 %cmp, i16 %b, i16 %a
    107   ret i16 %sel
    108 }
    109 
    110 define i16 @ba_ult_i16(i16 %a, i16 %b) {
    111 ; LABEL: @ba_ult_i16
    112 ; CHECK: max.u16
    113   %cmp = icmp ult i16 %a, %b
    114   %sel = select i1 %cmp, i16 %b, i16 %a
    115   ret i16 %sel
    116 }
    117 
    118 define i16 @ba_ule_i16(i16 %a, i16 %b) {
    119 ; LABEL: @ba_ule_i16
    120 ; CHECK: max.u16
    121   %cmp = icmp ule i16 %a, %b
    122   %sel = select i1 %cmp, i16 %b, i16 %a
    123   ret i16 %sel
    124 }
    125 
    126 ; *** ba, signed, i16
    127 define i16 @ba_sgt_i16(i16 %a, i16 %b) {
    128 ; LBAEL: @ba_ugt_i16
    129 ; CHECK: min.s16
    130   %cmp = icmp sgt i16 %a, %b
    131   %sel = select i1 %cmp, i16 %b, i16 %a
    132   ret i16 %sel
    133 }
    134 
    135 define i16 @ba_sge_i16(i16 %a, i16 %b) {
    136 ; LABEL: @ba_sge_i16
    137 ; CHECK: min.s16
    138   %cmp = icmp sge i16 %a, %b
    139   %sel = select i1 %cmp, i16 %b, i16 %a
    140   ret i16 %sel
    141 }
    142 
    143 define i16 @ba_slt_i16(i16 %a, i16 %b) {
    144 ; LABEL: @ba_slt_i16
    145 ; CHECK: max.s16
    146   %cmp = icmp slt i16 %a, %b
    147   %sel = select i1 %cmp, i16 %b, i16 %a
    148   ret i16 %sel
    149 }
    150 
    151 define i16 @ba_sle_i16(i16 %a, i16 %b) {
    152 ; LABEL: @ba_sle_i16
    153 ; CHECK: max.s16
    154   %cmp = icmp sle i16 %a, %b
    155   %sel = select i1 %cmp, i16 %b, i16 %a
    156   ret i16 %sel
    157 }
    158 
    159 ; *************************************
    160 ; * All variations with i32
    161 
    162 ; *** ab, unsigned, i32
    163 define i32 @ab_ugt_i32(i32 %a, i32 %b) {
    164 ; LABEL: @ab_ugt_i32
    165 ; CHECK: max.u32
    166   %cmp = icmp ugt i32 %a, %b
    167   %sel = select i1 %cmp, i32 %a, i32 %b
    168   ret i32 %sel
    169 }
    170 
    171 define i32 @ab_uge_i32(i32 %a, i32 %b) {
    172 ; LABEL: @ab_uge_i32
    173 ; CHECK: max.u32
    174   %cmp = icmp uge i32 %a, %b
    175   %sel = select i1 %cmp, i32 %a, i32 %b
    176   ret i32 %sel
    177 }
    178 
    179 define i32 @ab_ult_i32(i32 %a, i32 %b) {
    180 ; LABEL: @ab_ult_i32
    181 ; CHECK: min.u32
    182   %cmp = icmp ult i32 %a, %b
    183   %sel = select i1 %cmp, i32 %a, i32 %b
    184   ret i32 %sel
    185 }
    186 
    187 define i32 @ab_ule_i32(i32 %a, i32 %b) {
    188 ; LABEL: @ab_ule_i32
    189 ; CHECK: min.u32
    190   %cmp = icmp ule i32 %a, %b
    191   %sel = select i1 %cmp, i32 %a, i32 %b
    192   ret i32 %sel
    193 }
    194 
    195 ; *** ab, signed, i32
    196 define i32 @ab_sgt_i32(i32 %a, i32 %b) {
    197 ; LABEL: @ab_ugt_i32
    198 ; CHECK: max.s32
    199   %cmp = icmp sgt i32 %a, %b
    200   %sel = select i1 %cmp, i32 %a, i32 %b
    201   ret i32 %sel
    202 }
    203 
    204 define i32 @ab_sge_i32(i32 %a, i32 %b) {
    205 ; LABEL: @ab_sge_i32
    206 ; CHECK: max.s32
    207   %cmp = icmp sge i32 %a, %b
    208   %sel = select i1 %cmp, i32 %a, i32 %b
    209   ret i32 %sel
    210 }
    211 
    212 define i32 @ab_slt_i32(i32 %a, i32 %b) {
    213 ; LABEL: @ab_slt_i32
    214 ; CHECK: min.s32
    215   %cmp = icmp slt i32 %a, %b
    216   %sel = select i1 %cmp, i32 %a, i32 %b
    217   ret i32 %sel
    218 }
    219 
    220 define i32 @ab_sle_i32(i32 %a, i32 %b) {
    221 ; LABEL: @ab_sle_i32
    222 ; CHECK: min.s32
    223   %cmp = icmp sle i32 %a, %b
    224   %sel = select i1 %cmp, i32 %a, i32 %b
    225   ret i32 %sel
    226 }
    227 
    228 ; *** ba, unsigned, i32
    229 define i32 @ba_ugt_i32(i32 %a, i32 %b) {
    230 ; LABEL: @ba_ugt_i32
    231 ; CHECK: min.u32
    232   %cmp = icmp ugt i32 %a, %b
    233   %sel = select i1 %cmp, i32 %b, i32 %a
    234   ret i32 %sel
    235 }
    236 
    237 define i32 @ba_uge_i32(i32 %a, i32 %b) {
    238 ; LABEL: @ba_uge_i32
    239 ; CHECK: min.u32
    240   %cmp = icmp uge i32 %a, %b
    241   %sel = select i1 %cmp, i32 %b, i32 %a
    242   ret i32 %sel
    243 }
    244 
    245 define i32 @ba_ult_i32(i32 %a, i32 %b) {
    246 ; LABEL: @ba_ult_i32
    247 ; CHECK: max.u32
    248   %cmp = icmp ult i32 %a, %b
    249   %sel = select i1 %cmp, i32 %b, i32 %a
    250   ret i32 %sel
    251 }
    252 
    253 define i32 @ba_ule_i32(i32 %a, i32 %b) {
    254 ; LABEL: @ba_ule_i32
    255 ; CHECK: max.u32
    256   %cmp = icmp ule i32 %a, %b
    257   %sel = select i1 %cmp, i32 %b, i32 %a
    258   ret i32 %sel
    259 }
    260 
    261 ; *** ba, signed, i32
    262 define i32 @ba_sgt_i32(i32 %a, i32 %b) {
    263 ; LBAEL: @ba_ugt_i32
    264 ; CHECK: min.s32
    265   %cmp = icmp sgt i32 %a, %b
    266   %sel = select i1 %cmp, i32 %b, i32 %a
    267   ret i32 %sel
    268 }
    269 
    270 define i32 @ba_sge_i32(i32 %a, i32 %b) {
    271 ; LABEL: @ba_sge_i32
    272 ; CHECK: min.s32
    273   %cmp = icmp sge i32 %a, %b
    274   %sel = select i1 %cmp, i32 %b, i32 %a
    275   ret i32 %sel
    276 }
    277 
    278 define i32 @ba_slt_i32(i32 %a, i32 %b) {
    279 ; LABEL: @ba_slt_i32
    280 ; CHECK: max.s32
    281   %cmp = icmp slt i32 %a, %b
    282   %sel = select i1 %cmp, i32 %b, i32 %a
    283   ret i32 %sel
    284 }
    285 
    286 define i32 @ba_sle_i32(i32 %a, i32 %b) {
    287 ; LABEL: @ba_sle_i32
    288 ; CHECK: max.s32
    289   %cmp = icmp sle i32 %a, %b
    290   %sel = select i1 %cmp, i32 %b, i32 %a
    291   ret i32 %sel
    292 }
    293 
    294 ; *************************************
    295 ; * All variations with i64
    296 
    297 ; *** ab, unsigned, i64
    298 define i64 @ab_ugt_i64(i64 %a, i64 %b) {
    299 ; LABEL: @ab_ugt_i64
    300 ; CHECK: max.u64
    301   %cmp = icmp ugt i64 %a, %b
    302   %sel = select i1 %cmp, i64 %a, i64 %b
    303   ret i64 %sel
    304 }
    305 
    306 define i64 @ab_uge_i64(i64 %a, i64 %b) {
    307 ; LABEL: @ab_uge_i64
    308 ; CHECK: max.u64
    309   %cmp = icmp uge i64 %a, %b
    310   %sel = select i1 %cmp, i64 %a, i64 %b
    311   ret i64 %sel
    312 }
    313 
    314 define i64 @ab_ult_i64(i64 %a, i64 %b) {
    315 ; LABEL: @ab_ult_i64
    316 ; CHECK: min.u64
    317   %cmp = icmp ult i64 %a, %b
    318   %sel = select i1 %cmp, i64 %a, i64 %b
    319   ret i64 %sel
    320 }
    321 
    322 define i64 @ab_ule_i64(i64 %a, i64 %b) {
    323 ; LABEL: @ab_ule_i64
    324 ; CHECK: min.u64
    325   %cmp = icmp ule i64 %a, %b
    326   %sel = select i1 %cmp, i64 %a, i64 %b
    327   ret i64 %sel
    328 }
    329 
    330 ; *** ab, signed, i64
    331 define i64 @ab_sgt_i64(i64 %a, i64 %b) {
    332 ; LABEL: @ab_ugt_i64
    333 ; CHECK: max.s64
    334   %cmp = icmp sgt i64 %a, %b
    335   %sel = select i1 %cmp, i64 %a, i64 %b
    336   ret i64 %sel
    337 }
    338 
    339 define i64 @ab_sge_i64(i64 %a, i64 %b) {
    340 ; LABEL: @ab_sge_i64
    341 ; CHECK: max.s64
    342   %cmp = icmp sge i64 %a, %b
    343   %sel = select i1 %cmp, i64 %a, i64 %b
    344   ret i64 %sel
    345 }
    346 
    347 define i64 @ab_slt_i64(i64 %a, i64 %b) {
    348 ; LABEL: @ab_slt_i64
    349 ; CHECK: min.s64
    350   %cmp = icmp slt i64 %a, %b
    351   %sel = select i1 %cmp, i64 %a, i64 %b
    352   ret i64 %sel
    353 }
    354 
    355 define i64 @ab_sle_i64(i64 %a, i64 %b) {
    356 ; LABEL: @ab_sle_i64
    357 ; CHECK: min.s64
    358   %cmp = icmp sle i64 %a, %b
    359   %sel = select i1 %cmp, i64 %a, i64 %b
    360   ret i64 %sel
    361 }
    362 
    363 ; *** ba, unsigned, i64
    364 define i64 @ba_ugt_i64(i64 %a, i64 %b) {
    365 ; LABEL: @ba_ugt_i64
    366 ; CHECK: min.u64
    367   %cmp = icmp ugt i64 %a, %b
    368   %sel = select i1 %cmp, i64 %b, i64 %a
    369   ret i64 %sel
    370 }
    371 
    372 define i64 @ba_uge_i64(i64 %a, i64 %b) {
    373 ; LABEL: @ba_uge_i64
    374 ; CHECK: min.u64
    375   %cmp = icmp uge i64 %a, %b
    376   %sel = select i1 %cmp, i64 %b, i64 %a
    377   ret i64 %sel
    378 }
    379 
    380 define i64 @ba_ult_i64(i64 %a, i64 %b) {
    381 ; LABEL: @ba_ult_i64
    382 ; CHECK: max.u64
    383   %cmp = icmp ult i64 %a, %b
    384   %sel = select i1 %cmp, i64 %b, i64 %a
    385   ret i64 %sel
    386 }
    387 
    388 define i64 @ba_ule_i64(i64 %a, i64 %b) {
    389 ; LABEL: @ba_ule_i64
    390 ; CHECK: max.u64
    391   %cmp = icmp ule i64 %a, %b
    392   %sel = select i1 %cmp, i64 %b, i64 %a
    393   ret i64 %sel
    394 }
    395 
    396 ; *** ba, signed, i64
    397 define i64 @ba_sgt_i64(i64 %a, i64 %b) {
    398 ; LBAEL: @ba_ugt_i64
    399 ; CHECK: min.s64
    400   %cmp = icmp sgt i64 %a, %b
    401   %sel = select i1 %cmp, i64 %b, i64 %a
    402   ret i64 %sel
    403 }
    404 
    405 define i64 @ba_sge_i64(i64 %a, i64 %b) {
    406 ; LABEL: @ba_sge_i64
    407 ; CHECK: min.s64
    408   %cmp = icmp sge i64 %a, %b
    409   %sel = select i1 %cmp, i64 %b, i64 %a
    410   ret i64 %sel
    411 }
    412 
    413 define i64 @ba_slt_i64(i64 %a, i64 %b) {
    414 ; LABEL: @ba_slt_i64
    415 ; CHECK: max.s64
    416   %cmp = icmp slt i64 %a, %b
    417   %sel = select i1 %cmp, i64 %b, i64 %a
    418   ret i64 %sel
    419 }
    420 
    421 define i64 @ba_sle_i64(i64 %a, i64 %b) {
    422 ; LABEL: @ba_sle_i64
    423 ; CHECK: max.s64
    424   %cmp = icmp sle i64 %a, %b
    425   %sel = select i1 %cmp, i64 %b, i64 %a
    426   ret i64 %sel
    427 }
    428