[mips][mips64r6] Correct cond names in the cmp.cond.[ds] instructions
[oota-llvm.git] / test / CodeGen / Mips / fcmp.ll
1 ; RUN: llc < %s -march=mipsel   -mcpu=mips32   | FileCheck %s -check-prefix=ALL -check-prefix=32-C
2 ; RUN: llc < %s -march=mipsel   -mcpu=mips32r2 | FileCheck %s -check-prefix=ALL -check-prefix=32-C
3 ; RUN: llc < %s -march=mipsel   -mcpu=mips32r6 | FileCheck %s -check-prefix=ALL -check-prefix=32-CMP
4 ; RUN: llc < %s -march=mips64el -mcpu=mips4    | FileCheck %s -check-prefix=ALL -check-prefix=64-C
5 ; RUN: llc < %s -march=mips64el -mcpu=mips64   | FileCheck %s -check-prefix=ALL -check-prefix=64-C
6 ; RUN: llc < %s -march=mips64el -mcpu=mips64r2 | FileCheck %s -check-prefix=ALL -check-prefix=64-C
7 ; RUN: llc < %s -march=mips64el -mcpu=mips64r6 | FileCheck %s -check-prefix=ALL -check-prefix=64-CMP
8
9 define i32 @false_f32(float %a, float %b) nounwind {
10 ; ALL-LABEL: false_f32:
11 ; ALL:           addiu $2, $zero, 0
12
13   %1 = fcmp false float %a, %b
14   %2 = zext i1 %1 to i32
15   ret i32 %2
16 }
17
18 define i32 @oeq_f32(float %a, float %b) nounwind {
19 ; ALL-LABEL: oeq_f32:
20
21 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
22 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
23 ; 32-C-DAG:      c.eq.s $f12, $f14
24 ; 32-C-DAG:      movt $[[T0]], $1, $fcc0
25
26 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
27 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
28 ; 64-C-DAG:      c.eq.s $f12, $f13
29 ; 64-C-DAG:      movt $[[T0]], $1, $fcc0
30
31 ; 32-CMP-DAG:    cmp.eq.s $[[T0:f[0-9]+]], $f12, $f14
32 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
33
34 ; 64-CMP-DAG:    cmp.eq.s $[[T0:f[0-9]+]], $f12, $f13
35 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
36
37   %1 = fcmp oeq float %a, %b
38   %2 = zext i1 %1 to i32
39   ret i32 %2
40 }
41
42 define i32 @ogt_f32(float %a, float %b) nounwind {
43 ; ALL-LABEL: ogt_f32:
44
45 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
46 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
47 ; 32-C-DAG:      c.ule.s $f12, $f14
48 ; 32-C-DAG:      movf $[[T0]], $1, $fcc0
49
50 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
51 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
52 ; 64-C-DAG:      c.ule.s $f12, $f13
53 ; 64-C-DAG:      movf $[[T0]], $1, $fcc0
54
55 ; 32-CMP-DAG:    cmp.lt.s $[[T0:f[0-9]+]], $f14, $f12
56 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
57
58 ; 64-CMP-DAG:    cmp.lt.s $[[T0:f[0-9]+]], $f13, $f12
59 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
60
61   %1 = fcmp ogt float %a, %b
62   %2 = zext i1 %1 to i32
63   ret i32 %2
64 }
65
66 define i32 @oge_f32(float %a, float %b) nounwind {
67 ; ALL-LABEL: oge_f32:
68
69 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
70 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
71 ; 32-C-DAG:      c.ult.s $f12, $f14
72 ; 32-C-DAG:      movf $[[T0]], $1, $fcc0
73
74 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
75 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
76 ; 64-C-DAG:      c.ult.s $f12, $f13
77 ; 64-C-DAG:      movf $[[T0]], $1, $fcc0
78
79 ; 32-CMP-DAG:    cmp.le.s $[[T0:f[0-9]+]], $f14, $f12
80 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
81
82 ; 64-CMP-DAG:    cmp.le.s $[[T0:f[0-9]+]], $f13, $f12
83 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
84
85   %1 = fcmp oge float %a, %b
86   %2 = zext i1 %1 to i32
87   ret i32 %2
88 }
89
90 define i32 @olt_f32(float %a, float %b) nounwind {
91 ; ALL-LABEL: olt_f32:
92
93 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
94 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
95 ; 32-C-DAG:      c.olt.s $f12, $f14
96 ; 32-C-DAG:      movt $[[T0]], $1, $fcc0
97
98 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
99 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
100 ; 64-C-DAG:      c.olt.s $f12, $f13
101 ; 64-C-DAG:      movt $[[T0]], $1, $fcc0
102
103 ; 32-CMP-DAG:    cmp.lt.s $[[T0:f[0-9]+]], $f12, $f14
104 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
105
106 ; 64-CMP-DAG:    cmp.lt.s $[[T0:f[0-9]+]], $f12, $f13
107 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
108
109   %1 = fcmp olt float %a, %b
110   %2 = zext i1 %1 to i32
111   ret i32 %2
112 }
113
114 define i32 @ole_f32(float %a, float %b) nounwind {
115 ; ALL-LABEL: ole_f32:
116
117 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
118 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
119 ; 32-C-DAG:      c.ole.s $f12, $f14
120 ; 32-C-DAG:      movt $[[T0]], $1, $fcc0
121
122 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
123 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
124 ; 64-C-DAG:      c.ole.s $f12, $f13
125 ; 64-C-DAG:      movt $[[T0]], $1, $fcc0
126
127 ; 32-CMP-DAG:    cmp.le.s $[[T0:f[0-9]+]], $f12, $f14
128 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
129
130 ; 64-CMP-DAG:    cmp.le.s $[[T0:f[0-9]+]], $f12, $f13
131 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
132
133   %1 = fcmp ole float %a, %b
134   %2 = zext i1 %1 to i32
135   ret i32 %2
136 }
137
138 define i32 @one_f32(float %a, float %b) nounwind {
139 ; ALL-LABEL: one_f32:
140
141 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
142 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
143 ; 32-C-DAG:      c.ueq.s $f12, $f14
144 ; 32-C-DAG:      movf $[[T0]], $1, $fcc0
145
146 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
147 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
148 ; 64-C-DAG:      c.ueq.s $f12, $f13
149 ; 64-C-DAG:      movf $[[T0]], $1, $fcc0
150
151 ; 32-CMP-DAG:    cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f14
152 ; 32-CMP-DAG:    mfc1 $[[T1:[0-9]+]], $[[T0]]
153 ; 32-CMP-DAG:    not $2, $[[T1]]
154
155 ; 64-CMP-DAG:    cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f13
156 ; 64-CMP-DAG:    mfc1 $[[T1:[0-9]+]], $[[T0]]
157 ; 64-CMP-DAG:    not $2, $[[T1]]
158
159   %1 = fcmp one float %a, %b
160   %2 = zext i1 %1 to i32
161   ret i32 %2
162 }
163
164 define i32 @ord_f32(float %a, float %b) nounwind {
165 ; ALL-LABEL: ord_f32:
166
167 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
168 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
169 ; 32-C-DAG:      c.un.s $f12, $f14
170 ; 32-C-DAG:      movf $[[T0]], $1, $fcc0
171
172 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
173 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
174 ; 64-C-DAG:      c.un.s $f12, $f13
175 ; 64-C-DAG:      movf $[[T0]], $1, $fcc0
176
177 ; 32-CMP-DAG:    cmp.un.s $[[T0:f[0-9]+]], $f12, $f14
178 ; 32-CMP-DAG:    mfc1 $[[T1:[0-9]+]], $[[T0]]
179 ; 32-CMP-DAG:    not $2, $[[T1]]
180
181 ; 64-CMP-DAG:    cmp.un.s $[[T0:f[0-9]+]], $f12, $f13
182 ; 64-CMP-DAG:    mfc1 $[[T1:[0-9]+]], $[[T0]]
183 ; 64-CMP-DAG:    not $2, $[[T1]]
184
185   %1 = fcmp ord float %a, %b
186   %2 = zext i1 %1 to i32
187   ret i32 %2
188 }
189
190 define i32 @ueq_f32(float %a, float %b) nounwind {
191 ; ALL-LABEL: ueq_f32:
192
193 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
194 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
195 ; 32-C-DAG:      c.ueq.s $f12, $f14
196 ; 32-C-DAG:      movt $[[T0]], $1, $fcc0
197
198 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
199 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
200 ; 64-C-DAG:      c.ueq.s $f12, $f13
201 ; 64-C-DAG:      movt $[[T0]], $1, $fcc0
202
203 ; 32-CMP-DAG:    cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f14
204 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
205
206 ; 64-CMP-DAG:    cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f13
207 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
208
209   %1 = fcmp ueq float %a, %b
210   %2 = zext i1 %1 to i32
211   ret i32 %2
212 }
213
214 define i32 @ugt_f32(float %a, float %b) nounwind {
215 ; ALL-LABEL: ugt_f32:
216
217 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
218 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
219 ; 32-C-DAG:      c.ole.s $f12, $f14
220 ; 32-C-DAG:      movf $[[T0]], $1, $fcc0
221
222 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
223 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
224 ; 64-C-DAG:      c.ole.s $f12, $f13
225 ; 64-C-DAG:      movf $[[T0]], $1, $fcc0
226
227 ; 32-CMP-DAG:    cmp.ult.s $[[T0:f[0-9]+]], $f14, $f12
228 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
229
230 ; 64-CMP-DAG:    cmp.ult.s $[[T0:f[0-9]+]], $f13, $f12
231 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
232
233   %1 = fcmp ugt float %a, %b
234   %2 = zext i1 %1 to i32
235   ret i32 %2
236 }
237
238 define i32 @uge_f32(float %a, float %b) nounwind {
239 ; ALL-LABEL: uge_f32:
240
241 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
242 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
243 ; 32-C-DAG:      c.olt.s $f12, $f14
244 ; 32-C-DAG:      movf $[[T0]], $1, $fcc0
245
246 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
247 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
248 ; 64-C-DAG:      c.olt.s $f12, $f13
249 ; 64-C-DAG:      movf $[[T0]], $1, $fcc0
250
251 ; 32-CMP-DAG:    cmp.ule.s $[[T0:f[0-9]+]], $f14, $f12
252 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
253
254 ; 64-CMP-DAG:    cmp.ule.s $[[T0:f[0-9]+]], $f13, $f12
255 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
256
257   %1 = fcmp uge float %a, %b
258   %2 = zext i1 %1 to i32
259   ret i32 %2
260 }
261
262 define i32 @ult_f32(float %a, float %b) nounwind {
263 ; ALL-LABEL: ult_f32:
264
265 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
266 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
267 ; 32-C-DAG:      c.ult.s $f12, $f14
268 ; 32-C-DAG:      movt $[[T0]], $1, $fcc0
269
270 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
271 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
272 ; 64-C-DAG:      c.ult.s $f12, $f13
273 ; 64-C-DAG:      movt $[[T0]], $1, $fcc0
274
275 ; 32-CMP-DAG:    cmp.ult.s $[[T0:f[0-9]+]], $f12, $f14
276 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
277
278 ; 64-CMP-DAG:    cmp.ult.s $[[T0:f[0-9]+]], $f12, $f13
279 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
280
281   %1 = fcmp ult float %a, %b
282   %2 = zext i1 %1 to i32
283   ret i32 %2
284 }
285
286 define i32 @ule_f32(float %a, float %b) nounwind {
287 ; ALL-LABEL: ule_f32:
288
289 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
290 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
291 ; 32-C-DAG:      c.ule.s $f12, $f14
292 ; 32-C-DAG:      movt $[[T0]], $1, $fcc0
293
294 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
295 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
296 ; 64-C-DAG:      c.ule.s $f12, $f13
297 ; 64-C-DAG:      movt $[[T0]], $1, $fcc0
298
299 ; 32-CMP-DAG:    cmp.ule.s $[[T0:f[0-9]+]], $f12, $f14
300 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
301
302 ; 64-CMP-DAG:    cmp.ule.s $[[T0:f[0-9]+]], $f12, $f13
303 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
304
305   %1 = fcmp ule float %a, %b
306   %2 = zext i1 %1 to i32
307   ret i32 %2
308 }
309
310 define i32 @une_f32(float %a, float %b) nounwind {
311 ; ALL-LABEL: une_f32:
312
313 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
314 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
315 ; 32-C-DAG:      c.eq.s $f12, $f14
316 ; 32-C-DAG:      movf $[[T0]], $1, $fcc0
317
318 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
319 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
320 ; 64-C-DAG:      c.eq.s $f12, $f13
321 ; 64-C-DAG:      movf $[[T0]], $1, $fcc0
322
323 ; 32-CMP-DAG:    cmp.eq.s $[[T0:f[0-9]+]], $f12, $f14
324 ; 32-CMP-DAG:    mfc1 $[[T1:[0-9]+]], $[[T0]]
325 ; 32-CMP-DAG:    not $2, $[[T1]]
326
327 ; 64-CMP-DAG:    cmp.eq.s $[[T0:f[0-9]+]], $f12, $f13
328 ; 64-CMP-DAG:    mfc1 $[[T1:[0-9]+]], $[[T0]]
329 ; 64-CMP-DAG:    not $2, $[[T1]]
330
331   %1 = fcmp une float %a, %b
332   %2 = zext i1 %1 to i32
333   ret i32 %2
334 }
335
336 define i32 @uno_f32(float %a, float %b) nounwind {
337 ; ALL-LABEL: uno_f32:
338
339 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
340 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
341 ; 32-C-DAG:      c.un.s $f12, $f14
342 ; 32-C-DAG:      movt $[[T0]], $1, $fcc0
343
344 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
345 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
346 ; 64-C-DAG:      c.un.s $f12, $f13
347 ; 64-C-DAG:      movt $[[T0]], $1, $fcc0
348
349 ; 32-CMP-DAG:    cmp.un.s $[[T0:f[0-9]+]], $f12, $f14
350 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
351
352 ; 64-CMP-DAG:    cmp.un.s $[[T0:f[0-9]+]], $f12, $f13
353 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
354
355   %1 = fcmp uno float %a, %b
356   %2 = zext i1 %1 to i32
357   ret i32 %2
358 }
359
360 define i32 @true_f32(float %a, float %b) nounwind {
361 ; ALL-LABEL: true_f32:
362 ; ALL:           addiu $2, $zero, 1
363
364   %1 = fcmp true float %a, %b
365   %2 = zext i1 %1 to i32
366   ret i32 %2
367 }
368
369 define i32 @false_f64(double %a, double %b) nounwind {
370 ; ALL-LABEL: false_f64:
371 ; ALL:           addiu $2, $zero, 0
372
373   %1 = fcmp false double %a, %b
374   %2 = zext i1 %1 to i32
375   ret i32 %2
376 }
377
378 define i32 @oeq_f64(double %a, double %b) nounwind {
379 ; ALL-LABEL: oeq_f64:
380
381 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
382 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
383 ; 32-C-DAG:      c.eq.d $f12, $f14
384 ; 32-C-DAG:      movt $[[T0]], $1, $fcc0
385
386 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
387 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
388 ; 64-C-DAG:      c.eq.d $f12, $f13
389 ; 64-C-DAG:      movt $[[T0]], $1, $fcc0
390
391 ; 32-CMP-DAG:    cmp.eq.d $[[T0:f[0-9]+]], $f12, $f14
392 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
393
394 ; 64-CMP-DAG:    cmp.eq.d $[[T0:f[0-9]+]], $f12, $f13
395 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
396
397   %1 = fcmp oeq double %a, %b
398   %2 = zext i1 %1 to i32
399   ret i32 %2
400 }
401
402 define i32 @ogt_f64(double %a, double %b) nounwind {
403 ; ALL-LABEL: ogt_f64:
404
405 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
406 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
407 ; 32-C-DAG:      c.ule.d $f12, $f14
408 ; 32-C-DAG:      movf $[[T0]], $1, $fcc0
409
410 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
411 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
412 ; 64-C-DAG:      c.ule.d $f12, $f13
413 ; 64-C-DAG:      movf $[[T0]], $1, $fcc0
414
415 ; 32-CMP-DAG:    cmp.lt.d $[[T0:f[0-9]+]], $f14, $f12
416 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
417
418 ; 64-CMP-DAG:    cmp.lt.d $[[T0:f[0-9]+]], $f13, $f12
419 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
420
421   %1 = fcmp ogt double %a, %b
422   %2 = zext i1 %1 to i32
423   ret i32 %2
424 }
425
426 define i32 @oge_f64(double %a, double %b) nounwind {
427 ; ALL-LABEL: oge_f64:
428
429 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
430 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
431 ; 32-C-DAG:      c.ult.d $f12, $f14
432 ; 32-C-DAG:      movf $[[T0]], $1, $fcc0
433
434 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
435 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
436 ; 64-C-DAG:      c.ult.d $f12, $f13
437 ; 64-C-DAG:      movf $[[T0]], $1, $fcc0
438
439 ; 32-CMP-DAG:    cmp.le.d $[[T0:f[0-9]+]], $f14, $f12
440 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
441
442 ; 64-CMP-DAG:    cmp.le.d $[[T0:f[0-9]+]], $f13, $f12
443 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
444
445   %1 = fcmp oge double %a, %b
446   %2 = zext i1 %1 to i32
447   ret i32 %2
448 }
449
450 define i32 @olt_f64(double %a, double %b) nounwind {
451 ; ALL-LABEL: olt_f64:
452
453 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
454 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
455 ; 32-C-DAG:      c.olt.d $f12, $f14
456 ; 32-C-DAG:      movt $[[T0]], $1, $fcc0
457
458 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
459 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
460 ; 64-C-DAG:      c.olt.d $f12, $f13
461 ; 64-C-DAG:      movt $[[T0]], $1, $fcc0
462
463 ; 32-CMP-DAG:    cmp.lt.d $[[T0:f[0-9]+]], $f12, $f14
464 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
465
466 ; 64-CMP-DAG:    cmp.lt.d $[[T0:f[0-9]+]], $f12, $f13
467 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
468
469   %1 = fcmp olt double %a, %b
470   %2 = zext i1 %1 to i32
471   ret i32 %2
472 }
473
474 define i32 @ole_f64(double %a, double %b) nounwind {
475 ; ALL-LABEL: ole_f64:
476
477 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
478 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
479 ; 32-C-DAG:      c.ole.d $f12, $f14
480 ; 32-C-DAG:      movt $[[T0]], $1, $fcc0
481
482 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
483 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
484 ; 64-C-DAG:      c.ole.d $f12, $f13
485 ; 64-C-DAG:      movt $[[T0]], $1, $fcc0
486
487 ; 32-CMP-DAG:    cmp.le.d $[[T0:f[0-9]+]], $f12, $f14
488 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
489
490 ; 64-CMP-DAG:    cmp.le.d $[[T0:f[0-9]+]], $f12, $f13
491 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
492
493   %1 = fcmp ole double %a, %b
494   %2 = zext i1 %1 to i32
495   ret i32 %2
496 }
497
498 define i32 @one_f64(double %a, double %b) nounwind {
499 ; ALL-LABEL: one_f64:
500
501 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
502 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
503 ; 32-C-DAG:      c.ueq.d $f12, $f14
504 ; 32-C-DAG:      movf $[[T0]], $1, $fcc0
505
506 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
507 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
508 ; 64-C-DAG:      c.ueq.d $f12, $f13
509 ; 64-C-DAG:      movf $[[T0]], $1, $fcc0
510
511 ; 32-CMP-DAG:    cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f14
512 ; 32-CMP-DAG:    mfc1 $[[T1:[0-9]+]], $[[T0]]
513 ; 32-CMP-DAG:    not $2, $[[T1]]
514
515 ; 64-CMP-DAG:    cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f13
516 ; 64-CMP-DAG:    mfc1 $[[T1:[0-9]+]], $[[T0]]
517 ; 64-CMP-DAG:    not $2, $[[T1]]
518
519   %1 = fcmp one double %a, %b
520   %2 = zext i1 %1 to i32
521   ret i32 %2
522 }
523
524 define i32 @ord_f64(double %a, double %b) nounwind {
525 ; ALL-LABEL: ord_f64:
526
527 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
528 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
529 ; 32-C-DAG:      c.un.d $f12, $f14
530 ; 32-C-DAG:      movf $[[T0]], $1, $fcc0
531
532 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
533 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
534 ; 64-C-DAG:      c.un.d $f12, $f13
535 ; 64-C-DAG:      movf $[[T0]], $1, $fcc0
536
537 ; 32-CMP-DAG:    cmp.un.d $[[T0:f[0-9]+]], $f12, $f14
538 ; 32-CMP-DAG:    mfc1 $[[T1:[0-9]+]], $[[T0]]
539 ; 32-CMP-DAG:    not $2, $[[T1]]
540
541 ; 64-CMP-DAG:    cmp.un.d $[[T0:f[0-9]+]], $f12, $f13
542 ; 64-CMP-DAG:    mfc1 $[[T1:[0-9]+]], $[[T0]]
543 ; 64-CMP-DAG:    not $2, $[[T1]]
544
545   %1 = fcmp ord double %a, %b
546   %2 = zext i1 %1 to i32
547   ret i32 %2
548 }
549
550 define i32 @ueq_f64(double %a, double %b) nounwind {
551 ; ALL-LABEL: ueq_f64:
552
553 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
554 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
555 ; 32-C-DAG:      c.ueq.d $f12, $f14
556 ; 32-C-DAG:      movt $[[T0]], $1, $fcc0
557
558 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
559 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
560 ; 64-C-DAG:      c.ueq.d $f12, $f13
561 ; 64-C-DAG:      movt $[[T0]], $1, $fcc0
562
563 ; 32-CMP-DAG:    cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f14
564 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
565
566 ; 64-CMP-DAG:    cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f13
567 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
568
569   %1 = fcmp ueq double %a, %b
570   %2 = zext i1 %1 to i32
571   ret i32 %2
572 }
573
574 define i32 @ugt_f64(double %a, double %b) nounwind {
575 ; ALL-LABEL: ugt_f64:
576
577 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
578 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
579 ; 32-C-DAG:      c.ole.d $f12, $f14
580 ; 32-C-DAG:      movf $[[T0]], $1, $fcc0
581
582 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
583 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
584 ; 64-C-DAG:      c.ole.d $f12, $f13
585 ; 64-C-DAG:      movf $[[T0]], $1, $fcc0
586
587 ; 32-CMP-DAG:    cmp.ult.d $[[T0:f[0-9]+]], $f14, $f12
588 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
589
590 ; 64-CMP-DAG:    cmp.ult.d $[[T0:f[0-9]+]], $f13, $f12
591 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
592
593   %1 = fcmp ugt double %a, %b
594   %2 = zext i1 %1 to i32
595   ret i32 %2
596 }
597
598 define i32 @uge_f64(double %a, double %b) nounwind {
599 ; ALL-LABEL: uge_f64:
600
601 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
602 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
603 ; 32-C-DAG:      c.olt.d $f12, $f14
604 ; 32-C-DAG:      movf $[[T0]], $1, $fcc0
605
606 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
607 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
608 ; 64-C-DAG:      c.olt.d $f12, $f13
609 ; 64-C-DAG:      movf $[[T0]], $1, $fcc0
610
611 ; 32-CMP-DAG:    cmp.ule.d $[[T0:f[0-9]+]], $f14, $f12
612 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
613
614 ; 64-CMP-DAG:    cmp.ule.d $[[T0:f[0-9]+]], $f13, $f12
615 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
616
617   %1 = fcmp uge double %a, %b
618   %2 = zext i1 %1 to i32
619   ret i32 %2
620 }
621
622 define i32 @ult_f64(double %a, double %b) nounwind {
623 ; ALL-LABEL: ult_f64:
624
625 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
626 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
627 ; 32-C-DAG:      c.ult.d $f12, $f14
628 ; 32-C-DAG:      movt $[[T0]], $1, $fcc0
629
630 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
631 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
632 ; 64-C-DAG:      c.ult.d $f12, $f13
633 ; 64-C-DAG:      movt $[[T0]], $1, $fcc0
634
635 ; 32-CMP-DAG:    cmp.ult.d $[[T0:f[0-9]+]], $f12, $f14
636 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
637
638 ; 64-CMP-DAG:    cmp.ult.d $[[T0:f[0-9]+]], $f12, $f13
639 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
640
641   %1 = fcmp ult double %a, %b
642   %2 = zext i1 %1 to i32
643   ret i32 %2
644 }
645
646 define i32 @ule_f64(double %a, double %b) nounwind {
647 ; ALL-LABEL: ule_f64:
648
649 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
650 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
651 ; 32-C-DAG:      c.ule.d $f12, $f14
652 ; 32-C-DAG:      movt $[[T0]], $1, $fcc0
653
654 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
655 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
656 ; 64-C-DAG:      c.ule.d $f12, $f13
657 ; 64-C-DAG:      movt $[[T0]], $1, $fcc0
658
659 ; 32-CMP-DAG:    cmp.ule.d $[[T0:f[0-9]+]], $f12, $f14
660 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
661
662 ; 64-CMP-DAG:    cmp.ule.d $[[T0:f[0-9]+]], $f12, $f13
663 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
664
665   %1 = fcmp ule double %a, %b
666   %2 = zext i1 %1 to i32
667   ret i32 %2
668 }
669
670 define i32 @une_f64(double %a, double %b) nounwind {
671 ; ALL-LABEL: une_f64:
672
673 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
674 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
675 ; 32-C-DAG:      c.eq.d $f12, $f14
676 ; 32-C-DAG:      movf $[[T0]], $1, $fcc0
677
678 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
679 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
680 ; 64-C-DAG:      c.eq.d $f12, $f13
681 ; 64-C-DAG:      movf $[[T0]], $1, $fcc0
682
683 ; 32-CMP-DAG:    cmp.eq.d $[[T0:f[0-9]+]], $f12, $f14
684 ; 32-CMP-DAG:    mfc1 $[[T1:[0-9]+]], $[[T0]]
685 ; 32-CMP-DAG:    not $2, $[[T1]]
686
687 ; 64-CMP-DAG:    cmp.eq.d $[[T0:f[0-9]+]], $f12, $f13
688 ; 64-CMP-DAG:    mfc1 $[[T1:[0-9]+]], $[[T0]]
689 ; 64-CMP-DAG:    not $2, $[[T1]]
690
691   %1 = fcmp une double %a, %b
692   %2 = zext i1 %1 to i32
693   ret i32 %2
694 }
695
696 define i32 @uno_f64(double %a, double %b) nounwind {
697 ; ALL-LABEL: uno_f64:
698
699 ; 32-C-DAG:      addiu $[[T0:2]], $zero, 0
700 ; 32-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
701 ; 32-C-DAG:      c.un.d $f12, $f14
702 ; 32-C-DAG:      movt $[[T0]], $1, $fcc0
703
704 ; 64-C-DAG:      addiu $[[T0:2]], $zero, 0
705 ; 64-C-DAG:      addiu $[[T1:[0-9]+]], $zero, 1
706 ; 64-C-DAG:      c.un.d $f12, $f13
707 ; 64-C-DAG:      movt $[[T0]], $1, $fcc0
708
709 ; 32-CMP-DAG:    cmp.un.d $[[T0:f[0-9]+]], $f12, $f14
710 ; 32-CMP-DAG:    mfc1 $2, $[[T0]]
711
712 ; 64-CMP-DAG:    cmp.un.d $[[T0:f[0-9]+]], $f12, $f13
713 ; 64-CMP-DAG:    mfc1 $2, $[[T0]]
714
715   %1 = fcmp uno double %a, %b
716   %2 = zext i1 %1 to i32
717   ret i32 %2
718 }
719
720 define i32 @true_f64(double %a, double %b) nounwind {
721 ; ALL-LABEL: true_f64:
722 ; ALL:           addiu $2, $zero, 1
723
724   %1 = fcmp true double %a, %b
725   %2 = zext i1 %1 to i32
726   ret i32 %2
727 }