[llvm-objdump] - Remove one overload of reportError. NFCI.
[llvm-complete.git] / test / CodeGen / Mips / llvm-ir / select-dbl.ll
blob65fea459490397b717e9498b347e2bd1d5e45c43
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-prefix=M2
4 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32 -verify-machineinstrs | FileCheck %s \
5 ; RUN:    -check-prefix=CMOV32R1
6 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r2 -verify-machineinstrs | FileCheck %s \
7 ; RUN:    -check-prefix=CMOV32R2
8 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r3 -verify-machineinstrs | FileCheck %s \
9 ; RUN:    -check-prefix=CMOV32R2
10 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r5 -verify-machineinstrs | FileCheck %s \
11 ; RUN:    -check-prefix=CMOV32R2
12 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r6 -verify-machineinstrs | FileCheck %s \
13 ; RUN:    -check-prefix=32R6
14 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips3 -verify-machineinstrs | FileCheck %s \
15 ; RUN:    -check-prefix=M3
16 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips4 -verify-machineinstrs | FileCheck %s \
17 ; RUN:    -check-prefix=CMOV64
18 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64 -verify-machineinstrs | FileCheck %s \
19 ; RUN:    -check-prefix=CMOV64
20 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r2 -verify-machineinstrs | FileCheck %s \
21 ; RUN:    -check-prefix=CMOV64
22 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r3 -verify-machineinstrs | FileCheck %s \
23 ; RUN:    -check-prefix=CMOV64
24 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r5 -verify-machineinstrs | FileCheck %s \
25 ; RUN:    -check-prefix=CMOV64
26 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r6 -verify-machineinstrs | FileCheck %s \
27 ; RUN:    -check-prefix=64R6
28 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r3 \
29 ; RUN:   -asm-show-inst -mattr=+micromips -verify-machineinstrs | FileCheck %s \
30 ; RUN:    -check-prefix=MM32R3
31 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r6 -mattr=+micromips -verify-machineinstrs | FileCheck %s \
32 ; RUN:    -check-prefix=MM32R6
34 define double @tst_select_i1_double(i1 signext %s, double %x, double %y) {
35 ; M2-LABEL: tst_select_i1_double:
36 ; M2:       # %bb.0: # %entry
37 ; M2-NEXT:    andi $1, $4, 1
38 ; M2-NEXT:    bnez $1, $BB0_2
39 ; M2-NEXT:    nop
40 ; M2-NEXT:  # %bb.1: # %entry
41 ; M2-NEXT:    ldc1 $f0, 16($sp)
42 ; M2-NEXT:    jr $ra
43 ; M2-NEXT:    nop
44 ; M2-NEXT:  $BB0_2:
45 ; M2-NEXT:    mtc1 $7, $f0
46 ; M2-NEXT:    jr $ra
47 ; M2-NEXT:    mtc1 $6, $f1
49 ; CMOV32R1-LABEL: tst_select_i1_double:
50 ; CMOV32R1:       # %bb.0: # %entry
51 ; CMOV32R1-NEXT:    mtc1 $7, $f2
52 ; CMOV32R1-NEXT:    mtc1 $6, $f3
53 ; CMOV32R1-NEXT:    andi $1, $4, 1
54 ; CMOV32R1-NEXT:    ldc1 $f0, 16($sp)
55 ; CMOV32R1-NEXT:    jr $ra
56 ; CMOV32R1-NEXT:    movn.d $f0, $f2, $1
58 ; CMOV32R2-LABEL: tst_select_i1_double:
59 ; CMOV32R2:       # %bb.0: # %entry
60 ; CMOV32R2-NEXT:    mtc1 $7, $f2
61 ; CMOV32R2-NEXT:    mthc1 $6, $f2
62 ; CMOV32R2-NEXT:    andi $1, $4, 1
63 ; CMOV32R2-NEXT:    ldc1 $f0, 16($sp)
64 ; CMOV32R2-NEXT:    jr $ra
65 ; CMOV32R2-NEXT:    movn.d $f0, $f2, $1
67 ; 32R6-LABEL: tst_select_i1_double:
68 ; 32R6:       # %bb.0: # %entry
69 ; 32R6-NEXT:    mtc1 $7, $f1
70 ; 32R6-NEXT:    mthc1 $6, $f1
71 ; 32R6-NEXT:    mtc1 $4, $f0
72 ; 32R6-NEXT:    ldc1 $f2, 16($sp)
73 ; 32R6-NEXT:    jr $ra
74 ; 32R6-NEXT:    sel.d $f0, $f2, $f1
76 ; M3-LABEL: tst_select_i1_double:
77 ; M3:       # %bb.0: # %entry
78 ; M3-NEXT:    andi $1, $4, 1
79 ; M3-NEXT:    bnez $1, .LBB0_2
80 ; M3-NEXT:    mov.d $f0, $f13
81 ; M3-NEXT:  # %bb.1: # %entry
82 ; M3-NEXT:    mov.d $f0, $f14
83 ; M3-NEXT:  .LBB0_2: # %entry
84 ; M3-NEXT:    jr $ra
85 ; M3-NEXT:    nop
87 ; CMOV64-LABEL: tst_select_i1_double:
88 ; CMOV64:       # %bb.0: # %entry
89 ; CMOV64-NEXT:    mov.d $f0, $f14
90 ; CMOV64-NEXT:    andi $1, $4, 1
91 ; CMOV64-NEXT:    jr $ra
92 ; CMOV64-NEXT:    movn.d $f0, $f13, $1
94 ; 64R6-LABEL: tst_select_i1_double:
95 ; 64R6:       # %bb.0: # %entry
96 ; 64R6-NEXT:    mtc1 $4, $f0
97 ; 64R6-NEXT:    jr $ra
98 ; 64R6-NEXT:    sel.d $f0, $f14, $f13
100 ; MM32R3-LABEL: tst_select_i1_double:
101 ; MM32R3:       # %bb.0: # %entry
102 ; MM32R3:       mtc1 $7, $f2 # <MCInst #{{.*}} MTC1
103 ; MM32R3:       mthc1 $6, $f2 # <MCInst #{{.*}} MTHC1_D32_MM
104 ; MM32R3:       andi16 $2, $4, 1 # <MCInst #{{.*}} ANDI16_MM
105 ; MM32R3:       ldc1 $f0, 16($sp) # <MCInst #{{.*}} LDC1_MM
106 ; MM32R3:       jr $ra # <MCInst #{{.*}} JR_MM
107 ; MM32R3:       movn.d $f0, $f2, $2 # <MCInst #{{.*}} MOVN_I_D32_MM
109 ; MM32R6-LABEL: tst_select_i1_double:
110 ; MM32R6:       # %bb.0: # %entry
111 ; MM32R6-NEXT:    mtc1 $7, $f1
112 ; MM32R6-NEXT:    mthc1 $6, $f1
113 ; MM32R6-NEXT:    mtc1 $4, $f0
114 ; MM32R6-NEXT:    ldc1 $f2, 16($sp)
115 ; MM32R6-NEXT:    sel.d $f0, $f2, $f1
116 ; MM32R6-NEXT:    jrc $ra
117 entry:
118   %r = select i1 %s, double %x, double %y
119   ret double %r
122 define double @tst_select_i1_double_reordered(double %x, double %y,
123 ; M2-LABEL: tst_select_i1_double_reordered:
124 ; M2:       # %bb.0: # %entry
125 ; M2-NEXT:    lw $1, 16($sp)
126 ; M2-NEXT:    andi $1, $1, 1
127 ; M2-NEXT:    bnez $1, $BB1_2
128 ; M2-NEXT:    mov.d $f0, $f12
129 ; M2-NEXT:  # %bb.1: # %entry
130 ; M2-NEXT:    mov.d $f0, $f14
131 ; M2-NEXT:  $BB1_2: # %entry
132 ; M2-NEXT:    jr $ra
133 ; M2-NEXT:    nop
135 ; CMOV32R1-LABEL: tst_select_i1_double_reordered:
136 ; CMOV32R1:       # %bb.0: # %entry
137 ; CMOV32R1-NEXT:    mov.d $f0, $f14
138 ; CMOV32R1-NEXT:    lw $1, 16($sp)
139 ; CMOV32R1-NEXT:    andi $1, $1, 1
140 ; CMOV32R1-NEXT:    jr $ra
141 ; CMOV32R1-NEXT:    movn.d $f0, $f12, $1
143 ; CMOV32R2-LABEL: tst_select_i1_double_reordered:
144 ; CMOV32R2:       # %bb.0: # %entry
145 ; CMOV32R2-NEXT:    mov.d $f0, $f14
146 ; CMOV32R2-NEXT:    lw $1, 16($sp)
147 ; CMOV32R2-NEXT:    andi $1, $1, 1
148 ; CMOV32R2-NEXT:    jr $ra
149 ; CMOV32R2-NEXT:    movn.d $f0, $f12, $1
151 ; 32R6-LABEL: tst_select_i1_double_reordered:
152 ; 32R6:       # %bb.0: # %entry
153 ; 32R6-NEXT:    lw $1, 16($sp)
154 ; 32R6-NEXT:    mtc1 $1, $f0
155 ; 32R6-NEXT:    jr $ra
156 ; 32R6-NEXT:    sel.d $f0, $f14, $f12
158 ; M3-LABEL: tst_select_i1_double_reordered:
159 ; M3:       # %bb.0: # %entry
160 ; M3-NEXT:    andi $1, $6, 1
161 ; M3-NEXT:    bnez $1, .LBB1_2
162 ; M3-NEXT:    mov.d $f0, $f12
163 ; M3-NEXT:  # %bb.1: # %entry
164 ; M3-NEXT:    mov.d $f0, $f13
165 ; M3-NEXT:  .LBB1_2: # %entry
166 ; M3-NEXT:    jr $ra
167 ; M3-NEXT:    nop
169 ; CMOV64-LABEL: tst_select_i1_double_reordered:
170 ; CMOV64:       # %bb.0: # %entry
171 ; CMOV64-NEXT:    mov.d $f0, $f13
172 ; CMOV64-NEXT:    andi $1, $6, 1
173 ; CMOV64-NEXT:    jr $ra
174 ; CMOV64-NEXT:    movn.d $f0, $f12, $1
176 ; 64R6-LABEL: tst_select_i1_double_reordered:
177 ; 64R6:       # %bb.0: # %entry
178 ; 64R6-NEXT:    mtc1 $6, $f0
179 ; 64R6-NEXT:    jr $ra
180 ; 64R6-NEXT:    sel.d $f0, $f13, $f12
182 ; MM32R3-LABEL: tst_select_i1_double_reordered:
183 ; MM32R3:       # %bb.0: # %entry
184 ; MM32R3:       mov.d $f0, $f14 # <MCInst #{{.*}} FMOV_D32
185 ; MM32R3:       lw $2, 16($sp) # <MCInst #{{.*}} LWSP_MM
186 ; MM32R3:       andi16 $2, $2, 1 # <MCInst #{{.*}} ANDI16_MM
187 ; MM32R3:       jr $ra # <MCInst #{{.*}} JR_MM
188 ; MM32R3:       movn.d $f0, $f12, $2 # <MCInst #{{.*}} MOVN_I_D32_MM
190 ; MM32R6-LABEL: tst_select_i1_double_reordered:
191 ; MM32R6:       # %bb.0: # %entry
192 ; MM32R6-NEXT:    lw $1, 16($sp)
193 ; MM32R6-NEXT:    mtc1 $1, $f0
194 ; MM32R6-NEXT:    sel.d $f0, $f14, $f12
195 ; MM32R6-NEXT:    jrc $ra
196                                               i1 signext %s) {
197 entry:
198   %r = select i1 %s, double %x, double %y
199   ret double %r
202 define double @tst_select_fcmp_olt_double(double %x, double %y) {
203 ; M2-LABEL: tst_select_fcmp_olt_double:
204 ; M2:       # %bb.0: # %entry
205 ; M2-NEXT:    c.olt.d $f12, $f14
206 ; M2-NEXT:    bc1t $BB2_2
207 ; M2-NEXT:    mov.d $f0, $f12
208 ; M2-NEXT:  # %bb.1: # %entry
209 ; M2-NEXT:    mov.d $f0, $f14
210 ; M2-NEXT:  $BB2_2: # %entry
211 ; M2-NEXT:    jr $ra
212 ; M2-NEXT:    nop
214 ; CMOV32R1-LABEL: tst_select_fcmp_olt_double:
215 ; CMOV32R1:       # %bb.0: # %entry
216 ; CMOV32R1-NEXT:    mov.d $f0, $f14
217 ; CMOV32R1-NEXT:    c.olt.d $f12, $f14
218 ; CMOV32R1-NEXT:    jr $ra
219 ; CMOV32R1-NEXT:    movt.d $f0, $f12, $fcc0
221 ; CMOV32R2-LABEL: tst_select_fcmp_olt_double:
222 ; CMOV32R2:       # %bb.0: # %entry
223 ; CMOV32R2-NEXT:    mov.d $f0, $f14
224 ; CMOV32R2-NEXT:    c.olt.d $f12, $f14
225 ; CMOV32R2-NEXT:    jr $ra
226 ; CMOV32R2-NEXT:    movt.d $f0, $f12, $fcc0
228 ; 32R6-LABEL: tst_select_fcmp_olt_double:
229 ; 32R6:       # %bb.0: # %entry
230 ; 32R6-NEXT:    cmp.lt.d $f0, $f12, $f14
231 ; 32R6-NEXT:    mfc1 $1, $f0
232 ; 32R6-NEXT:    mtc1 $1, $f0
233 ; 32R6-NEXT:    jr $ra
234 ; 32R6-NEXT:    sel.d $f0, $f14, $f12
236 ; M3-LABEL: tst_select_fcmp_olt_double:
237 ; M3:       # %bb.0: # %entry
238 ; M3-NEXT:    c.olt.d $f12, $f13
239 ; M3-NEXT:    bc1t .LBB2_2
240 ; M3-NEXT:    mov.d $f0, $f12
241 ; M3-NEXT:  # %bb.1: # %entry
242 ; M3-NEXT:    mov.d $f0, $f13
243 ; M3-NEXT:  .LBB2_2: # %entry
244 ; M3-NEXT:    jr $ra
245 ; M3-NEXT:    nop
247 ; CMOV64-LABEL: tst_select_fcmp_olt_double:
248 ; CMOV64:       # %bb.0: # %entry
249 ; CMOV64-NEXT:    mov.d $f0, $f13
250 ; CMOV64-NEXT:    c.olt.d $f12, $f13
251 ; CMOV64-NEXT:    jr $ra
252 ; CMOV64-NEXT:    movt.d $f0, $f12, $fcc0
254 ; 64R6-LABEL: tst_select_fcmp_olt_double:
255 ; 64R6:       # %bb.0: # %entry
256 ; 64R6-NEXT:    cmp.lt.d $f0, $f12, $f13
257 ; 64R6-NEXT:    mfc1 $1, $f0
258 ; 64R6-NEXT:    mtc1 $1, $f0
259 ; 64R6-NEXT:    jr $ra
260 ; 64R6-NEXT:    sel.d $f0, $f13, $f12
262 ; MM32R3-LABEL: tst_select_fcmp_olt_double:
263 ; MM32R3:       # %bb.0: # %entry
264 ; MM32R3:       mov.d $f0, $f14 # <MCInst #{{.*}} FMOV_D32
265 ; MM32R3:       c.olt.d $f12, $f14 # <MCInst #{{.*}} FCMP_D32_MM
266 ; MM32R3:       jr $ra # <MCInst #{{.*}} JR_MM
267 ; MM32R3:       movt.d $f0, $f12, $fcc0 # <MCInst #{{.*}} MOVT_D32_MM
269 ; MM32R6-LABEL: tst_select_fcmp_olt_double:
270 ; MM32R6:       # %bb.0: # %entry
271 ; MM32R6-NEXT:    cmp.lt.d $f0, $f12, $f14
272 ; MM32R6-NEXT:    mfc1 $1, $f0
273 ; MM32R6-NEXT:    mtc1 $1, $f0
274 ; MM32R6-NEXT:    sel.d $f0, $f14, $f12
275 ; MM32R6-NEXT:    jrc $ra
276 entry:
277   %s = fcmp olt double %x, %y
278   %r = select i1 %s, double %x, double %y
279   ret double %r
282 define double @tst_select_fcmp_ole_double(double %x, double %y) {
283 ; M2-LABEL: tst_select_fcmp_ole_double:
284 ; M2:       # %bb.0: # %entry
285 ; M2-NEXT:    c.ole.d $f12, $f14
286 ; M2-NEXT:    bc1t $BB3_2
287 ; M2-NEXT:    mov.d $f0, $f12
288 ; M2-NEXT:  # %bb.1: # %entry
289 ; M2-NEXT:    mov.d $f0, $f14
290 ; M2-NEXT:  $BB3_2: # %entry
291 ; M2-NEXT:    jr $ra
292 ; M2-NEXT:    nop
294 ; CMOV32R1-LABEL: tst_select_fcmp_ole_double:
295 ; CMOV32R1:       # %bb.0: # %entry
296 ; CMOV32R1-NEXT:    mov.d $f0, $f14
297 ; CMOV32R1-NEXT:    c.ole.d $f12, $f14
298 ; CMOV32R1-NEXT:    jr $ra
299 ; CMOV32R1-NEXT:    movt.d $f0, $f12, $fcc0
301 ; CMOV32R2-LABEL: tst_select_fcmp_ole_double:
302 ; CMOV32R2:       # %bb.0: # %entry
303 ; CMOV32R2-NEXT:    mov.d $f0, $f14
304 ; CMOV32R2-NEXT:    c.ole.d $f12, $f14
305 ; CMOV32R2-NEXT:    jr $ra
306 ; CMOV32R2-NEXT:    movt.d $f0, $f12, $fcc0
308 ; 32R6-LABEL: tst_select_fcmp_ole_double:
309 ; 32R6:       # %bb.0: # %entry
310 ; 32R6-NEXT:    cmp.le.d $f0, $f12, $f14
311 ; 32R6-NEXT:    mfc1 $1, $f0
312 ; 32R6-NEXT:    mtc1 $1, $f0
313 ; 32R6-NEXT:    jr $ra
314 ; 32R6-NEXT:    sel.d $f0, $f14, $f12
316 ; M3-LABEL: tst_select_fcmp_ole_double:
317 ; M3:       # %bb.0: # %entry
318 ; M3-NEXT:    c.ole.d $f12, $f13
319 ; M3-NEXT:    bc1t .LBB3_2
320 ; M3-NEXT:    mov.d $f0, $f12
321 ; M3-NEXT:  # %bb.1: # %entry
322 ; M3-NEXT:    mov.d $f0, $f13
323 ; M3-NEXT:  .LBB3_2: # %entry
324 ; M3-NEXT:    jr $ra
325 ; M3-NEXT:    nop
327 ; CMOV64-LABEL: tst_select_fcmp_ole_double:
328 ; CMOV64:       # %bb.0: # %entry
329 ; CMOV64-NEXT:    mov.d $f0, $f13
330 ; CMOV64-NEXT:    c.ole.d $f12, $f13
331 ; CMOV64-NEXT:    jr $ra
332 ; CMOV64-NEXT:    movt.d $f0, $f12, $fcc0
334 ; 64R6-LABEL: tst_select_fcmp_ole_double:
335 ; 64R6:       # %bb.0: # %entry
336 ; 64R6-NEXT:    cmp.le.d $f0, $f12, $f13
337 ; 64R6-NEXT:    mfc1 $1, $f0
338 ; 64R6-NEXT:    mtc1 $1, $f0
339 ; 64R6-NEXT:    jr $ra
340 ; 64R6-NEXT:    sel.d $f0, $f13, $f12
342 ; MM32R3-LABEL: tst_select_fcmp_ole_double:
343 ; MM32R3:       # %bb.0: # %entry
344 ; MM32R3:       mov.d $f0, $f14 # <MCInst #{{.*}} FMOV_D32
345 ; MM32R3:       c.ole.d $f12, $f14 # <MCInst #{{.*}} FCMP_D32_MM
346 ; MM32R3:       jr $ra # <MCInst #{{.*}} JR_MM
347 ; MM32R3:       movt.d $f0, $f12, $fcc0 # <MCInst #{{.*}} MOVT_D32_MM
349 ; MM32R6-LABEL: tst_select_fcmp_ole_double:
350 ; MM32R6:       # %bb.0: # %entry
351 ; MM32R6-NEXT:    cmp.le.d $f0, $f12, $f14
352 ; MM32R6-NEXT:    mfc1 $1, $f0
353 ; MM32R6-NEXT:    mtc1 $1, $f0
354 ; MM32R6-NEXT:    sel.d $f0, $f14, $f12
355 ; MM32R6-NEXT:    jrc $ra
356 entry:
357   %s = fcmp ole double %x, %y
358   %r = select i1 %s, double %x, double %y
359   ret double %r
362 define double @tst_select_fcmp_ogt_double(double %x, double %y) {
363 ; M2-LABEL: tst_select_fcmp_ogt_double:
364 ; M2:       # %bb.0: # %entry
365 ; M2-NEXT:    c.ule.d $f12, $f14
366 ; M2-NEXT:    bc1f $BB4_2
367 ; M2-NEXT:    mov.d $f0, $f12
368 ; M2-NEXT:  # %bb.1: # %entry
369 ; M2-NEXT:    mov.d $f0, $f14
370 ; M2-NEXT:  $BB4_2: # %entry
371 ; M2-NEXT:    jr $ra
372 ; M2-NEXT:    nop
374 ; CMOV32R1-LABEL: tst_select_fcmp_ogt_double:
375 ; CMOV32R1:       # %bb.0: # %entry
376 ; CMOV32R1-NEXT:    mov.d $f0, $f14
377 ; CMOV32R1-NEXT:    c.ule.d $f12, $f14
378 ; CMOV32R1-NEXT:    jr $ra
379 ; CMOV32R1-NEXT:    movf.d $f0, $f12, $fcc0
381 ; CMOV32R2-LABEL: tst_select_fcmp_ogt_double:
382 ; CMOV32R2:       # %bb.0: # %entry
383 ; CMOV32R2-NEXT:    mov.d $f0, $f14
384 ; CMOV32R2-NEXT:    c.ule.d $f12, $f14
385 ; CMOV32R2-NEXT:    jr $ra
386 ; CMOV32R2-NEXT:    movf.d $f0, $f12, $fcc0
388 ; 32R6-LABEL: tst_select_fcmp_ogt_double:
389 ; 32R6:       # %bb.0: # %entry
390 ; 32R6-NEXT:    cmp.lt.d $f0, $f14, $f12
391 ; 32R6-NEXT:    mfc1 $1, $f0
392 ; 32R6-NEXT:    mtc1 $1, $f0
393 ; 32R6-NEXT:    jr $ra
394 ; 32R6-NEXT:    sel.d $f0, $f14, $f12
396 ; M3-LABEL: tst_select_fcmp_ogt_double:
397 ; M3:       # %bb.0: # %entry
398 ; M3-NEXT:    c.ule.d $f12, $f13
399 ; M3-NEXT:    bc1f .LBB4_2
400 ; M3-NEXT:    mov.d $f0, $f12
401 ; M3-NEXT:  # %bb.1: # %entry
402 ; M3-NEXT:    mov.d $f0, $f13
403 ; M3-NEXT:  .LBB4_2: # %entry
404 ; M3-NEXT:    jr $ra
405 ; M3-NEXT:    nop
407 ; CMOV64-LABEL: tst_select_fcmp_ogt_double:
408 ; CMOV64:       # %bb.0: # %entry
409 ; CMOV64-NEXT:    mov.d $f0, $f13
410 ; CMOV64-NEXT:    c.ule.d $f12, $f13
411 ; CMOV64-NEXT:    jr $ra
412 ; CMOV64-NEXT:    movf.d $f0, $f12, $fcc0
414 ; 64R6-LABEL: tst_select_fcmp_ogt_double:
415 ; 64R6:       # %bb.0: # %entry
416 ; 64R6-NEXT:    cmp.lt.d $f0, $f13, $f12
417 ; 64R6-NEXT:    mfc1 $1, $f0
418 ; 64R6-NEXT:    mtc1 $1, $f0
419 ; 64R6-NEXT:    jr $ra
420 ; 64R6-NEXT:    sel.d $f0, $f13, $f12
422 ; MM32R3-LABEL: tst_select_fcmp_ogt_double:
423 ; MM32R3:       # %bb.0: # %entry
424 ; MM32R3:       mov.d $f0, $f14 # <MCInst #{{.*}} FMOV_D32
425 ; MM32R3:       c.ule.d $f12, $f14 # <MCInst #{{.*}} FCMP_D32_MM
426 ; MM32R3:       jr $ra # <MCInst #{{.*}} JR_MM
427 ; MM32R3:       movf.d $f0, $f12, $fcc0 # <MCInst #{{.*}} MOVF_D32_MM
429 ; MM32R6-LABEL: tst_select_fcmp_ogt_double:
430 ; MM32R6:       # %bb.0: # %entry
431 ; MM32R6-NEXT:    cmp.lt.d $f0, $f14, $f12
432 ; MM32R6-NEXT:    mfc1 $1, $f0
433 ; MM32R6-NEXT:    mtc1 $1, $f0
434 ; MM32R6-NEXT:    sel.d $f0, $f14, $f12
435 ; MM32R6-NEXT:    jrc $ra
436 entry:
437   %s = fcmp ogt double %x, %y
438   %r = select i1 %s, double %x, double %y
439   ret double %r
442 define double @tst_select_fcmp_oge_double(double %x, double %y) {
443 ; M2-LABEL: tst_select_fcmp_oge_double:
444 ; M2:       # %bb.0: # %entry
445 ; M2-NEXT:    c.ult.d $f12, $f14
446 ; M2-NEXT:    bc1f $BB5_2
447 ; M2-NEXT:    mov.d $f0, $f12
448 ; M2-NEXT:  # %bb.1: # %entry
449 ; M2-NEXT:    mov.d $f0, $f14
450 ; M2-NEXT:  $BB5_2: # %entry
451 ; M2-NEXT:    jr $ra
452 ; M2-NEXT:    nop
454 ; CMOV32R1-LABEL: tst_select_fcmp_oge_double:
455 ; CMOV32R1:       # %bb.0: # %entry
456 ; CMOV32R1-NEXT:    mov.d $f0, $f14
457 ; CMOV32R1-NEXT:    c.ult.d $f12, $f14
458 ; CMOV32R1-NEXT:    jr $ra
459 ; CMOV32R1-NEXT:    movf.d $f0, $f12, $fcc0
461 ; CMOV32R2-LABEL: tst_select_fcmp_oge_double:
462 ; CMOV32R2:       # %bb.0: # %entry
463 ; CMOV32R2-NEXT:    mov.d $f0, $f14
464 ; CMOV32R2-NEXT:    c.ult.d $f12, $f14
465 ; CMOV32R2-NEXT:    jr $ra
466 ; CMOV32R2-NEXT:    movf.d $f0, $f12, $fcc0
468 ; 32R6-LABEL: tst_select_fcmp_oge_double:
469 ; 32R6:       # %bb.0: # %entry
470 ; 32R6-NEXT:    cmp.le.d $f0, $f14, $f12
471 ; 32R6-NEXT:    mfc1 $1, $f0
472 ; 32R6-NEXT:    mtc1 $1, $f0
473 ; 32R6-NEXT:    jr $ra
474 ; 32R6-NEXT:    sel.d $f0, $f14, $f12
476 ; M3-LABEL: tst_select_fcmp_oge_double:
477 ; M3:       # %bb.0: # %entry
478 ; M3-NEXT:    c.ult.d $f12, $f13
479 ; M3-NEXT:    bc1f .LBB5_2
480 ; M3-NEXT:    mov.d $f0, $f12
481 ; M3-NEXT:  # %bb.1: # %entry
482 ; M3-NEXT:    mov.d $f0, $f13
483 ; M3-NEXT:  .LBB5_2: # %entry
484 ; M3-NEXT:    jr $ra
485 ; M3-NEXT:    nop
487 ; CMOV64-LABEL: tst_select_fcmp_oge_double:
488 ; CMOV64:       # %bb.0: # %entry
489 ; CMOV64-NEXT:    mov.d $f0, $f13
490 ; CMOV64-NEXT:    c.ult.d $f12, $f13
491 ; CMOV64-NEXT:    jr $ra
492 ; CMOV64-NEXT:    movf.d $f0, $f12, $fcc0
494 ; 64R6-LABEL: tst_select_fcmp_oge_double:
495 ; 64R6:       # %bb.0: # %entry
496 ; 64R6-NEXT:    cmp.le.d $f0, $f13, $f12
497 ; 64R6-NEXT:    mfc1 $1, $f0
498 ; 64R6-NEXT:    mtc1 $1, $f0
499 ; 64R6-NEXT:    jr $ra
500 ; 64R6-NEXT:    sel.d $f0, $f13, $f12
502 ; MM32R3-LABEL: tst_select_fcmp_oge_double:
503 ; MM32R3:       # %bb.0: # %entry
504 ; MM32R3:       mov.d $f0, $f14 # <MCInst #{{.*}} FMOV_D32
505 ; MM32R3:       c.ult.d $f12, $f14 # <MCInst #{{.*}} FCMP_D32_MM
506 ; MM32R3:       jr $ra # <MCInst #{{.*}} JR_MM
507 ; MM32R3:       movf.d $f0, $f12, $fcc0 # <MCInst #{{.*}} MOVF_D32_MM
509 ; MM32R6-LABEL: tst_select_fcmp_oge_double:
510 ; MM32R6:       # %bb.0: # %entry
511 ; MM32R6-NEXT:    cmp.le.d $f0, $f14, $f12
512 ; MM32R6-NEXT:    mfc1 $1, $f0
513 ; MM32R6-NEXT:    mtc1 $1, $f0
514 ; MM32R6-NEXT:    sel.d $f0, $f14, $f12
515 ; MM32R6-NEXT:    jrc $ra
516 entry:
517   %s = fcmp oge double %x, %y
518   %r = select i1 %s, double %x, double %y
519   ret double %r
522 define double @tst_select_fcmp_oeq_double(double %x, double %y) {
523 ; M2-LABEL: tst_select_fcmp_oeq_double:
524 ; M2:       # %bb.0: # %entry
525 ; M2-NEXT:    c.eq.d $f12, $f14
526 ; M2-NEXT:    bc1t $BB6_2
527 ; M2-NEXT:    mov.d $f0, $f12
528 ; M2-NEXT:  # %bb.1: # %entry
529 ; M2-NEXT:    mov.d $f0, $f14
530 ; M2-NEXT:  $BB6_2: # %entry
531 ; M2-NEXT:    jr $ra
532 ; M2-NEXT:    nop
534 ; CMOV32R1-LABEL: tst_select_fcmp_oeq_double:
535 ; CMOV32R1:       # %bb.0: # %entry
536 ; CMOV32R1-NEXT:    mov.d $f0, $f14
537 ; CMOV32R1-NEXT:    c.eq.d $f12, $f14
538 ; CMOV32R1-NEXT:    jr $ra
539 ; CMOV32R1-NEXT:    movt.d $f0, $f12, $fcc0
541 ; CMOV32R2-LABEL: tst_select_fcmp_oeq_double:
542 ; CMOV32R2:       # %bb.0: # %entry
543 ; CMOV32R2-NEXT:    mov.d $f0, $f14
544 ; CMOV32R2-NEXT:    c.eq.d $f12, $f14
545 ; CMOV32R2-NEXT:    jr $ra
546 ; CMOV32R2-NEXT:    movt.d $f0, $f12, $fcc0
548 ; 32R6-LABEL: tst_select_fcmp_oeq_double:
549 ; 32R6:       # %bb.0: # %entry
550 ; 32R6-NEXT:    cmp.eq.d $f0, $f12, $f14
551 ; 32R6-NEXT:    mfc1 $1, $f0
552 ; 32R6-NEXT:    mtc1 $1, $f0
553 ; 32R6-NEXT:    jr $ra
554 ; 32R6-NEXT:    sel.d $f0, $f14, $f12
556 ; M3-LABEL: tst_select_fcmp_oeq_double:
557 ; M3:       # %bb.0: # %entry
558 ; M3-NEXT:    c.eq.d $f12, $f13
559 ; M3-NEXT:    bc1t .LBB6_2
560 ; M3-NEXT:    mov.d $f0, $f12
561 ; M3-NEXT:  # %bb.1: # %entry
562 ; M3-NEXT:    mov.d $f0, $f13
563 ; M3-NEXT:  .LBB6_2: # %entry
564 ; M3-NEXT:    jr $ra
565 ; M3-NEXT:    nop
567 ; CMOV64-LABEL: tst_select_fcmp_oeq_double:
568 ; CMOV64:       # %bb.0: # %entry
569 ; CMOV64-NEXT:    mov.d $f0, $f13
570 ; CMOV64-NEXT:    c.eq.d $f12, $f13
571 ; CMOV64-NEXT:    jr $ra
572 ; CMOV64-NEXT:    movt.d $f0, $f12, $fcc0
574 ; 64R6-LABEL: tst_select_fcmp_oeq_double:
575 ; 64R6:       # %bb.0: # %entry
576 ; 64R6-NEXT:    cmp.eq.d $f0, $f12, $f13
577 ; 64R6-NEXT:    mfc1 $1, $f0
578 ; 64R6-NEXT:    mtc1 $1, $f0
579 ; 64R6-NEXT:    jr $ra
580 ; 64R6-NEXT:    sel.d $f0, $f13, $f12
582 ; MM32R3-LABEL: tst_select_fcmp_oeq_double:
583 ; MM32R3:       # %bb.0: # %entry
584 ; MM32R3:       mov.d $f0, $f14 # <MCInst #{{.*}} FMOV_D32
585 ; MM32R3:       c.eq.d $f12, $f14 # <MCInst #{{.*}} FCMP_D32_MM
586 ; MM32R3:       jr $ra # <MCInst #{{.*}} JR_MM
587 ; MM32R3:       movt.d $f0, $f12, $fcc0 # <MCInst #{{.*}} MOVT_D32_MM
589 ; MM32R6-LABEL: tst_select_fcmp_oeq_double:
590 ; MM32R6:       # %bb.0: # %entry
591 ; MM32R6-NEXT:    cmp.eq.d $f0, $f12, $f14
592 ; MM32R6-NEXT:    mfc1 $1, $f0
593 ; MM32R6-NEXT:    mtc1 $1, $f0
594 ; MM32R6-NEXT:    sel.d $f0, $f14, $f12
595 ; MM32R6-NEXT:    jrc $ra
596 entry:
597   %s = fcmp oeq double %x, %y
598   %r = select i1 %s, double %x, double %y
599   ret double %r
602 define double @tst_select_fcmp_one_double(double %x, double %y) {
603 ; M2-LABEL: tst_select_fcmp_one_double:
604 ; M2:       # %bb.0: # %entry
605 ; M2-NEXT:    c.ueq.d $f12, $f14
606 ; M2-NEXT:    bc1f $BB7_2
607 ; M2-NEXT:    mov.d $f0, $f12
608 ; M2-NEXT:  # %bb.1: # %entry
609 ; M2-NEXT:    mov.d $f0, $f14
610 ; M2-NEXT:  $BB7_2: # %entry
611 ; M2-NEXT:    jr $ra
612 ; M2-NEXT:    nop
614 ; CMOV32R1-LABEL: tst_select_fcmp_one_double:
615 ; CMOV32R1:       # %bb.0: # %entry
616 ; CMOV32R1-NEXT:    mov.d $f0, $f14
617 ; CMOV32R1-NEXT:    c.ueq.d $f12, $f14
618 ; CMOV32R1-NEXT:    jr $ra
619 ; CMOV32R1-NEXT:    movf.d $f0, $f12, $fcc0
621 ; CMOV32R2-LABEL: tst_select_fcmp_one_double:
622 ; CMOV32R2:       # %bb.0: # %entry
623 ; CMOV32R2-NEXT:    mov.d $f0, $f14
624 ; CMOV32R2-NEXT:    c.ueq.d $f12, $f14
625 ; CMOV32R2-NEXT:    jr $ra
626 ; CMOV32R2-NEXT:    movf.d $f0, $f12, $fcc0
628 ; 32R6-LABEL: tst_select_fcmp_one_double:
629 ; 32R6:       # %bb.0: # %entry
630 ; 32R6-NEXT:    cmp.ueq.d $f0, $f12, $f14
631 ; 32R6-NEXT:    mfc1 $1, $f0
632 ; 32R6-NEXT:    not $1, $1
633 ; 32R6-NEXT:    mtc1 $1, $f0
634 ; 32R6-NEXT:    jr $ra
635 ; 32R6-NEXT:    sel.d $f0, $f14, $f12
637 ; M3-LABEL: tst_select_fcmp_one_double:
638 ; M3:       # %bb.0: # %entry
639 ; M3-NEXT:    c.ueq.d $f12, $f13
640 ; M3-NEXT:    bc1f .LBB7_2
641 ; M3-NEXT:    mov.d $f0, $f12
642 ; M3-NEXT:  # %bb.1: # %entry
643 ; M3-NEXT:    mov.d $f0, $f13
644 ; M3-NEXT:  .LBB7_2: # %entry
645 ; M3-NEXT:    jr $ra
646 ; M3-NEXT:    nop
648 ; CMOV64-LABEL: tst_select_fcmp_one_double:
649 ; CMOV64:       # %bb.0: # %entry
650 ; CMOV64-NEXT:    mov.d $f0, $f13
651 ; CMOV64-NEXT:    c.ueq.d $f12, $f13
652 ; CMOV64-NEXT:    jr $ra
653 ; CMOV64-NEXT:    movf.d $f0, $f12, $fcc0
655 ; 64R6-LABEL: tst_select_fcmp_one_double:
656 ; 64R6:       # %bb.0: # %entry
657 ; 64R6-NEXT:    cmp.ueq.d $f0, $f12, $f13
658 ; 64R6-NEXT:    mfc1 $1, $f0
659 ; 64R6-NEXT:    not $1, $1
660 ; 64R6-NEXT:    mtc1 $1, $f0
661 ; 64R6-NEXT:    jr $ra
662 ; 64R6-NEXT:    sel.d $f0, $f13, $f12
664 ; MM32R3-LABEL: tst_select_fcmp_one_double:
665 ; MM32R3:       # %bb.0: # %entry
666 ; MM32R3:       mov.d $f0, $f14 # <MCInst #{{.*}} FMOV_D32
667 ; MM32R3:       c.ueq.d $f12, $f14 # <MCInst #{{.*}} FCMP_D32_MM
668 ; MM32R3:       jr $ra # <MCInst #{{.*}} JR_MM
669 ; MM32R3:       movf.d $f0, $f12, $fcc0 # <MCInst #{{.*}} MOVF_D32_MM
671 ; MM32R6-LABEL: tst_select_fcmp_one_double:
672 ; MM32R6:       # %bb.0: # %entry
673 ; MM32R6-NEXT:    cmp.ueq.d $f0, $f12, $f14
674 ; MM32R6-NEXT:    mfc1 $1, $f0
675 ; MM32R6-NEXT:    not $1, $1
676 ; MM32R6-NEXT:    mtc1 $1, $f0
677 ; MM32R6-NEXT:    sel.d $f0, $f14, $f12
678 ; MM32R6-NEXT:    jrc $ra
679 entry:
680   %s = fcmp one double %x, %y
681   %r = select i1 %s, double %x, double %y
682   ret double %r