[MIParser] Set RegClassOrRegBank during instruction parsing
[llvm-complete.git] / test / CodeGen / Mips / llvm-ir / select-flt.ll
blob0ffe3385d120bbea70a0b24255eae70acf63ae22
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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