Home | History | Annotate | Download | only in llvm-ir
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips2 -verify-machineinstrs | FileCheck %s \
      3 ; RUN:    -check-prefixes=M2
      4 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32 -verify-machineinstrs | FileCheck %s \
      5 ; RUN:    -check-prefixes=CMOV32R1
      6 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r2 -verify-machineinstrs | FileCheck %s \
      7 ; RUN:    -check-prefixes=CMOV32R2
      8 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r3 -verify-machineinstrs | FileCheck %s \
      9 ; RUN:    -check-prefixes=CMOV32R2
     10 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r5 -verify-machineinstrs | FileCheck %s \
     11 ; RUN:    -check-prefixes=CMOV32R2
     12 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r6 -verify-machineinstrs | FileCheck %s \
     13 ; RUN:    -check-prefixes=32R6
     14 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips3 -verify-machineinstrs | FileCheck %s \
     15 ; RUN:    -check-prefixes=M3
     16 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips4 -verify-machineinstrs | FileCheck %s \
     17 ; RUN:    -check-prefixes=CMOV64
     18 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64 -verify-machineinstrs | FileCheck %s \
     19 ; RUN:    -check-prefixes=CMOV64
     20 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r2 -verify-machineinstrs | FileCheck %s \
     21 ; RUN:    -check-prefixes=CMOV64
     22 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r3 -verify-machineinstrs | FileCheck %s \
     23 ; RUN:    -check-prefixes=CMOV64
     24 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r5 -verify-machineinstrs | FileCheck %s \
     25 ; RUN:    -check-prefixes=CMOV64
     26 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r6 -verify-machineinstrs | FileCheck %s \
     27 ; RUN:    -check-prefixes=64R6
     28 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r3 -mattr=+micromips -verify-machineinstrs -asm-show-inst | FileCheck %s \
     29 ; RUN:    -check-prefixes=MM32R3
     30 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r6 -mattr=+micromips -verify-machineinstrs | FileCheck %s \
     31 ; RUN:    -check-prefixes=MM32R6
     32 
     33 define float @tst_select_i1_float(i1 signext %s, float %x, float %y) {
     34 ; M2-LABEL: tst_select_i1_float:
     35 ; M2:       # %bb.0: # %entry
     36 ; M2-NEXT:    andi $1, $4, 1
     37 ; M2-NEXT:    bnez $1, $BB0_2
     38 ; M2-NEXT:    nop
     39 ; M2-NEXT:  # %bb.1: # %entry
     40 ; M2-NEXT:    jr $ra
     41 ; M2-NEXT:    mtc1 $6, $f0
     42 ; M2-NEXT:  $BB0_2:
     43 ; M2-NEXT:    jr $ra
     44 ; M2-NEXT:    mtc1 $5, $f0
     45 ;
     46 ; CMOV32R1-LABEL: tst_select_i1_float:
     47 ; CMOV32R1:       # %bb.0: # %entry
     48 ; CMOV32R1-NEXT:    mtc1 $6, $f0
     49 ; CMOV32R1-NEXT:    andi $1, $4, 1
     50 ; CMOV32R1-NEXT:    mtc1 $5, $f1
     51 ; CMOV32R1-NEXT:    jr $ra
     52 ; CMOV32R1-NEXT:    movn.s $f0, $f1, $1
     53 ;
     54 ; CMOV32R2-LABEL: tst_select_i1_float:
     55 ; CMOV32R2:       # %bb.0: # %entry
     56 ; CMOV32R2-NEXT:    mtc1 $6, $f0
     57 ; CMOV32R2-NEXT:    andi $1, $4, 1
     58 ; CMOV32R2-NEXT:    mtc1 $5, $f1
     59 ; CMOV32R2-NEXT:    jr $ra
     60 ; CMOV32R2-NEXT:    movn.s $f0, $f1, $1
     61 ;
     62 ; 32R6-LABEL: tst_select_i1_float:
     63 ; 32R6:       # %bb.0: # %entry
     64 ; 32R6-NEXT:    mtc1 $5, $f1
     65 ; 32R6-NEXT:    mtc1 $6, $f2
     66 ; 32R6-NEXT:    mtc1 $4, $f0
     67 ; 32R6-NEXT:    jr $ra
     68 ; 32R6-NEXT:    sel.s $f0, $f2, $f1
     69 ;
     70 ; M3-LABEL: tst_select_i1_float:
     71 ; M3:       # %bb.0: # %entry
     72 ; M3-NEXT:    andi $1, $4, 1
     73 ; M3-NEXT:    bnez $1, .LBB0_2
     74 ; M3-NEXT:    mov.s $f0, $f13
     75 ; M3-NEXT:  # %bb.1: # %entry
     76 ; M3-NEXT:    mov.s $f0, $f14
     77 ; M3-NEXT:  .LBB0_2: # %entry
     78 ; M3-NEXT:    jr $ra
     79 ; M3-NEXT:    nop
     80 ;
     81 ; CMOV64-LABEL: tst_select_i1_float:
     82 ; CMOV64:       # %bb.0: # %entry
     83 ; CMOV64-NEXT:    mov.s $f0, $f14
     84 ; CMOV64-NEXT:    andi $1, $4, 1
     85 ; CMOV64-NEXT:    jr $ra
     86 ; CMOV64-NEXT:    movn.s $f0, $f13, $1
     87 ;
     88 ; 64R6-LABEL: tst_select_i1_float:
     89 ; 64R6:       # %bb.0: # %entry
     90 ; 64R6-NEXT:    mtc1 $4, $f0
     91 ; 64R6-NEXT:    jr $ra
     92 ; 64R6-NEXT:    sel.s $f0, $f14, $f13
     93 ;
     94 ; MM32R3-LABEL: tst_select_i1_float:
     95 ; MM32R3:       # %bb.0: # %entry
     96 ; MM32R3:       mtc1 $6, $f0 # <MCInst #{{.*}} MTC1_MM
     97 ; MM32R3:       andi16 $2, $4, 1 # <MCInst #{{.*}} ANDI16_MM
     98 ; MM32R3:       mtc1 $5, $f1 # <MCInst #{{.*}} MTC1_MM
     99 ; MM32R3:       jr $ra # <MCInst #{{.*}} JR_MM
    100 ; MM32R3:       movn.s $f0, $f1, $2 # <MCInst #{{.*}} MOVN_I_S_MM
    101 ;
    102 ; MM32R6-LABEL: tst_select_i1_float:
    103 ; MM32R6:       # %bb.0: # %entry
    104 ; MM32R6-NEXT:    mtc1 $5, $f1
    105 ; MM32R6-NEXT:    mtc1 $6, $f2
    106 ; MM32R6-NEXT:    mtc1 $4, $f0
    107 ; MM32R6-NEXT:    sel.s $f0, $f2, $f1
    108 ; MM32R6-NEXT:    jrc $ra
    109 entry:
    110   %r = select i1 %s, float %x, float %y
    111   ret float %r
    112 }
    113 
    114 define float @tst_select_i1_float_reordered(float %x, float %y,
    115 ; M2-LABEL: tst_select_i1_float_reordered:
    116 ; M2:       # %bb.0: # %entry
    117 ; M2-NEXT:    andi $1, $6, 1
    118 ; M2-NEXT:    bnez $1, $BB1_2
    119 ; M2-NEXT:    mov.s $f0, $f12
    120 ; M2-NEXT:  # %bb.1: # %entry
    121 ; M2-NEXT:    mov.s $f0, $f14
    122 ; M2-NEXT:  $BB1_2: # %entry
    123 ; M2-NEXT:    jr $ra
    124 ; M2-NEXT:    nop
    125 ;
    126 ; CMOV32R1-LABEL: tst_select_i1_float_reordered:
    127 ; CMOV32R1:       # %bb.0: # %entry
    128 ; CMOV32R1-NEXT:    mov.s $f0, $f14
    129 ; CMOV32R1-NEXT:    andi $1, $6, 1
    130 ; CMOV32R1-NEXT:    jr $ra
    131 ; CMOV32R1-NEXT:    movn.s $f0, $f12, $1
    132 ;
    133 ; CMOV32R2-LABEL: tst_select_i1_float_reordered:
    134 ; CMOV32R2:       # %bb.0: # %entry
    135 ; CMOV32R2-NEXT:    mov.s $f0, $f14
    136 ; CMOV32R2-NEXT:    andi $1, $6, 1
    137 ; CMOV32R2-NEXT:    jr $ra
    138 ; CMOV32R2-NEXT:    movn.s $f0, $f12, $1
    139 ;
    140 ; 32R6-LABEL: tst_select_i1_float_reordered:
    141 ; 32R6:       # %bb.0: # %entry
    142 ; 32R6-NEXT:    mtc1 $6, $f0
    143 ; 32R6-NEXT:    jr $ra
    144 ; 32R6-NEXT:    sel.s $f0, $f14, $f12
    145 ;
    146 ; M3-LABEL: tst_select_i1_float_reordered:
    147 ; M3:       # %bb.0: # %entry
    148 ; M3-NEXT:    andi $1, $6, 1
    149 ; M3-NEXT:    bnez $1, .LBB1_2
    150 ; M3-NEXT:    mov.s $f0, $f12
    151 ; M3-NEXT:  # %bb.1: # %entry
    152 ; M3-NEXT:    mov.s $f0, $f13
    153 ; M3-NEXT:  .LBB1_2: # %entry
    154 ; M3-NEXT:    jr $ra
    155 ; M3-NEXT:    nop
    156 ;
    157 ; CMOV64-LABEL: tst_select_i1_float_reordered:
    158 ; CMOV64:       # %bb.0: # %entry
    159 ; CMOV64-NEXT:    mov.s $f0, $f13
    160 ; CMOV64-NEXT:    andi $1, $6, 1
    161 ; CMOV64-NEXT:    jr $ra
    162 ; CMOV64-NEXT:    movn.s $f0, $f12, $1
    163 ;
    164 ; 64R6-LABEL: tst_select_i1_float_reordered:
    165 ; 64R6:       # %bb.0: # %entry
    166 ; 64R6-NEXT:    mtc1 $6, $f0
    167 ; 64R6-NEXT:    jr $ra
    168 ; 64R6-NEXT:    sel.s $f0, $f13, $f12
    169 ;
    170 ; MM32R3-LABEL: tst_select_i1_float_reordered:
    171 ; MM32R3:       # %bb.0: # %entry
    172 ; MM32R3:       mov.s $f0, $f14 # <MCInst #{{.*}} FMOV_S
    173 ; MM32R3:       andi16 $2, $6, 1 # <MCInst #{{.*}} ANDI16_MM
    174 ; MM32R3:       jr $ra # <MCInst #{{.*}} JR_MM
    175 ; MM32R3:       movn.s $f0, $f12, $2 # <MCInst #{{.*}} MOVN_I_S_MM
    176 ;
    177 ; MM32R6-LABEL: tst_select_i1_float_reordered:
    178 ; MM32R6:       # %bb.0: # %entry
    179 ; MM32R6-NEXT:    mtc1 $6, $f0
    180 ; MM32R6-NEXT:    sel.s $f0, $f14, $f12
    181 ; MM32R6-NEXT:    jrc $ra
    182                                             i1 signext %s) {
    183 entry:
    184   %r = select i1 %s, float %x, float %y
    185   ret float %r
    186 }
    187 
    188 define float @tst_select_fcmp_olt_float(float %x, float %y) {
    189 ; M2-LABEL: tst_select_fcmp_olt_float:
    190 ; M2:       # %bb.0: # %entry
    191 ; M2-NEXT:    c.olt.s $f12, $f14
    192 ; M2-NEXT:    bc1t $BB2_2
    193 ; M2-NEXT:    mov.s $f0, $f12
    194 ; M2-NEXT:  # %bb.1: # %entry
    195 ; M2-NEXT:    mov.s $f0, $f14
    196 ; M2-NEXT:  $BB2_2: # %entry
    197 ; M2-NEXT:    jr $ra
    198 ; M2-NEXT:    nop
    199 ;
    200 ; CMOV32R1-LABEL: tst_select_fcmp_olt_float:
    201 ; CMOV32R1:       # %bb.0: # %entry
    202 ; CMOV32R1-NEXT:    mov.s $f0, $f14
    203 ; CMOV32R1-NEXT:    c.olt.s $f12, $f14
    204 ; CMOV32R1-NEXT:    jr $ra
    205 ; CMOV32R1-NEXT:    movt.s $f0, $f12, $fcc0
    206 ;
    207 ; CMOV32R2-LABEL: tst_select_fcmp_olt_float:
    208 ; CMOV32R2:       # %bb.0: # %entry
    209 ; CMOV32R2-NEXT:    mov.s $f0, $f14
    210 ; CMOV32R2-NEXT:    c.olt.s $f12, $f14
    211 ; CMOV32R2-NEXT:    jr $ra
    212 ; CMOV32R2-NEXT:    movt.s $f0, $f12, $fcc0
    213 ;
    214 ; 32R6-LABEL: tst_select_fcmp_olt_float:
    215 ; 32R6:       # %bb.0: # %entry
    216 ; 32R6-NEXT:    cmp.lt.s $f0, $f12, $f14
    217 ; 32R6-NEXT:    jr $ra
    218 ; 32R6-NEXT:    sel.s $f0, $f14, $f12
    219 ;
    220 ; M3-LABEL: tst_select_fcmp_olt_float:
    221 ; M3:       # %bb.0: # %entry
    222 ; M3-NEXT:    c.olt.s $f12, $f13
    223 ; M3-NEXT:    bc1t .LBB2_2
    224 ; M3-NEXT:    mov.s $f0, $f12
    225 ; M3-NEXT:  # %bb.1: # %entry
    226 ; M3-NEXT:    mov.s $f0, $f13
    227 ; M3-NEXT:  .LBB2_2: # %entry
    228 ; M3-NEXT:    jr $ra
    229 ; M3-NEXT:    nop
    230 ;
    231 ; CMOV64-LABEL: tst_select_fcmp_olt_float:
    232 ; CMOV64:       # %bb.0: # %entry
    233 ; CMOV64-NEXT:    mov.s $f0, $f13
    234 ; CMOV64-NEXT:    c.olt.s $f12, $f13
    235 ; CMOV64-NEXT:    jr $ra
    236 ; CMOV64-NEXT:    movt.s $f0, $f12, $fcc0
    237 ;
    238 ; 64R6-LABEL: tst_select_fcmp_olt_float:
    239 ; 64R6:       # %bb.0: # %entry
    240 ; 64R6-NEXT:    cmp.lt.s $f0, $f12, $f13
    241 ; 64R6-NEXT:    jr $ra
    242 ; 64R6-NEXT:    sel.s $f0, $f13, $f12
    243 ;
    244 ; MM32R3-LABEL: tst_select_fcmp_olt_float:
    245 ; MM32R3:       # %bb.0: # %entry
    246 ; MM32R3:       mov.s $f0, $f14 # <MCInst #{{.*}} FMOV_S
    247 ; MM32R3:       c.olt.s $f12, $f14 # <MCInst #{{.*}} FCMP_S32_MM
    248 ; MM32R3:       jr $ra # <MCInst #{{.*}} JR_MM
    249 ; MM32R3:       movt.s $f0, $f12, $fcc0 # <MCInst #{{.*}} MOVT_S_MM
    250 ;
    251 ; MM32R6-LABEL: tst_select_fcmp_olt_float:
    252 ; MM32R6:       # %bb.0: # %entry
    253 ; MM32R6-NEXT:    cmp.lt.s $f0, $f12, $f14
    254 ; MM32R6-NEXT:    sel.s $f0, $f14, $f12
    255 ; MM32R6-NEXT:    jrc $ra
    256 entry:
    257   %s = fcmp olt float %x, %y
    258   %r = select i1 %s, float %x, float %y
    259   ret float %r
    260 }
    261 
    262 define float @tst_select_fcmp_ole_float(float %x, float %y) {
    263 ; M2-LABEL: tst_select_fcmp_ole_float:
    264 ; M2:       # %bb.0: # %entry
    265 ; M2-NEXT:    c.ole.s $f12, $f14
    266 ; M2-NEXT:    bc1t $BB3_2
    267 ; M2-NEXT:    mov.s $f0, $f12
    268 ; M2-NEXT:  # %bb.1: # %entry
    269 ; M2-NEXT:    mov.s $f0, $f14
    270 ; M2-NEXT:  $BB3_2: # %entry
    271 ; M2-NEXT:    jr $ra
    272 ; M2-NEXT:    nop
    273 ;
    274 ; CMOV32R1-LABEL: tst_select_fcmp_ole_float:
    275 ; CMOV32R1:       # %bb.0: # %entry
    276 ; CMOV32R1-NEXT:    mov.s $f0, $f14
    277 ; CMOV32R1-NEXT:    c.ole.s $f12, $f14
    278 ; CMOV32R1-NEXT:    jr $ra
    279 ; CMOV32R1-NEXT:    movt.s $f0, $f12, $fcc0
    280 ;
    281 ; CMOV32R2-LABEL: tst_select_fcmp_ole_float:
    282 ; CMOV32R2:       # %bb.0: # %entry
    283 ; CMOV32R2-NEXT:    mov.s $f0, $f14
    284 ; CMOV32R2-NEXT:    c.ole.s $f12, $f14
    285 ; CMOV32R2-NEXT:    jr $ra
    286 ; CMOV32R2-NEXT:    movt.s $f0, $f12, $fcc0
    287 ;
    288 ; 32R6-LABEL: tst_select_fcmp_ole_float:
    289 ; 32R6:       # %bb.0: # %entry
    290 ; 32R6-NEXT:    cmp.le.s $f0, $f12, $f14
    291 ; 32R6-NEXT:    jr $ra
    292 ; 32R6-NEXT:    sel.s $f0, $f14, $f12
    293 ;
    294 ; M3-LABEL: tst_select_fcmp_ole_float:
    295 ; M3:       # %bb.0: # %entry
    296 ; M3-NEXT:    c.ole.s $f12, $f13
    297 ; M3-NEXT:    bc1t .LBB3_2
    298 ; M3-NEXT:    mov.s $f0, $f12
    299 ; M3-NEXT:  # %bb.1: # %entry
    300 ; M3-NEXT:    mov.s $f0, $f13
    301 ; M3-NEXT:  .LBB3_2: # %entry
    302 ; M3-NEXT:    jr $ra
    303 ; M3-NEXT:    nop
    304 ;
    305 ; CMOV64-LABEL: tst_select_fcmp_ole_float:
    306 ; CMOV64:       # %bb.0: # %entry
    307 ; CMOV64-NEXT:    mov.s $f0, $f13
    308 ; CMOV64-NEXT:    c.ole.s $f12, $f13
    309 ; CMOV64-NEXT:    jr $ra
    310 ; CMOV64-NEXT:    movt.s $f0, $f12, $fcc0
    311 ;
    312 ; 64R6-LABEL: tst_select_fcmp_ole_float:
    313 ; 64R6:       # %bb.0: # %entry
    314 ; 64R6-NEXT:    cmp.le.s $f0, $f12, $f13
    315 ; 64R6-NEXT:    jr $ra
    316 ; 64R6-NEXT:    sel.s $f0, $f13, $f12
    317 ;
    318 ; MM32R3-LABEL: tst_select_fcmp_ole_float:
    319 ; MM32R3:       # %bb.0: # %entry
    320 ; MM32R3:       mov.s $f0, $f14 # <MCInst #{{.*}} FMOV_S
    321 ; MM32R3:       c.ole.s $f12, $f14 # <MCInst #{{.*}} FCMP_S32_MM
    322 ; MM32R3:       jr $ra # <MCInst #{{.*}} JR_MM
    323 ; MM32R3:       movt.s $f0, $f12, $fcc0 # <MCInst #{{.*}} MOVT_S_MM
    324 ;
    325 ; MM32R6-LABEL: tst_select_fcmp_ole_float:
    326 ; MM32R6:       # %bb.0: # %entry
    327 ; MM32R6-NEXT:    cmp.le.s $f0, $f12, $f14
    328 ; MM32R6-NEXT:    sel.s $f0, $f14, $f12
    329 ; MM32R6-NEXT:    jrc $ra
    330 entry:
    331   %s = fcmp ole float %x, %y
    332   %r = select i1 %s, float %x, float %y
    333   ret float %r
    334 }
    335 
    336 define float @tst_select_fcmp_ogt_float(float %x, float %y) {
    337 ; M2-LABEL: tst_select_fcmp_ogt_float:
    338 ; M2:       # %bb.0: # %entry
    339 ; M2-NEXT:    c.ule.s $f12, $f14
    340 ; M2-NEXT:    bc1f $BB4_2
    341 ; M2-NEXT:    mov.s $f0, $f12
    342 ; M2-NEXT:  # %bb.1: # %entry
    343 ; M2-NEXT:    mov.s $f0, $f14
    344 ; M2-NEXT:  $BB4_2: # %entry
    345 ; M2-NEXT:    jr $ra
    346 ; M2-NEXT:    nop
    347 ;
    348 ; CMOV32R1-LABEL: tst_select_fcmp_ogt_float:
    349 ; CMOV32R1:       # %bb.0: # %entry
    350 ; CMOV32R1-NEXT:    mov.s $f0, $f14
    351 ; CMOV32R1-NEXT:    c.ule.s $f12, $f14
    352 ; CMOV32R1-NEXT:    jr $ra
    353 ; CMOV32R1-NEXT:    movf.s $f0, $f12, $fcc0
    354 ;
    355 ; CMOV32R2-LABEL: tst_select_fcmp_ogt_float:
    356 ; CMOV32R2:       # %bb.0: # %entry
    357 ; CMOV32R2-NEXT:    mov.s $f0, $f14
    358 ; CMOV32R2-NEXT:    c.ule.s $f12, $f14
    359 ; CMOV32R2-NEXT:    jr $ra
    360 ; CMOV32R2-NEXT:    movf.s $f0, $f12, $fcc0
    361 ;
    362 ; 32R6-LABEL: tst_select_fcmp_ogt_float:
    363 ; 32R6:       # %bb.0: # %entry
    364 ; 32R6-NEXT:    cmp.lt.s $f0, $f14, $f12
    365 ; 32R6-NEXT:    jr $ra
    366 ; 32R6-NEXT:    sel.s $f0, $f14, $f12
    367 ;
    368 ; M3-LABEL: tst_select_fcmp_ogt_float:
    369 ; M3:       # %bb.0: # %entry
    370 ; M3-NEXT:    c.ule.s $f12, $f13
    371 ; M3-NEXT:    bc1f .LBB4_2
    372 ; M3-NEXT:    mov.s $f0, $f12
    373 ; M3-NEXT:  # %bb.1: # %entry
    374 ; M3-NEXT:    mov.s $f0, $f13
    375 ; M3-NEXT:  .LBB4_2: # %entry
    376 ; M3-NEXT:    jr $ra
    377 ; M3-NEXT:    nop
    378 ;
    379 ; CMOV64-LABEL: tst_select_fcmp_ogt_float:
    380 ; CMOV64:       # %bb.0: # %entry
    381 ; CMOV64-NEXT:    mov.s $f0, $f13
    382 ; CMOV64-NEXT:    c.ule.s $f12, $f13
    383 ; CMOV64-NEXT:    jr $ra
    384 ; CMOV64-NEXT:    movf.s $f0, $f12, $fcc0
    385 ;
    386 ; 64R6-LABEL: tst_select_fcmp_ogt_float:
    387 ; 64R6:       # %bb.0: # %entry
    388 ; 64R6-NEXT:    cmp.lt.s $f0, $f13, $f12
    389 ; 64R6-NEXT:    jr $ra
    390 ; 64R6-NEXT:    sel.s $f0, $f13, $f12
    391 ;
    392 ; MM32R3-LABEL: tst_select_fcmp_ogt_float:
    393 ; MM32R3:       # %bb.0: # %entry
    394 ; MM32R3:       mov.s $f0, $f14 # <MCInst #{{.*}} FMOV_S
    395 ; MM32R3:       c.ule.s $f12, $f14 # <MCInst #{{.*}} FCMP_S32_MM
    396 ; MM32R3:       jr $ra # <MCInst #{{.*}} JR_MM
    397 ; MM32R3:       movf.s $f0, $f12, $fcc0 # <MCInst #{{.*}} MOVF_S_MM
    398 ;
    399 ; MM32R6-LABEL: tst_select_fcmp_ogt_float:
    400 ; MM32R6:       # %bb.0: # %entry
    401 ; MM32R6-NEXT:    cmp.lt.s $f0, $f14, $f12
    402 ; MM32R6-NEXT:    sel.s $f0, $f14, $f12
    403 ; MM32R6-NEXT:    jrc $ra
    404 entry:
    405   %s = fcmp ogt float %x, %y
    406   %r = select i1 %s, float %x, float %y
    407   ret float %r
    408 }
    409 
    410 define float @tst_select_fcmp_oge_float(float %x, float %y) {
    411 ; M2-LABEL: tst_select_fcmp_oge_float:
    412 ; M2:       # %bb.0: # %entry
    413 ; M2-NEXT:    c.ult.s $f12, $f14
    414 ; M2-NEXT:    bc1f $BB5_2
    415 ; M2-NEXT:    mov.s $f0, $f12
    416 ; M2-NEXT:  # %bb.1: # %entry
    417 ; M2-NEXT:    mov.s $f0, $f14
    418 ; M2-NEXT:  $BB5_2: # %entry
    419 ; M2-NEXT:    jr $ra
    420 ; M2-NEXT:    nop
    421 ;
    422 ; CMOV32R1-LABEL: tst_select_fcmp_oge_float:
    423 ; CMOV32R1:       # %bb.0: # %entry
    424 ; CMOV32R1-NEXT:    mov.s $f0, $f14
    425 ; CMOV32R1-NEXT:    c.ult.s $f12, $f14
    426 ; CMOV32R1-NEXT:    jr $ra
    427 ; CMOV32R1-NEXT:    movf.s $f0, $f12, $fcc0
    428 ;
    429 ; CMOV32R2-LABEL: tst_select_fcmp_oge_float:
    430 ; CMOV32R2:       # %bb.0: # %entry
    431 ; CMOV32R2-NEXT:    mov.s $f0, $f14
    432 ; CMOV32R2-NEXT:    c.ult.s $f12, $f14
    433 ; CMOV32R2-NEXT:    jr $ra
    434 ; CMOV32R2-NEXT:    movf.s $f0, $f12, $fcc0
    435 ;
    436 ; 32R6-LABEL: tst_select_fcmp_oge_float:
    437 ; 32R6:       # %bb.0: # %entry
    438 ; 32R6-NEXT:    cmp.le.s $f0, $f14, $f12
    439 ; 32R6-NEXT:    jr $ra
    440 ; 32R6-NEXT:    sel.s $f0, $f14, $f12
    441 ;
    442 ; M3-LABEL: tst_select_fcmp_oge_float:
    443 ; M3:       # %bb.0: # %entry
    444 ; M3-NEXT:    c.ult.s $f12, $f13
    445 ; M3-NEXT:    bc1f .LBB5_2
    446 ; M3-NEXT:    mov.s $f0, $f12
    447 ; M3-NEXT:  # %bb.1: # %entry
    448 ; M3-NEXT:    mov.s $f0, $f13
    449 ; M3-NEXT:  .LBB5_2: # %entry
    450 ; M3-NEXT:    jr $ra
    451 ; M3-NEXT:    nop
    452 ;
    453 ; CMOV64-LABEL: tst_select_fcmp_oge_float:
    454 ; CMOV64:       # %bb.0: # %entry
    455 ; CMOV64-NEXT:    mov.s $f0, $f13
    456 ; CMOV64-NEXT:    c.ult.s $f12, $f13
    457 ; CMOV64-NEXT:    jr $ra
    458 ; CMOV64-NEXT:    movf.s $f0, $f12, $fcc0
    459 ;
    460 ; 64R6-LABEL: tst_select_fcmp_oge_float:
    461 ; 64R6:       # %bb.0: # %entry
    462 ; 64R6-NEXT:    cmp.le.s $f0, $f13, $f12
    463 ; 64R6-NEXT:    jr $ra
    464 ; 64R6-NEXT:    sel.s $f0, $f13, $f12
    465 ;
    466 ; MM32R3-LABEL: tst_select_fcmp_oge_float:
    467 ; MM32R3:       # %bb.0: # %entry
    468 ; MM32R3:       mov.s $f0, $f14 # <MCInst #{{.*}} FMOV_S
    469 ; MM32R3:       c.ult.s $f12, $f14 # <MCInst #{{.*}} FCMP_S32_MM
    470 ; MM32R3:       jr $ra # <MCInst #{{.*}} JR_MM
    471 ; MM32R3:       movf.s $f0, $f12, $fcc0 # <MCInst #{{.*}} MOVF_S_MM
    472 ;
    473 ; MM32R6-LABEL: tst_select_fcmp_oge_float:
    474 ; MM32R6:       # %bb.0: # %entry
    475 ; MM32R6-NEXT:    cmp.le.s $f0, $f14, $f12
    476 ; MM32R6-NEXT:    sel.s $f0, $f14, $f12
    477 ; MM32R6-NEXT:    jrc $ra
    478 entry:
    479   %s = fcmp oge float %x, %y
    480   %r = select i1 %s, float %x, float %y
    481   ret float %r
    482 }
    483 
    484 define float @tst_select_fcmp_oeq_float(float %x, float %y) {
    485 ; M2-LABEL: tst_select_fcmp_oeq_float:
    486 ; M2:       # %bb.0: # %entry
    487 ; M2-NEXT:    c.eq.s $f12, $f14
    488 ; M2-NEXT:    bc1t $BB6_2
    489 ; M2-NEXT:    mov.s $f0, $f12
    490 ; M2-NEXT:  # %bb.1: # %entry
    491 ; M2-NEXT:    mov.s $f0, $f14
    492 ; M2-NEXT:  $BB6_2: # %entry
    493 ; M2-NEXT:    jr $ra
    494 ; M2-NEXT:    nop
    495 ;
    496 ; CMOV32R1-LABEL: tst_select_fcmp_oeq_float:
    497 ; CMOV32R1:       # %bb.0: # %entry
    498 ; CMOV32R1-NEXT:    mov.s $f0, $f14
    499 ; CMOV32R1-NEXT:    c.eq.s $f12, $f14
    500 ; CMOV32R1-NEXT:    jr $ra
    501 ; CMOV32R1-NEXT:    movt.s $f0, $f12, $fcc0
    502 ;
    503 ; CMOV32R2-LABEL: tst_select_fcmp_oeq_float:
    504 ; CMOV32R2:       # %bb.0: # %entry
    505 ; CMOV32R2-NEXT:    mov.s $f0, $f14
    506 ; CMOV32R2-NEXT:    c.eq.s $f12, $f14
    507 ; CMOV32R2-NEXT:    jr $ra
    508 ; CMOV32R2-NEXT:    movt.s $f0, $f12, $fcc0
    509 ;
    510 ; 32R6-LABEL: tst_select_fcmp_oeq_float:
    511 ; 32R6:       # %bb.0: # %entry
    512 ; 32R6-NEXT:    cmp.eq.s $f0, $f12, $f14
    513 ; 32R6-NEXT:    jr $ra
    514 ; 32R6-NEXT:    sel.s $f0, $f14, $f12
    515 ;
    516 ; M3-LABEL: tst_select_fcmp_oeq_float:
    517 ; M3:       # %bb.0: # %entry
    518 ; M3-NEXT:    c.eq.s $f12, $f13
    519 ; M3-NEXT:    bc1t .LBB6_2
    520 ; M3-NEXT:    mov.s $f0, $f12
    521 ; M3-NEXT:  # %bb.1: # %entry
    522 ; M3-NEXT:    mov.s $f0, $f13
    523 ; M3-NEXT:  .LBB6_2: # %entry
    524 ; M3-NEXT:    jr $ra
    525 ; M3-NEXT:    nop
    526 ;
    527 ; CMOV64-LABEL: tst_select_fcmp_oeq_float:
    528 ; CMOV64:       # %bb.0: # %entry
    529 ; CMOV64-NEXT:    mov.s $f0, $f13
    530 ; CMOV64-NEXT:    c.eq.s $f12, $f13
    531 ; CMOV64-NEXT:    jr $ra
    532 ; CMOV64-NEXT:    movt.s $f0, $f12, $fcc0
    533 ;
    534 ; 64R6-LABEL: tst_select_fcmp_oeq_float:
    535 ; 64R6:       # %bb.0: # %entry
    536 ; 64R6-NEXT:    cmp.eq.s $f0, $f12, $f13
    537 ; 64R6-NEXT:    jr $ra
    538 ; 64R6-NEXT:    sel.s $f0, $f13, $f12
    539 ;
    540 ; MM32R3-LABEL: tst_select_fcmp_oeq_float:
    541 ; MM32R3:       # %bb.0: # %entry
    542 ; MM32R3:       mov.s $f0, $f14 # <MCInst #{{.*}} FMOV_S
    543 ; MM32R3:       c.eq.s $f12, $f14 # <MCInst #{{.*}} FCMP_S32_MM
    544 ; MM32R3:       jr $ra # <MCInst #{{.*}} JR_MM
    545 ; MM32R3:       movt.s $f0, $f12, $fcc0 # <MCInst #{{.*}} MOVT_S_MM
    546 ;
    547 ; MM32R6-LABEL: tst_select_fcmp_oeq_float:
    548 ; MM32R6:       # %bb.0: # %entry
    549 ; MM32R6-NEXT:    cmp.eq.s $f0, $f12, $f14
    550 ; MM32R6-NEXT:    sel.s $f0, $f14, $f12
    551 ; MM32R6-NEXT:    jrc $ra
    552 entry:
    553   %s = fcmp oeq float %x, %y
    554   %r = select i1 %s, float %x, float %y
    555   ret float %r
    556 }
    557 
    558 define float @tst_select_fcmp_one_float(float %x, float %y) {
    559 ; M2-LABEL: tst_select_fcmp_one_float:
    560 ; M2:       # %bb.0: # %entry
    561 ; M2-NEXT:    c.ueq.s $f12, $f14
    562 ; M2-NEXT:    bc1f $BB7_2
    563 ; M2-NEXT:    mov.s $f0, $f12
    564 ; M2-NEXT:  # %bb.1: # %entry
    565 ; M2-NEXT:    mov.s $f0, $f14
    566 ; M2-NEXT:  $BB7_2: # %entry
    567 ; M2-NEXT:    jr $ra
    568 ; M2-NEXT:    nop
    569 ;
    570 ; CMOV32R1-LABEL: tst_select_fcmp_one_float:
    571 ; CMOV32R1:       # %bb.0: # %entry
    572 ; CMOV32R1-NEXT:    mov.s $f0, $f14
    573 ; CMOV32R1-NEXT:    c.ueq.s $f12, $f14
    574 ; CMOV32R1-NEXT:    jr $ra
    575 ; CMOV32R1-NEXT:    movf.s $f0, $f12, $fcc0
    576 ;
    577 ; CMOV32R2-LABEL: tst_select_fcmp_one_float:
    578 ; CMOV32R2:       # %bb.0: # %entry
    579 ; CMOV32R2-NEXT:    mov.s $f0, $f14
    580 ; CMOV32R2-NEXT:    c.ueq.s $f12, $f14
    581 ; CMOV32R2-NEXT:    jr $ra
    582 ; CMOV32R2-NEXT:    movf.s $f0, $f12, $fcc0
    583 ;
    584 ; 32R6-LABEL: tst_select_fcmp_one_float:
    585 ; 32R6:       # %bb.0: # %entry
    586 ; 32R6-NEXT:    cmp.ueq.s $f0, $f12, $f14
    587 ; 32R6-NEXT:    mfc1 $1, $f0
    588 ; 32R6-NEXT:    not $1, $1
    589 ; 32R6-NEXT:    mtc1 $1, $f0
    590 ; 32R6-NEXT:    jr $ra
    591 ; 32R6-NEXT:    sel.s $f0, $f14, $f12
    592 ;
    593 ; M3-LABEL: tst_select_fcmp_one_float:
    594 ; M3:       # %bb.0: # %entry
    595 ; M3-NEXT:    c.ueq.s $f12, $f13
    596 ; M3-NEXT:    bc1f .LBB7_2
    597 ; M3-NEXT:    mov.s $f0, $f12
    598 ; M3-NEXT:  # %bb.1: # %entry
    599 ; M3-NEXT:    mov.s $f0, $f13
    600 ; M3-NEXT:  .LBB7_2: # %entry
    601 ; M3-NEXT:    jr $ra
    602 ; M3-NEXT:    nop
    603 ;
    604 ; CMOV64-LABEL: tst_select_fcmp_one_float:
    605 ; CMOV64:       # %bb.0: # %entry
    606 ; CMOV64-NEXT:    mov.s $f0, $f13
    607 ; CMOV64-NEXT:    c.ueq.s $f12, $f13
    608 ; CMOV64-NEXT:    jr $ra
    609 ; CMOV64-NEXT:    movf.s $f0, $f12, $fcc0
    610 ;
    611 ; 64R6-LABEL: tst_select_fcmp_one_float:
    612 ; 64R6:       # %bb.0: # %entry
    613 ; 64R6-NEXT:    cmp.ueq.s $f0, $f12, $f13
    614 ; 64R6-NEXT:    mfc1 $1, $f0
    615 ; 64R6-NEXT:    not $1, $1
    616 ; 64R6-NEXT:    mtc1 $1, $f0
    617 ; 64R6-NEXT:    jr $ra
    618 ; 64R6-NEXT:    sel.s $f0, $f13, $f12
    619 ;
    620 ; MM32R3-LABEL: tst_select_fcmp_one_float:
    621 ; MM32R3:       # %bb.0: # %entry
    622 ; MM32R3:       mov.s $f0, $f14 # <MCInst #{{.*}} FMOV_S
    623 ; MM32R3:       c.ueq.s $f12, $f14 # <MCInst #{{.*}} FCMP_S32_MM
    624 ; MM32R3:       jr $ra # <MCInst #{{.*}} JR_MM
    625 ; MM32R3:       movf.s $f0, $f12, $fcc0 # <MCInst #{{.*}} MOVF_S_MM
    626 ;
    627 ; MM32R6-LABEL: tst_select_fcmp_one_float:
    628 ; MM32R6:       # %bb.0: # %entry
    629 ; MM32R6-NEXT:    cmp.ueq.s $f0, $f12, $f14
    630 ; MM32R6-NEXT:    mfc1 $1, $f0
    631 ; MM32R6-NEXT:    not $1, $1
    632 ; MM32R6-NEXT:    mtc1 $1, $f0
    633 ; MM32R6-NEXT:    sel.s $f0, $f14, $f12
    634 ; MM32R6-NEXT:    jrc $ra
    635 entry:
    636   %s = fcmp one float %x, %y
    637   %r = select i1 %s, float %x, float %y
    638   ret float %r
    639 }
    640