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
39 ; M2-NEXT: # %bb.1: # %entry
41 ; M2-NEXT: mtc1 $6, $f0
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
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
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
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
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
110 %r = select i1 %s, float %x, float %y
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
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
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
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
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
184 %r = select i1 %s, float %x, float %y
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
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
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
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
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
257 %s = fcmp olt float %x, %y
258 %r = select i1 %s, float %x, float %y
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
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
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
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
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
331 %s = fcmp ole float %x, %y
332 %r = select i1 %s, float %x, float %y
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
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
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
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
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
405 %s = fcmp ogt float %x, %y
406 %r = select i1 %s, float %x, float %y
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
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
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
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
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
479 %s = fcmp oge float %x, %y
480 %r = select i1 %s, float %x, float %y
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
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
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
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
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
553 %s = fcmp oeq float %x, %y
554 %r = select i1 %s, float %x, float %y
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
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
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
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
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
636 %s = fcmp one float %x, %y
637 %r = select i1 %s, float %x, float %y