Home | History | Annotate | Download | only in llvm-ir
      1 ; RUN: llc < %s -march=mips -mcpu=mips2 | FileCheck %s -check-prefixes=ALL,GP32
      2 ; RUN: llc < %s -march=mips -mcpu=mips32 | FileCheck %s -check-prefixes=ALL,GP32
      3 ; RUN: llc < %s -march=mips -mcpu=mips32r2 | FileCheck %s \
      4 ; RUN:    -check-prefixes=ALL,GP32
      5 ; RUN: llc < %s -march=mips -mcpu=mips32r3 | FileCheck %s \
      6 ; RUN:    -check-prefixes=ALL,GP32
      7 ; RUN: llc < %s -march=mips -mcpu=mips32r5 | FileCheck %s \
      8 ; RUN:    -check-prefixes=ALL,GP32
      9 ; RUN: llc < %s -march=mips -mcpu=mips32r6 | FileCheck %s \
     10 ; RUN:    -check-prefixes=ALL,GP32
     11 ; RUN: llc < %s -march=mips64 -mcpu=mips3 | FileCheck %s \
     12 ; RUN:    -check-prefixes=ALL,GP64
     13 ; RUN: llc < %s -march=mips64 -mcpu=mips4 | FileCheck %s \
     14 ; RUN:    -check-prefixes=ALL,GP64
     15 ; RUN: llc < %s -march=mips64 -mcpu=mips64 | FileCheck %s \
     16 ; RUN:    -check-prefixes=ALL,GP64
     17 ; RUN: llc < %s -march=mips64 -mcpu=mips64r2 | FileCheck %s \
     18 ; RUN:    -check-prefixes=ALL,GP64
     19 ; RUN: llc < %s -march=mips64 -mcpu=mips64r3 | FileCheck %s \
     20 ; RUN:    -check-prefixes=ALL,GP64
     21 ; RUN: llc < %s -march=mips64 -mcpu=mips64r5 | FileCheck %s \
     22 ; RUN:    -check-prefixes=ALL,GP64
     23 ; RUN: llc < %s -march=mips64 -mcpu=mips64r6 | FileCheck %s \
     24 ; RUN:    -check-prefixes=ALL,GP64
     25 ; RUN: llc < %s -march=mips -mcpu=mips32r3 -mattr=+micromips | FileCheck %s \
     26 ; RUN:    -check-prefixes=ALL,MM,MM32
     27 ; RUN: llc < %s -march=mips -mcpu=mips32r6 -mattr=+micromips | FileCheck %s \
     28 ; RUN:    -check-prefixes=ALL,MM,MM32
     29 ; RUN: llc < %s -march=mips -mcpu=mips64r6 -target-abi n64 -mattr=+micromips | FileCheck %s \
     30 ; RUN:    -check-prefixes=ALL,MM,MM64
     31 
     32 define signext i1 @xor_i1(i1 signext %a, i1 signext %b) {
     33 entry:
     34 ; ALL-LABEL: xor_i1:
     35 
     36   ; GP32:         xor     $2, $4, $5
     37 
     38   ; GP64:         xor     $2, $4, $5
     39 
     40   ; MM:           xor16   $[[T0:[0-9]+]], $5
     41   ; MM:           move    $2, $[[T0]]
     42 
     43   %r = xor i1 %a, %b
     44   ret i1 %r
     45 }
     46 
     47 define signext i8 @xor_i8(i8 signext %a, i8 signext %b) {
     48 entry:
     49 ; ALL-LABEL: xor_i8:
     50 
     51   ; GP32:         xor     $2, $4, $5
     52 
     53   ; GP64:         xor     $2, $4, $5
     54 
     55   ; MM:           xor16   $[[T0:[0-9]+]], $5
     56   ; MM:           move    $2, $[[T0]]
     57 
     58   %r = xor i8 %a, %b
     59   ret i8 %r
     60 }
     61 
     62 define signext i16 @xor_i16(i16 signext %a, i16 signext %b) {
     63 entry:
     64 ; ALL-LABEL: xor_i16:
     65 
     66   ; GP32:         xor     $2, $4, $5
     67 
     68   ; GP64:         xor     $2, $4, $5
     69 
     70   ; MM:           xor16   $[[T0:[0-9]+]], $5
     71   ; MM:           move    $2, $[[T0]]
     72 
     73   %r = xor i16 %a, %b
     74   ret i16 %r
     75 }
     76 
     77 define signext i32 @xor_i32(i32 signext %a, i32 signext %b) {
     78 entry:
     79 ; ALL-LABEL: xor_i32:
     80 
     81   ; GP32:         xor     $2, $4, $5
     82 
     83   ; GP64:         xor     $[[T0:[0-9]+]], $4, $5
     84   ; GP64:         sll     $2, $[[T0]], 0
     85 
     86   ; MM32:         xor16   $[[T0:[0-9]+]], $5
     87   ; MM32:         move    $2, $[[T0]]
     88 
     89   ; MM64:         xor     $[[T0:[0-9]+]], $4, $5
     90   ; MM64:         sll     $2, $[[T0]], 0
     91 
     92   %r = xor i32 %a, %b
     93   ret i32 %r
     94 }
     95 
     96 define signext i64 @xor_i64(i64 signext %a, i64 signext %b) {
     97 entry:
     98 ; ALL-LABEL: xor_i64:
     99 
    100   ; GP32:         xor     $2, $4, $6
    101   ; GP32:         xor     $3, $5, $7
    102 
    103   ; GP64:         xor     $2, $4, $5
    104 
    105   ; MM32:         xor16   $[[T0:[0-9]+]], $6
    106   ; MM32:         xor16   $[[T1:[0-9]+]], $7
    107   ; MM32:         move    $2, $[[T0]]
    108   ; MM32:         move    $3, $[[T1]]
    109 
    110   ; MM64:         xor     $2, $4, $5
    111 
    112   %r = xor i64 %a, %b
    113   ret i64 %r
    114 }
    115 
    116 define signext i128 @xor_i128(i128 signext %a, i128 signext %b) {
    117 entry:
    118 ; ALL-LABEL: xor_i128:
    119 
    120   ; GP32:         lw      $[[T0:[0-9]+]], 24($sp)
    121   ; GP32:         lw      $[[T1:[0-9]+]], 20($sp)
    122   ; GP32:         lw      $[[T2:[0-9]+]], 16($sp)
    123   ; GP32:         xor     $2, $4, $[[T2]]
    124   ; GP32:         xor     $3, $5, $[[T1]]
    125   ; GP32:         xor     $4, $6, $[[T0]]
    126   ; GP32:         lw      $[[T3:[0-9]+]], 28($sp)
    127   ; GP32:         xor     $5, $7, $[[T3]]
    128 
    129   ; GP64:         xor     $2, $4, $6
    130   ; GP64:         xor     $3, $5, $7
    131 
    132   ; MM32:         lw      $[[T0:[0-9]+]], 20($sp)
    133   ; MM32:         lw      $[[T1:[0-9]+]], 16($sp)
    134   ; MM32:         xor16   $[[T1]], $4
    135   ; MM32:         xor16   $[[T0]], $5
    136   ; MM32:         lw      $[[T2:[0-9]+]], 24($sp)
    137   ; MM32:         xor16   $[[T2]], $6
    138   ; MM32:         lw      $[[T3:[0-9]+]], 28($sp)
    139   ; MM32:         xor16   $[[T3]], $7
    140 
    141   ; MM64:         xor     $2, $4, $6
    142   ; MM64:         xor     $3, $5, $7
    143 
    144   %r = xor i128 %a, %b
    145   ret i128 %r
    146 }
    147 
    148 define signext i1 @xor_i1_4(i1 signext %b) {
    149 entry:
    150 ; ALL-LABEL: xor_i1_4:
    151 
    152   ; ALL:          move    $2, $4
    153 
    154   %r = xor i1 4, %b
    155   ret i1 %r
    156 }
    157 
    158 define signext i8 @xor_i8_4(i8 signext %b) {
    159 entry:
    160 ; ALL-LABEL: xor_i8_4:
    161 
    162   ; ALL:          xori    $2, $4, 4
    163 
    164   %r = xor i8 4, %b
    165   ret i8 %r
    166 }
    167 
    168 define signext i16 @xor_i16_4(i16 signext %b) {
    169 entry:
    170 ; ALL-LABEL: xor_i16_4:
    171 
    172   ; ALL:          xori    $2, $4, 4
    173 
    174   %r = xor i16 4, %b
    175   ret i16 %r
    176 }
    177 
    178 define signext i32 @xor_i32_4(i32 signext %b) {
    179 entry:
    180 ; ALL-LABEL: xor_i32_4:
    181 
    182   ; ALL:          xori    $2, $4, 4
    183 
    184   %r = xor i32 4, %b
    185   ret i32 %r
    186 }
    187 
    188 define signext i64 @xor_i64_4(i64 signext %b) {
    189 entry:
    190 ; ALL-LABEL: xor_i64_4:
    191 
    192   ; GP32:         xori    $3, $5, 4
    193   ; GP32:         move    $2, $4
    194 
    195   ; GP64:         xori    $2, $4, 4
    196 
    197   ; MM32:         xori    $3, $5, 4
    198   ; MM32:         move    $2, $4
    199 
    200   ; MM64:         xori    $2, $4, 4
    201 
    202   %r = xor i64 4, %b
    203   ret i64 %r
    204 }
    205 
    206 define signext i128 @xor_i128_4(i128 signext %b) {
    207 entry:
    208 ; ALL-LABEL: xor_i128_4:
    209 
    210   ; GP32:         xori    $[[T0:[0-9]+]], $7, 4
    211   ; GP32:         move    $2, $4
    212   ; GP32:         move    $3, $5
    213   ; GP32:         move    $4, $6
    214   ; GP32:         move    $5, $[[T0]]
    215 
    216   ; GP64:         xori    $3, $5, 4
    217   ; GP64:         move    $2, $4
    218 
    219   ; MM32:         xori    $[[T0:[0-9]+]], $7, 4
    220   ; MM32:         move    $2, $4
    221   ; MM32:         move    $3, $5
    222   ; MM32:         move    $4, $6
    223   ; MM32:         move    $5, $[[T0]]
    224 
    225   ; MM64:         xori    $3, $5, 4
    226   ; MM64:         move    $2, $4
    227 
    228   %r = xor i128 4, %b
    229   ret i128 %r
    230 }
    231