[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / CSKY / fpu / cmp-f.ll
blob2bb5534c422ce0dae3812bb605b90b3008638cb1
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
3 ; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -float-abi=hard -mattr=+hard-float -mattr=+2e3 -mattr=+fpuv2_sf | FileCheck %s --check-prefix=CHECK-SF
4 ; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -float-abi=hard -mattr=+hard-float -mattr=+2e3 -mattr=+fpuv3_sf | FileCheck %s --check-prefix=CHECK-SF2
6 ;ueq
7 define i1 @fcmpRR_ueq(float %x, float %y) {
9 ; CHECK-SF-LABEL: fcmpRR_ueq:
10 ; CHECK-SF:       # %bb.0: # %entry
11 ; CHECK-SF-NEXT:    fcmpuos vr1, vr0
12 ; CHECK-SF-NEXT:    mvc32 a0
13 ; CHECK-SF-NEXT:    fcmpnes vr1, vr0
14 ; CHECK-SF-NEXT:    mvcv16 a1
15 ; CHECK-SF-NEXT:    or16 a0, a1
16 ; CHECK-SF-NEXT:    rts16
18 ; CHECK-SF2-LABEL: fcmpRR_ueq:
19 ; CHECK-SF2:       # %bb.0: # %entry
20 ; CHECK-SF2-NEXT:    fcmpuo.32 vr1, vr0
21 ; CHECK-SF2-NEXT:    mvc32 a0
22 ; CHECK-SF2-NEXT:    fcmpne.32 vr1, vr0
23 ; CHECK-SF2-NEXT:    mvcv16 a1
24 ; CHECK-SF2-NEXT:    or16 a0, a1
25 ; CHECK-SF2-NEXT:    rts16
26 entry:
27   %fcmp = fcmp ueq float %y, %x
28   ret i1 %fcmp
31 define i1 @fcmpRI_ueq(float %x) {
33 ; CHECK-SF-LABEL: fcmpRI_ueq:
34 ; CHECK-SF:       # %bb.0: # %entry
35 ; CHECK-SF-NEXT:    movih32 a0, 49440
36 ; CHECK-SF-NEXT:    fmtvrl vr1, a0
37 ; CHECK-SF-NEXT:    fcmpnes vr0, vr1
38 ; CHECK-SF-NEXT:    mvcv16 a0
39 ; CHECK-SF-NEXT:    fcmpuos vr0, vr0
40 ; CHECK-SF-NEXT:    mvc32 a1
41 ; CHECK-SF-NEXT:    or16 a0, a1
42 ; CHECK-SF-NEXT:    rts16
44 ; CHECK-SF2-LABEL: fcmpRI_ueq:
45 ; CHECK-SF2:       # %bb.0: # %entry
46 ; CHECK-SF2-NEXT:    movih32 a0, 49440
47 ; CHECK-SF2-NEXT:    fmtvr.32.1 vr1, a0
48 ; CHECK-SF2-NEXT:    fcmpne.32 vr0, vr1
49 ; CHECK-SF2-NEXT:    mvcv16 a0
50 ; CHECK-SF2-NEXT:    fcmpuo.32 vr0, vr0
51 ; CHECK-SF2-NEXT:    mvc32 a1
52 ; CHECK-SF2-NEXT:    or16 a0, a1
53 ; CHECK-SF2-NEXT:    rts16
54 entry:
55   %fcmp = fcmp ueq float %x, -10.0
56   ret i1 %fcmp
59 define i1 @fcmpRI_X_ueq(float %x) {
61 ; CHECK-SF-LABEL: fcmpRI_X_ueq:
62 ; CHECK-SF:       # %bb.0: # %entry
63 ; CHECK-SF-NEXT:    fcmpuos vr0, vr0
64 ; CHECK-SF-NEXT:    mvc32 a0
65 ; CHECK-SF-NEXT:    fcmpznes vr0
66 ; CHECK-SF-NEXT:    mvcv16 a1
67 ; CHECK-SF-NEXT:    or16 a0, a1
68 ; CHECK-SF-NEXT:    rts16
70 ; CHECK-SF2-LABEL: fcmpRI_X_ueq:
71 ; CHECK-SF2:       # %bb.0: # %entry
72 ; CHECK-SF2-NEXT:    fcmpuo.32 vr0, vr0
73 ; CHECK-SF2-NEXT:    mvc32 a0
74 ; CHECK-SF2-NEXT:    fcmpnez.32 vr0
75 ; CHECK-SF2-NEXT:    mvcv16 a1
76 ; CHECK-SF2-NEXT:    or16 a0, a1
77 ; CHECK-SF2-NEXT:    rts16
78 entry:
79   %fcmp = fcmp ueq float %x, 0.0
80   ret i1 %fcmp
84 ;une
85 define i1 @fcmpRR_une(float %x, float %y) {
87 ; CHECK-SF-LABEL: fcmpRR_une:
88 ; CHECK-SF:       # %bb.0: # %entry
89 ; CHECK-SF-NEXT:    fcmpnes vr1, vr0
90 ; CHECK-SF-NEXT:    mvc32 a0
91 ; CHECK-SF-NEXT:    rts16
93 ; CHECK-SF2-LABEL: fcmpRR_une:
94 ; CHECK-SF2:       # %bb.0: # %entry
95 ; CHECK-SF2-NEXT:    fcmpne.32 vr1, vr0
96 ; CHECK-SF2-NEXT:    mvc32 a0
97 ; CHECK-SF2-NEXT:    rts16
98 entry:
99   %fcmp = fcmp une float %y, %x
100   ret i1 %fcmp
103 define i1 @fcmpRI_une(float %x) {
105 ; CHECK-SF-LABEL: fcmpRI_une:
106 ; CHECK-SF:       # %bb.0: # %entry
107 ; CHECK-SF-NEXT:    movih32 a0, 49440
108 ; CHECK-SF-NEXT:    fmtvrl vr1, a0
109 ; CHECK-SF-NEXT:    fcmpnes vr0, vr1
110 ; CHECK-SF-NEXT:    mvc32 a0
111 ; CHECK-SF-NEXT:    rts16
113 ; CHECK-SF2-LABEL: fcmpRI_une:
114 ; CHECK-SF2:       # %bb.0: # %entry
115 ; CHECK-SF2-NEXT:    movih32 a0, 49440
116 ; CHECK-SF2-NEXT:    fmtvr.32.1 vr1, a0
117 ; CHECK-SF2-NEXT:    fcmpne.32 vr0, vr1
118 ; CHECK-SF2-NEXT:    mvc32 a0
119 ; CHECK-SF2-NEXT:    rts16
120 entry:
121   %fcmp = fcmp une float %x, -10.0
122   ret i1 %fcmp
125 define i1 @fcmpRI_X_une(float %x) {
127 ; CHECK-SF-LABEL: fcmpRI_X_une:
128 ; CHECK-SF:       # %bb.0: # %entry
129 ; CHECK-SF-NEXT:    fcmpznes vr0
130 ; CHECK-SF-NEXT:    mvc32 a0
131 ; CHECK-SF-NEXT:    rts16
133 ; CHECK-SF2-LABEL: fcmpRI_X_une:
134 ; CHECK-SF2:       # %bb.0: # %entry
135 ; CHECK-SF2-NEXT:    fcmpnez.32 vr0
136 ; CHECK-SF2-NEXT:    mvc32 a0
137 ; CHECK-SF2-NEXT:    rts16
138 entry:
139   %fcmp = fcmp une float %x, 0.0
140   ret i1 %fcmp
144 ;ugt
145 define i1 @fcmpRR_ugt(float %x, float %y) {
147 ; CHECK-SF-LABEL: fcmpRR_ugt:
148 ; CHECK-SF:       # %bb.0: # %entry
149 ; CHECK-SF-NEXT:    fcmphss vr0, vr1
150 ; CHECK-SF-NEXT:    mvc32 a0
151 ; CHECK-SF-NEXT:    xori32 a0, a0, 1
152 ; CHECK-SF-NEXT:    rts16
154 ; CHECK-SF2-LABEL: fcmpRR_ugt:
155 ; CHECK-SF2:       # %bb.0: # %entry
156 ; CHECK-SF2-NEXT:    fcmphs.32 vr0, vr1
157 ; CHECK-SF2-NEXT:    mvc32 a0
158 ; CHECK-SF2-NEXT:    xori32 a0, a0, 1
159 ; CHECK-SF2-NEXT:    rts16
160 entry:
161   %fcmp = fcmp ugt float %y, %x
162   ret i1 %fcmp
165 define i1 @fcmpRI_ugt(float %x) {
167 ; CHECK-SF-LABEL: fcmpRI_ugt:
168 ; CHECK-SF:       # %bb.0: # %entry
169 ; CHECK-SF-NEXT:    movih32 a0, 49440
170 ; CHECK-SF-NEXT:    fmtvrl vr1, a0
171 ; CHECK-SF-NEXT:    fcmphss vr1, vr0
172 ; CHECK-SF-NEXT:    mvc32 a0
173 ; CHECK-SF-NEXT:    xori32 a0, a0, 1
174 ; CHECK-SF-NEXT:    rts16
176 ; CHECK-SF2-LABEL: fcmpRI_ugt:
177 ; CHECK-SF2:       # %bb.0: # %entry
178 ; CHECK-SF2-NEXT:    movih32 a0, 49440
179 ; CHECK-SF2-NEXT:    fmtvr.32.1 vr1, a0
180 ; CHECK-SF2-NEXT:    fcmphs.32 vr1, vr0
181 ; CHECK-SF2-NEXT:    mvc32 a0
182 ; CHECK-SF2-NEXT:    xori32 a0, a0, 1
183 ; CHECK-SF2-NEXT:    rts16
184 entry:
185   %fcmp = fcmp ugt float %x, -10.0
186   ret i1 %fcmp
189 define i1 @fcmpRI_X_ugt(float %x) {
191 ; CHECK-SF-LABEL: fcmpRI_X_ugt:
192 ; CHECK-SF:       # %bb.0: # %entry
193 ; CHECK-SF-NEXT:    fcmpzlss vr0
194 ; CHECK-SF-NEXT:    mvc32 a0
195 ; CHECK-SF-NEXT:    xori32 a0, a0, 1
196 ; CHECK-SF-NEXT:    rts16
198 ; CHECK-SF2-LABEL: fcmpRI_X_ugt:
199 ; CHECK-SF2:       # %bb.0: # %entry
200 ; CHECK-SF2-NEXT:    fcmplsz.32 vr0
201 ; CHECK-SF2-NEXT:    mvc32 a0
202 ; CHECK-SF2-NEXT:    xori32 a0, a0, 1
203 ; CHECK-SF2-NEXT:    rts16
204 entry:
205   %fcmp = fcmp ugt float %x, 0.0
206   ret i1 %fcmp
210 ;uge
211 define i1 @fcmpRR_uge(float %x, float %y) {
213 ; CHECK-SF-LABEL: fcmpRR_uge:
214 ; CHECK-SF:       # %bb.0: # %entry
215 ; CHECK-SF-NEXT:    fcmplts vr1, vr0
216 ; CHECK-SF-NEXT:    mvc32 a0
217 ; CHECK-SF-NEXT:    xori32 a0, a0, 1
218 ; CHECK-SF-NEXT:    rts16
220 ; CHECK-SF2-LABEL: fcmpRR_uge:
221 ; CHECK-SF2:       # %bb.0: # %entry
222 ; CHECK-SF2-NEXT:    fcmplt.32 vr1, vr0
223 ; CHECK-SF2-NEXT:    mvc32 a0
224 ; CHECK-SF2-NEXT:    xori32 a0, a0, 1
225 ; CHECK-SF2-NEXT:    rts16
226 entry:
227   %fcmp = fcmp uge float %y, %x
228   ret i1 %fcmp
231 define i1 @fcmpRI_uge(float %x) {
233 ; CHECK-SF-LABEL: fcmpRI_uge:
234 ; CHECK-SF:       # %bb.0: # %entry
235 ; CHECK-SF-NEXT:    movih32 a0, 49440
236 ; CHECK-SF-NEXT:    fmtvrl vr1, a0
237 ; CHECK-SF-NEXT:    fcmplts vr0, vr1
238 ; CHECK-SF-NEXT:    mvc32 a0
239 ; CHECK-SF-NEXT:    xori32 a0, a0, 1
240 ; CHECK-SF-NEXT:    rts16
242 ; CHECK-SF2-LABEL: fcmpRI_uge:
243 ; CHECK-SF2:       # %bb.0: # %entry
244 ; CHECK-SF2-NEXT:    movih32 a0, 49440
245 ; CHECK-SF2-NEXT:    fmtvr.32.1 vr1, a0
246 ; CHECK-SF2-NEXT:    fcmplt.32 vr0, vr1
247 ; CHECK-SF2-NEXT:    mvc32 a0
248 ; CHECK-SF2-NEXT:    xori32 a0, a0, 1
249 ; CHECK-SF2-NEXT:    rts16
250 entry:
251   %fcmp = fcmp uge float %x, -10.0
252   ret i1 %fcmp
255 define i1 @fcmpRI_X_uge(float %x) {
257 ; CHECK-SF-LABEL: fcmpRI_X_uge:
258 ; CHECK-SF:       # %bb.0: # %entry
259 ; CHECK-SF-NEXT:    fcmpzhss vr0
260 ; CHECK-SF-NEXT:    mvcv16 a0
261 ; CHECK-SF-NEXT:    xori32 a0, a0, 1
262 ; CHECK-SF-NEXT:    rts16
264 ; CHECK-SF2-LABEL: fcmpRI_X_uge:
265 ; CHECK-SF2:       # %bb.0: # %entry
266 ; CHECK-SF2-NEXT:    fcmpltz.32 vr0
267 ; CHECK-SF2-NEXT:    mvc32 a0
268 ; CHECK-SF2-NEXT:    xori32 a0, a0, 1
269 ; CHECK-SF2-NEXT:    rts16
270 entry:
271   %fcmp = fcmp uge float %x, 0.0
272   ret i1 %fcmp
275 ;ult
276 define i1 @fcmpRR_ult(float %x, float %y) {
278 ; CHECK-SF-LABEL: fcmpRR_ult:
279 ; CHECK-SF:       # %bb.0: # %entry
280 ; CHECK-SF-NEXT:    fcmphss vr1, vr0
281 ; CHECK-SF-NEXT:    mvc32 a0
282 ; CHECK-SF-NEXT:    xori32 a0, a0, 1
283 ; CHECK-SF-NEXT:    rts16
285 ; CHECK-SF2-LABEL: fcmpRR_ult:
286 ; CHECK-SF2:       # %bb.0: # %entry
287 ; CHECK-SF2-NEXT:    fcmphs.32 vr1, vr0
288 ; CHECK-SF2-NEXT:    mvc32 a0
289 ; CHECK-SF2-NEXT:    xori32 a0, a0, 1
290 ; CHECK-SF2-NEXT:    rts16
291 entry:
292   %fcmp = fcmp ult float %y, %x
293   ret i1 %fcmp
296 define i1 @fcmpRI_ult(float %x) {
298 ; CHECK-SF-LABEL: fcmpRI_ult:
299 ; CHECK-SF:       # %bb.0: # %entry
300 ; CHECK-SF-NEXT:    movih32 a0, 49440
301 ; CHECK-SF-NEXT:    fmtvrl vr1, a0
302 ; CHECK-SF-NEXT:    fcmphss vr0, vr1
303 ; CHECK-SF-NEXT:    mvc32 a0
304 ; CHECK-SF-NEXT:    xori32 a0, a0, 1
305 ; CHECK-SF-NEXT:    rts16
307 ; CHECK-SF2-LABEL: fcmpRI_ult:
308 ; CHECK-SF2:       # %bb.0: # %entry
309 ; CHECK-SF2-NEXT:    movih32 a0, 49440
310 ; CHECK-SF2-NEXT:    fmtvr.32.1 vr1, a0
311 ; CHECK-SF2-NEXT:    fcmphs.32 vr0, vr1
312 ; CHECK-SF2-NEXT:    mvc32 a0
313 ; CHECK-SF2-NEXT:    xori32 a0, a0, 1
314 ; CHECK-SF2-NEXT:    rts16
315 entry:
316   %fcmp = fcmp ult float %x, -10.0
317   ret i1 %fcmp
320 define i1 @fcmpRI_X_ult(float %x) {
322 ; CHECK-SF-LABEL: fcmpRI_X_ult:
323 ; CHECK-SF:       # %bb.0: # %entry
324 ; CHECK-SF-NEXT:    fcmpzhss vr0
325 ; CHECK-SF-NEXT:    mvc32 a0
326 ; CHECK-SF-NEXT:    xori32 a0, a0, 1
327 ; CHECK-SF-NEXT:    rts16
329 ; CHECK-SF2-LABEL: fcmpRI_X_ult:
330 ; CHECK-SF2:       # %bb.0: # %entry
331 ; CHECK-SF2-NEXT:    fcmphsz.32 vr0
332 ; CHECK-SF2-NEXT:    mvc32 a0
333 ; CHECK-SF2-NEXT:    xori32 a0, a0, 1
334 ; CHECK-SF2-NEXT:    rts16
335 entry:
336   %fcmp = fcmp ult float %x, 0.0
337   ret i1 %fcmp
341 ;ule
342 define i1 @fcmpRR_ule(float %x, float %y) {
344 ; CHECK-SF-LABEL: fcmpRR_ule:
345 ; CHECK-SF:       # %bb.0: # %entry
346 ; CHECK-SF-NEXT:    fcmplts vr0, vr1
347 ; CHECK-SF-NEXT:    mvc32 a0
348 ; CHECK-SF-NEXT:    xori32 a0, a0, 1
349 ; CHECK-SF-NEXT:    rts16
351 ; CHECK-SF2-LABEL: fcmpRR_ule:
352 ; CHECK-SF2:       # %bb.0: # %entry
353 ; CHECK-SF2-NEXT:    fcmplt.32 vr0, vr1
354 ; CHECK-SF2-NEXT:    mvc32 a0
355 ; CHECK-SF2-NEXT:    xori32 a0, a0, 1
356 ; CHECK-SF2-NEXT:    rts16
357 entry:
358   %fcmp = fcmp ule float %y, %x
359   ret i1 %fcmp
362 define i1 @fcmpRI_ule(float %x) {
364 ; CHECK-SF-LABEL: fcmpRI_ule:
365 ; CHECK-SF:       # %bb.0: # %entry
366 ; CHECK-SF-NEXT:    movih32 a0, 49440
367 ; CHECK-SF-NEXT:    fmtvrl vr1, a0
368 ; CHECK-SF-NEXT:    fcmplts vr1, vr0
369 ; CHECK-SF-NEXT:    mvc32 a0
370 ; CHECK-SF-NEXT:    xori32 a0, a0, 1
371 ; CHECK-SF-NEXT:    rts16
373 ; CHECK-SF2-LABEL: fcmpRI_ule:
374 ; CHECK-SF2:       # %bb.0: # %entry
375 ; CHECK-SF2-NEXT:    movih32 a0, 49440
376 ; CHECK-SF2-NEXT:    fmtvr.32.1 vr1, a0
377 ; CHECK-SF2-NEXT:    fcmplt.32 vr1, vr0
378 ; CHECK-SF2-NEXT:    mvc32 a0
379 ; CHECK-SF2-NEXT:    xori32 a0, a0, 1
380 ; CHECK-SF2-NEXT:    rts16
381 entry:
382   %fcmp = fcmp ule float %x, -10.0
383   ret i1 %fcmp
386 define i1 @fcmpRI_X_ule(float %x) {
388 ; CHECK-SF-LABEL: fcmpRI_X_ule:
389 ; CHECK-SF:       # %bb.0: # %entry
390 ; CHECK-SF-NEXT:    fcmpzlss vr0
391 ; CHECK-SF-NEXT:    mvcv16 a0
392 ; CHECK-SF-NEXT:    xori32 a0, a0, 1
393 ; CHECK-SF-NEXT:    rts16
395 ; CHECK-SF2-LABEL: fcmpRI_X_ule:
396 ; CHECK-SF2:       # %bb.0: # %entry
397 ; CHECK-SF2-NEXT:    fcmphz.32 vr0
398 ; CHECK-SF2-NEXT:    mvc32 a0
399 ; CHECK-SF2-NEXT:    xori32 a0, a0, 1
400 ; CHECK-SF2-NEXT:    rts16
401 entry:
402   %fcmp = fcmp ule float %x, 0.0
403   ret i1 %fcmp
407 ;ogt
408 define i1 @fcmpRR_ogt(float %x, float %y) {
410 ; CHECK-SF-LABEL: fcmpRR_ogt:
411 ; CHECK-SF:       # %bb.0: # %entry
412 ; CHECK-SF-NEXT:    fcmplts vr0, vr1
413 ; CHECK-SF-NEXT:    mvc32 a0
414 ; CHECK-SF-NEXT:    rts16
416 ; CHECK-SF2-LABEL: fcmpRR_ogt:
417 ; CHECK-SF2:       # %bb.0: # %entry
418 ; CHECK-SF2-NEXT:    fcmplt.32 vr0, vr1
419 ; CHECK-SF2-NEXT:    mvc32 a0
420 ; CHECK-SF2-NEXT:    rts16
421 entry:
422   %fcmp = fcmp ogt float %y, %x
423   ret i1 %fcmp
426 define i1 @fcmpRI_ogt(float %x) {
428 ; CHECK-SF-LABEL: fcmpRI_ogt:
429 ; CHECK-SF:       # %bb.0: # %entry
430 ; CHECK-SF-NEXT:    movih32 a0, 49440
431 ; CHECK-SF-NEXT:    fmtvrl vr1, a0
432 ; CHECK-SF-NEXT:    fcmplts vr1, vr0
433 ; CHECK-SF-NEXT:    mvc32 a0
434 ; CHECK-SF-NEXT:    rts16
436 ; CHECK-SF2-LABEL: fcmpRI_ogt:
437 ; CHECK-SF2:       # %bb.0: # %entry
438 ; CHECK-SF2-NEXT:    movih32 a0, 49440
439 ; CHECK-SF2-NEXT:    fmtvr.32.1 vr1, a0
440 ; CHECK-SF2-NEXT:    fcmplt.32 vr1, vr0
441 ; CHECK-SF2-NEXT:    mvc32 a0
442 ; CHECK-SF2-NEXT:    rts16
443 entry:
444   %fcmp = fcmp ogt float %x, -10.0
445   ret i1 %fcmp
448 define i1 @fcmpRI_X_ogt(float %x) {
450 ; CHECK-SF-LABEL: fcmpRI_X_ogt:
451 ; CHECK-SF:       # %bb.0: # %entry
452 ; CHECK-SF-NEXT:    fcmpzlss vr0
453 ; CHECK-SF-NEXT:    mvcv16 a0
454 ; CHECK-SF-NEXT:    rts16
456 ; CHECK-SF2-LABEL: fcmpRI_X_ogt:
457 ; CHECK-SF2:       # %bb.0: # %entry
458 ; CHECK-SF2-NEXT:    fcmphz.32 vr0
459 ; CHECK-SF2-NEXT:    mvc32 a0
460 ; CHECK-SF2-NEXT:    rts16
461 entry:
462   %fcmp = fcmp ogt float %x, 0.0
463   ret i1 %fcmp
467 ;oge
468 define i1 @fcmpRR_oge(float %x, float %y) {
470 ; CHECK-SF-LABEL: fcmpRR_oge:
471 ; CHECK-SF:       # %bb.0: # %entry
472 ; CHECK-SF-NEXT:    fcmphss vr1, vr0
473 ; CHECK-SF-NEXT:    mvc32 a0
474 ; CHECK-SF-NEXT:    rts16
476 ; CHECK-SF2-LABEL: fcmpRR_oge:
477 ; CHECK-SF2:       # %bb.0: # %entry
478 ; CHECK-SF2-NEXT:    fcmphs.32 vr1, vr0
479 ; CHECK-SF2-NEXT:    mvc32 a0
480 ; CHECK-SF2-NEXT:    rts16
481 entry:
482   %fcmp = fcmp oge float %y, %x
483   ret i1 %fcmp
486 define i1 @fcmpRI_oge(float %x) {
488 ; CHECK-SF-LABEL: fcmpRI_oge:
489 ; CHECK-SF:       # %bb.0: # %entry
490 ; CHECK-SF-NEXT:    movih32 a0, 49440
491 ; CHECK-SF-NEXT:    fmtvrl vr1, a0
492 ; CHECK-SF-NEXT:    fcmphss vr0, vr1
493 ; CHECK-SF-NEXT:    mvc32 a0
494 ; CHECK-SF-NEXT:    rts16
496 ; CHECK-SF2-LABEL: fcmpRI_oge:
497 ; CHECK-SF2:       # %bb.0: # %entry
498 ; CHECK-SF2-NEXT:    movih32 a0, 49440
499 ; CHECK-SF2-NEXT:    fmtvr.32.1 vr1, a0
500 ; CHECK-SF2-NEXT:    fcmphs.32 vr0, vr1
501 ; CHECK-SF2-NEXT:    mvc32 a0
502 ; CHECK-SF2-NEXT:    rts16
503 entry:
504   %fcmp = fcmp oge float %x, -10.0
505   ret i1 %fcmp
508 define i1 @fcmpRI_X_oge(float %x) {
510 ; CHECK-SF-LABEL: fcmpRI_X_oge:
511 ; CHECK-SF:       # %bb.0: # %entry
512 ; CHECK-SF-NEXT:    fcmpzhss vr0
513 ; CHECK-SF-NEXT:    mvc32 a0
514 ; CHECK-SF-NEXT:    rts16
516 ; CHECK-SF2-LABEL: fcmpRI_X_oge:
517 ; CHECK-SF2:       # %bb.0: # %entry
518 ; CHECK-SF2-NEXT:    fcmphsz.32 vr0
519 ; CHECK-SF2-NEXT:    mvc32 a0
520 ; CHECK-SF2-NEXT:    rts16
521 entry:
522   %fcmp = fcmp oge float %x, 0.0
523   ret i1 %fcmp
527 ;olt
528 define i1 @fcmpRR_olt(float %x, float %y) {
530 ; CHECK-SF-LABEL: fcmpRR_olt:
531 ; CHECK-SF:       # %bb.0: # %entry
532 ; CHECK-SF-NEXT:    fcmplts vr1, vr0
533 ; CHECK-SF-NEXT:    mvc32 a0
534 ; CHECK-SF-NEXT:    rts16
536 ; CHECK-SF2-LABEL: fcmpRR_olt:
537 ; CHECK-SF2:       # %bb.0: # %entry
538 ; CHECK-SF2-NEXT:    fcmplt.32 vr1, vr0
539 ; CHECK-SF2-NEXT:    mvc32 a0
540 ; CHECK-SF2-NEXT:    rts16
541 entry:
542   %fcmp = fcmp olt float %y, %x
543   ret i1 %fcmp
546 define i1 @fcmpRI_olt(float %x) {
548 ; CHECK-SF-LABEL: fcmpRI_olt:
549 ; CHECK-SF:       # %bb.0: # %entry
550 ; CHECK-SF-NEXT:    movih32 a0, 49440
551 ; CHECK-SF-NEXT:    fmtvrl vr1, a0
552 ; CHECK-SF-NEXT:    fcmplts vr0, vr1
553 ; CHECK-SF-NEXT:    mvc32 a0
554 ; CHECK-SF-NEXT:    rts16
556 ; CHECK-SF2-LABEL: fcmpRI_olt:
557 ; CHECK-SF2:       # %bb.0: # %entry
558 ; CHECK-SF2-NEXT:    movih32 a0, 49440
559 ; CHECK-SF2-NEXT:    fmtvr.32.1 vr1, a0
560 ; CHECK-SF2-NEXT:    fcmplt.32 vr0, vr1
561 ; CHECK-SF2-NEXT:    mvc32 a0
562 ; CHECK-SF2-NEXT:    rts16
563 entry:
564   %fcmp = fcmp olt float %x, -10.0
565   ret i1 %fcmp
568 define i1 @fcmpRI_X_olt(float %x) {
570 ; CHECK-SF-LABEL: fcmpRI_X_olt:
571 ; CHECK-SF:       # %bb.0: # %entry
572 ; CHECK-SF-NEXT:    fcmpzhss vr0
573 ; CHECK-SF-NEXT:    mvcv16 a0
574 ; CHECK-SF-NEXT:    rts16
576 ; CHECK-SF2-LABEL: fcmpRI_X_olt:
577 ; CHECK-SF2:       # %bb.0: # %entry
578 ; CHECK-SF2-NEXT:    fcmpltz.32 vr0
579 ; CHECK-SF2-NEXT:    mvc32 a0
580 ; CHECK-SF2-NEXT:    rts16
581 entry:
582   %fcmp = fcmp olt float %x, 0.0
583   ret i1 %fcmp
587 ;ole
588 define i1 @fcmpRR_ole(float %x, float %y) {
590 ; CHECK-SF-LABEL: fcmpRR_ole:
591 ; CHECK-SF:       # %bb.0: # %entry
592 ; CHECK-SF-NEXT:    fcmphss vr0, vr1
593 ; CHECK-SF-NEXT:    mvc32 a0
594 ; CHECK-SF-NEXT:    rts16
596 ; CHECK-SF2-LABEL: fcmpRR_ole:
597 ; CHECK-SF2:       # %bb.0: # %entry
598 ; CHECK-SF2-NEXT:    fcmphs.32 vr0, vr1
599 ; CHECK-SF2-NEXT:    mvc32 a0
600 ; CHECK-SF2-NEXT:    rts16
601 entry:
602   %fcmp = fcmp ole float %y, %x
603   ret i1 %fcmp
606 define i1 @fcmpRI_ole(float %x) {
608 ; CHECK-SF-LABEL: fcmpRI_ole:
609 ; CHECK-SF:       # %bb.0: # %entry
610 ; CHECK-SF-NEXT:    movih32 a0, 49440
611 ; CHECK-SF-NEXT:    fmtvrl vr1, a0
612 ; CHECK-SF-NEXT:    fcmphss vr1, vr0
613 ; CHECK-SF-NEXT:    mvc32 a0
614 ; CHECK-SF-NEXT:    rts16
616 ; CHECK-SF2-LABEL: fcmpRI_ole:
617 ; CHECK-SF2:       # %bb.0: # %entry
618 ; CHECK-SF2-NEXT:    movih32 a0, 49440
619 ; CHECK-SF2-NEXT:    fmtvr.32.1 vr1, a0
620 ; CHECK-SF2-NEXT:    fcmphs.32 vr1, vr0
621 ; CHECK-SF2-NEXT:    mvc32 a0
622 ; CHECK-SF2-NEXT:    rts16
623 entry:
624   %fcmp = fcmp ole float %x, -10.0
625   ret i1 %fcmp
628 define i1 @fcmpRI_X_ole(float %x) {
630 ; CHECK-SF-LABEL: fcmpRI_X_ole:
631 ; CHECK-SF:       # %bb.0: # %entry
632 ; CHECK-SF-NEXT:    fcmpzlss vr0
633 ; CHECK-SF-NEXT:    mvc32 a0
634 ; CHECK-SF-NEXT:    rts16
636 ; CHECK-SF2-LABEL: fcmpRI_X_ole:
637 ; CHECK-SF2:       # %bb.0: # %entry
638 ; CHECK-SF2-NEXT:    fcmplsz.32 vr0
639 ; CHECK-SF2-NEXT:    mvc32 a0
640 ; CHECK-SF2-NEXT:    rts16
641 entry:
642   %fcmp = fcmp ole float %x, 0.0
643   ret i1 %fcmp
647 ;one
648 define i1 @fcmpRR_one(float %x, float %y) {
650 ; CHECK-SF-LABEL: fcmpRR_one:
651 ; CHECK-SF:       # %bb.0: # %entry
652 ; CHECK-SF-NEXT:    fcmpuos vr1, vr0
653 ; CHECK-SF-NEXT:    mvcv16 a0
654 ; CHECK-SF-NEXT:    fcmpnes vr1, vr0
655 ; CHECK-SF-NEXT:    mvc32 a1
656 ; CHECK-SF-NEXT:    and16 a0, a1
657 ; CHECK-SF-NEXT:    rts16
659 ; CHECK-SF2-LABEL: fcmpRR_one:
660 ; CHECK-SF2:       # %bb.0: # %entry
661 ; CHECK-SF2-NEXT:    fcmpuo.32 vr1, vr0
662 ; CHECK-SF2-NEXT:    mvcv16 a0
663 ; CHECK-SF2-NEXT:    fcmpne.32 vr1, vr0
664 ; CHECK-SF2-NEXT:    mvc32 a1
665 ; CHECK-SF2-NEXT:    and16 a0, a1
666 ; CHECK-SF2-NEXT:    rts16
667 entry:
668   %fcmp = fcmp one float %y, %x
669   ret i1 %fcmp
672 define i1 @fcmpRI_one(float %x) {
674 ; CHECK-SF-LABEL: fcmpRI_one:
675 ; CHECK-SF:       # %bb.0: # %entry
676 ; CHECK-SF-NEXT:    movih32 a0, 49440
677 ; CHECK-SF-NEXT:    fmtvrl vr1, a0
678 ; CHECK-SF-NEXT:    fcmpnes vr0, vr1
679 ; CHECK-SF-NEXT:    mvc32 a0
680 ; CHECK-SF-NEXT:    fcmpuos vr0, vr0
681 ; CHECK-SF-NEXT:    mvcv16 a1
682 ; CHECK-SF-NEXT:    and16 a0, a1
683 ; CHECK-SF-NEXT:    rts16
685 ; CHECK-SF2-LABEL: fcmpRI_one:
686 ; CHECK-SF2:       # %bb.0: # %entry
687 ; CHECK-SF2-NEXT:    movih32 a0, 49440
688 ; CHECK-SF2-NEXT:    fmtvr.32.1 vr1, a0
689 ; CHECK-SF2-NEXT:    fcmpne.32 vr0, vr1
690 ; CHECK-SF2-NEXT:    mvc32 a0
691 ; CHECK-SF2-NEXT:    fcmpuo.32 vr0, vr0
692 ; CHECK-SF2-NEXT:    mvcv16 a1
693 ; CHECK-SF2-NEXT:    and16 a0, a1
694 ; CHECK-SF2-NEXT:    rts16
695 entry:
696   %fcmp = fcmp one float %x, -10.0
697   ret i1 %fcmp
700 define i1 @fcmpRI_X_one(float %x) {
702 ; CHECK-SF-LABEL: fcmpRI_X_one:
703 ; CHECK-SF:       # %bb.0: # %entry
704 ; CHECK-SF-NEXT:    fcmpuos vr0, vr0
705 ; CHECK-SF-NEXT:    mvcv16 a0
706 ; CHECK-SF-NEXT:    fcmpznes vr0
707 ; CHECK-SF-NEXT:    mvc32 a1
708 ; CHECK-SF-NEXT:    and16 a0, a1
709 ; CHECK-SF-NEXT:    rts16
711 ; CHECK-SF2-LABEL: fcmpRI_X_one:
712 ; CHECK-SF2:       # %bb.0: # %entry
713 ; CHECK-SF2-NEXT:    movi16 a0, 0
714 ; CHECK-SF2-NEXT:    fmtvr.32.1 vr1, a0
715 ; CHECK-SF2-NEXT:    fcmpne.32 vr0, vr1
716 ; CHECK-SF2-NEXT:    mvc32 a0
717 ; CHECK-SF2-NEXT:    fcmpuo.32 vr0, vr0
718 ; CHECK-SF2-NEXT:    mvcv16 a1
719 ; CHECK-SF2-NEXT:    and16 a0, a1
720 ; CHECK-SF2-NEXT:    rts16
721 entry:
722   %fcmp = fcmp one float %x, 0.0
723   ret i1 %fcmp
727 ;oeq
728 define i1 @fcmpRR_oeq(float %x, float %y) {
730 ; CHECK-SF-LABEL: fcmpRR_oeq:
731 ; CHECK-SF:       # %bb.0: # %entry
732 ; CHECK-SF-NEXT:    fcmpnes vr1, vr0
733 ; CHECK-SF-NEXT:    mvcv16 a0
734 ; CHECK-SF-NEXT:    rts16
736 ; CHECK-SF2-LABEL: fcmpRR_oeq:
737 ; CHECK-SF2:       # %bb.0: # %entry
738 ; CHECK-SF2-NEXT:    fcmpne.32 vr1, vr0
739 ; CHECK-SF2-NEXT:    mvcv16 a0
740 ; CHECK-SF2-NEXT:    rts16
741 entry:
742   %fcmp = fcmp oeq float %y, %x
743   ret i1 %fcmp
746 define i1 @fcmpRI_oeq(float %x) {
748 ; CHECK-SF-LABEL: fcmpRI_oeq:
749 ; CHECK-SF:       # %bb.0: # %entry
750 ; CHECK-SF-NEXT:    movih32 a0, 49440
751 ; CHECK-SF-NEXT:    fmtvrl vr1, a0
752 ; CHECK-SF-NEXT:    fcmpnes vr0, vr1
753 ; CHECK-SF-NEXT:    mvcv16 a0
754 ; CHECK-SF-NEXT:    rts16
756 ; CHECK-SF2-LABEL: fcmpRI_oeq:
757 ; CHECK-SF2:       # %bb.0: # %entry
758 ; CHECK-SF2-NEXT:    movih32 a0, 49440
759 ; CHECK-SF2-NEXT:    fmtvr.32.1 vr1, a0
760 ; CHECK-SF2-NEXT:    fcmpne.32 vr0, vr1
761 ; CHECK-SF2-NEXT:    mvcv16 a0
762 ; CHECK-SF2-NEXT:    rts16
763 entry:
764   %fcmp = fcmp oeq float %x, -10.0
765   ret i1 %fcmp
768 define i1 @fcmpRI_X_oeq(float %x) {
770 ; CHECK-SF-LABEL: fcmpRI_X_oeq:
771 ; CHECK-SF:       # %bb.0: # %entry
772 ; CHECK-SF-NEXT:    fcmpznes vr0
773 ; CHECK-SF-NEXT:    mvcv16 a0
774 ; CHECK-SF-NEXT:    rts16
776 ; CHECK-SF2-LABEL: fcmpRI_X_oeq:
777 ; CHECK-SF2:       # %bb.0: # %entry
778 ; CHECK-SF2-NEXT:    fcmpnez.32 vr0
779 ; CHECK-SF2-NEXT:    mvcv16 a0
780 ; CHECK-SF2-NEXT:    rts16
781 entry:
782   %fcmp = fcmp oeq float %x, 0.0
783   ret i1 %fcmp
787 ;ord
788 define i1 @fcmpRR_ord(float %x, float %y) {
790 ; CHECK-SF-LABEL: fcmpRR_ord:
791 ; CHECK-SF:       # %bb.0: # %entry
792 ; CHECK-SF-NEXT:    fcmpuos vr1, vr0
793 ; CHECK-SF-NEXT:    mvcv16 a0
794 ; CHECK-SF-NEXT:    rts16
796 ; CHECK-SF2-LABEL: fcmpRR_ord:
797 ; CHECK-SF2:       # %bb.0: # %entry
798 ; CHECK-SF2-NEXT:    fcmpuo.32 vr1, vr0
799 ; CHECK-SF2-NEXT:    mvcv16 a0
800 ; CHECK-SF2-NEXT:    rts16
801 entry:
802   %fcmp = fcmp ord float %y, %x
803   ret i1 %fcmp
806 define i1 @fcmpRI_ord(float %x) {
808 ; CHECK-SF-LABEL: fcmpRI_ord:
809 ; CHECK-SF:       # %bb.0: # %entry
810 ; CHECK-SF-NEXT:    fcmpuos vr0, vr0
811 ; CHECK-SF-NEXT:    mvcv16 a0
812 ; CHECK-SF-NEXT:    rts16
814 ; CHECK-SF2-LABEL: fcmpRI_ord:
815 ; CHECK-SF2:       # %bb.0: # %entry
816 ; CHECK-SF2-NEXT:    fcmpuo.32 vr0, vr0
817 ; CHECK-SF2-NEXT:    mvcv16 a0
818 ; CHECK-SF2-NEXT:    rts16
819 entry:
820   %fcmp = fcmp ord float %x, -10.0
821   ret i1 %fcmp
824 define i1 @fcmpRI_X_ord(float %x) {
826 ; CHECK-SF-LABEL: fcmpRI_X_ord:
827 ; CHECK-SF:       # %bb.0: # %entry
828 ; CHECK-SF-NEXT:    fcmpuos vr0, vr0
829 ; CHECK-SF-NEXT:    mvcv16 a0
830 ; CHECK-SF-NEXT:    rts16
832 ; CHECK-SF2-LABEL: fcmpRI_X_ord:
833 ; CHECK-SF2:       # %bb.0: # %entry
834 ; CHECK-SF2-NEXT:    fcmpuo.32 vr0, vr0
835 ; CHECK-SF2-NEXT:    mvcv16 a0
836 ; CHECK-SF2-NEXT:    rts16
837 entry:
838   %fcmp = fcmp ord float %x, 0.0
839   ret i1 %fcmp
843 ;uno
844 define i1 @fcmpRR_uno(float %x, float %y) {
846 ; CHECK-SF-LABEL: fcmpRR_uno:
847 ; CHECK-SF:       # %bb.0: # %entry
848 ; CHECK-SF-NEXT:    fcmpuos vr1, vr0
849 ; CHECK-SF-NEXT:    mvc32 a0
850 ; CHECK-SF-NEXT:    rts16
852 ; CHECK-SF2-LABEL: fcmpRR_uno:
853 ; CHECK-SF2:       # %bb.0: # %entry
854 ; CHECK-SF2-NEXT:    fcmpuo.32 vr1, vr0
855 ; CHECK-SF2-NEXT:    mvc32 a0
856 ; CHECK-SF2-NEXT:    rts16
857 entry:
858   %fcmp = fcmp uno float %y, %x
859   ret i1 %fcmp
862 define i1 @fcmpRI_uno(float %x) {
864 ; CHECK-SF-LABEL: fcmpRI_uno:
865 ; CHECK-SF:       # %bb.0: # %entry
866 ; CHECK-SF-NEXT:    fcmpuos vr0, vr0
867 ; CHECK-SF-NEXT:    mvc32 a0
868 ; CHECK-SF-NEXT:    rts16
870 ; CHECK-SF2-LABEL: fcmpRI_uno:
871 ; CHECK-SF2:       # %bb.0: # %entry
872 ; CHECK-SF2-NEXT:    fcmpuo.32 vr0, vr0
873 ; CHECK-SF2-NEXT:    mvc32 a0
874 ; CHECK-SF2-NEXT:    rts16
875 entry:
876   %fcmp = fcmp uno float %x, -10.0
877   ret i1 %fcmp
880 define i1 @fcmpRI_X_uno(float %x) {
882 ; CHECK-SF-LABEL: fcmpRI_X_uno:
883 ; CHECK-SF:       # %bb.0: # %entry
884 ; CHECK-SF-NEXT:    fcmpuos vr0, vr0
885 ; CHECK-SF-NEXT:    mvc32 a0
886 ; CHECK-SF-NEXT:    rts16
888 ; CHECK-SF2-LABEL: fcmpRI_X_uno:
889 ; CHECK-SF2:       # %bb.0: # %entry
890 ; CHECK-SF2-NEXT:    fcmpuo.32 vr0, vr0
891 ; CHECK-SF2-NEXT:    mvc32 a0
892 ; CHECK-SF2-NEXT:    rts16
893 entry:
894   %fcmp = fcmp uno float %x, 0.0
895   ret i1 %fcmp