1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
3 ; RUN: < %s -mtriple=powerpc64-unknown-linux -mcpu=pwr8 | FileCheck %s \
4 ; RUN: -check-prefix=P8
5 ; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
6 ; RUN: < %s -mtriple=powerpc64le-unknown-linux -mcpu=pwr9 \
7 ; RUN: | FileCheck %s -check-prefix=P9
8 ; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
9 ; RUN: < %s -mtriple=powerpc64le-unknown-linux -mcpu=pwr8 -mattr=-vsx | \
10 ; RUN: FileCheck %s -check-prefix=NOVSX
12 define i32 @test_f32_oeq_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
13 ; P8-LABEL: test_f32_oeq_q:
15 ; P8-NEXT: fcmpu cr0, f1, f2
16 ; P8-NEXT: iseleq r3, r3, r4
19 ; P9-LABEL: test_f32_oeq_q:
21 ; P9-NEXT: fcmpu cr0, f1, f2
22 ; P9-NEXT: iseleq r3, r3, r4
25 ; NOVSX-LABEL: test_f32_oeq_q:
27 ; NOVSX-NEXT: fcmpu cr0, f1, f2
28 ; NOVSX-NEXT: iseleq r3, r3, r4
30 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(
31 float %f1, float %f2, metadata !"oeq",
32 metadata !"fpexcept.strict") #0
33 %res = select i1 %cond, i32 %a, i32 %b
37 define i32 @test_f32_ogt_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
38 ; P8-LABEL: test_f32_ogt_q:
40 ; P8-NEXT: fcmpu cr0, f1, f2
41 ; P8-NEXT: iselgt r3, r3, r4
44 ; P9-LABEL: test_f32_ogt_q:
46 ; P9-NEXT: fcmpu cr0, f1, f2
47 ; P9-NEXT: iselgt r3, r3, r4
50 ; NOVSX-LABEL: test_f32_ogt_q:
52 ; NOVSX-NEXT: fcmpu cr0, f1, f2
53 ; NOVSX-NEXT: iselgt r3, r3, r4
55 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(
56 float %f1, float %f2, metadata !"ogt",
57 metadata !"fpexcept.strict") #0
58 %res = select i1 %cond, i32 %a, i32 %b
62 define i32 @test_f32_oge_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
63 ; P8-LABEL: test_f32_oge_q:
65 ; P8-NEXT: fcmpu cr0, f1, f2
66 ; P8-NEXT: crnor 4*cr5+lt, un, lt
67 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
70 ; P9-LABEL: test_f32_oge_q:
72 ; P9-NEXT: fcmpu cr0, f1, f2
73 ; P9-NEXT: crnor 4*cr5+lt, un, lt
74 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
77 ; NOVSX-LABEL: test_f32_oge_q:
79 ; NOVSX-NEXT: fcmpu cr0, f1, f2
80 ; NOVSX-NEXT: crnor 4*cr5+lt, un, lt
81 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
83 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(
84 float %f1, float %f2, metadata !"oge",
85 metadata !"fpexcept.strict") #0
86 %res = select i1 %cond, i32 %a, i32 %b
90 define i32 @test_f32_olt_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
91 ; P8-LABEL: test_f32_olt_q:
93 ; P8-NEXT: fcmpu cr0, f1, f2
94 ; P8-NEXT: isellt r3, r3, r4
97 ; P9-LABEL: test_f32_olt_q:
99 ; P9-NEXT: fcmpu cr0, f1, f2
100 ; P9-NEXT: isellt r3, r3, r4
103 ; NOVSX-LABEL: test_f32_olt_q:
105 ; NOVSX-NEXT: fcmpu cr0, f1, f2
106 ; NOVSX-NEXT: isellt r3, r3, r4
108 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(
109 float %f1, float %f2, metadata !"olt",
110 metadata !"fpexcept.strict") #0
111 %res = select i1 %cond, i32 %a, i32 %b
115 define i32 @test_f32_ole_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
116 ; P8-LABEL: test_f32_ole_q:
118 ; P8-NEXT: fcmpu cr0, f1, f2
119 ; P8-NEXT: crnor 4*cr5+lt, un, gt
120 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
123 ; P9-LABEL: test_f32_ole_q:
125 ; P9-NEXT: fcmpu cr0, f1, f2
126 ; P9-NEXT: crnor 4*cr5+lt, un, gt
127 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
130 ; NOVSX-LABEL: test_f32_ole_q:
132 ; NOVSX-NEXT: fcmpu cr0, f1, f2
133 ; NOVSX-NEXT: crnor 4*cr5+lt, un, gt
134 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
136 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(
137 float %f1, float %f2, metadata !"ole",
138 metadata !"fpexcept.strict") #0
139 %res = select i1 %cond, i32 %a, i32 %b
143 define i32 @test_f32_one_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
144 ; P8-LABEL: test_f32_one_q:
146 ; P8-NEXT: fcmpu cr0, f1, f2
147 ; P8-NEXT: crnor 4*cr5+lt, un, eq
148 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
151 ; P9-LABEL: test_f32_one_q:
153 ; P9-NEXT: fcmpu cr0, f1, f2
154 ; P9-NEXT: crnor 4*cr5+lt, un, eq
155 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
158 ; NOVSX-LABEL: test_f32_one_q:
160 ; NOVSX-NEXT: fcmpu cr0, f1, f2
161 ; NOVSX-NEXT: crnor 4*cr5+lt, un, eq
162 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
164 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(
165 float %f1, float %f2, metadata !"one",
166 metadata !"fpexcept.strict") #0
167 %res = select i1 %cond, i32 %a, i32 %b
171 define i32 @test_f32_ord_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
172 ; P8-LABEL: test_f32_ord_q:
174 ; P8-NEXT: fcmpu cr0, f1, f2
175 ; P8-NEXT: isel r3, r4, r3, un
178 ; P9-LABEL: test_f32_ord_q:
180 ; P9-NEXT: fcmpu cr0, f1, f2
181 ; P9-NEXT: isel r3, r4, r3, un
184 ; NOVSX-LABEL: test_f32_ord_q:
186 ; NOVSX-NEXT: fcmpu cr0, f1, f2
187 ; NOVSX-NEXT: isel r3, r4, r3, un
189 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(
190 float %f1, float %f2, metadata !"ord",
191 metadata !"fpexcept.strict") #0
192 %res = select i1 %cond, i32 %a, i32 %b
196 define i32 @test_f32_ueq_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
197 ; P8-LABEL: test_f32_ueq_q:
199 ; P8-NEXT: fcmpu cr0, f1, f2
200 ; P8-NEXT: cror 4*cr5+lt, eq, un
201 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
204 ; P9-LABEL: test_f32_ueq_q:
206 ; P9-NEXT: fcmpu cr0, f1, f2
207 ; P9-NEXT: cror 4*cr5+lt, eq, un
208 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
211 ; NOVSX-LABEL: test_f32_ueq_q:
213 ; NOVSX-NEXT: fcmpu cr0, f1, f2
214 ; NOVSX-NEXT: cror 4*cr5+lt, eq, un
215 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
217 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(
218 float %f1, float %f2, metadata !"ueq",
219 metadata !"fpexcept.strict") #0
220 %res = select i1 %cond, i32 %a, i32 %b
224 define i32 @test_f32_ugt_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
225 ; P8-LABEL: test_f32_ugt_q:
227 ; P8-NEXT: fcmpu cr0, f1, f2
228 ; P8-NEXT: cror 4*cr5+lt, gt, un
229 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
232 ; P9-LABEL: test_f32_ugt_q:
234 ; P9-NEXT: fcmpu cr0, f1, f2
235 ; P9-NEXT: cror 4*cr5+lt, gt, un
236 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
239 ; NOVSX-LABEL: test_f32_ugt_q:
241 ; NOVSX-NEXT: fcmpu cr0, f1, f2
242 ; NOVSX-NEXT: cror 4*cr5+lt, gt, un
243 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
245 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(
246 float %f1, float %f2, metadata !"ugt",
247 metadata !"fpexcept.strict") #0
248 %res = select i1 %cond, i32 %a, i32 %b
252 define i32 @test_f32_uge_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
253 ; P8-LABEL: test_f32_uge_q:
255 ; P8-NEXT: fcmpu cr0, f1, f2
256 ; P8-NEXT: isellt r3, r4, r3
259 ; P9-LABEL: test_f32_uge_q:
261 ; P9-NEXT: fcmpu cr0, f1, f2
262 ; P9-NEXT: isellt r3, r4, r3
265 ; NOVSX-LABEL: test_f32_uge_q:
267 ; NOVSX-NEXT: fcmpu cr0, f1, f2
268 ; NOVSX-NEXT: isellt r3, r4, r3
270 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(
271 float %f1, float %f2, metadata !"uge",
272 metadata !"fpexcept.strict") #0
273 %res = select i1 %cond, i32 %a, i32 %b
277 define i32 @test_f32_ult_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
278 ; P8-LABEL: test_f32_ult_q:
280 ; P8-NEXT: fcmpu cr0, f1, f2
281 ; P8-NEXT: cror 4*cr5+lt, lt, un
282 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
285 ; P9-LABEL: test_f32_ult_q:
287 ; P9-NEXT: fcmpu cr0, f1, f2
288 ; P9-NEXT: cror 4*cr5+lt, lt, un
289 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
292 ; NOVSX-LABEL: test_f32_ult_q:
294 ; NOVSX-NEXT: fcmpu cr0, f1, f2
295 ; NOVSX-NEXT: cror 4*cr5+lt, lt, un
296 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
298 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(
299 float %f1, float %f2, metadata !"ult",
300 metadata !"fpexcept.strict") #0
301 %res = select i1 %cond, i32 %a, i32 %b
305 define i32 @test_f32_ule_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
306 ; P8-LABEL: test_f32_ule_q:
308 ; P8-NEXT: fcmpu cr0, f1, f2
309 ; P8-NEXT: iselgt r3, r4, r3
312 ; P9-LABEL: test_f32_ule_q:
314 ; P9-NEXT: fcmpu cr0, f1, f2
315 ; P9-NEXT: iselgt r3, r4, r3
318 ; NOVSX-LABEL: test_f32_ule_q:
320 ; NOVSX-NEXT: fcmpu cr0, f1, f2
321 ; NOVSX-NEXT: iselgt r3, r4, r3
323 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(
324 float %f1, float %f2, metadata !"ule",
325 metadata !"fpexcept.strict") #0
326 %res = select i1 %cond, i32 %a, i32 %b
330 define i32 @test_f32_une_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
331 ; P8-LABEL: test_f32_une_q:
333 ; P8-NEXT: fcmpu cr0, f1, f2
334 ; P8-NEXT: iseleq r3, r4, r3
337 ; P9-LABEL: test_f32_une_q:
339 ; P9-NEXT: fcmpu cr0, f1, f2
340 ; P9-NEXT: iseleq r3, r4, r3
343 ; NOVSX-LABEL: test_f32_une_q:
345 ; NOVSX-NEXT: fcmpu cr0, f1, f2
346 ; NOVSX-NEXT: iseleq r3, r4, r3
348 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(
349 float %f1, float %f2, metadata !"une",
350 metadata !"fpexcept.strict") #0
351 %res = select i1 %cond, i32 %a, i32 %b
355 define i32 @test_f32_uno_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
356 ; P8-LABEL: test_f32_uno_q:
358 ; P8-NEXT: fcmpu cr0, f1, f2
359 ; P8-NEXT: isel r3, r3, r4, un
362 ; P9-LABEL: test_f32_uno_q:
364 ; P9-NEXT: fcmpu cr0, f1, f2
365 ; P9-NEXT: isel r3, r3, r4, un
368 ; NOVSX-LABEL: test_f32_uno_q:
370 ; NOVSX-NEXT: fcmpu cr0, f1, f2
371 ; NOVSX-NEXT: isel r3, r3, r4, un
373 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(
374 float %f1, float %f2, metadata !"uno",
375 metadata !"fpexcept.strict") #0
376 %res = select i1 %cond, i32 %a, i32 %b
380 define i32 @test_f64_oeq_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
381 ; P8-LABEL: test_f64_oeq_q:
383 ; P8-NEXT: fcmpu cr0, f1, f2
384 ; P8-NEXT: iseleq r3, r3, r4
387 ; P9-LABEL: test_f64_oeq_q:
389 ; P9-NEXT: fcmpu cr0, f1, f2
390 ; P9-NEXT: iseleq r3, r3, r4
393 ; NOVSX-LABEL: test_f64_oeq_q:
395 ; NOVSX-NEXT: fcmpu cr0, f1, f2
396 ; NOVSX-NEXT: iseleq r3, r3, r4
398 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(
399 double %f1, double %f2, metadata !"oeq",
400 metadata !"fpexcept.strict") #0
401 %res = select i1 %cond, i32 %a, i32 %b
405 define i32 @test_f64_ogt_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
406 ; P8-LABEL: test_f64_ogt_q:
408 ; P8-NEXT: fcmpu cr0, f1, f2
409 ; P8-NEXT: iselgt r3, r3, r4
412 ; P9-LABEL: test_f64_ogt_q:
414 ; P9-NEXT: fcmpu cr0, f1, f2
415 ; P9-NEXT: iselgt r3, r3, r4
418 ; NOVSX-LABEL: test_f64_ogt_q:
420 ; NOVSX-NEXT: fcmpu cr0, f1, f2
421 ; NOVSX-NEXT: iselgt r3, r3, r4
423 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(
424 double %f1, double %f2, metadata !"ogt",
425 metadata !"fpexcept.strict") #0
426 %res = select i1 %cond, i32 %a, i32 %b
430 define i32 @test_f64_oge_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
431 ; P8-LABEL: test_f64_oge_q:
433 ; P8-NEXT: fcmpu cr0, f1, f2
434 ; P8-NEXT: crnor 4*cr5+lt, un, lt
435 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
438 ; P9-LABEL: test_f64_oge_q:
440 ; P9-NEXT: fcmpu cr0, f1, f2
441 ; P9-NEXT: crnor 4*cr5+lt, un, lt
442 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
445 ; NOVSX-LABEL: test_f64_oge_q:
447 ; NOVSX-NEXT: fcmpu cr0, f1, f2
448 ; NOVSX-NEXT: crnor 4*cr5+lt, un, lt
449 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
451 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(
452 double %f1, double %f2, metadata !"oge",
453 metadata !"fpexcept.strict") #0
454 %res = select i1 %cond, i32 %a, i32 %b
458 define i32 @test_f64_olt_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
459 ; P8-LABEL: test_f64_olt_q:
461 ; P8-NEXT: fcmpu cr0, f1, f2
462 ; P8-NEXT: isellt r3, r3, r4
465 ; P9-LABEL: test_f64_olt_q:
467 ; P9-NEXT: fcmpu cr0, f1, f2
468 ; P9-NEXT: isellt r3, r3, r4
471 ; NOVSX-LABEL: test_f64_olt_q:
473 ; NOVSX-NEXT: fcmpu cr0, f1, f2
474 ; NOVSX-NEXT: isellt r3, r3, r4
476 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(
477 double %f1, double %f2, metadata !"olt",
478 metadata !"fpexcept.strict") #0
479 %res = select i1 %cond, i32 %a, i32 %b
483 define i32 @test_f64_ole_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
484 ; P8-LABEL: test_f64_ole_q:
486 ; P8-NEXT: fcmpu cr0, f1, f2
487 ; P8-NEXT: crnor 4*cr5+lt, un, gt
488 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
491 ; P9-LABEL: test_f64_ole_q:
493 ; P9-NEXT: fcmpu cr0, f1, f2
494 ; P9-NEXT: crnor 4*cr5+lt, un, gt
495 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
498 ; NOVSX-LABEL: test_f64_ole_q:
500 ; NOVSX-NEXT: fcmpu cr0, f1, f2
501 ; NOVSX-NEXT: crnor 4*cr5+lt, un, gt
502 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
504 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(
505 double %f1, double %f2, metadata !"ole",
506 metadata !"fpexcept.strict") #0
507 %res = select i1 %cond, i32 %a, i32 %b
511 define i32 @test_f64_one_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
512 ; P8-LABEL: test_f64_one_q:
514 ; P8-NEXT: fcmpu cr0, f1, f2
515 ; P8-NEXT: crnor 4*cr5+lt, un, eq
516 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
519 ; P9-LABEL: test_f64_one_q:
521 ; P9-NEXT: fcmpu cr0, f1, f2
522 ; P9-NEXT: crnor 4*cr5+lt, un, eq
523 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
526 ; NOVSX-LABEL: test_f64_one_q:
528 ; NOVSX-NEXT: fcmpu cr0, f1, f2
529 ; NOVSX-NEXT: crnor 4*cr5+lt, un, eq
530 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
532 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(
533 double %f1, double %f2, metadata !"one",
534 metadata !"fpexcept.strict") #0
535 %res = select i1 %cond, i32 %a, i32 %b
539 define i32 @test_f64_ord_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
540 ; P8-LABEL: test_f64_ord_q:
542 ; P8-NEXT: fcmpu cr0, f1, f2
543 ; P8-NEXT: isel r3, r4, r3, un
546 ; P9-LABEL: test_f64_ord_q:
548 ; P9-NEXT: fcmpu cr0, f1, f2
549 ; P9-NEXT: isel r3, r4, r3, un
552 ; NOVSX-LABEL: test_f64_ord_q:
554 ; NOVSX-NEXT: fcmpu cr0, f1, f2
555 ; NOVSX-NEXT: isel r3, r4, r3, un
557 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(
558 double %f1, double %f2, metadata !"ord",
559 metadata !"fpexcept.strict") #0
560 %res = select i1 %cond, i32 %a, i32 %b
564 define i32 @test_f64_ueq_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
565 ; P8-LABEL: test_f64_ueq_q:
567 ; P8-NEXT: fcmpu cr0, f1, f2
568 ; P8-NEXT: cror 4*cr5+lt, eq, un
569 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
572 ; P9-LABEL: test_f64_ueq_q:
574 ; P9-NEXT: fcmpu cr0, f1, f2
575 ; P9-NEXT: cror 4*cr5+lt, eq, un
576 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
579 ; NOVSX-LABEL: test_f64_ueq_q:
581 ; NOVSX-NEXT: fcmpu cr0, f1, f2
582 ; NOVSX-NEXT: cror 4*cr5+lt, eq, un
583 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
585 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(
586 double %f1, double %f2, metadata !"ueq",
587 metadata !"fpexcept.strict") #0
588 %res = select i1 %cond, i32 %a, i32 %b
592 define i32 @test_f64_ugt_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
593 ; P8-LABEL: test_f64_ugt_q:
595 ; P8-NEXT: fcmpu cr0, f1, f2
596 ; P8-NEXT: cror 4*cr5+lt, gt, un
597 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
600 ; P9-LABEL: test_f64_ugt_q:
602 ; P9-NEXT: fcmpu cr0, f1, f2
603 ; P9-NEXT: cror 4*cr5+lt, gt, un
604 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
607 ; NOVSX-LABEL: test_f64_ugt_q:
609 ; NOVSX-NEXT: fcmpu cr0, f1, f2
610 ; NOVSX-NEXT: cror 4*cr5+lt, gt, un
611 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
613 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(
614 double %f1, double %f2, metadata !"ugt",
615 metadata !"fpexcept.strict") #0
616 %res = select i1 %cond, i32 %a, i32 %b
620 define i32 @test_f64_uge_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
621 ; P8-LABEL: test_f64_uge_q:
623 ; P8-NEXT: fcmpu cr0, f1, f2
624 ; P8-NEXT: isellt r3, r4, r3
627 ; P9-LABEL: test_f64_uge_q:
629 ; P9-NEXT: fcmpu cr0, f1, f2
630 ; P9-NEXT: isellt r3, r4, r3
633 ; NOVSX-LABEL: test_f64_uge_q:
635 ; NOVSX-NEXT: fcmpu cr0, f1, f2
636 ; NOVSX-NEXT: isellt r3, r4, r3
638 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(
639 double %f1, double %f2, metadata !"uge",
640 metadata !"fpexcept.strict") #0
641 %res = select i1 %cond, i32 %a, i32 %b
645 define i32 @test_f64_ult_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
646 ; P8-LABEL: test_f64_ult_q:
648 ; P8-NEXT: fcmpu cr0, f1, f2
649 ; P8-NEXT: cror 4*cr5+lt, lt, un
650 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
653 ; P9-LABEL: test_f64_ult_q:
655 ; P9-NEXT: fcmpu cr0, f1, f2
656 ; P9-NEXT: cror 4*cr5+lt, lt, un
657 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
660 ; NOVSX-LABEL: test_f64_ult_q:
662 ; NOVSX-NEXT: fcmpu cr0, f1, f2
663 ; NOVSX-NEXT: cror 4*cr5+lt, lt, un
664 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
666 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(
667 double %f1, double %f2, metadata !"ult",
668 metadata !"fpexcept.strict") #0
669 %res = select i1 %cond, i32 %a, i32 %b
673 define i32 @test_f64_ule_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
674 ; P8-LABEL: test_f64_ule_q:
676 ; P8-NEXT: fcmpu cr0, f1, f2
677 ; P8-NEXT: iselgt r3, r4, r3
680 ; P9-LABEL: test_f64_ule_q:
682 ; P9-NEXT: fcmpu cr0, f1, f2
683 ; P9-NEXT: iselgt r3, r4, r3
686 ; NOVSX-LABEL: test_f64_ule_q:
688 ; NOVSX-NEXT: fcmpu cr0, f1, f2
689 ; NOVSX-NEXT: iselgt r3, r4, r3
691 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(
692 double %f1, double %f2, metadata !"ule",
693 metadata !"fpexcept.strict") #0
694 %res = select i1 %cond, i32 %a, i32 %b
698 define i32 @test_f64_une_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
699 ; P8-LABEL: test_f64_une_q:
701 ; P8-NEXT: fcmpu cr0, f1, f2
702 ; P8-NEXT: iseleq r3, r4, r3
705 ; P9-LABEL: test_f64_une_q:
707 ; P9-NEXT: fcmpu cr0, f1, f2
708 ; P9-NEXT: iseleq r3, r4, r3
711 ; NOVSX-LABEL: test_f64_une_q:
713 ; NOVSX-NEXT: fcmpu cr0, f1, f2
714 ; NOVSX-NEXT: iseleq r3, r4, r3
716 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(
717 double %f1, double %f2, metadata !"une",
718 metadata !"fpexcept.strict") #0
719 %res = select i1 %cond, i32 %a, i32 %b
723 define i32 @test_f64_uno_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
724 ; P8-LABEL: test_f64_uno_q:
726 ; P8-NEXT: fcmpu cr0, f1, f2
727 ; P8-NEXT: isel r3, r3, r4, un
730 ; P9-LABEL: test_f64_uno_q:
732 ; P9-NEXT: fcmpu cr0, f1, f2
733 ; P9-NEXT: isel r3, r3, r4, un
736 ; NOVSX-LABEL: test_f64_uno_q:
738 ; NOVSX-NEXT: fcmpu cr0, f1, f2
739 ; NOVSX-NEXT: isel r3, r3, r4, un
741 %cond = call i1 @llvm.experimental.constrained.fcmp.f64(
742 double %f1, double %f2, metadata !"uno",
743 metadata !"fpexcept.strict") #0
744 %res = select i1 %cond, i32 %a, i32 %b
748 define i32 @test_f32_oeq_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
749 ; P8-LABEL: test_f32_oeq_s:
751 ; P8-NEXT: fcmpo cr0, f1, f2
752 ; P8-NEXT: iseleq r3, r3, r4
755 ; P9-LABEL: test_f32_oeq_s:
757 ; P9-NEXT: fcmpo cr0, f1, f2
758 ; P9-NEXT: iseleq r3, r3, r4
761 ; NOVSX-LABEL: test_f32_oeq_s:
763 ; NOVSX-NEXT: fcmpo cr0, f1, f2
764 ; NOVSX-NEXT: iseleq r3, r3, r4
766 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(
767 float %f1, float %f2, metadata !"oeq",
768 metadata !"fpexcept.strict") #0
769 %res = select i1 %cond, i32 %a, i32 %b
773 define i32 @test_f32_ogt_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
774 ; P8-LABEL: test_f32_ogt_s:
776 ; P8-NEXT: fcmpo cr0, f1, f2
777 ; P8-NEXT: iselgt r3, r3, r4
780 ; P9-LABEL: test_f32_ogt_s:
782 ; P9-NEXT: fcmpo cr0, f1, f2
783 ; P9-NEXT: iselgt r3, r3, r4
786 ; NOVSX-LABEL: test_f32_ogt_s:
788 ; NOVSX-NEXT: fcmpo cr0, f1, f2
789 ; NOVSX-NEXT: iselgt r3, r3, r4
791 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(
792 float %f1, float %f2, metadata !"ogt",
793 metadata !"fpexcept.strict") #0
794 %res = select i1 %cond, i32 %a, i32 %b
798 define i32 @test_f32_oge_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
799 ; P8-LABEL: test_f32_oge_s:
801 ; P8-NEXT: fcmpo cr0, f1, f2
802 ; P8-NEXT: crnor 4*cr5+lt, un, lt
803 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
806 ; P9-LABEL: test_f32_oge_s:
808 ; P9-NEXT: fcmpo cr0, f1, f2
809 ; P9-NEXT: crnor 4*cr5+lt, un, lt
810 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
813 ; NOVSX-LABEL: test_f32_oge_s:
815 ; NOVSX-NEXT: fcmpo cr0, f1, f2
816 ; NOVSX-NEXT: crnor 4*cr5+lt, un, lt
817 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
819 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(
820 float %f1, float %f2, metadata !"oge",
821 metadata !"fpexcept.strict") #0
822 %res = select i1 %cond, i32 %a, i32 %b
826 define i32 @test_f32_olt_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
827 ; P8-LABEL: test_f32_olt_s:
829 ; P8-NEXT: fcmpo cr0, f1, f2
830 ; P8-NEXT: isellt r3, r3, r4
833 ; P9-LABEL: test_f32_olt_s:
835 ; P9-NEXT: fcmpo cr0, f1, f2
836 ; P9-NEXT: isellt r3, r3, r4
839 ; NOVSX-LABEL: test_f32_olt_s:
841 ; NOVSX-NEXT: fcmpo cr0, f1, f2
842 ; NOVSX-NEXT: isellt r3, r3, r4
844 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(
845 float %f1, float %f2, metadata !"olt",
846 metadata !"fpexcept.strict") #0
847 %res = select i1 %cond, i32 %a, i32 %b
851 define i32 @test_f32_ole_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
852 ; P8-LABEL: test_f32_ole_s:
854 ; P8-NEXT: fcmpo cr0, f1, f2
855 ; P8-NEXT: crnor 4*cr5+lt, un, gt
856 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
859 ; P9-LABEL: test_f32_ole_s:
861 ; P9-NEXT: fcmpo cr0, f1, f2
862 ; P9-NEXT: crnor 4*cr5+lt, un, gt
863 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
866 ; NOVSX-LABEL: test_f32_ole_s:
868 ; NOVSX-NEXT: fcmpo cr0, f1, f2
869 ; NOVSX-NEXT: crnor 4*cr5+lt, un, gt
870 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
872 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(
873 float %f1, float %f2, metadata !"ole",
874 metadata !"fpexcept.strict") #0
875 %res = select i1 %cond, i32 %a, i32 %b
879 define i32 @test_f32_one_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
880 ; P8-LABEL: test_f32_one_s:
882 ; P8-NEXT: fcmpo cr0, f1, f2
883 ; P8-NEXT: crnor 4*cr5+lt, un, eq
884 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
887 ; P9-LABEL: test_f32_one_s:
889 ; P9-NEXT: fcmpo cr0, f1, f2
890 ; P9-NEXT: crnor 4*cr5+lt, un, eq
891 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
894 ; NOVSX-LABEL: test_f32_one_s:
896 ; NOVSX-NEXT: fcmpo cr0, f1, f2
897 ; NOVSX-NEXT: crnor 4*cr5+lt, un, eq
898 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
900 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(
901 float %f1, float %f2, metadata !"one",
902 metadata !"fpexcept.strict") #0
903 %res = select i1 %cond, i32 %a, i32 %b
907 define i32 @test_f32_ord_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
908 ; P8-LABEL: test_f32_ord_s:
910 ; P8-NEXT: fcmpo cr0, f1, f2
911 ; P8-NEXT: isel r3, r4, r3, un
914 ; P9-LABEL: test_f32_ord_s:
916 ; P9-NEXT: fcmpo cr0, f1, f2
917 ; P9-NEXT: isel r3, r4, r3, un
920 ; NOVSX-LABEL: test_f32_ord_s:
922 ; NOVSX-NEXT: fcmpo cr0, f1, f2
923 ; NOVSX-NEXT: isel r3, r4, r3, un
925 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(
926 float %f1, float %f2, metadata !"ord",
927 metadata !"fpexcept.strict") #0
928 %res = select i1 %cond, i32 %a, i32 %b
932 define i32 @test_f32_ueq_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
933 ; P8-LABEL: test_f32_ueq_s:
935 ; P8-NEXT: fcmpo cr0, f1, f2
936 ; P8-NEXT: cror 4*cr5+lt, eq, un
937 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
940 ; P9-LABEL: test_f32_ueq_s:
942 ; P9-NEXT: fcmpo cr0, f1, f2
943 ; P9-NEXT: cror 4*cr5+lt, eq, un
944 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
947 ; NOVSX-LABEL: test_f32_ueq_s:
949 ; NOVSX-NEXT: fcmpo cr0, f1, f2
950 ; NOVSX-NEXT: cror 4*cr5+lt, eq, un
951 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
953 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(
954 float %f1, float %f2, metadata !"ueq",
955 metadata !"fpexcept.strict") #0
956 %res = select i1 %cond, i32 %a, i32 %b
960 define i32 @test_f32_ugt_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
961 ; P8-LABEL: test_f32_ugt_s:
963 ; P8-NEXT: fcmpo cr0, f1, f2
964 ; P8-NEXT: cror 4*cr5+lt, gt, un
965 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
968 ; P9-LABEL: test_f32_ugt_s:
970 ; P9-NEXT: fcmpo cr0, f1, f2
971 ; P9-NEXT: cror 4*cr5+lt, gt, un
972 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
975 ; NOVSX-LABEL: test_f32_ugt_s:
977 ; NOVSX-NEXT: fcmpo cr0, f1, f2
978 ; NOVSX-NEXT: cror 4*cr5+lt, gt, un
979 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
981 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(
982 float %f1, float %f2, metadata !"ugt",
983 metadata !"fpexcept.strict") #0
984 %res = select i1 %cond, i32 %a, i32 %b
988 define i32 @test_f32_uge_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
989 ; P8-LABEL: test_f32_uge_s:
991 ; P8-NEXT: fcmpo cr0, f1, f2
992 ; P8-NEXT: isellt r3, r4, r3
995 ; P9-LABEL: test_f32_uge_s:
997 ; P9-NEXT: fcmpo cr0, f1, f2
998 ; P9-NEXT: isellt r3, r4, r3
1001 ; NOVSX-LABEL: test_f32_uge_s:
1003 ; NOVSX-NEXT: fcmpo cr0, f1, f2
1004 ; NOVSX-NEXT: isellt r3, r4, r3
1006 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(
1007 float %f1, float %f2, metadata !"uge",
1008 metadata !"fpexcept.strict") #0
1009 %res = select i1 %cond, i32 %a, i32 %b
1013 define i32 @test_f32_ult_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
1014 ; P8-LABEL: test_f32_ult_s:
1016 ; P8-NEXT: fcmpo cr0, f1, f2
1017 ; P8-NEXT: cror 4*cr5+lt, lt, un
1018 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
1021 ; P9-LABEL: test_f32_ult_s:
1023 ; P9-NEXT: fcmpo cr0, f1, f2
1024 ; P9-NEXT: cror 4*cr5+lt, lt, un
1025 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
1028 ; NOVSX-LABEL: test_f32_ult_s:
1030 ; NOVSX-NEXT: fcmpo cr0, f1, f2
1031 ; NOVSX-NEXT: cror 4*cr5+lt, lt, un
1032 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
1034 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(
1035 float %f1, float %f2, metadata !"ult",
1036 metadata !"fpexcept.strict") #0
1037 %res = select i1 %cond, i32 %a, i32 %b
1041 define i32 @test_f32_ule_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
1042 ; P8-LABEL: test_f32_ule_s:
1044 ; P8-NEXT: fcmpo cr0, f1, f2
1045 ; P8-NEXT: iselgt r3, r4, r3
1048 ; P9-LABEL: test_f32_ule_s:
1050 ; P9-NEXT: fcmpo cr0, f1, f2
1051 ; P9-NEXT: iselgt r3, r4, r3
1054 ; NOVSX-LABEL: test_f32_ule_s:
1056 ; NOVSX-NEXT: fcmpo cr0, f1, f2
1057 ; NOVSX-NEXT: iselgt r3, r4, r3
1059 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(
1060 float %f1, float %f2, metadata !"ule",
1061 metadata !"fpexcept.strict") #0
1062 %res = select i1 %cond, i32 %a, i32 %b
1066 define i32 @test_f32_une_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
1067 ; P8-LABEL: test_f32_une_s:
1069 ; P8-NEXT: fcmpo cr0, f1, f2
1070 ; P8-NEXT: iseleq r3, r4, r3
1073 ; P9-LABEL: test_f32_une_s:
1075 ; P9-NEXT: fcmpo cr0, f1, f2
1076 ; P9-NEXT: iseleq r3, r4, r3
1079 ; NOVSX-LABEL: test_f32_une_s:
1081 ; NOVSX-NEXT: fcmpo cr0, f1, f2
1082 ; NOVSX-NEXT: iseleq r3, r4, r3
1084 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(
1085 float %f1, float %f2, metadata !"une",
1086 metadata !"fpexcept.strict") #0
1087 %res = select i1 %cond, i32 %a, i32 %b
1091 define i32 @test_f32_uno_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
1092 ; P8-LABEL: test_f32_uno_s:
1094 ; P8-NEXT: fcmpo cr0, f1, f2
1095 ; P8-NEXT: isel r3, r3, r4, un
1098 ; P9-LABEL: test_f32_uno_s:
1100 ; P9-NEXT: fcmpo cr0, f1, f2
1101 ; P9-NEXT: isel r3, r3, r4, un
1104 ; NOVSX-LABEL: test_f32_uno_s:
1106 ; NOVSX-NEXT: fcmpo cr0, f1, f2
1107 ; NOVSX-NEXT: isel r3, r3, r4, un
1109 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(
1110 float %f1, float %f2, metadata !"uno",
1111 metadata !"fpexcept.strict") #0
1112 %res = select i1 %cond, i32 %a, i32 %b
1116 define i32 @test_f64_oeq_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1117 ; P8-LABEL: test_f64_oeq_s:
1119 ; P8-NEXT: fcmpo cr0, f1, f2
1120 ; P8-NEXT: iseleq r3, r3, r4
1123 ; P9-LABEL: test_f64_oeq_s:
1125 ; P9-NEXT: fcmpo cr0, f1, f2
1126 ; P9-NEXT: iseleq r3, r3, r4
1129 ; NOVSX-LABEL: test_f64_oeq_s:
1131 ; NOVSX-NEXT: fcmpo cr0, f1, f2
1132 ; NOVSX-NEXT: iseleq r3, r3, r4
1134 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(
1135 double %f1, double %f2, metadata !"oeq",
1136 metadata !"fpexcept.strict") #0
1137 %res = select i1 %cond, i32 %a, i32 %b
1141 define i32 @test_f64_ogt_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1142 ; P8-LABEL: test_f64_ogt_s:
1144 ; P8-NEXT: fcmpo cr0, f1, f2
1145 ; P8-NEXT: iselgt r3, r3, r4
1148 ; P9-LABEL: test_f64_ogt_s:
1150 ; P9-NEXT: fcmpo cr0, f1, f2
1151 ; P9-NEXT: iselgt r3, r3, r4
1154 ; NOVSX-LABEL: test_f64_ogt_s:
1156 ; NOVSX-NEXT: fcmpo cr0, f1, f2
1157 ; NOVSX-NEXT: iselgt r3, r3, r4
1159 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(
1160 double %f1, double %f2, metadata !"ogt",
1161 metadata !"fpexcept.strict") #0
1162 %res = select i1 %cond, i32 %a, i32 %b
1166 define i32 @test_f64_oge_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1167 ; P8-LABEL: test_f64_oge_s:
1169 ; P8-NEXT: fcmpo cr0, f1, f2
1170 ; P8-NEXT: crnor 4*cr5+lt, un, lt
1171 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
1174 ; P9-LABEL: test_f64_oge_s:
1176 ; P9-NEXT: fcmpo cr0, f1, f2
1177 ; P9-NEXT: crnor 4*cr5+lt, un, lt
1178 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
1181 ; NOVSX-LABEL: test_f64_oge_s:
1183 ; NOVSX-NEXT: fcmpo cr0, f1, f2
1184 ; NOVSX-NEXT: crnor 4*cr5+lt, un, lt
1185 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
1187 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(
1188 double %f1, double %f2, metadata !"oge",
1189 metadata !"fpexcept.strict") #0
1190 %res = select i1 %cond, i32 %a, i32 %b
1194 define i32 @test_f64_olt_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1195 ; P8-LABEL: test_f64_olt_s:
1197 ; P8-NEXT: fcmpo cr0, f1, f2
1198 ; P8-NEXT: isellt r3, r3, r4
1201 ; P9-LABEL: test_f64_olt_s:
1203 ; P9-NEXT: fcmpo cr0, f1, f2
1204 ; P9-NEXT: isellt r3, r3, r4
1207 ; NOVSX-LABEL: test_f64_olt_s:
1209 ; NOVSX-NEXT: fcmpo cr0, f1, f2
1210 ; NOVSX-NEXT: isellt r3, r3, r4
1212 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(
1213 double %f1, double %f2, metadata !"olt",
1214 metadata !"fpexcept.strict") #0
1215 %res = select i1 %cond, i32 %a, i32 %b
1219 define i32 @test_f64_ole_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1220 ; P8-LABEL: test_f64_ole_s:
1222 ; P8-NEXT: fcmpo cr0, f1, f2
1223 ; P8-NEXT: crnor 4*cr5+lt, un, gt
1224 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
1227 ; P9-LABEL: test_f64_ole_s:
1229 ; P9-NEXT: fcmpo cr0, f1, f2
1230 ; P9-NEXT: crnor 4*cr5+lt, un, gt
1231 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
1234 ; NOVSX-LABEL: test_f64_ole_s:
1236 ; NOVSX-NEXT: fcmpo cr0, f1, f2
1237 ; NOVSX-NEXT: crnor 4*cr5+lt, un, gt
1238 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
1240 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(
1241 double %f1, double %f2, metadata !"ole",
1242 metadata !"fpexcept.strict") #0
1243 %res = select i1 %cond, i32 %a, i32 %b
1247 define i32 @test_f64_one_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1248 ; P8-LABEL: test_f64_one_s:
1250 ; P8-NEXT: fcmpo cr0, f1, f2
1251 ; P8-NEXT: crnor 4*cr5+lt, un, eq
1252 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
1255 ; P9-LABEL: test_f64_one_s:
1257 ; P9-NEXT: fcmpo cr0, f1, f2
1258 ; P9-NEXT: crnor 4*cr5+lt, un, eq
1259 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
1262 ; NOVSX-LABEL: test_f64_one_s:
1264 ; NOVSX-NEXT: fcmpo cr0, f1, f2
1265 ; NOVSX-NEXT: crnor 4*cr5+lt, un, eq
1266 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
1268 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(
1269 double %f1, double %f2, metadata !"one",
1270 metadata !"fpexcept.strict") #0
1271 %res = select i1 %cond, i32 %a, i32 %b
1275 define i32 @test_f64_ord_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1276 ; P8-LABEL: test_f64_ord_s:
1278 ; P8-NEXT: fcmpo cr0, f1, f2
1279 ; P8-NEXT: isel r3, r4, r3, un
1282 ; P9-LABEL: test_f64_ord_s:
1284 ; P9-NEXT: fcmpo cr0, f1, f2
1285 ; P9-NEXT: isel r3, r4, r3, un
1288 ; NOVSX-LABEL: test_f64_ord_s:
1290 ; NOVSX-NEXT: fcmpo cr0, f1, f2
1291 ; NOVSX-NEXT: isel r3, r4, r3, un
1293 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(
1294 double %f1, double %f2, metadata !"ord",
1295 metadata !"fpexcept.strict") #0
1296 %res = select i1 %cond, i32 %a, i32 %b
1300 define i32 @test_f64_ueq_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1301 ; P8-LABEL: test_f64_ueq_s:
1303 ; P8-NEXT: fcmpo cr0, f1, f2
1304 ; P8-NEXT: cror 4*cr5+lt, eq, un
1305 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
1308 ; P9-LABEL: test_f64_ueq_s:
1310 ; P9-NEXT: fcmpo cr0, f1, f2
1311 ; P9-NEXT: cror 4*cr5+lt, eq, un
1312 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
1315 ; NOVSX-LABEL: test_f64_ueq_s:
1317 ; NOVSX-NEXT: fcmpo cr0, f1, f2
1318 ; NOVSX-NEXT: cror 4*cr5+lt, eq, un
1319 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
1321 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(
1322 double %f1, double %f2, metadata !"ueq",
1323 metadata !"fpexcept.strict") #0
1324 %res = select i1 %cond, i32 %a, i32 %b
1328 define i32 @test_f64_ugt_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1329 ; P8-LABEL: test_f64_ugt_s:
1331 ; P8-NEXT: fcmpo cr0, f1, f2
1332 ; P8-NEXT: cror 4*cr5+lt, gt, un
1333 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
1336 ; P9-LABEL: test_f64_ugt_s:
1338 ; P9-NEXT: fcmpo cr0, f1, f2
1339 ; P9-NEXT: cror 4*cr5+lt, gt, un
1340 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
1343 ; NOVSX-LABEL: test_f64_ugt_s:
1345 ; NOVSX-NEXT: fcmpo cr0, f1, f2
1346 ; NOVSX-NEXT: cror 4*cr5+lt, gt, un
1347 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
1349 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(
1350 double %f1, double %f2, metadata !"ugt",
1351 metadata !"fpexcept.strict") #0
1352 %res = select i1 %cond, i32 %a, i32 %b
1356 define i32 @test_f64_uge_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1357 ; P8-LABEL: test_f64_uge_s:
1359 ; P8-NEXT: fcmpo cr0, f1, f2
1360 ; P8-NEXT: isellt r3, r4, r3
1363 ; P9-LABEL: test_f64_uge_s:
1365 ; P9-NEXT: fcmpo cr0, f1, f2
1366 ; P9-NEXT: isellt r3, r4, r3
1369 ; NOVSX-LABEL: test_f64_uge_s:
1371 ; NOVSX-NEXT: fcmpo cr0, f1, f2
1372 ; NOVSX-NEXT: isellt r3, r4, r3
1374 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(
1375 double %f1, double %f2, metadata !"uge",
1376 metadata !"fpexcept.strict") #0
1377 %res = select i1 %cond, i32 %a, i32 %b
1381 define i32 @test_f64_ult_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1382 ; P8-LABEL: test_f64_ult_s:
1384 ; P8-NEXT: fcmpo cr0, f1, f2
1385 ; P8-NEXT: cror 4*cr5+lt, lt, un
1386 ; P8-NEXT: isel r3, r3, r4, 4*cr5+lt
1389 ; P9-LABEL: test_f64_ult_s:
1391 ; P9-NEXT: fcmpo cr0, f1, f2
1392 ; P9-NEXT: cror 4*cr5+lt, lt, un
1393 ; P9-NEXT: isel r3, r3, r4, 4*cr5+lt
1396 ; NOVSX-LABEL: test_f64_ult_s:
1398 ; NOVSX-NEXT: fcmpo cr0, f1, f2
1399 ; NOVSX-NEXT: cror 4*cr5+lt, lt, un
1400 ; NOVSX-NEXT: isel r3, r3, r4, 4*cr5+lt
1402 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(
1403 double %f1, double %f2, metadata !"ult",
1404 metadata !"fpexcept.strict") #0
1405 %res = select i1 %cond, i32 %a, i32 %b
1409 define i32 @test_f64_ule_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1410 ; P8-LABEL: test_f64_ule_s:
1412 ; P8-NEXT: fcmpo cr0, f1, f2
1413 ; P8-NEXT: iselgt r3, r4, r3
1416 ; P9-LABEL: test_f64_ule_s:
1418 ; P9-NEXT: fcmpo cr0, f1, f2
1419 ; P9-NEXT: iselgt r3, r4, r3
1422 ; NOVSX-LABEL: test_f64_ule_s:
1424 ; NOVSX-NEXT: fcmpo cr0, f1, f2
1425 ; NOVSX-NEXT: iselgt r3, r4, r3
1427 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(
1428 double %f1, double %f2, metadata !"ule",
1429 metadata !"fpexcept.strict") #0
1430 %res = select i1 %cond, i32 %a, i32 %b
1434 define i32 @test_f64_une_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1435 ; P8-LABEL: test_f64_une_s:
1437 ; P8-NEXT: fcmpo cr0, f1, f2
1438 ; P8-NEXT: iseleq r3, r4, r3
1441 ; P9-LABEL: test_f64_une_s:
1443 ; P9-NEXT: fcmpo cr0, f1, f2
1444 ; P9-NEXT: iseleq r3, r4, r3
1447 ; NOVSX-LABEL: test_f64_une_s:
1449 ; NOVSX-NEXT: fcmpo cr0, f1, f2
1450 ; NOVSX-NEXT: iseleq r3, r4, r3
1452 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(
1453 double %f1, double %f2, metadata !"une",
1454 metadata !"fpexcept.strict") #0
1455 %res = select i1 %cond, i32 %a, i32 %b
1459 define i32 @test_f64_uno_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1460 ; P8-LABEL: test_f64_uno_s:
1462 ; P8-NEXT: fcmpo cr0, f1, f2
1463 ; P8-NEXT: isel r3, r3, r4, un
1466 ; P9-LABEL: test_f64_uno_s:
1468 ; P9-NEXT: fcmpo cr0, f1, f2
1469 ; P9-NEXT: isel r3, r3, r4, un
1472 ; NOVSX-LABEL: test_f64_uno_s:
1474 ; NOVSX-NEXT: fcmpo cr0, f1, f2
1475 ; NOVSX-NEXT: isel r3, r3, r4, un
1477 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(
1478 double %f1, double %f2, metadata !"uno",
1479 metadata !"fpexcept.strict") #0
1480 %res = select i1 %cond, i32 %a, i32 %b
1484 define i32 @fcmp_olt_f128(fp128 %a, fp128 %b) #0 {
1485 ; P8-LABEL: fcmp_olt_f128:
1488 ; P8-NEXT: std r0, 16(r1)
1489 ; P8-NEXT: stdu r1, -112(r1)
1490 ; P8-NEXT: bl __ltkf2
1492 ; P8-NEXT: rlwinm r3, r3, 1, 31, 31
1493 ; P8-NEXT: addi r1, r1, 112
1494 ; P8-NEXT: ld r0, 16(r1)
1498 ; P9-LABEL: fcmp_olt_f128:
1500 ; P9-NEXT: xscmpuqp cr0, v2, v3
1503 ; P9-NEXT: isellt r3, r4, r3
1506 ; NOVSX-LABEL: fcmp_olt_f128:
1508 ; NOVSX-NEXT: mflr r0
1509 ; NOVSX-NEXT: std r0, 16(r1)
1510 ; NOVSX-NEXT: stdu r1, -32(r1)
1511 ; NOVSX-NEXT: bl __ltkf2
1513 ; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 31
1514 ; NOVSX-NEXT: addi r1, r1, 32
1515 ; NOVSX-NEXT: ld r0, 16(r1)
1516 ; NOVSX-NEXT: mtlr r0
1518 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #0
1519 %conv = zext i1 %cmp to i32
1523 define i32 @fcmp_ole_f128(fp128 %a, fp128 %b) #0 {
1524 ; P8-LABEL: fcmp_ole_f128:
1527 ; P8-NEXT: std r0, 16(r1)
1528 ; P8-NEXT: stdu r1, -112(r1)
1529 ; P8-NEXT: bl __lekf2
1531 ; P8-NEXT: extsw r3, r3
1532 ; P8-NEXT: neg r3, r3
1533 ; P8-NEXT: rldicl r3, r3, 1, 63
1534 ; P8-NEXT: xori r3, r3, 1
1535 ; P8-NEXT: addi r1, r1, 112
1536 ; P8-NEXT: ld r0, 16(r1)
1540 ; P9-LABEL: fcmp_ole_f128:
1542 ; P9-NEXT: xscmpuqp cr0, v2, v3
1543 ; P9-NEXT: xscmpuqp cr1, v2, v3
1545 ; P9-NEXT: crnor 4*cr5+lt, un, 4*cr1+un
1546 ; P9-NEXT: crnor 4*cr5+gt, gt, 4*cr1+gt
1547 ; P9-NEXT: crnand 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
1548 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
1551 ; NOVSX-LABEL: fcmp_ole_f128:
1553 ; NOVSX-NEXT: mflr r0
1554 ; NOVSX-NEXT: std r0, 16(r1)
1555 ; NOVSX-NEXT: stdu r1, -32(r1)
1556 ; NOVSX-NEXT: bl __lekf2
1558 ; NOVSX-NEXT: extsw r3, r3
1559 ; NOVSX-NEXT: neg r3, r3
1560 ; NOVSX-NEXT: rldicl r3, r3, 1, 63
1561 ; NOVSX-NEXT: xori r3, r3, 1
1562 ; NOVSX-NEXT: addi r1, r1, 32
1563 ; NOVSX-NEXT: ld r0, 16(r1)
1564 ; NOVSX-NEXT: mtlr r0
1566 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #0
1567 %conv = zext i1 %cmp to i32
1571 define i32 @fcmp_ogt_f128(fp128 %a, fp128 %b) #0 {
1572 ; P8-LABEL: fcmp_ogt_f128:
1575 ; P8-NEXT: std r0, 16(r1)
1576 ; P8-NEXT: stdu r1, -112(r1)
1577 ; P8-NEXT: bl __gtkf2
1579 ; P8-NEXT: extsw r3, r3
1580 ; P8-NEXT: neg r3, r3
1581 ; P8-NEXT: rldicl r3, r3, 1, 63
1582 ; P8-NEXT: addi r1, r1, 112
1583 ; P8-NEXT: ld r0, 16(r1)
1587 ; P9-LABEL: fcmp_ogt_f128:
1589 ; P9-NEXT: xscmpuqp cr0, v2, v3
1592 ; P9-NEXT: iselgt r3, r4, r3
1595 ; NOVSX-LABEL: fcmp_ogt_f128:
1597 ; NOVSX-NEXT: mflr r0
1598 ; NOVSX-NEXT: std r0, 16(r1)
1599 ; NOVSX-NEXT: stdu r1, -32(r1)
1600 ; NOVSX-NEXT: bl __gtkf2
1602 ; NOVSX-NEXT: extsw r3, r3
1603 ; NOVSX-NEXT: neg r3, r3
1604 ; NOVSX-NEXT: rldicl r3, r3, 1, 63
1605 ; NOVSX-NEXT: addi r1, r1, 32
1606 ; NOVSX-NEXT: ld r0, 16(r1)
1607 ; NOVSX-NEXT: mtlr r0
1609 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #0
1610 %conv = zext i1 %cmp to i32
1614 define i32 @fcmp_oge_f128(fp128 %a, fp128 %b) #0 {
1615 ; P8-LABEL: fcmp_oge_f128:
1618 ; P8-NEXT: std r0, 16(r1)
1619 ; P8-NEXT: stdu r1, -112(r1)
1620 ; P8-NEXT: bl __gekf2
1622 ; P8-NEXT: rlwinm r3, r3, 1, 31, 31
1623 ; P8-NEXT: xori r3, r3, 1
1624 ; P8-NEXT: addi r1, r1, 112
1625 ; P8-NEXT: ld r0, 16(r1)
1629 ; P9-LABEL: fcmp_oge_f128:
1631 ; P9-NEXT: xscmpuqp cr0, v2, v3
1632 ; P9-NEXT: xscmpuqp cr1, v2, v3
1634 ; P9-NEXT: crnor 4*cr5+lt, un, 4*cr1+un
1635 ; P9-NEXT: crnor 4*cr5+gt, lt, 4*cr1+lt
1636 ; P9-NEXT: crnand 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
1637 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
1640 ; NOVSX-LABEL: fcmp_oge_f128:
1642 ; NOVSX-NEXT: mflr r0
1643 ; NOVSX-NEXT: std r0, 16(r1)
1644 ; NOVSX-NEXT: stdu r1, -32(r1)
1645 ; NOVSX-NEXT: bl __gekf2
1647 ; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 31
1648 ; NOVSX-NEXT: xori r3, r3, 1
1649 ; NOVSX-NEXT: addi r1, r1, 32
1650 ; NOVSX-NEXT: ld r0, 16(r1)
1651 ; NOVSX-NEXT: mtlr r0
1653 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #0
1654 %conv = zext i1 %cmp to i32
1658 define i32 @fcmp_oeq_f128(fp128 %a, fp128 %b) #0 {
1659 ; P8-LABEL: fcmp_oeq_f128:
1662 ; P8-NEXT: std r0, 16(r1)
1663 ; P8-NEXT: stdu r1, -112(r1)
1664 ; P8-NEXT: bl __eqkf2
1666 ; P8-NEXT: cntlzw r3, r3
1667 ; P8-NEXT: srwi r3, r3, 5
1668 ; P8-NEXT: addi r1, r1, 112
1669 ; P8-NEXT: ld r0, 16(r1)
1673 ; P9-LABEL: fcmp_oeq_f128:
1675 ; P9-NEXT: xscmpuqp cr0, v2, v3
1678 ; P9-NEXT: iseleq r3, r4, r3
1681 ; NOVSX-LABEL: fcmp_oeq_f128:
1683 ; NOVSX-NEXT: mflr r0
1684 ; NOVSX-NEXT: std r0, 16(r1)
1685 ; NOVSX-NEXT: stdu r1, -32(r1)
1686 ; NOVSX-NEXT: bl __eqkf2
1688 ; NOVSX-NEXT: cntlzw r3, r3
1689 ; NOVSX-NEXT: srwi r3, r3, 5
1690 ; NOVSX-NEXT: addi r1, r1, 32
1691 ; NOVSX-NEXT: ld r0, 16(r1)
1692 ; NOVSX-NEXT: mtlr r0
1694 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #0
1695 %conv = zext i1 %cmp to i32
1699 define i32 @fcmp_one_f128(fp128 %a, fp128 %b) #0 {
1700 ; P8-LABEL: fcmp_one_f128:
1703 ; P8-NEXT: std r0, 16(r1)
1704 ; P8-NEXT: stdu r1, -176(r1)
1705 ; P8-NEXT: li r3, 128
1706 ; P8-NEXT: std r30, 160(r1) # 8-byte Folded Spill
1707 ; P8-NEXT: stxvd2x v30, r1, r3 # 16-byte Folded Spill
1708 ; P8-NEXT: li r3, 144
1709 ; P8-NEXT: vmr v30, v2
1710 ; P8-NEXT: stxvd2x v31, r1, r3 # 16-byte Folded Spill
1711 ; P8-NEXT: vmr v31, v3
1712 ; P8-NEXT: bl __unordkf2
1714 ; P8-NEXT: vmr v2, v30
1715 ; P8-NEXT: cntlzw r3, r3
1716 ; P8-NEXT: vmr v3, v31
1717 ; P8-NEXT: srwi r30, r3, 5
1718 ; P8-NEXT: bl __eqkf2
1720 ; P8-NEXT: cntlzw r3, r3
1721 ; P8-NEXT: li r4, 144
1722 ; P8-NEXT: srwi r3, r3, 5
1723 ; P8-NEXT: lxvd2x v31, r1, r4 # 16-byte Folded Reload
1724 ; P8-NEXT: li r4, 128
1725 ; P8-NEXT: xori r3, r3, 1
1726 ; P8-NEXT: lxvd2x v30, r1, r4 # 16-byte Folded Reload
1727 ; P8-NEXT: and r3, r30, r3
1728 ; P8-NEXT: ld r30, 160(r1) # 8-byte Folded Reload
1729 ; P8-NEXT: addi r1, r1, 176
1730 ; P8-NEXT: ld r0, 16(r1)
1734 ; P9-LABEL: fcmp_one_f128:
1736 ; P9-NEXT: xscmpuqp cr0, v2, v3
1737 ; P9-NEXT: xscmpuqp cr1, v2, v3
1739 ; P9-NEXT: crnor 4*cr5+lt, un, 4*cr1+un
1740 ; P9-NEXT: crnor 4*cr5+gt, eq, 4*cr1+eq
1741 ; P9-NEXT: crnand 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
1742 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
1745 ; NOVSX-LABEL: fcmp_one_f128:
1747 ; NOVSX-NEXT: mflr r0
1748 ; NOVSX-NEXT: std r26, -48(r1) # 8-byte Folded Spill
1749 ; NOVSX-NEXT: std r27, -40(r1) # 8-byte Folded Spill
1750 ; NOVSX-NEXT: std r28, -32(r1) # 8-byte Folded Spill
1751 ; NOVSX-NEXT: std r29, -24(r1) # 8-byte Folded Spill
1752 ; NOVSX-NEXT: std r30, -16(r1) # 8-byte Folded Spill
1753 ; NOVSX-NEXT: std r0, 16(r1)
1754 ; NOVSX-NEXT: stdu r1, -80(r1)
1755 ; NOVSX-NEXT: mr r30, r6
1756 ; NOVSX-NEXT: mr r29, r5
1757 ; NOVSX-NEXT: mr r28, r4
1758 ; NOVSX-NEXT: mr r27, r3
1759 ; NOVSX-NEXT: bl __unordkf2
1761 ; NOVSX-NEXT: cntlzw r3, r3
1762 ; NOVSX-NEXT: mr r4, r28
1763 ; NOVSX-NEXT: mr r5, r29
1764 ; NOVSX-NEXT: mr r6, r30
1765 ; NOVSX-NEXT: srwi r26, r3, 5
1766 ; NOVSX-NEXT: mr r3, r27
1767 ; NOVSX-NEXT: bl __eqkf2
1769 ; NOVSX-NEXT: cntlzw r3, r3
1770 ; NOVSX-NEXT: srwi r3, r3, 5
1771 ; NOVSX-NEXT: xori r3, r3, 1
1772 ; NOVSX-NEXT: and r3, r26, r3
1773 ; NOVSX-NEXT: addi r1, r1, 80
1774 ; NOVSX-NEXT: ld r0, 16(r1)
1775 ; NOVSX-NEXT: ld r30, -16(r1) # 8-byte Folded Reload
1776 ; NOVSX-NEXT: ld r29, -24(r1) # 8-byte Folded Reload
1777 ; NOVSX-NEXT: ld r28, -32(r1) # 8-byte Folded Reload
1778 ; NOVSX-NEXT: ld r27, -40(r1) # 8-byte Folded Reload
1779 ; NOVSX-NEXT: ld r26, -48(r1) # 8-byte Folded Reload
1780 ; NOVSX-NEXT: mtlr r0
1782 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"one", metadata !"fpexcept.strict") #0
1783 %conv = zext i1 %cmp to i32
1787 define i32 @fcmp_ult_f128(fp128 %a, fp128 %b) #0 {
1788 ; P8-LABEL: fcmp_ult_f128:
1791 ; P8-NEXT: std r0, 16(r1)
1792 ; P8-NEXT: stdu r1, -112(r1)
1793 ; P8-NEXT: bl __gekf2
1795 ; P8-NEXT: rlwinm r3, r3, 1, 31, 31
1796 ; P8-NEXT: addi r1, r1, 112
1797 ; P8-NEXT: ld r0, 16(r1)
1801 ; P9-LABEL: fcmp_ult_f128:
1803 ; P9-NEXT: xscmpuqp cr0, v2, v3
1805 ; P9-NEXT: crnor 4*cr5+lt, lt, un
1806 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
1809 ; NOVSX-LABEL: fcmp_ult_f128:
1811 ; NOVSX-NEXT: mflr r0
1812 ; NOVSX-NEXT: std r0, 16(r1)
1813 ; NOVSX-NEXT: stdu r1, -32(r1)
1814 ; NOVSX-NEXT: bl __gekf2
1816 ; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 31
1817 ; NOVSX-NEXT: addi r1, r1, 32
1818 ; NOVSX-NEXT: ld r0, 16(r1)
1819 ; NOVSX-NEXT: mtlr r0
1821 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #0
1822 %conv = zext i1 %cmp to i32
1826 define i32 @fcmp_ule_f128(fp128 %a, fp128 %b) #0 {
1827 ; P8-LABEL: fcmp_ule_f128:
1830 ; P8-NEXT: std r0, 16(r1)
1831 ; P8-NEXT: stdu r1, -112(r1)
1832 ; P8-NEXT: bl __gtkf2
1834 ; P8-NEXT: extsw r3, r3
1835 ; P8-NEXT: neg r3, r3
1836 ; P8-NEXT: rldicl r3, r3, 1, 63
1837 ; P8-NEXT: xori r3, r3, 1
1838 ; P8-NEXT: addi r1, r1, 112
1839 ; P8-NEXT: ld r0, 16(r1)
1843 ; P9-LABEL: fcmp_ule_f128:
1845 ; P9-NEXT: xscmpuqp cr0, v2, v3
1847 ; P9-NEXT: iselgt r3, 0, r3
1850 ; NOVSX-LABEL: fcmp_ule_f128:
1852 ; NOVSX-NEXT: mflr r0
1853 ; NOVSX-NEXT: std r0, 16(r1)
1854 ; NOVSX-NEXT: stdu r1, -32(r1)
1855 ; NOVSX-NEXT: bl __gtkf2
1857 ; NOVSX-NEXT: extsw r3, r3
1858 ; NOVSX-NEXT: neg r3, r3
1859 ; NOVSX-NEXT: rldicl r3, r3, 1, 63
1860 ; NOVSX-NEXT: xori r3, r3, 1
1861 ; NOVSX-NEXT: addi r1, r1, 32
1862 ; NOVSX-NEXT: ld r0, 16(r1)
1863 ; NOVSX-NEXT: mtlr r0
1865 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #0
1866 %conv = zext i1 %cmp to i32
1870 define i32 @fcmp_ugt_f128(fp128 %a, fp128 %b) #0 {
1871 ; P8-LABEL: fcmp_ugt_f128:
1874 ; P8-NEXT: std r0, 16(r1)
1875 ; P8-NEXT: stdu r1, -112(r1)
1876 ; P8-NEXT: bl __lekf2
1878 ; P8-NEXT: extsw r3, r3
1879 ; P8-NEXT: neg r3, r3
1880 ; P8-NEXT: rldicl r3, r3, 1, 63
1881 ; P8-NEXT: addi r1, r1, 112
1882 ; P8-NEXT: ld r0, 16(r1)
1886 ; P9-LABEL: fcmp_ugt_f128:
1888 ; P9-NEXT: xscmpuqp cr0, v2, v3
1890 ; P9-NEXT: crnor 4*cr5+lt, gt, un
1891 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
1894 ; NOVSX-LABEL: fcmp_ugt_f128:
1896 ; NOVSX-NEXT: mflr r0
1897 ; NOVSX-NEXT: std r0, 16(r1)
1898 ; NOVSX-NEXT: stdu r1, -32(r1)
1899 ; NOVSX-NEXT: bl __lekf2
1901 ; NOVSX-NEXT: extsw r3, r3
1902 ; NOVSX-NEXT: neg r3, r3
1903 ; NOVSX-NEXT: rldicl r3, r3, 1, 63
1904 ; NOVSX-NEXT: addi r1, r1, 32
1905 ; NOVSX-NEXT: ld r0, 16(r1)
1906 ; NOVSX-NEXT: mtlr r0
1908 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #0
1909 %conv = zext i1 %cmp to i32
1913 define i32 @fcmp_uge_f128(fp128 %a, fp128 %b) #0 {
1914 ; P8-LABEL: fcmp_uge_f128:
1917 ; P8-NEXT: std r0, 16(r1)
1918 ; P8-NEXT: stdu r1, -112(r1)
1919 ; P8-NEXT: bl __ltkf2
1921 ; P8-NEXT: rlwinm r3, r3, 1, 31, 31
1922 ; P8-NEXT: xori r3, r3, 1
1923 ; P8-NEXT: addi r1, r1, 112
1924 ; P8-NEXT: ld r0, 16(r1)
1928 ; P9-LABEL: fcmp_uge_f128:
1930 ; P9-NEXT: xscmpuqp cr0, v2, v3
1932 ; P9-NEXT: isellt r3, 0, r3
1935 ; NOVSX-LABEL: fcmp_uge_f128:
1937 ; NOVSX-NEXT: mflr r0
1938 ; NOVSX-NEXT: std r0, 16(r1)
1939 ; NOVSX-NEXT: stdu r1, -32(r1)
1940 ; NOVSX-NEXT: bl __ltkf2
1942 ; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 31
1943 ; NOVSX-NEXT: xori r3, r3, 1
1944 ; NOVSX-NEXT: addi r1, r1, 32
1945 ; NOVSX-NEXT: ld r0, 16(r1)
1946 ; NOVSX-NEXT: mtlr r0
1948 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #0
1949 %conv = zext i1 %cmp to i32
1953 define i32 @fcmp_ueq_f128(fp128 %a, fp128 %b) #0 {
1954 ; P8-LABEL: fcmp_ueq_f128:
1957 ; P8-NEXT: std r0, 16(r1)
1958 ; P8-NEXT: stdu r1, -176(r1)
1959 ; P8-NEXT: li r3, 128
1960 ; P8-NEXT: std r30, 160(r1) # 8-byte Folded Spill
1961 ; P8-NEXT: stxvd2x v30, r1, r3 # 16-byte Folded Spill
1962 ; P8-NEXT: li r3, 144
1963 ; P8-NEXT: vmr v30, v2
1964 ; P8-NEXT: stxvd2x v31, r1, r3 # 16-byte Folded Spill
1965 ; P8-NEXT: vmr v31, v3
1966 ; P8-NEXT: bl __eqkf2
1968 ; P8-NEXT: vmr v2, v30
1969 ; P8-NEXT: cntlzw r3, r3
1970 ; P8-NEXT: vmr v3, v31
1971 ; P8-NEXT: srwi r30, r3, 5
1972 ; P8-NEXT: bl __unordkf2
1974 ; P8-NEXT: cntlzw r3, r3
1975 ; P8-NEXT: li r4, 144
1976 ; P8-NEXT: srwi r3, r3, 5
1977 ; P8-NEXT: lxvd2x v31, r1, r4 # 16-byte Folded Reload
1978 ; P8-NEXT: li r4, 128
1979 ; P8-NEXT: xori r3, r3, 1
1980 ; P8-NEXT: lxvd2x v30, r1, r4 # 16-byte Folded Reload
1981 ; P8-NEXT: or r3, r3, r30
1982 ; P8-NEXT: ld r30, 160(r1) # 8-byte Folded Reload
1983 ; P8-NEXT: addi r1, r1, 176
1984 ; P8-NEXT: ld r0, 16(r1)
1988 ; P9-LABEL: fcmp_ueq_f128:
1990 ; P9-NEXT: xscmpuqp cr0, v2, v3
1992 ; P9-NEXT: crnor 4*cr5+lt, eq, un
1993 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
1996 ; NOVSX-LABEL: fcmp_ueq_f128:
1998 ; NOVSX-NEXT: mflr r0
1999 ; NOVSX-NEXT: std r26, -48(r1) # 8-byte Folded Spill
2000 ; NOVSX-NEXT: std r27, -40(r1) # 8-byte Folded Spill
2001 ; NOVSX-NEXT: std r28, -32(r1) # 8-byte Folded Spill
2002 ; NOVSX-NEXT: std r29, -24(r1) # 8-byte Folded Spill
2003 ; NOVSX-NEXT: std r30, -16(r1) # 8-byte Folded Spill
2004 ; NOVSX-NEXT: std r0, 16(r1)
2005 ; NOVSX-NEXT: stdu r1, -80(r1)
2006 ; NOVSX-NEXT: mr r30, r6
2007 ; NOVSX-NEXT: mr r29, r5
2008 ; NOVSX-NEXT: mr r28, r4
2009 ; NOVSX-NEXT: mr r27, r3
2010 ; NOVSX-NEXT: bl __eqkf2
2012 ; NOVSX-NEXT: cntlzw r3, r3
2013 ; NOVSX-NEXT: mr r4, r28
2014 ; NOVSX-NEXT: mr r5, r29
2015 ; NOVSX-NEXT: mr r6, r30
2016 ; NOVSX-NEXT: srwi r26, r3, 5
2017 ; NOVSX-NEXT: mr r3, r27
2018 ; NOVSX-NEXT: bl __unordkf2
2020 ; NOVSX-NEXT: cntlzw r3, r3
2021 ; NOVSX-NEXT: srwi r3, r3, 5
2022 ; NOVSX-NEXT: xori r3, r3, 1
2023 ; NOVSX-NEXT: or r3, r3, r26
2024 ; NOVSX-NEXT: addi r1, r1, 80
2025 ; NOVSX-NEXT: ld r0, 16(r1)
2026 ; NOVSX-NEXT: ld r30, -16(r1) # 8-byte Folded Reload
2027 ; NOVSX-NEXT: ld r29, -24(r1) # 8-byte Folded Reload
2028 ; NOVSX-NEXT: ld r28, -32(r1) # 8-byte Folded Reload
2029 ; NOVSX-NEXT: ld r27, -40(r1) # 8-byte Folded Reload
2030 ; NOVSX-NEXT: ld r26, -48(r1) # 8-byte Folded Reload
2031 ; NOVSX-NEXT: mtlr r0
2033 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #0
2034 %conv = zext i1 %cmp to i32
2038 define i32 @fcmp_une_f128(fp128 %a, fp128 %b) #0 {
2039 ; P8-LABEL: fcmp_une_f128:
2042 ; P8-NEXT: std r0, 16(r1)
2043 ; P8-NEXT: stdu r1, -112(r1)
2044 ; P8-NEXT: bl __nekf2
2046 ; P8-NEXT: cntlzw r3, r3
2047 ; P8-NEXT: srwi r3, r3, 5
2048 ; P8-NEXT: xori r3, r3, 1
2049 ; P8-NEXT: addi r1, r1, 112
2050 ; P8-NEXT: ld r0, 16(r1)
2054 ; P9-LABEL: fcmp_une_f128:
2056 ; P9-NEXT: xscmpuqp cr0, v2, v3
2058 ; P9-NEXT: iseleq r3, 0, r3
2061 ; NOVSX-LABEL: fcmp_une_f128:
2063 ; NOVSX-NEXT: mflr r0
2064 ; NOVSX-NEXT: std r0, 16(r1)
2065 ; NOVSX-NEXT: stdu r1, -32(r1)
2066 ; NOVSX-NEXT: bl __nekf2
2068 ; NOVSX-NEXT: cntlzw r3, r3
2069 ; NOVSX-NEXT: srwi r3, r3, 5
2070 ; NOVSX-NEXT: xori r3, r3, 1
2071 ; NOVSX-NEXT: addi r1, r1, 32
2072 ; NOVSX-NEXT: ld r0, 16(r1)
2073 ; NOVSX-NEXT: mtlr r0
2075 %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"une", metadata !"fpexcept.strict") #0
2076 %conv = zext i1 %cmp to i32
2080 define i32 @fcmps_olt_f128(fp128 %a, fp128 %b) #0 {
2081 ; P8-LABEL: fcmps_olt_f128:
2084 ; P8-NEXT: std r0, 16(r1)
2085 ; P8-NEXT: stdu r1, -112(r1)
2086 ; P8-NEXT: bl __ltkf2
2088 ; P8-NEXT: rlwinm r3, r3, 1, 31, 31
2089 ; P8-NEXT: addi r1, r1, 112
2090 ; P8-NEXT: ld r0, 16(r1)
2094 ; P9-LABEL: fcmps_olt_f128:
2096 ; P9-NEXT: xscmpoqp cr0, v2, v3
2099 ; P9-NEXT: isellt r3, r4, r3
2102 ; NOVSX-LABEL: fcmps_olt_f128:
2104 ; NOVSX-NEXT: mflr r0
2105 ; NOVSX-NEXT: std r0, 16(r1)
2106 ; NOVSX-NEXT: stdu r1, -32(r1)
2107 ; NOVSX-NEXT: bl __ltkf2
2109 ; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 31
2110 ; NOVSX-NEXT: addi r1, r1, 32
2111 ; NOVSX-NEXT: ld r0, 16(r1)
2112 ; NOVSX-NEXT: mtlr r0
2114 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #0
2115 %conv = zext i1 %cmp to i32
2119 define i32 @fcmps_ole_f128(fp128 %a, fp128 %b) #0 {
2120 ; P8-LABEL: fcmps_ole_f128:
2123 ; P8-NEXT: std r0, 16(r1)
2124 ; P8-NEXT: stdu r1, -112(r1)
2125 ; P8-NEXT: bl __lekf2
2127 ; P8-NEXT: extsw r3, r3
2128 ; P8-NEXT: neg r3, r3
2129 ; P8-NEXT: rldicl r3, r3, 1, 63
2130 ; P8-NEXT: xori r3, r3, 1
2131 ; P8-NEXT: addi r1, r1, 112
2132 ; P8-NEXT: ld r0, 16(r1)
2136 ; P9-LABEL: fcmps_ole_f128:
2138 ; P9-NEXT: xscmpoqp cr0, v2, v3
2139 ; P9-NEXT: xscmpoqp cr1, v2, v3
2141 ; P9-NEXT: crnor 4*cr5+lt, un, 4*cr1+un
2142 ; P9-NEXT: crnor 4*cr5+gt, gt, 4*cr1+gt
2143 ; P9-NEXT: crnand 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2144 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
2147 ; NOVSX-LABEL: fcmps_ole_f128:
2149 ; NOVSX-NEXT: mflr r0
2150 ; NOVSX-NEXT: std r0, 16(r1)
2151 ; NOVSX-NEXT: stdu r1, -32(r1)
2152 ; NOVSX-NEXT: bl __lekf2
2154 ; NOVSX-NEXT: extsw r3, r3
2155 ; NOVSX-NEXT: neg r3, r3
2156 ; NOVSX-NEXT: rldicl r3, r3, 1, 63
2157 ; NOVSX-NEXT: xori r3, r3, 1
2158 ; NOVSX-NEXT: addi r1, r1, 32
2159 ; NOVSX-NEXT: ld r0, 16(r1)
2160 ; NOVSX-NEXT: mtlr r0
2162 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #0
2163 %conv = zext i1 %cmp to i32
2167 define i32 @fcmps_ogt_f128(fp128 %a, fp128 %b) #0 {
2168 ; P8-LABEL: fcmps_ogt_f128:
2171 ; P8-NEXT: std r0, 16(r1)
2172 ; P8-NEXT: stdu r1, -112(r1)
2173 ; P8-NEXT: bl __gtkf2
2175 ; P8-NEXT: extsw r3, r3
2176 ; P8-NEXT: neg r3, r3
2177 ; P8-NEXT: rldicl r3, r3, 1, 63
2178 ; P8-NEXT: addi r1, r1, 112
2179 ; P8-NEXT: ld r0, 16(r1)
2183 ; P9-LABEL: fcmps_ogt_f128:
2185 ; P9-NEXT: xscmpoqp cr0, v2, v3
2188 ; P9-NEXT: iselgt r3, r4, r3
2191 ; NOVSX-LABEL: fcmps_ogt_f128:
2193 ; NOVSX-NEXT: mflr r0
2194 ; NOVSX-NEXT: std r0, 16(r1)
2195 ; NOVSX-NEXT: stdu r1, -32(r1)
2196 ; NOVSX-NEXT: bl __gtkf2
2198 ; NOVSX-NEXT: extsw r3, r3
2199 ; NOVSX-NEXT: neg r3, r3
2200 ; NOVSX-NEXT: rldicl r3, r3, 1, 63
2201 ; NOVSX-NEXT: addi r1, r1, 32
2202 ; NOVSX-NEXT: ld r0, 16(r1)
2203 ; NOVSX-NEXT: mtlr r0
2205 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #0
2206 %conv = zext i1 %cmp to i32
2210 define i32 @fcmps_oge_f128(fp128 %a, fp128 %b) #0 {
2211 ; P8-LABEL: fcmps_oge_f128:
2214 ; P8-NEXT: std r0, 16(r1)
2215 ; P8-NEXT: stdu r1, -112(r1)
2216 ; P8-NEXT: bl __gekf2
2218 ; P8-NEXT: rlwinm r3, r3, 1, 31, 31
2219 ; P8-NEXT: xori r3, r3, 1
2220 ; P8-NEXT: addi r1, r1, 112
2221 ; P8-NEXT: ld r0, 16(r1)
2225 ; P9-LABEL: fcmps_oge_f128:
2227 ; P9-NEXT: xscmpoqp cr0, v2, v3
2228 ; P9-NEXT: xscmpoqp cr1, v2, v3
2230 ; P9-NEXT: crnor 4*cr5+lt, un, 4*cr1+un
2231 ; P9-NEXT: crnor 4*cr5+gt, lt, 4*cr1+lt
2232 ; P9-NEXT: crnand 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2233 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
2236 ; NOVSX-LABEL: fcmps_oge_f128:
2238 ; NOVSX-NEXT: mflr r0
2239 ; NOVSX-NEXT: std r0, 16(r1)
2240 ; NOVSX-NEXT: stdu r1, -32(r1)
2241 ; NOVSX-NEXT: bl __gekf2
2243 ; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 31
2244 ; NOVSX-NEXT: xori r3, r3, 1
2245 ; NOVSX-NEXT: addi r1, r1, 32
2246 ; NOVSX-NEXT: ld r0, 16(r1)
2247 ; NOVSX-NEXT: mtlr r0
2249 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #0
2250 %conv = zext i1 %cmp to i32
2254 define i32 @fcmps_oeq_f128(fp128 %a, fp128 %b) #0 {
2255 ; P8-LABEL: fcmps_oeq_f128:
2258 ; P8-NEXT: std r0, 16(r1)
2259 ; P8-NEXT: stdu r1, -112(r1)
2260 ; P8-NEXT: bl __eqkf2
2262 ; P8-NEXT: cntlzw r3, r3
2263 ; P8-NEXT: srwi r3, r3, 5
2264 ; P8-NEXT: addi r1, r1, 112
2265 ; P8-NEXT: ld r0, 16(r1)
2269 ; P9-LABEL: fcmps_oeq_f128:
2271 ; P9-NEXT: xscmpoqp cr0, v2, v3
2274 ; P9-NEXT: iseleq r3, r4, r3
2277 ; NOVSX-LABEL: fcmps_oeq_f128:
2279 ; NOVSX-NEXT: mflr r0
2280 ; NOVSX-NEXT: std r0, 16(r1)
2281 ; NOVSX-NEXT: stdu r1, -32(r1)
2282 ; NOVSX-NEXT: bl __eqkf2
2284 ; NOVSX-NEXT: cntlzw r3, r3
2285 ; NOVSX-NEXT: srwi r3, r3, 5
2286 ; NOVSX-NEXT: addi r1, r1, 32
2287 ; NOVSX-NEXT: ld r0, 16(r1)
2288 ; NOVSX-NEXT: mtlr r0
2290 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #0
2291 %conv = zext i1 %cmp to i32
2295 define i32 @fcmps_one_f128(fp128 %a, fp128 %b) #0 {
2296 ; P8-LABEL: fcmps_one_f128:
2299 ; P8-NEXT: std r0, 16(r1)
2300 ; P8-NEXT: stdu r1, -176(r1)
2301 ; P8-NEXT: li r3, 128
2302 ; P8-NEXT: std r30, 160(r1) # 8-byte Folded Spill
2303 ; P8-NEXT: stxvd2x v30, r1, r3 # 16-byte Folded Spill
2304 ; P8-NEXT: li r3, 144
2305 ; P8-NEXT: vmr v30, v2
2306 ; P8-NEXT: stxvd2x v31, r1, r3 # 16-byte Folded Spill
2307 ; P8-NEXT: vmr v31, v3
2308 ; P8-NEXT: bl __unordkf2
2310 ; P8-NEXT: vmr v2, v30
2311 ; P8-NEXT: cntlzw r3, r3
2312 ; P8-NEXT: vmr v3, v31
2313 ; P8-NEXT: srwi r30, r3, 5
2314 ; P8-NEXT: bl __eqkf2
2316 ; P8-NEXT: cntlzw r3, r3
2317 ; P8-NEXT: li r4, 144
2318 ; P8-NEXT: srwi r3, r3, 5
2319 ; P8-NEXT: lxvd2x v31, r1, r4 # 16-byte Folded Reload
2320 ; P8-NEXT: li r4, 128
2321 ; P8-NEXT: xori r3, r3, 1
2322 ; P8-NEXT: lxvd2x v30, r1, r4 # 16-byte Folded Reload
2323 ; P8-NEXT: and r3, r30, r3
2324 ; P8-NEXT: ld r30, 160(r1) # 8-byte Folded Reload
2325 ; P8-NEXT: addi r1, r1, 176
2326 ; P8-NEXT: ld r0, 16(r1)
2330 ; P9-LABEL: fcmps_one_f128:
2332 ; P9-NEXT: xscmpoqp cr0, v2, v3
2333 ; P9-NEXT: xscmpoqp cr1, v2, v3
2335 ; P9-NEXT: crnor 4*cr5+lt, un, 4*cr1+un
2336 ; P9-NEXT: crnor 4*cr5+gt, eq, 4*cr1+eq
2337 ; P9-NEXT: crnand 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2338 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
2341 ; NOVSX-LABEL: fcmps_one_f128:
2343 ; NOVSX-NEXT: mflr r0
2344 ; NOVSX-NEXT: std r26, -48(r1) # 8-byte Folded Spill
2345 ; NOVSX-NEXT: std r27, -40(r1) # 8-byte Folded Spill
2346 ; NOVSX-NEXT: std r28, -32(r1) # 8-byte Folded Spill
2347 ; NOVSX-NEXT: std r29, -24(r1) # 8-byte Folded Spill
2348 ; NOVSX-NEXT: std r30, -16(r1) # 8-byte Folded Spill
2349 ; NOVSX-NEXT: std r0, 16(r1)
2350 ; NOVSX-NEXT: stdu r1, -80(r1)
2351 ; NOVSX-NEXT: mr r30, r6
2352 ; NOVSX-NEXT: mr r29, r5
2353 ; NOVSX-NEXT: mr r28, r4
2354 ; NOVSX-NEXT: mr r27, r3
2355 ; NOVSX-NEXT: bl __unordkf2
2357 ; NOVSX-NEXT: cntlzw r3, r3
2358 ; NOVSX-NEXT: mr r4, r28
2359 ; NOVSX-NEXT: mr r5, r29
2360 ; NOVSX-NEXT: mr r6, r30
2361 ; NOVSX-NEXT: srwi r26, r3, 5
2362 ; NOVSX-NEXT: mr r3, r27
2363 ; NOVSX-NEXT: bl __eqkf2
2365 ; NOVSX-NEXT: cntlzw r3, r3
2366 ; NOVSX-NEXT: srwi r3, r3, 5
2367 ; NOVSX-NEXT: xori r3, r3, 1
2368 ; NOVSX-NEXT: and r3, r26, r3
2369 ; NOVSX-NEXT: addi r1, r1, 80
2370 ; NOVSX-NEXT: ld r0, 16(r1)
2371 ; NOVSX-NEXT: ld r30, -16(r1) # 8-byte Folded Reload
2372 ; NOVSX-NEXT: ld r29, -24(r1) # 8-byte Folded Reload
2373 ; NOVSX-NEXT: ld r28, -32(r1) # 8-byte Folded Reload
2374 ; NOVSX-NEXT: ld r27, -40(r1) # 8-byte Folded Reload
2375 ; NOVSX-NEXT: ld r26, -48(r1) # 8-byte Folded Reload
2376 ; NOVSX-NEXT: mtlr r0
2378 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"one", metadata !"fpexcept.strict") #0
2379 %conv = zext i1 %cmp to i32
2383 define i32 @fcmps_ult_f128(fp128 %a, fp128 %b) #0 {
2384 ; P8-LABEL: fcmps_ult_f128:
2387 ; P8-NEXT: std r0, 16(r1)
2388 ; P8-NEXT: stdu r1, -112(r1)
2389 ; P8-NEXT: bl __gekf2
2391 ; P8-NEXT: rlwinm r3, r3, 1, 31, 31
2392 ; P8-NEXT: addi r1, r1, 112
2393 ; P8-NEXT: ld r0, 16(r1)
2397 ; P9-LABEL: fcmps_ult_f128:
2399 ; P9-NEXT: xscmpoqp cr0, v2, v3
2401 ; P9-NEXT: crnor 4*cr5+lt, lt, un
2402 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
2405 ; NOVSX-LABEL: fcmps_ult_f128:
2407 ; NOVSX-NEXT: mflr r0
2408 ; NOVSX-NEXT: std r0, 16(r1)
2409 ; NOVSX-NEXT: stdu r1, -32(r1)
2410 ; NOVSX-NEXT: bl __gekf2
2412 ; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 31
2413 ; NOVSX-NEXT: addi r1, r1, 32
2414 ; NOVSX-NEXT: ld r0, 16(r1)
2415 ; NOVSX-NEXT: mtlr r0
2417 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #0
2418 %conv = zext i1 %cmp to i32
2422 define i32 @fcmps_ule_f128(fp128 %a, fp128 %b) #0 {
2423 ; P8-LABEL: fcmps_ule_f128:
2426 ; P8-NEXT: std r0, 16(r1)
2427 ; P8-NEXT: stdu r1, -112(r1)
2428 ; P8-NEXT: bl __gtkf2
2430 ; P8-NEXT: extsw r3, r3
2431 ; P8-NEXT: neg r3, r3
2432 ; P8-NEXT: rldicl r3, r3, 1, 63
2433 ; P8-NEXT: xori r3, r3, 1
2434 ; P8-NEXT: addi r1, r1, 112
2435 ; P8-NEXT: ld r0, 16(r1)
2439 ; P9-LABEL: fcmps_ule_f128:
2441 ; P9-NEXT: xscmpoqp cr0, v2, v3
2443 ; P9-NEXT: iselgt r3, 0, r3
2446 ; NOVSX-LABEL: fcmps_ule_f128:
2448 ; NOVSX-NEXT: mflr r0
2449 ; NOVSX-NEXT: std r0, 16(r1)
2450 ; NOVSX-NEXT: stdu r1, -32(r1)
2451 ; NOVSX-NEXT: bl __gtkf2
2453 ; NOVSX-NEXT: extsw r3, r3
2454 ; NOVSX-NEXT: neg r3, r3
2455 ; NOVSX-NEXT: rldicl r3, r3, 1, 63
2456 ; NOVSX-NEXT: xori r3, r3, 1
2457 ; NOVSX-NEXT: addi r1, r1, 32
2458 ; NOVSX-NEXT: ld r0, 16(r1)
2459 ; NOVSX-NEXT: mtlr r0
2461 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #0
2462 %conv = zext i1 %cmp to i32
2466 define i32 @fcmps_ugt_f128(fp128 %a, fp128 %b) #0 {
2467 ; P8-LABEL: fcmps_ugt_f128:
2470 ; P8-NEXT: std r0, 16(r1)
2471 ; P8-NEXT: stdu r1, -112(r1)
2472 ; P8-NEXT: bl __lekf2
2474 ; P8-NEXT: extsw r3, r3
2475 ; P8-NEXT: neg r3, r3
2476 ; P8-NEXT: rldicl r3, r3, 1, 63
2477 ; P8-NEXT: addi r1, r1, 112
2478 ; P8-NEXT: ld r0, 16(r1)
2482 ; P9-LABEL: fcmps_ugt_f128:
2484 ; P9-NEXT: xscmpoqp cr0, v2, v3
2486 ; P9-NEXT: crnor 4*cr5+lt, gt, un
2487 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
2490 ; NOVSX-LABEL: fcmps_ugt_f128:
2492 ; NOVSX-NEXT: mflr r0
2493 ; NOVSX-NEXT: std r0, 16(r1)
2494 ; NOVSX-NEXT: stdu r1, -32(r1)
2495 ; NOVSX-NEXT: bl __lekf2
2497 ; NOVSX-NEXT: extsw r3, r3
2498 ; NOVSX-NEXT: neg r3, r3
2499 ; NOVSX-NEXT: rldicl r3, r3, 1, 63
2500 ; NOVSX-NEXT: addi r1, r1, 32
2501 ; NOVSX-NEXT: ld r0, 16(r1)
2502 ; NOVSX-NEXT: mtlr r0
2504 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #0
2505 %conv = zext i1 %cmp to i32
2509 define i32 @fcmps_uge_f128(fp128 %a, fp128 %b) #0 {
2510 ; P8-LABEL: fcmps_uge_f128:
2513 ; P8-NEXT: std r0, 16(r1)
2514 ; P8-NEXT: stdu r1, -112(r1)
2515 ; P8-NEXT: bl __ltkf2
2517 ; P8-NEXT: rlwinm r3, r3, 1, 31, 31
2518 ; P8-NEXT: xori r3, r3, 1
2519 ; P8-NEXT: addi r1, r1, 112
2520 ; P8-NEXT: ld r0, 16(r1)
2524 ; P9-LABEL: fcmps_uge_f128:
2526 ; P9-NEXT: xscmpoqp cr0, v2, v3
2528 ; P9-NEXT: isellt r3, 0, r3
2531 ; NOVSX-LABEL: fcmps_uge_f128:
2533 ; NOVSX-NEXT: mflr r0
2534 ; NOVSX-NEXT: std r0, 16(r1)
2535 ; NOVSX-NEXT: stdu r1, -32(r1)
2536 ; NOVSX-NEXT: bl __ltkf2
2538 ; NOVSX-NEXT: rlwinm r3, r3, 1, 31, 31
2539 ; NOVSX-NEXT: xori r3, r3, 1
2540 ; NOVSX-NEXT: addi r1, r1, 32
2541 ; NOVSX-NEXT: ld r0, 16(r1)
2542 ; NOVSX-NEXT: mtlr r0
2544 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #0
2545 %conv = zext i1 %cmp to i32
2549 define i32 @fcmps_ueq_f128(fp128 %a, fp128 %b) #0 {
2550 ; P8-LABEL: fcmps_ueq_f128:
2553 ; P8-NEXT: std r0, 16(r1)
2554 ; P8-NEXT: stdu r1, -176(r1)
2555 ; P8-NEXT: li r3, 128
2556 ; P8-NEXT: std r30, 160(r1) # 8-byte Folded Spill
2557 ; P8-NEXT: stxvd2x v30, r1, r3 # 16-byte Folded Spill
2558 ; P8-NEXT: li r3, 144
2559 ; P8-NEXT: vmr v30, v2
2560 ; P8-NEXT: stxvd2x v31, r1, r3 # 16-byte Folded Spill
2561 ; P8-NEXT: vmr v31, v3
2562 ; P8-NEXT: bl __eqkf2
2564 ; P8-NEXT: vmr v2, v30
2565 ; P8-NEXT: cntlzw r3, r3
2566 ; P8-NEXT: vmr v3, v31
2567 ; P8-NEXT: srwi r30, r3, 5
2568 ; P8-NEXT: bl __unordkf2
2570 ; P8-NEXT: cntlzw r3, r3
2571 ; P8-NEXT: li r4, 144
2572 ; P8-NEXT: srwi r3, r3, 5
2573 ; P8-NEXT: lxvd2x v31, r1, r4 # 16-byte Folded Reload
2574 ; P8-NEXT: li r4, 128
2575 ; P8-NEXT: xori r3, r3, 1
2576 ; P8-NEXT: lxvd2x v30, r1, r4 # 16-byte Folded Reload
2577 ; P8-NEXT: or r3, r3, r30
2578 ; P8-NEXT: ld r30, 160(r1) # 8-byte Folded Reload
2579 ; P8-NEXT: addi r1, r1, 176
2580 ; P8-NEXT: ld r0, 16(r1)
2584 ; P9-LABEL: fcmps_ueq_f128:
2586 ; P9-NEXT: xscmpoqp cr0, v2, v3
2588 ; P9-NEXT: crnor 4*cr5+lt, eq, un
2589 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
2592 ; NOVSX-LABEL: fcmps_ueq_f128:
2594 ; NOVSX-NEXT: mflr r0
2595 ; NOVSX-NEXT: std r26, -48(r1) # 8-byte Folded Spill
2596 ; NOVSX-NEXT: std r27, -40(r1) # 8-byte Folded Spill
2597 ; NOVSX-NEXT: std r28, -32(r1) # 8-byte Folded Spill
2598 ; NOVSX-NEXT: std r29, -24(r1) # 8-byte Folded Spill
2599 ; NOVSX-NEXT: std r30, -16(r1) # 8-byte Folded Spill
2600 ; NOVSX-NEXT: std r0, 16(r1)
2601 ; NOVSX-NEXT: stdu r1, -80(r1)
2602 ; NOVSX-NEXT: mr r30, r6
2603 ; NOVSX-NEXT: mr r29, r5
2604 ; NOVSX-NEXT: mr r28, r4
2605 ; NOVSX-NEXT: mr r27, r3
2606 ; NOVSX-NEXT: bl __eqkf2
2608 ; NOVSX-NEXT: cntlzw r3, r3
2609 ; NOVSX-NEXT: mr r4, r28
2610 ; NOVSX-NEXT: mr r5, r29
2611 ; NOVSX-NEXT: mr r6, r30
2612 ; NOVSX-NEXT: srwi r26, r3, 5
2613 ; NOVSX-NEXT: mr r3, r27
2614 ; NOVSX-NEXT: bl __unordkf2
2616 ; NOVSX-NEXT: cntlzw r3, r3
2617 ; NOVSX-NEXT: srwi r3, r3, 5
2618 ; NOVSX-NEXT: xori r3, r3, 1
2619 ; NOVSX-NEXT: or r3, r3, r26
2620 ; NOVSX-NEXT: addi r1, r1, 80
2621 ; NOVSX-NEXT: ld r0, 16(r1)
2622 ; NOVSX-NEXT: ld r30, -16(r1) # 8-byte Folded Reload
2623 ; NOVSX-NEXT: ld r29, -24(r1) # 8-byte Folded Reload
2624 ; NOVSX-NEXT: ld r28, -32(r1) # 8-byte Folded Reload
2625 ; NOVSX-NEXT: ld r27, -40(r1) # 8-byte Folded Reload
2626 ; NOVSX-NEXT: ld r26, -48(r1) # 8-byte Folded Reload
2627 ; NOVSX-NEXT: mtlr r0
2629 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #0
2630 %conv = zext i1 %cmp to i32
2634 define i32 @fcmps_une_f128(fp128 %a, fp128 %b) #0 {
2635 ; P8-LABEL: fcmps_une_f128:
2638 ; P8-NEXT: std r0, 16(r1)
2639 ; P8-NEXT: stdu r1, -112(r1)
2640 ; P8-NEXT: bl __nekf2
2642 ; P8-NEXT: cntlzw r3, r3
2643 ; P8-NEXT: srwi r3, r3, 5
2644 ; P8-NEXT: xori r3, r3, 1
2645 ; P8-NEXT: addi r1, r1, 112
2646 ; P8-NEXT: ld r0, 16(r1)
2650 ; P9-LABEL: fcmps_une_f128:
2652 ; P9-NEXT: xscmpoqp cr0, v2, v3
2654 ; P9-NEXT: iseleq r3, 0, r3
2657 ; NOVSX-LABEL: fcmps_une_f128:
2659 ; NOVSX-NEXT: mflr r0
2660 ; NOVSX-NEXT: std r0, 16(r1)
2661 ; NOVSX-NEXT: stdu r1, -32(r1)
2662 ; NOVSX-NEXT: bl __nekf2
2664 ; NOVSX-NEXT: cntlzw r3, r3
2665 ; NOVSX-NEXT: srwi r3, r3, 5
2666 ; NOVSX-NEXT: xori r3, r3, 1
2667 ; NOVSX-NEXT: addi r1, r1, 32
2668 ; NOVSX-NEXT: ld r0, 16(r1)
2669 ; NOVSX-NEXT: mtlr r0
2671 %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"une", metadata !"fpexcept.strict") #0
2672 %conv = zext i1 %cmp to i32
2676 define i32 @fcmp_olt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2677 ; P8-LABEL: fcmp_olt_ppcf128:
2679 ; P8-NEXT: fcmpu cr0, f1, f3
2680 ; P8-NEXT: fcmpu cr1, f2, f4
2682 ; P8-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt
2683 ; P8-NEXT: crandc 4*cr5+gt, lt, eq
2684 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2685 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
2688 ; P9-LABEL: fcmp_olt_ppcf128:
2690 ; P9-NEXT: fcmpu cr0, f1, f3
2691 ; P9-NEXT: fcmpu cr1, f2, f4
2693 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt
2694 ; P9-NEXT: crandc 4*cr5+gt, lt, eq
2695 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2696 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
2699 ; NOVSX-LABEL: fcmp_olt_ppcf128:
2701 ; NOVSX-NEXT: fcmpu cr0, f1, f3
2702 ; NOVSX-NEXT: fcmpu cr1, f2, f4
2703 ; NOVSX-NEXT: li r3, 1
2704 ; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt
2705 ; NOVSX-NEXT: crandc 4*cr5+gt, lt, eq
2706 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2707 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
2709 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #0
2710 %conv = zext i1 %cmp to i32
2714 define i32 @fcmp_ole_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2715 ; P8-LABEL: fcmp_ole_ppcf128:
2717 ; P8-NEXT: fcmpu cr0, f2, f4
2718 ; P8-NEXT: fcmpu cr1, f1, f3
2720 ; P8-NEXT: crnor 4*cr5+lt, un, gt
2721 ; P8-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+gt
2722 ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
2723 ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
2724 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2725 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
2728 ; P9-LABEL: fcmp_ole_ppcf128:
2730 ; P9-NEXT: fcmpu cr0, f2, f4
2732 ; P9-NEXT: crnor 4*cr5+lt, un, gt
2733 ; P9-NEXT: fcmpu cr0, f1, f3
2734 ; P9-NEXT: crnor 4*cr5+gt, un, gt
2735 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt
2736 ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq
2737 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2738 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
2741 ; NOVSX-LABEL: fcmp_ole_ppcf128:
2743 ; NOVSX-NEXT: fcmpu cr0, f2, f4
2744 ; NOVSX-NEXT: fcmpu cr1, f1, f3
2745 ; NOVSX-NEXT: li r3, 1
2746 ; NOVSX-NEXT: crnor 4*cr5+lt, un, gt
2747 ; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+gt
2748 ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
2749 ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
2750 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2751 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
2753 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #0
2754 %conv = zext i1 %cmp to i32
2758 define i32 @fcmp_ogt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2759 ; P8-LABEL: fcmp_ogt_ppcf128:
2761 ; P8-NEXT: fcmpu cr0, f1, f3
2762 ; P8-NEXT: fcmpu cr1, f2, f4
2764 ; P8-NEXT: crand 4*cr5+lt, eq, 4*cr1+gt
2765 ; P8-NEXT: crandc 4*cr5+gt, gt, eq
2766 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2767 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
2770 ; P9-LABEL: fcmp_ogt_ppcf128:
2772 ; P9-NEXT: fcmpu cr0, f1, f3
2773 ; P9-NEXT: fcmpu cr1, f2, f4
2775 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr1+gt
2776 ; P9-NEXT: crandc 4*cr5+gt, gt, eq
2777 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2778 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
2781 ; NOVSX-LABEL: fcmp_ogt_ppcf128:
2783 ; NOVSX-NEXT: fcmpu cr0, f1, f3
2784 ; NOVSX-NEXT: fcmpu cr1, f2, f4
2785 ; NOVSX-NEXT: li r3, 1
2786 ; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr1+gt
2787 ; NOVSX-NEXT: crandc 4*cr5+gt, gt, eq
2788 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2789 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
2791 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #0
2792 %conv = zext i1 %cmp to i32
2796 define i32 @fcmp_oge_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2797 ; P8-LABEL: fcmp_oge_ppcf128:
2799 ; P8-NEXT: fcmpu cr0, f2, f4
2800 ; P8-NEXT: fcmpu cr1, f1, f3
2802 ; P8-NEXT: crnor 4*cr5+lt, un, lt
2803 ; P8-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+lt
2804 ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
2805 ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
2806 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2807 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
2810 ; P9-LABEL: fcmp_oge_ppcf128:
2812 ; P9-NEXT: fcmpu cr0, f2, f4
2814 ; P9-NEXT: crnor 4*cr5+lt, un, lt
2815 ; P9-NEXT: fcmpu cr0, f1, f3
2816 ; P9-NEXT: crnor 4*cr5+gt, un, lt
2817 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt
2818 ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq
2819 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2820 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
2823 ; NOVSX-LABEL: fcmp_oge_ppcf128:
2825 ; NOVSX-NEXT: fcmpu cr0, f2, f4
2826 ; NOVSX-NEXT: fcmpu cr1, f1, f3
2827 ; NOVSX-NEXT: li r3, 1
2828 ; NOVSX-NEXT: crnor 4*cr5+lt, un, lt
2829 ; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+lt
2830 ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
2831 ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
2832 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2833 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
2835 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #0
2836 %conv = zext i1 %cmp to i32
2840 define i32 @fcmp_oeq_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2841 ; P8-LABEL: fcmp_oeq_ppcf128:
2843 ; P8-NEXT: fcmpu cr0, f1, f3
2844 ; P8-NEXT: fcmpu cr1, f2, f4
2846 ; P8-NEXT: crand 4*cr5+lt, eq, 4*cr1+eq
2847 ; P8-NEXT: crandc 4*cr5+gt, eq, eq
2848 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2849 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
2852 ; P9-LABEL: fcmp_oeq_ppcf128:
2854 ; P9-NEXT: fcmpu cr0, f1, f3
2855 ; P9-NEXT: fcmpu cr1, f2, f4
2857 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr1+eq
2858 ; P9-NEXT: crandc 4*cr5+gt, eq, eq
2859 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2860 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
2863 ; NOVSX-LABEL: fcmp_oeq_ppcf128:
2865 ; NOVSX-NEXT: fcmpu cr0, f1, f3
2866 ; NOVSX-NEXT: fcmpu cr1, f2, f4
2867 ; NOVSX-NEXT: li r3, 1
2868 ; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr1+eq
2869 ; NOVSX-NEXT: crandc 4*cr5+gt, eq, eq
2870 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2871 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
2873 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #0
2874 %conv = zext i1 %cmp to i32
2878 define i32 @fcmp_one_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2879 ; P8-LABEL: fcmp_one_ppcf128:
2881 ; P8-NEXT: fcmpu cr0, f2, f4
2882 ; P8-NEXT: fcmpu cr1, f1, f3
2884 ; P8-NEXT: crnor 4*cr5+lt, un, eq
2885 ; P8-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+eq
2886 ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
2887 ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
2888 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2889 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
2892 ; P9-LABEL: fcmp_one_ppcf128:
2894 ; P9-NEXT: fcmpu cr0, f2, f4
2896 ; P9-NEXT: crnor 4*cr5+lt, un, eq
2897 ; P9-NEXT: fcmpu cr0, f1, f3
2898 ; P9-NEXT: crnor 4*cr5+gt, un, eq
2899 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt
2900 ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq
2901 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2902 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
2905 ; NOVSX-LABEL: fcmp_one_ppcf128:
2907 ; NOVSX-NEXT: fcmpu cr0, f2, f4
2908 ; NOVSX-NEXT: fcmpu cr1, f1, f3
2909 ; NOVSX-NEXT: li r3, 1
2910 ; NOVSX-NEXT: crnor 4*cr5+lt, un, eq
2911 ; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+eq
2912 ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
2913 ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
2914 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2915 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
2917 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"one", metadata !"fpexcept.strict") #0
2918 %conv = zext i1 %cmp to i32
2922 define i32 @fcmp_ult_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2923 ; P8-LABEL: fcmp_ult_ppcf128:
2925 ; P8-NEXT: fcmpu cr0, f2, f4
2926 ; P8-NEXT: fcmpu cr1, f1, f3
2928 ; P8-NEXT: cror 4*cr5+lt, lt, un
2929 ; P8-NEXT: cror 4*cr5+gt, 4*cr1+lt, 4*cr1+un
2930 ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
2931 ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
2932 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2933 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
2936 ; P9-LABEL: fcmp_ult_ppcf128:
2938 ; P9-NEXT: fcmpu cr0, f1, f3
2939 ; P9-NEXT: fcmpu cr1, f2, f4
2941 ; P9-NEXT: cror 4*cr5+lt, 4*cr1+lt, 4*cr1+un
2942 ; P9-NEXT: cror 4*cr5+gt, lt, un
2943 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt
2944 ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq
2945 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2946 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
2949 ; NOVSX-LABEL: fcmp_ult_ppcf128:
2951 ; NOVSX-NEXT: fcmpu cr0, f2, f4
2952 ; NOVSX-NEXT: fcmpu cr1, f1, f3
2953 ; NOVSX-NEXT: li r3, 1
2954 ; NOVSX-NEXT: cror 4*cr5+lt, lt, un
2955 ; NOVSX-NEXT: cror 4*cr5+gt, 4*cr1+lt, 4*cr1+un
2956 ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
2957 ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
2958 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2959 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
2961 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #0
2962 %conv = zext i1 %cmp to i32
2966 define i32 @fcmp_ule_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2967 ; P8-LABEL: fcmp_ule_ppcf128:
2969 ; P8-NEXT: fcmpu cr0, f2, f4
2970 ; P8-NEXT: fcmpu cr1, f1, f3
2972 ; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, gt
2973 ; P8-NEXT: crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq
2974 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2975 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
2978 ; P9-LABEL: fcmp_ule_ppcf128:
2980 ; P9-NEXT: fcmpu cr0, f2, f4
2981 ; P9-NEXT: fcmpu cr1, f1, f3
2983 ; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, gt
2984 ; P9-NEXT: crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq
2985 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2986 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
2989 ; NOVSX-LABEL: fcmp_ule_ppcf128:
2991 ; NOVSX-NEXT: fcmpu cr0, f2, f4
2992 ; NOVSX-NEXT: fcmpu cr1, f1, f3
2993 ; NOVSX-NEXT: li r3, 1
2994 ; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, gt
2995 ; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq
2996 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2997 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
2999 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #0
3000 %conv = zext i1 %cmp to i32
3004 define i32 @fcmp_ugt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3005 ; P8-LABEL: fcmp_ugt_ppcf128:
3007 ; P8-NEXT: fcmpu cr0, f2, f4
3008 ; P8-NEXT: fcmpu cr1, f1, f3
3010 ; P8-NEXT: cror 4*cr5+lt, gt, un
3011 ; P8-NEXT: cror 4*cr5+gt, 4*cr1+gt, 4*cr1+un
3012 ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3013 ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3014 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3015 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
3018 ; P9-LABEL: fcmp_ugt_ppcf128:
3020 ; P9-NEXT: fcmpu cr0, f1, f3
3021 ; P9-NEXT: fcmpu cr1, f2, f4
3023 ; P9-NEXT: cror 4*cr5+lt, 4*cr1+gt, 4*cr1+un
3024 ; P9-NEXT: cror 4*cr5+gt, gt, un
3025 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt
3026 ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq
3027 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3028 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
3031 ; NOVSX-LABEL: fcmp_ugt_ppcf128:
3033 ; NOVSX-NEXT: fcmpu cr0, f2, f4
3034 ; NOVSX-NEXT: fcmpu cr1, f1, f3
3035 ; NOVSX-NEXT: li r3, 1
3036 ; NOVSX-NEXT: cror 4*cr5+lt, gt, un
3037 ; NOVSX-NEXT: cror 4*cr5+gt, 4*cr1+gt, 4*cr1+un
3038 ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3039 ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3040 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3041 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
3043 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #0
3044 %conv = zext i1 %cmp to i32
3048 define i32 @fcmp_uge_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3049 ; P8-LABEL: fcmp_uge_ppcf128:
3051 ; P8-NEXT: fcmpu cr0, f2, f4
3052 ; P8-NEXT: fcmpu cr1, f1, f3
3054 ; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, lt
3055 ; P8-NEXT: crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq
3056 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3057 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
3060 ; P9-LABEL: fcmp_uge_ppcf128:
3062 ; P9-NEXT: fcmpu cr0, f2, f4
3063 ; P9-NEXT: fcmpu cr1, f1, f3
3065 ; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, lt
3066 ; P9-NEXT: crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq
3067 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3068 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
3071 ; NOVSX-LABEL: fcmp_uge_ppcf128:
3073 ; NOVSX-NEXT: fcmpu cr0, f2, f4
3074 ; NOVSX-NEXT: fcmpu cr1, f1, f3
3075 ; NOVSX-NEXT: li r3, 1
3076 ; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, lt
3077 ; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq
3078 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3079 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
3081 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #0
3082 %conv = zext i1 %cmp to i32
3086 define i32 @fcmp_ueq_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3087 ; P8-LABEL: fcmp_ueq_ppcf128:
3089 ; P8-NEXT: fcmpu cr0, f2, f4
3090 ; P8-NEXT: fcmpu cr1, f1, f3
3092 ; P8-NEXT: cror 4*cr5+lt, eq, un
3093 ; P8-NEXT: cror 4*cr5+gt, 4*cr1+eq, 4*cr1+un
3094 ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3095 ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3096 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3097 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
3100 ; P9-LABEL: fcmp_ueq_ppcf128:
3102 ; P9-NEXT: fcmpu cr0, f1, f3
3103 ; P9-NEXT: fcmpu cr1, f2, f4
3105 ; P9-NEXT: cror 4*cr5+lt, 4*cr1+eq, 4*cr1+un
3106 ; P9-NEXT: cror 4*cr5+gt, eq, un
3107 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt
3108 ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq
3109 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3110 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
3113 ; NOVSX-LABEL: fcmp_ueq_ppcf128:
3115 ; NOVSX-NEXT: fcmpu cr0, f2, f4
3116 ; NOVSX-NEXT: fcmpu cr1, f1, f3
3117 ; NOVSX-NEXT: li r3, 1
3118 ; NOVSX-NEXT: cror 4*cr5+lt, eq, un
3119 ; NOVSX-NEXT: cror 4*cr5+gt, 4*cr1+eq, 4*cr1+un
3120 ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3121 ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3122 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3123 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
3125 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #0
3126 %conv = zext i1 %cmp to i32
3130 define i32 @fcmp_une_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3131 ; P8-LABEL: fcmp_une_ppcf128:
3133 ; P8-NEXT: fcmpu cr0, f2, f4
3134 ; P8-NEXT: fcmpu cr1, f1, f3
3136 ; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, eq
3137 ; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3138 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
3141 ; P9-LABEL: fcmp_une_ppcf128:
3143 ; P9-NEXT: fcmpu cr0, f2, f4
3144 ; P9-NEXT: fcmpu cr1, f1, f3
3146 ; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, eq
3147 ; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3148 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
3151 ; NOVSX-LABEL: fcmp_une_ppcf128:
3153 ; NOVSX-NEXT: fcmpu cr0, f2, f4
3154 ; NOVSX-NEXT: fcmpu cr1, f1, f3
3155 ; NOVSX-NEXT: li r3, 1
3156 ; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, eq
3157 ; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3158 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
3160 %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"une", metadata !"fpexcept.strict") #0
3161 %conv = zext i1 %cmp to i32
3165 define i32 @fcmps_olt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3166 ; P8-LABEL: fcmps_olt_ppcf128:
3168 ; P8-NEXT: fcmpo cr0, f1, f3
3169 ; P8-NEXT: fcmpo cr1, f2, f4
3171 ; P8-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt
3172 ; P8-NEXT: crandc 4*cr5+gt, lt, eq
3173 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3174 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
3177 ; P9-LABEL: fcmps_olt_ppcf128:
3179 ; P9-NEXT: fcmpo cr0, f1, f3
3180 ; P9-NEXT: fcmpo cr1, f2, f4
3182 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt
3183 ; P9-NEXT: crandc 4*cr5+gt, lt, eq
3184 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3185 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
3188 ; NOVSX-LABEL: fcmps_olt_ppcf128:
3190 ; NOVSX-NEXT: fcmpo cr0, f1, f3
3191 ; NOVSX-NEXT: fcmpo cr1, f2, f4
3192 ; NOVSX-NEXT: li r3, 1
3193 ; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr1+lt
3194 ; NOVSX-NEXT: crandc 4*cr5+gt, lt, eq
3195 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3196 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
3198 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #0
3199 %conv = zext i1 %cmp to i32
3203 define i32 @fcmps_ole_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3204 ; P8-LABEL: fcmps_ole_ppcf128:
3206 ; P8-NEXT: fcmpo cr0, f2, f4
3207 ; P8-NEXT: fcmpo cr1, f1, f3
3209 ; P8-NEXT: crnor 4*cr5+lt, un, gt
3210 ; P8-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+gt
3211 ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3212 ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3213 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3214 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
3217 ; P9-LABEL: fcmps_ole_ppcf128:
3219 ; P9-NEXT: fcmpo cr0, f2, f4
3221 ; P9-NEXT: crnor 4*cr5+lt, un, gt
3222 ; P9-NEXT: fcmpo cr0, f1, f3
3223 ; P9-NEXT: crnor 4*cr5+gt, un, gt
3224 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt
3225 ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq
3226 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3227 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
3230 ; NOVSX-LABEL: fcmps_ole_ppcf128:
3232 ; NOVSX-NEXT: fcmpo cr0, f2, f4
3233 ; NOVSX-NEXT: fcmpo cr1, f1, f3
3234 ; NOVSX-NEXT: li r3, 1
3235 ; NOVSX-NEXT: crnor 4*cr5+lt, un, gt
3236 ; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+gt
3237 ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3238 ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3239 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3240 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
3242 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #0
3243 %conv = zext i1 %cmp to i32
3247 define i32 @fcmps_ogt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3248 ; P8-LABEL: fcmps_ogt_ppcf128:
3250 ; P8-NEXT: fcmpo cr0, f1, f3
3251 ; P8-NEXT: fcmpo cr1, f2, f4
3253 ; P8-NEXT: crand 4*cr5+lt, eq, 4*cr1+gt
3254 ; P8-NEXT: crandc 4*cr5+gt, gt, eq
3255 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3256 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
3259 ; P9-LABEL: fcmps_ogt_ppcf128:
3261 ; P9-NEXT: fcmpo cr0, f1, f3
3262 ; P9-NEXT: fcmpo cr1, f2, f4
3264 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr1+gt
3265 ; P9-NEXT: crandc 4*cr5+gt, gt, eq
3266 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3267 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
3270 ; NOVSX-LABEL: fcmps_ogt_ppcf128:
3272 ; NOVSX-NEXT: fcmpo cr0, f1, f3
3273 ; NOVSX-NEXT: fcmpo cr1, f2, f4
3274 ; NOVSX-NEXT: li r3, 1
3275 ; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr1+gt
3276 ; NOVSX-NEXT: crandc 4*cr5+gt, gt, eq
3277 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3278 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
3280 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #0
3281 %conv = zext i1 %cmp to i32
3285 define i32 @fcmps_oge_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3286 ; P8-LABEL: fcmps_oge_ppcf128:
3288 ; P8-NEXT: fcmpo cr0, f2, f4
3289 ; P8-NEXT: fcmpo cr1, f1, f3
3291 ; P8-NEXT: crnor 4*cr5+lt, un, lt
3292 ; P8-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+lt
3293 ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3294 ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3295 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3296 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
3299 ; P9-LABEL: fcmps_oge_ppcf128:
3301 ; P9-NEXT: fcmpo cr0, f2, f4
3303 ; P9-NEXT: crnor 4*cr5+lt, un, lt
3304 ; P9-NEXT: fcmpo cr0, f1, f3
3305 ; P9-NEXT: crnor 4*cr5+gt, un, lt
3306 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt
3307 ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq
3308 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3309 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
3312 ; NOVSX-LABEL: fcmps_oge_ppcf128:
3314 ; NOVSX-NEXT: fcmpo cr0, f2, f4
3315 ; NOVSX-NEXT: fcmpo cr1, f1, f3
3316 ; NOVSX-NEXT: li r3, 1
3317 ; NOVSX-NEXT: crnor 4*cr5+lt, un, lt
3318 ; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+lt
3319 ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3320 ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3321 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3322 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
3324 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #0
3325 %conv = zext i1 %cmp to i32
3329 define i32 @fcmps_oeq_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3330 ; P8-LABEL: fcmps_oeq_ppcf128:
3332 ; P8-NEXT: fcmpo cr0, f1, f3
3333 ; P8-NEXT: fcmpo cr1, f2, f4
3335 ; P8-NEXT: crand 4*cr5+lt, eq, 4*cr1+eq
3336 ; P8-NEXT: crandc 4*cr5+gt, eq, eq
3337 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3338 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
3341 ; P9-LABEL: fcmps_oeq_ppcf128:
3343 ; P9-NEXT: fcmpo cr0, f1, f3
3344 ; P9-NEXT: fcmpo cr1, f2, f4
3346 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr1+eq
3347 ; P9-NEXT: crandc 4*cr5+gt, eq, eq
3348 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3349 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
3352 ; NOVSX-LABEL: fcmps_oeq_ppcf128:
3354 ; NOVSX-NEXT: fcmpo cr0, f1, f3
3355 ; NOVSX-NEXT: fcmpo cr1, f2, f4
3356 ; NOVSX-NEXT: li r3, 1
3357 ; NOVSX-NEXT: crand 4*cr5+lt, eq, 4*cr1+eq
3358 ; NOVSX-NEXT: crandc 4*cr5+gt, eq, eq
3359 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3360 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
3362 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #0
3363 %conv = zext i1 %cmp to i32
3367 define i32 @fcmps_one_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3368 ; P8-LABEL: fcmps_one_ppcf128:
3370 ; P8-NEXT: fcmpo cr0, f2, f4
3371 ; P8-NEXT: fcmpo cr1, f1, f3
3373 ; P8-NEXT: crnor 4*cr5+lt, un, eq
3374 ; P8-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+eq
3375 ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3376 ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3377 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3378 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
3381 ; P9-LABEL: fcmps_one_ppcf128:
3383 ; P9-NEXT: fcmpo cr0, f2, f4
3385 ; P9-NEXT: crnor 4*cr5+lt, un, eq
3386 ; P9-NEXT: fcmpo cr0, f1, f3
3387 ; P9-NEXT: crnor 4*cr5+gt, un, eq
3388 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt
3389 ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq
3390 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3391 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
3394 ; NOVSX-LABEL: fcmps_one_ppcf128:
3396 ; NOVSX-NEXT: fcmpo cr0, f2, f4
3397 ; NOVSX-NEXT: fcmpo cr1, f1, f3
3398 ; NOVSX-NEXT: li r3, 1
3399 ; NOVSX-NEXT: crnor 4*cr5+lt, un, eq
3400 ; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+un, 4*cr1+eq
3401 ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3402 ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3403 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3404 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
3406 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"one", metadata !"fpexcept.strict") #0
3407 %conv = zext i1 %cmp to i32
3411 define i32 @fcmps_ult_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3412 ; P8-LABEL: fcmps_ult_ppcf128:
3414 ; P8-NEXT: fcmpo cr0, f2, f4
3415 ; P8-NEXT: fcmpo cr1, f1, f3
3417 ; P8-NEXT: cror 4*cr5+lt, lt, un
3418 ; P8-NEXT: cror 4*cr5+gt, 4*cr1+lt, 4*cr1+un
3419 ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3420 ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3421 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3422 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
3425 ; P9-LABEL: fcmps_ult_ppcf128:
3427 ; P9-NEXT: fcmpo cr0, f1, f3
3428 ; P9-NEXT: fcmpo cr1, f2, f4
3430 ; P9-NEXT: cror 4*cr5+lt, 4*cr1+lt, 4*cr1+un
3431 ; P9-NEXT: cror 4*cr5+gt, lt, un
3432 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt
3433 ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq
3434 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3435 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
3438 ; NOVSX-LABEL: fcmps_ult_ppcf128:
3440 ; NOVSX-NEXT: fcmpo cr0, f2, f4
3441 ; NOVSX-NEXT: fcmpo cr1, f1, f3
3442 ; NOVSX-NEXT: li r3, 1
3443 ; NOVSX-NEXT: cror 4*cr5+lt, lt, un
3444 ; NOVSX-NEXT: cror 4*cr5+gt, 4*cr1+lt, 4*cr1+un
3445 ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3446 ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3447 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3448 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
3450 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #0
3451 %conv = zext i1 %cmp to i32
3455 define i32 @fcmps_ule_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3456 ; P8-LABEL: fcmps_ule_ppcf128:
3458 ; P8-NEXT: fcmpo cr0, f2, f4
3459 ; P8-NEXT: fcmpo cr1, f1, f3
3461 ; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, gt
3462 ; P8-NEXT: crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq
3463 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3464 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
3467 ; P9-LABEL: fcmps_ule_ppcf128:
3469 ; P9-NEXT: fcmpo cr0, f2, f4
3470 ; P9-NEXT: fcmpo cr1, f1, f3
3472 ; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, gt
3473 ; P9-NEXT: crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq
3474 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3475 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
3478 ; NOVSX-LABEL: fcmps_ule_ppcf128:
3480 ; NOVSX-NEXT: fcmpo cr0, f2, f4
3481 ; NOVSX-NEXT: fcmpo cr1, f1, f3
3482 ; NOVSX-NEXT: li r3, 1
3483 ; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, gt
3484 ; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq
3485 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3486 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
3488 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #0
3489 %conv = zext i1 %cmp to i32
3493 define i32 @fcmps_ugt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3494 ; P8-LABEL: fcmps_ugt_ppcf128:
3496 ; P8-NEXT: fcmpo cr0, f2, f4
3497 ; P8-NEXT: fcmpo cr1, f1, f3
3499 ; P8-NEXT: cror 4*cr5+lt, gt, un
3500 ; P8-NEXT: cror 4*cr5+gt, 4*cr1+gt, 4*cr1+un
3501 ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3502 ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3503 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3504 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
3507 ; P9-LABEL: fcmps_ugt_ppcf128:
3509 ; P9-NEXT: fcmpo cr0, f1, f3
3510 ; P9-NEXT: fcmpo cr1, f2, f4
3512 ; P9-NEXT: cror 4*cr5+lt, 4*cr1+gt, 4*cr1+un
3513 ; P9-NEXT: cror 4*cr5+gt, gt, un
3514 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt
3515 ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq
3516 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3517 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
3520 ; NOVSX-LABEL: fcmps_ugt_ppcf128:
3522 ; NOVSX-NEXT: fcmpo cr0, f2, f4
3523 ; NOVSX-NEXT: fcmpo cr1, f1, f3
3524 ; NOVSX-NEXT: li r3, 1
3525 ; NOVSX-NEXT: cror 4*cr5+lt, gt, un
3526 ; NOVSX-NEXT: cror 4*cr5+gt, 4*cr1+gt, 4*cr1+un
3527 ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3528 ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3529 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3530 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
3532 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #0
3533 %conv = zext i1 %cmp to i32
3537 define i32 @fcmps_uge_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3538 ; P8-LABEL: fcmps_uge_ppcf128:
3540 ; P8-NEXT: fcmpo cr0, f2, f4
3541 ; P8-NEXT: fcmpo cr1, f1, f3
3543 ; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, lt
3544 ; P8-NEXT: crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq
3545 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3546 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
3549 ; P9-LABEL: fcmps_uge_ppcf128:
3551 ; P9-NEXT: fcmpo cr0, f2, f4
3552 ; P9-NEXT: fcmpo cr1, f1, f3
3554 ; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, lt
3555 ; P9-NEXT: crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq
3556 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3557 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
3560 ; NOVSX-LABEL: fcmps_uge_ppcf128:
3562 ; NOVSX-NEXT: fcmpo cr0, f2, f4
3563 ; NOVSX-NEXT: fcmpo cr1, f1, f3
3564 ; NOVSX-NEXT: li r3, 1
3565 ; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, lt
3566 ; NOVSX-NEXT: crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq
3567 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3568 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
3570 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #0
3571 %conv = zext i1 %cmp to i32
3575 define i32 @fcmps_ueq_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3576 ; P8-LABEL: fcmps_ueq_ppcf128:
3578 ; P8-NEXT: fcmpo cr0, f2, f4
3579 ; P8-NEXT: fcmpo cr1, f1, f3
3581 ; P8-NEXT: cror 4*cr5+lt, eq, un
3582 ; P8-NEXT: cror 4*cr5+gt, 4*cr1+eq, 4*cr1+un
3583 ; P8-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3584 ; P8-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3585 ; P8-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3586 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
3589 ; P9-LABEL: fcmps_ueq_ppcf128:
3591 ; P9-NEXT: fcmpo cr0, f1, f3
3592 ; P9-NEXT: fcmpo cr1, f2, f4
3594 ; P9-NEXT: cror 4*cr5+lt, 4*cr1+eq, 4*cr1+un
3595 ; P9-NEXT: cror 4*cr5+gt, eq, un
3596 ; P9-NEXT: crand 4*cr5+lt, eq, 4*cr5+lt
3597 ; P9-NEXT: crandc 4*cr5+gt, 4*cr5+gt, eq
3598 ; P9-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3599 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
3602 ; NOVSX-LABEL: fcmps_ueq_ppcf128:
3604 ; NOVSX-NEXT: fcmpo cr0, f2, f4
3605 ; NOVSX-NEXT: fcmpo cr1, f1, f3
3606 ; NOVSX-NEXT: li r3, 1
3607 ; NOVSX-NEXT: cror 4*cr5+lt, eq, un
3608 ; NOVSX-NEXT: cror 4*cr5+gt, 4*cr1+eq, 4*cr1+un
3609 ; NOVSX-NEXT: crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3610 ; NOVSX-NEXT: crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3611 ; NOVSX-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3612 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
3614 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #0
3615 %conv = zext i1 %cmp to i32
3619 define i32 @fcmps_une_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3620 ; P8-LABEL: fcmps_une_ppcf128:
3622 ; P8-NEXT: fcmpo cr0, f2, f4
3623 ; P8-NEXT: fcmpo cr1, f1, f3
3625 ; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, eq
3626 ; P8-NEXT: crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3627 ; P8-NEXT: isel r3, 0, r3, 4*cr5+lt
3630 ; P9-LABEL: fcmps_une_ppcf128:
3632 ; P9-NEXT: fcmpo cr0, f2, f4
3633 ; P9-NEXT: fcmpo cr1, f1, f3
3635 ; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, eq
3636 ; P9-NEXT: crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3637 ; P9-NEXT: isel r3, 0, r3, 4*cr5+lt
3640 ; NOVSX-LABEL: fcmps_une_ppcf128:
3642 ; NOVSX-NEXT: fcmpo cr0, f2, f4
3643 ; NOVSX-NEXT: fcmpo cr1, f1, f3
3644 ; NOVSX-NEXT: li r3, 1
3645 ; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, eq
3646 ; NOVSX-NEXT: crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3647 ; NOVSX-NEXT: isel r3, 0, r3, 4*cr5+lt
3649 %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"une", metadata !"fpexcept.strict") #0
3650 %conv = zext i1 %cmp to i32
3654 attributes #0 = { strictfp nounwind }
3656 declare i1 @llvm.experimental.constrained.fcmp.f32(float, float, metadata, metadata)
3657 declare i1 @llvm.experimental.constrained.fcmp.f64(double, double, metadata, metadata)
3658 declare i1 @llvm.experimental.constrained.fcmps.f32(float, float, metadata, metadata)
3659 declare i1 @llvm.experimental.constrained.fcmps.f64(double, double, metadata, metadata)
3660 declare i1 @llvm.experimental.constrained.fcmps.f128(fp128, fp128, metadata, metadata)
3661 declare i1 @llvm.experimental.constrained.fcmp.f128(fp128, fp128, metadata, metadata)
3662 declare i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata)
3663 declare i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata)