[memprof] Move YAML support to MemProfYAML.h (NFC) (#119515)
[llvm-project.git] / llvm / test / CodeGen / PowerPC / fp-strict-fcmp.ll
blobaf4c051d553eeed8d35a8b6e481f8a4437df5b7c
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:
14 ; P8:       # %bb.0:
15 ; P8-NEXT:    fcmpu cr0, f1, f2
16 ; P8-NEXT:    iseleq r3, r3, r4
17 ; P8-NEXT:    blr
19 ; P9-LABEL: test_f32_oeq_q:
20 ; P9:       # %bb.0:
21 ; P9-NEXT:    fcmpu cr0, f1, f2
22 ; P9-NEXT:    iseleq r3, r3, r4
23 ; P9-NEXT:    blr
25 ; NOVSX-LABEL: test_f32_oeq_q:
26 ; NOVSX:       # %bb.0:
27 ; NOVSX-NEXT:    fcmpu cr0, f1, f2
28 ; NOVSX-NEXT:    iseleq r3, r3, r4
29 ; NOVSX-NEXT:    blr
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
34   ret i32 %res
37 define i32 @test_f32_ogt_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
38 ; P8-LABEL: test_f32_ogt_q:
39 ; P8:       # %bb.0:
40 ; P8-NEXT:    fcmpu cr0, f1, f2
41 ; P8-NEXT:    iselgt r3, r3, r4
42 ; P8-NEXT:    blr
44 ; P9-LABEL: test_f32_ogt_q:
45 ; P9:       # %bb.0:
46 ; P9-NEXT:    fcmpu cr0, f1, f2
47 ; P9-NEXT:    iselgt r3, r3, r4
48 ; P9-NEXT:    blr
50 ; NOVSX-LABEL: test_f32_ogt_q:
51 ; NOVSX:       # %bb.0:
52 ; NOVSX-NEXT:    fcmpu cr0, f1, f2
53 ; NOVSX-NEXT:    iselgt r3, r3, r4
54 ; NOVSX-NEXT:    blr
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
59   ret i32 %res
62 define i32 @test_f32_oge_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
63 ; P8-LABEL: test_f32_oge_q:
64 ; P8:       # %bb.0:
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
68 ; P8-NEXT:    blr
70 ; P9-LABEL: test_f32_oge_q:
71 ; P9:       # %bb.0:
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
75 ; P9-NEXT:    blr
77 ; NOVSX-LABEL: test_f32_oge_q:
78 ; NOVSX:       # %bb.0:
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
82 ; NOVSX-NEXT:    blr
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
87   ret i32 %res
90 define i32 @test_f32_olt_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
91 ; P8-LABEL: test_f32_olt_q:
92 ; P8:       # %bb.0:
93 ; P8-NEXT:    fcmpu cr0, f1, f2
94 ; P8-NEXT:    isellt r3, r3, r4
95 ; P8-NEXT:    blr
97 ; P9-LABEL: test_f32_olt_q:
98 ; P9:       # %bb.0:
99 ; P9-NEXT:    fcmpu cr0, f1, f2
100 ; P9-NEXT:    isellt r3, r3, r4
101 ; P9-NEXT:    blr
103 ; NOVSX-LABEL: test_f32_olt_q:
104 ; NOVSX:       # %bb.0:
105 ; NOVSX-NEXT:    fcmpu cr0, f1, f2
106 ; NOVSX-NEXT:    isellt r3, r3, r4
107 ; NOVSX-NEXT:    blr
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
112   ret i32 %res
115 define i32 @test_f32_ole_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
116 ; P8-LABEL: test_f32_ole_q:
117 ; P8:       # %bb.0:
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
121 ; P8-NEXT:    blr
123 ; P9-LABEL: test_f32_ole_q:
124 ; P9:       # %bb.0:
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
128 ; P9-NEXT:    blr
130 ; NOVSX-LABEL: test_f32_ole_q:
131 ; NOVSX:       # %bb.0:
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
135 ; NOVSX-NEXT:    blr
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
140   ret i32 %res
143 define i32 @test_f32_one_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
144 ; P8-LABEL: test_f32_one_q:
145 ; P8:       # %bb.0:
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
149 ; P8-NEXT:    blr
151 ; P9-LABEL: test_f32_one_q:
152 ; P9:       # %bb.0:
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
156 ; P9-NEXT:    blr
158 ; NOVSX-LABEL: test_f32_one_q:
159 ; NOVSX:       # %bb.0:
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
163 ; NOVSX-NEXT:    blr
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
168   ret i32 %res
171 define i32 @test_f32_ord_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
172 ; P8-LABEL: test_f32_ord_q:
173 ; P8:       # %bb.0:
174 ; P8-NEXT:    fcmpu cr0, f1, f2
175 ; P8-NEXT:    isel r3, r4, r3, un
176 ; P8-NEXT:    blr
178 ; P9-LABEL: test_f32_ord_q:
179 ; P9:       # %bb.0:
180 ; P9-NEXT:    fcmpu cr0, f1, f2
181 ; P9-NEXT:    isel r3, r4, r3, un
182 ; P9-NEXT:    blr
184 ; NOVSX-LABEL: test_f32_ord_q:
185 ; NOVSX:       # %bb.0:
186 ; NOVSX-NEXT:    fcmpu cr0, f1, f2
187 ; NOVSX-NEXT:    isel r3, r4, r3, un
188 ; NOVSX-NEXT:    blr
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
193   ret i32 %res
196 define i32 @test_f32_ueq_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
197 ; P8-LABEL: test_f32_ueq_q:
198 ; P8:       # %bb.0:
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
202 ; P8-NEXT:    blr
204 ; P9-LABEL: test_f32_ueq_q:
205 ; P9:       # %bb.0:
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
209 ; P9-NEXT:    blr
211 ; NOVSX-LABEL: test_f32_ueq_q:
212 ; NOVSX:       # %bb.0:
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
216 ; NOVSX-NEXT:    blr
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
221   ret i32 %res
224 define i32 @test_f32_ugt_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
225 ; P8-LABEL: test_f32_ugt_q:
226 ; P8:       # %bb.0:
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
230 ; P8-NEXT:    blr
232 ; P9-LABEL: test_f32_ugt_q:
233 ; P9:       # %bb.0:
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
237 ; P9-NEXT:    blr
239 ; NOVSX-LABEL: test_f32_ugt_q:
240 ; NOVSX:       # %bb.0:
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
244 ; NOVSX-NEXT:    blr
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
249   ret i32 %res
252 define i32 @test_f32_uge_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
253 ; P8-LABEL: test_f32_uge_q:
254 ; P8:       # %bb.0:
255 ; P8-NEXT:    fcmpu cr0, f1, f2
256 ; P8-NEXT:    isellt r3, r4, r3
257 ; P8-NEXT:    blr
259 ; P9-LABEL: test_f32_uge_q:
260 ; P9:       # %bb.0:
261 ; P9-NEXT:    fcmpu cr0, f1, f2
262 ; P9-NEXT:    isellt r3, r4, r3
263 ; P9-NEXT:    blr
265 ; NOVSX-LABEL: test_f32_uge_q:
266 ; NOVSX:       # %bb.0:
267 ; NOVSX-NEXT:    fcmpu cr0, f1, f2
268 ; NOVSX-NEXT:    isellt r3, r4, r3
269 ; NOVSX-NEXT:    blr
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
274   ret i32 %res
277 define i32 @test_f32_ult_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
278 ; P8-LABEL: test_f32_ult_q:
279 ; P8:       # %bb.0:
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
283 ; P8-NEXT:    blr
285 ; P9-LABEL: test_f32_ult_q:
286 ; P9:       # %bb.0:
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
290 ; P9-NEXT:    blr
292 ; NOVSX-LABEL: test_f32_ult_q:
293 ; NOVSX:       # %bb.0:
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
297 ; NOVSX-NEXT:    blr
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
302   ret i32 %res
305 define i32 @test_f32_ule_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
306 ; P8-LABEL: test_f32_ule_q:
307 ; P8:       # %bb.0:
308 ; P8-NEXT:    fcmpu cr0, f1, f2
309 ; P8-NEXT:    iselgt r3, r4, r3
310 ; P8-NEXT:    blr
312 ; P9-LABEL: test_f32_ule_q:
313 ; P9:       # %bb.0:
314 ; P9-NEXT:    fcmpu cr0, f1, f2
315 ; P9-NEXT:    iselgt r3, r4, r3
316 ; P9-NEXT:    blr
318 ; NOVSX-LABEL: test_f32_ule_q:
319 ; NOVSX:       # %bb.0:
320 ; NOVSX-NEXT:    fcmpu cr0, f1, f2
321 ; NOVSX-NEXT:    iselgt r3, r4, r3
322 ; NOVSX-NEXT:    blr
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
327   ret i32 %res
330 define i32 @test_f32_une_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
331 ; P8-LABEL: test_f32_une_q:
332 ; P8:       # %bb.0:
333 ; P8-NEXT:    fcmpu cr0, f1, f2
334 ; P8-NEXT:    iseleq r3, r4, r3
335 ; P8-NEXT:    blr
337 ; P9-LABEL: test_f32_une_q:
338 ; P9:       # %bb.0:
339 ; P9-NEXT:    fcmpu cr0, f1, f2
340 ; P9-NEXT:    iseleq r3, r4, r3
341 ; P9-NEXT:    blr
343 ; NOVSX-LABEL: test_f32_une_q:
344 ; NOVSX:       # %bb.0:
345 ; NOVSX-NEXT:    fcmpu cr0, f1, f2
346 ; NOVSX-NEXT:    iseleq r3, r4, r3
347 ; NOVSX-NEXT:    blr
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
352   ret i32 %res
355 define i32 @test_f32_uno_q(i32 %a, i32 %b, float %f1, float %f2) #0 {
356 ; P8-LABEL: test_f32_uno_q:
357 ; P8:       # %bb.0:
358 ; P8-NEXT:    fcmpu cr0, f1, f2
359 ; P8-NEXT:    isel r3, r3, r4, un
360 ; P8-NEXT:    blr
362 ; P9-LABEL: test_f32_uno_q:
363 ; P9:       # %bb.0:
364 ; P9-NEXT:    fcmpu cr0, f1, f2
365 ; P9-NEXT:    isel r3, r3, r4, un
366 ; P9-NEXT:    blr
368 ; NOVSX-LABEL: test_f32_uno_q:
369 ; NOVSX:       # %bb.0:
370 ; NOVSX-NEXT:    fcmpu cr0, f1, f2
371 ; NOVSX-NEXT:    isel r3, r3, r4, un
372 ; NOVSX-NEXT:    blr
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
377   ret i32 %res
380 define i32 @test_f64_oeq_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
381 ; P8-LABEL: test_f64_oeq_q:
382 ; P8:       # %bb.0:
383 ; P8-NEXT:    fcmpu cr0, f1, f2
384 ; P8-NEXT:    iseleq r3, r3, r4
385 ; P8-NEXT:    blr
387 ; P9-LABEL: test_f64_oeq_q:
388 ; P9:       # %bb.0:
389 ; P9-NEXT:    fcmpu cr0, f1, f2
390 ; P9-NEXT:    iseleq r3, r3, r4
391 ; P9-NEXT:    blr
393 ; NOVSX-LABEL: test_f64_oeq_q:
394 ; NOVSX:       # %bb.0:
395 ; NOVSX-NEXT:    fcmpu cr0, f1, f2
396 ; NOVSX-NEXT:    iseleq r3, r3, r4
397 ; NOVSX-NEXT:    blr
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
402   ret i32 %res
405 define i32 @test_f64_ogt_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
406 ; P8-LABEL: test_f64_ogt_q:
407 ; P8:       # %bb.0:
408 ; P8-NEXT:    fcmpu cr0, f1, f2
409 ; P8-NEXT:    iselgt r3, r3, r4
410 ; P8-NEXT:    blr
412 ; P9-LABEL: test_f64_ogt_q:
413 ; P9:       # %bb.0:
414 ; P9-NEXT:    fcmpu cr0, f1, f2
415 ; P9-NEXT:    iselgt r3, r3, r4
416 ; P9-NEXT:    blr
418 ; NOVSX-LABEL: test_f64_ogt_q:
419 ; NOVSX:       # %bb.0:
420 ; NOVSX-NEXT:    fcmpu cr0, f1, f2
421 ; NOVSX-NEXT:    iselgt r3, r3, r4
422 ; NOVSX-NEXT:    blr
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
427   ret i32 %res
430 define i32 @test_f64_oge_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
431 ; P8-LABEL: test_f64_oge_q:
432 ; P8:       # %bb.0:
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
436 ; P8-NEXT:    blr
438 ; P9-LABEL: test_f64_oge_q:
439 ; P9:       # %bb.0:
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
443 ; P9-NEXT:    blr
445 ; NOVSX-LABEL: test_f64_oge_q:
446 ; NOVSX:       # %bb.0:
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
450 ; NOVSX-NEXT:    blr
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
455   ret i32 %res
458 define i32 @test_f64_olt_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
459 ; P8-LABEL: test_f64_olt_q:
460 ; P8:       # %bb.0:
461 ; P8-NEXT:    fcmpu cr0, f1, f2
462 ; P8-NEXT:    isellt r3, r3, r4
463 ; P8-NEXT:    blr
465 ; P9-LABEL: test_f64_olt_q:
466 ; P9:       # %bb.0:
467 ; P9-NEXT:    fcmpu cr0, f1, f2
468 ; P9-NEXT:    isellt r3, r3, r4
469 ; P9-NEXT:    blr
471 ; NOVSX-LABEL: test_f64_olt_q:
472 ; NOVSX:       # %bb.0:
473 ; NOVSX-NEXT:    fcmpu cr0, f1, f2
474 ; NOVSX-NEXT:    isellt r3, r3, r4
475 ; NOVSX-NEXT:    blr
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
480   ret i32 %res
483 define i32 @test_f64_ole_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
484 ; P8-LABEL: test_f64_ole_q:
485 ; P8:       # %bb.0:
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
489 ; P8-NEXT:    blr
491 ; P9-LABEL: test_f64_ole_q:
492 ; P9:       # %bb.0:
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
496 ; P9-NEXT:    blr
498 ; NOVSX-LABEL: test_f64_ole_q:
499 ; NOVSX:       # %bb.0:
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
503 ; NOVSX-NEXT:    blr
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
508   ret i32 %res
511 define i32 @test_f64_one_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
512 ; P8-LABEL: test_f64_one_q:
513 ; P8:       # %bb.0:
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
517 ; P8-NEXT:    blr
519 ; P9-LABEL: test_f64_one_q:
520 ; P9:       # %bb.0:
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
524 ; P9-NEXT:    blr
526 ; NOVSX-LABEL: test_f64_one_q:
527 ; NOVSX:       # %bb.0:
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
531 ; NOVSX-NEXT:    blr
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
536   ret i32 %res
539 define i32 @test_f64_ord_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
540 ; P8-LABEL: test_f64_ord_q:
541 ; P8:       # %bb.0:
542 ; P8-NEXT:    fcmpu cr0, f1, f2
543 ; P8-NEXT:    isel r3, r4, r3, un
544 ; P8-NEXT:    blr
546 ; P9-LABEL: test_f64_ord_q:
547 ; P9:       # %bb.0:
548 ; P9-NEXT:    fcmpu cr0, f1, f2
549 ; P9-NEXT:    isel r3, r4, r3, un
550 ; P9-NEXT:    blr
552 ; NOVSX-LABEL: test_f64_ord_q:
553 ; NOVSX:       # %bb.0:
554 ; NOVSX-NEXT:    fcmpu cr0, f1, f2
555 ; NOVSX-NEXT:    isel r3, r4, r3, un
556 ; NOVSX-NEXT:    blr
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
561   ret i32 %res
564 define i32 @test_f64_ueq_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
565 ; P8-LABEL: test_f64_ueq_q:
566 ; P8:       # %bb.0:
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
570 ; P8-NEXT:    blr
572 ; P9-LABEL: test_f64_ueq_q:
573 ; P9:       # %bb.0:
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
577 ; P9-NEXT:    blr
579 ; NOVSX-LABEL: test_f64_ueq_q:
580 ; NOVSX:       # %bb.0:
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
584 ; NOVSX-NEXT:    blr
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
589   ret i32 %res
592 define i32 @test_f64_ugt_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
593 ; P8-LABEL: test_f64_ugt_q:
594 ; P8:       # %bb.0:
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
598 ; P8-NEXT:    blr
600 ; P9-LABEL: test_f64_ugt_q:
601 ; P9:       # %bb.0:
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
605 ; P9-NEXT:    blr
607 ; NOVSX-LABEL: test_f64_ugt_q:
608 ; NOVSX:       # %bb.0:
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
612 ; NOVSX-NEXT:    blr
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
617   ret i32 %res
620 define i32 @test_f64_uge_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
621 ; P8-LABEL: test_f64_uge_q:
622 ; P8:       # %bb.0:
623 ; P8-NEXT:    fcmpu cr0, f1, f2
624 ; P8-NEXT:    isellt r3, r4, r3
625 ; P8-NEXT:    blr
627 ; P9-LABEL: test_f64_uge_q:
628 ; P9:       # %bb.0:
629 ; P9-NEXT:    fcmpu cr0, f1, f2
630 ; P9-NEXT:    isellt r3, r4, r3
631 ; P9-NEXT:    blr
633 ; NOVSX-LABEL: test_f64_uge_q:
634 ; NOVSX:       # %bb.0:
635 ; NOVSX-NEXT:    fcmpu cr0, f1, f2
636 ; NOVSX-NEXT:    isellt r3, r4, r3
637 ; NOVSX-NEXT:    blr
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
642   ret i32 %res
645 define i32 @test_f64_ult_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
646 ; P8-LABEL: test_f64_ult_q:
647 ; P8:       # %bb.0:
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
651 ; P8-NEXT:    blr
653 ; P9-LABEL: test_f64_ult_q:
654 ; P9:       # %bb.0:
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
658 ; P9-NEXT:    blr
660 ; NOVSX-LABEL: test_f64_ult_q:
661 ; NOVSX:       # %bb.0:
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
665 ; NOVSX-NEXT:    blr
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
670   ret i32 %res
673 define i32 @test_f64_ule_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
674 ; P8-LABEL: test_f64_ule_q:
675 ; P8:       # %bb.0:
676 ; P8-NEXT:    fcmpu cr0, f1, f2
677 ; P8-NEXT:    iselgt r3, r4, r3
678 ; P8-NEXT:    blr
680 ; P9-LABEL: test_f64_ule_q:
681 ; P9:       # %bb.0:
682 ; P9-NEXT:    fcmpu cr0, f1, f2
683 ; P9-NEXT:    iselgt r3, r4, r3
684 ; P9-NEXT:    blr
686 ; NOVSX-LABEL: test_f64_ule_q:
687 ; NOVSX:       # %bb.0:
688 ; NOVSX-NEXT:    fcmpu cr0, f1, f2
689 ; NOVSX-NEXT:    iselgt r3, r4, r3
690 ; NOVSX-NEXT:    blr
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
695   ret i32 %res
698 define i32 @test_f64_une_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
699 ; P8-LABEL: test_f64_une_q:
700 ; P8:       # %bb.0:
701 ; P8-NEXT:    fcmpu cr0, f1, f2
702 ; P8-NEXT:    iseleq r3, r4, r3
703 ; P8-NEXT:    blr
705 ; P9-LABEL: test_f64_une_q:
706 ; P9:       # %bb.0:
707 ; P9-NEXT:    fcmpu cr0, f1, f2
708 ; P9-NEXT:    iseleq r3, r4, r3
709 ; P9-NEXT:    blr
711 ; NOVSX-LABEL: test_f64_une_q:
712 ; NOVSX:       # %bb.0:
713 ; NOVSX-NEXT:    fcmpu cr0, f1, f2
714 ; NOVSX-NEXT:    iseleq r3, r4, r3
715 ; NOVSX-NEXT:    blr
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
720   ret i32 %res
723 define i32 @test_f64_uno_q(i32 %a, i32 %b, double %f1, double %f2) #0 {
724 ; P8-LABEL: test_f64_uno_q:
725 ; P8:       # %bb.0:
726 ; P8-NEXT:    fcmpu cr0, f1, f2
727 ; P8-NEXT:    isel r3, r3, r4, un
728 ; P8-NEXT:    blr
730 ; P9-LABEL: test_f64_uno_q:
731 ; P9:       # %bb.0:
732 ; P9-NEXT:    fcmpu cr0, f1, f2
733 ; P9-NEXT:    isel r3, r3, r4, un
734 ; P9-NEXT:    blr
736 ; NOVSX-LABEL: test_f64_uno_q:
737 ; NOVSX:       # %bb.0:
738 ; NOVSX-NEXT:    fcmpu cr0, f1, f2
739 ; NOVSX-NEXT:    isel r3, r3, r4, un
740 ; NOVSX-NEXT:    blr
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
745   ret i32 %res
748 define i32 @test_f32_oeq_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
749 ; P8-LABEL: test_f32_oeq_s:
750 ; P8:       # %bb.0:
751 ; P8-NEXT:    fcmpo cr0, f1, f2
752 ; P8-NEXT:    iseleq r3, r3, r4
753 ; P8-NEXT:    blr
755 ; P9-LABEL: test_f32_oeq_s:
756 ; P9:       # %bb.0:
757 ; P9-NEXT:    fcmpo cr0, f1, f2
758 ; P9-NEXT:    iseleq r3, r3, r4
759 ; P9-NEXT:    blr
761 ; NOVSX-LABEL: test_f32_oeq_s:
762 ; NOVSX:       # %bb.0:
763 ; NOVSX-NEXT:    fcmpo cr0, f1, f2
764 ; NOVSX-NEXT:    iseleq r3, r3, r4
765 ; NOVSX-NEXT:    blr
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
770   ret i32 %res
773 define i32 @test_f32_ogt_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
774 ; P8-LABEL: test_f32_ogt_s:
775 ; P8:       # %bb.0:
776 ; P8-NEXT:    fcmpo cr0, f1, f2
777 ; P8-NEXT:    iselgt r3, r3, r4
778 ; P8-NEXT:    blr
780 ; P9-LABEL: test_f32_ogt_s:
781 ; P9:       # %bb.0:
782 ; P9-NEXT:    fcmpo cr0, f1, f2
783 ; P9-NEXT:    iselgt r3, r3, r4
784 ; P9-NEXT:    blr
786 ; NOVSX-LABEL: test_f32_ogt_s:
787 ; NOVSX:       # %bb.0:
788 ; NOVSX-NEXT:    fcmpo cr0, f1, f2
789 ; NOVSX-NEXT:    iselgt r3, r3, r4
790 ; NOVSX-NEXT:    blr
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
795   ret i32 %res
798 define i32 @test_f32_oge_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
799 ; P8-LABEL: test_f32_oge_s:
800 ; P8:       # %bb.0:
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
804 ; P8-NEXT:    blr
806 ; P9-LABEL: test_f32_oge_s:
807 ; P9:       # %bb.0:
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
811 ; P9-NEXT:    blr
813 ; NOVSX-LABEL: test_f32_oge_s:
814 ; NOVSX:       # %bb.0:
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
818 ; NOVSX-NEXT:    blr
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
823   ret i32 %res
826 define i32 @test_f32_olt_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
827 ; P8-LABEL: test_f32_olt_s:
828 ; P8:       # %bb.0:
829 ; P8-NEXT:    fcmpo cr0, f1, f2
830 ; P8-NEXT:    isellt r3, r3, r4
831 ; P8-NEXT:    blr
833 ; P9-LABEL: test_f32_olt_s:
834 ; P9:       # %bb.0:
835 ; P9-NEXT:    fcmpo cr0, f1, f2
836 ; P9-NEXT:    isellt r3, r3, r4
837 ; P9-NEXT:    blr
839 ; NOVSX-LABEL: test_f32_olt_s:
840 ; NOVSX:       # %bb.0:
841 ; NOVSX-NEXT:    fcmpo cr0, f1, f2
842 ; NOVSX-NEXT:    isellt r3, r3, r4
843 ; NOVSX-NEXT:    blr
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
848   ret i32 %res
851 define i32 @test_f32_ole_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
852 ; P8-LABEL: test_f32_ole_s:
853 ; P8:       # %bb.0:
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
857 ; P8-NEXT:    blr
859 ; P9-LABEL: test_f32_ole_s:
860 ; P9:       # %bb.0:
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
864 ; P9-NEXT:    blr
866 ; NOVSX-LABEL: test_f32_ole_s:
867 ; NOVSX:       # %bb.0:
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
871 ; NOVSX-NEXT:    blr
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
876   ret i32 %res
879 define i32 @test_f32_one_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
880 ; P8-LABEL: test_f32_one_s:
881 ; P8:       # %bb.0:
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
885 ; P8-NEXT:    blr
887 ; P9-LABEL: test_f32_one_s:
888 ; P9:       # %bb.0:
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
892 ; P9-NEXT:    blr
894 ; NOVSX-LABEL: test_f32_one_s:
895 ; NOVSX:       # %bb.0:
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
899 ; NOVSX-NEXT:    blr
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
904   ret i32 %res
907 define i32 @test_f32_ord_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
908 ; P8-LABEL: test_f32_ord_s:
909 ; P8:       # %bb.0:
910 ; P8-NEXT:    fcmpo cr0, f1, f2
911 ; P8-NEXT:    isel r3, r4, r3, un
912 ; P8-NEXT:    blr
914 ; P9-LABEL: test_f32_ord_s:
915 ; P9:       # %bb.0:
916 ; P9-NEXT:    fcmpo cr0, f1, f2
917 ; P9-NEXT:    isel r3, r4, r3, un
918 ; P9-NEXT:    blr
920 ; NOVSX-LABEL: test_f32_ord_s:
921 ; NOVSX:       # %bb.0:
922 ; NOVSX-NEXT:    fcmpo cr0, f1, f2
923 ; NOVSX-NEXT:    isel r3, r4, r3, un
924 ; NOVSX-NEXT:    blr
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
929   ret i32 %res
932 define i32 @test_f32_ueq_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
933 ; P8-LABEL: test_f32_ueq_s:
934 ; P8:       # %bb.0:
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
938 ; P8-NEXT:    blr
940 ; P9-LABEL: test_f32_ueq_s:
941 ; P9:       # %bb.0:
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
945 ; P9-NEXT:    blr
947 ; NOVSX-LABEL: test_f32_ueq_s:
948 ; NOVSX:       # %bb.0:
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
952 ; NOVSX-NEXT:    blr
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
957   ret i32 %res
960 define i32 @test_f32_ugt_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
961 ; P8-LABEL: test_f32_ugt_s:
962 ; P8:       # %bb.0:
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
966 ; P8-NEXT:    blr
968 ; P9-LABEL: test_f32_ugt_s:
969 ; P9:       # %bb.0:
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
973 ; P9-NEXT:    blr
975 ; NOVSX-LABEL: test_f32_ugt_s:
976 ; NOVSX:       # %bb.0:
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
980 ; NOVSX-NEXT:    blr
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
985   ret i32 %res
988 define i32 @test_f32_uge_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
989 ; P8-LABEL: test_f32_uge_s:
990 ; P8:       # %bb.0:
991 ; P8-NEXT:    fcmpo cr0, f1, f2
992 ; P8-NEXT:    isellt r3, r4, r3
993 ; P8-NEXT:    blr
995 ; P9-LABEL: test_f32_uge_s:
996 ; P9:       # %bb.0:
997 ; P9-NEXT:    fcmpo cr0, f1, f2
998 ; P9-NEXT:    isellt r3, r4, r3
999 ; P9-NEXT:    blr
1001 ; NOVSX-LABEL: test_f32_uge_s:
1002 ; NOVSX:       # %bb.0:
1003 ; NOVSX-NEXT:    fcmpo cr0, f1, f2
1004 ; NOVSX-NEXT:    isellt r3, r4, r3
1005 ; NOVSX-NEXT:    blr
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
1010   ret i32 %res
1013 define i32 @test_f32_ult_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
1014 ; P8-LABEL: test_f32_ult_s:
1015 ; P8:       # %bb.0:
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
1019 ; P8-NEXT:    blr
1021 ; P9-LABEL: test_f32_ult_s:
1022 ; P9:       # %bb.0:
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
1026 ; P9-NEXT:    blr
1028 ; NOVSX-LABEL: test_f32_ult_s:
1029 ; NOVSX:       # %bb.0:
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
1033 ; NOVSX-NEXT:    blr
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
1038   ret i32 %res
1041 define i32 @test_f32_ule_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
1042 ; P8-LABEL: test_f32_ule_s:
1043 ; P8:       # %bb.0:
1044 ; P8-NEXT:    fcmpo cr0, f1, f2
1045 ; P8-NEXT:    iselgt r3, r4, r3
1046 ; P8-NEXT:    blr
1048 ; P9-LABEL: test_f32_ule_s:
1049 ; P9:       # %bb.0:
1050 ; P9-NEXT:    fcmpo cr0, f1, f2
1051 ; P9-NEXT:    iselgt r3, r4, r3
1052 ; P9-NEXT:    blr
1054 ; NOVSX-LABEL: test_f32_ule_s:
1055 ; NOVSX:       # %bb.0:
1056 ; NOVSX-NEXT:    fcmpo cr0, f1, f2
1057 ; NOVSX-NEXT:    iselgt r3, r4, r3
1058 ; NOVSX-NEXT:    blr
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
1063   ret i32 %res
1066 define i32 @test_f32_une_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
1067 ; P8-LABEL: test_f32_une_s:
1068 ; P8:       # %bb.0:
1069 ; P8-NEXT:    fcmpo cr0, f1, f2
1070 ; P8-NEXT:    iseleq r3, r4, r3
1071 ; P8-NEXT:    blr
1073 ; P9-LABEL: test_f32_une_s:
1074 ; P9:       # %bb.0:
1075 ; P9-NEXT:    fcmpo cr0, f1, f2
1076 ; P9-NEXT:    iseleq r3, r4, r3
1077 ; P9-NEXT:    blr
1079 ; NOVSX-LABEL: test_f32_une_s:
1080 ; NOVSX:       # %bb.0:
1081 ; NOVSX-NEXT:    fcmpo cr0, f1, f2
1082 ; NOVSX-NEXT:    iseleq r3, r4, r3
1083 ; NOVSX-NEXT:    blr
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
1088   ret i32 %res
1091 define i32 @test_f32_uno_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
1092 ; P8-LABEL: test_f32_uno_s:
1093 ; P8:       # %bb.0:
1094 ; P8-NEXT:    fcmpo cr0, f1, f2
1095 ; P8-NEXT:    isel r3, r3, r4, un
1096 ; P8-NEXT:    blr
1098 ; P9-LABEL: test_f32_uno_s:
1099 ; P9:       # %bb.0:
1100 ; P9-NEXT:    fcmpo cr0, f1, f2
1101 ; P9-NEXT:    isel r3, r3, r4, un
1102 ; P9-NEXT:    blr
1104 ; NOVSX-LABEL: test_f32_uno_s:
1105 ; NOVSX:       # %bb.0:
1106 ; NOVSX-NEXT:    fcmpo cr0, f1, f2
1107 ; NOVSX-NEXT:    isel r3, r3, r4, un
1108 ; NOVSX-NEXT:    blr
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
1113   ret i32 %res
1116 define i32 @test_f64_oeq_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1117 ; P8-LABEL: test_f64_oeq_s:
1118 ; P8:       # %bb.0:
1119 ; P8-NEXT:    fcmpo cr0, f1, f2
1120 ; P8-NEXT:    iseleq r3, r3, r4
1121 ; P8-NEXT:    blr
1123 ; P9-LABEL: test_f64_oeq_s:
1124 ; P9:       # %bb.0:
1125 ; P9-NEXT:    fcmpo cr0, f1, f2
1126 ; P9-NEXT:    iseleq r3, r3, r4
1127 ; P9-NEXT:    blr
1129 ; NOVSX-LABEL: test_f64_oeq_s:
1130 ; NOVSX:       # %bb.0:
1131 ; NOVSX-NEXT:    fcmpo cr0, f1, f2
1132 ; NOVSX-NEXT:    iseleq r3, r3, r4
1133 ; NOVSX-NEXT:    blr
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
1138   ret i32 %res
1141 define i32 @test_f64_ogt_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1142 ; P8-LABEL: test_f64_ogt_s:
1143 ; P8:       # %bb.0:
1144 ; P8-NEXT:    fcmpo cr0, f1, f2
1145 ; P8-NEXT:    iselgt r3, r3, r4
1146 ; P8-NEXT:    blr
1148 ; P9-LABEL: test_f64_ogt_s:
1149 ; P9:       # %bb.0:
1150 ; P9-NEXT:    fcmpo cr0, f1, f2
1151 ; P9-NEXT:    iselgt r3, r3, r4
1152 ; P9-NEXT:    blr
1154 ; NOVSX-LABEL: test_f64_ogt_s:
1155 ; NOVSX:       # %bb.0:
1156 ; NOVSX-NEXT:    fcmpo cr0, f1, f2
1157 ; NOVSX-NEXT:    iselgt r3, r3, r4
1158 ; NOVSX-NEXT:    blr
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
1163   ret i32 %res
1166 define i32 @test_f64_oge_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1167 ; P8-LABEL: test_f64_oge_s:
1168 ; P8:       # %bb.0:
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
1172 ; P8-NEXT:    blr
1174 ; P9-LABEL: test_f64_oge_s:
1175 ; P9:       # %bb.0:
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
1179 ; P9-NEXT:    blr
1181 ; NOVSX-LABEL: test_f64_oge_s:
1182 ; NOVSX:       # %bb.0:
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
1186 ; NOVSX-NEXT:    blr
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
1191   ret i32 %res
1194 define i32 @test_f64_olt_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1195 ; P8-LABEL: test_f64_olt_s:
1196 ; P8:       # %bb.0:
1197 ; P8-NEXT:    fcmpo cr0, f1, f2
1198 ; P8-NEXT:    isellt r3, r3, r4
1199 ; P8-NEXT:    blr
1201 ; P9-LABEL: test_f64_olt_s:
1202 ; P9:       # %bb.0:
1203 ; P9-NEXT:    fcmpo cr0, f1, f2
1204 ; P9-NEXT:    isellt r3, r3, r4
1205 ; P9-NEXT:    blr
1207 ; NOVSX-LABEL: test_f64_olt_s:
1208 ; NOVSX:       # %bb.0:
1209 ; NOVSX-NEXT:    fcmpo cr0, f1, f2
1210 ; NOVSX-NEXT:    isellt r3, r3, r4
1211 ; NOVSX-NEXT:    blr
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
1216   ret i32 %res
1219 define i32 @test_f64_ole_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1220 ; P8-LABEL: test_f64_ole_s:
1221 ; P8:       # %bb.0:
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
1225 ; P8-NEXT:    blr
1227 ; P9-LABEL: test_f64_ole_s:
1228 ; P9:       # %bb.0:
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
1232 ; P9-NEXT:    blr
1234 ; NOVSX-LABEL: test_f64_ole_s:
1235 ; NOVSX:       # %bb.0:
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
1239 ; NOVSX-NEXT:    blr
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
1244   ret i32 %res
1247 define i32 @test_f64_one_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1248 ; P8-LABEL: test_f64_one_s:
1249 ; P8:       # %bb.0:
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
1253 ; P8-NEXT:    blr
1255 ; P9-LABEL: test_f64_one_s:
1256 ; P9:       # %bb.0:
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
1260 ; P9-NEXT:    blr
1262 ; NOVSX-LABEL: test_f64_one_s:
1263 ; NOVSX:       # %bb.0:
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
1267 ; NOVSX-NEXT:    blr
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
1272   ret i32 %res
1275 define i32 @test_f64_ord_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1276 ; P8-LABEL: test_f64_ord_s:
1277 ; P8:       # %bb.0:
1278 ; P8-NEXT:    fcmpo cr0, f1, f2
1279 ; P8-NEXT:    isel r3, r4, r3, un
1280 ; P8-NEXT:    blr
1282 ; P9-LABEL: test_f64_ord_s:
1283 ; P9:       # %bb.0:
1284 ; P9-NEXT:    fcmpo cr0, f1, f2
1285 ; P9-NEXT:    isel r3, r4, r3, un
1286 ; P9-NEXT:    blr
1288 ; NOVSX-LABEL: test_f64_ord_s:
1289 ; NOVSX:       # %bb.0:
1290 ; NOVSX-NEXT:    fcmpo cr0, f1, f2
1291 ; NOVSX-NEXT:    isel r3, r4, r3, un
1292 ; NOVSX-NEXT:    blr
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
1297   ret i32 %res
1300 define i32 @test_f64_ueq_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1301 ; P8-LABEL: test_f64_ueq_s:
1302 ; P8:       # %bb.0:
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
1306 ; P8-NEXT:    blr
1308 ; P9-LABEL: test_f64_ueq_s:
1309 ; P9:       # %bb.0:
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
1313 ; P9-NEXT:    blr
1315 ; NOVSX-LABEL: test_f64_ueq_s:
1316 ; NOVSX:       # %bb.0:
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
1320 ; NOVSX-NEXT:    blr
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
1325   ret i32 %res
1328 define i32 @test_f64_ugt_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1329 ; P8-LABEL: test_f64_ugt_s:
1330 ; P8:       # %bb.0:
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
1334 ; P8-NEXT:    blr
1336 ; P9-LABEL: test_f64_ugt_s:
1337 ; P9:       # %bb.0:
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
1341 ; P9-NEXT:    blr
1343 ; NOVSX-LABEL: test_f64_ugt_s:
1344 ; NOVSX:       # %bb.0:
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
1348 ; NOVSX-NEXT:    blr
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
1353   ret i32 %res
1356 define i32 @test_f64_uge_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1357 ; P8-LABEL: test_f64_uge_s:
1358 ; P8:       # %bb.0:
1359 ; P8-NEXT:    fcmpo cr0, f1, f2
1360 ; P8-NEXT:    isellt r3, r4, r3
1361 ; P8-NEXT:    blr
1363 ; P9-LABEL: test_f64_uge_s:
1364 ; P9:       # %bb.0:
1365 ; P9-NEXT:    fcmpo cr0, f1, f2
1366 ; P9-NEXT:    isellt r3, r4, r3
1367 ; P9-NEXT:    blr
1369 ; NOVSX-LABEL: test_f64_uge_s:
1370 ; NOVSX:       # %bb.0:
1371 ; NOVSX-NEXT:    fcmpo cr0, f1, f2
1372 ; NOVSX-NEXT:    isellt r3, r4, r3
1373 ; NOVSX-NEXT:    blr
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
1378   ret i32 %res
1381 define i32 @test_f64_ult_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1382 ; P8-LABEL: test_f64_ult_s:
1383 ; P8:       # %bb.0:
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
1387 ; P8-NEXT:    blr
1389 ; P9-LABEL: test_f64_ult_s:
1390 ; P9:       # %bb.0:
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
1394 ; P9-NEXT:    blr
1396 ; NOVSX-LABEL: test_f64_ult_s:
1397 ; NOVSX:       # %bb.0:
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
1401 ; NOVSX-NEXT:    blr
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
1406   ret i32 %res
1409 define i32 @test_f64_ule_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1410 ; P8-LABEL: test_f64_ule_s:
1411 ; P8:       # %bb.0:
1412 ; P8-NEXT:    fcmpo cr0, f1, f2
1413 ; P8-NEXT:    iselgt r3, r4, r3
1414 ; P8-NEXT:    blr
1416 ; P9-LABEL: test_f64_ule_s:
1417 ; P9:       # %bb.0:
1418 ; P9-NEXT:    fcmpo cr0, f1, f2
1419 ; P9-NEXT:    iselgt r3, r4, r3
1420 ; P9-NEXT:    blr
1422 ; NOVSX-LABEL: test_f64_ule_s:
1423 ; NOVSX:       # %bb.0:
1424 ; NOVSX-NEXT:    fcmpo cr0, f1, f2
1425 ; NOVSX-NEXT:    iselgt r3, r4, r3
1426 ; NOVSX-NEXT:    blr
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
1431   ret i32 %res
1434 define i32 @test_f64_une_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1435 ; P8-LABEL: test_f64_une_s:
1436 ; P8:       # %bb.0:
1437 ; P8-NEXT:    fcmpo cr0, f1, f2
1438 ; P8-NEXT:    iseleq r3, r4, r3
1439 ; P8-NEXT:    blr
1441 ; P9-LABEL: test_f64_une_s:
1442 ; P9:       # %bb.0:
1443 ; P9-NEXT:    fcmpo cr0, f1, f2
1444 ; P9-NEXT:    iseleq r3, r4, r3
1445 ; P9-NEXT:    blr
1447 ; NOVSX-LABEL: test_f64_une_s:
1448 ; NOVSX:       # %bb.0:
1449 ; NOVSX-NEXT:    fcmpo cr0, f1, f2
1450 ; NOVSX-NEXT:    iseleq r3, r4, r3
1451 ; NOVSX-NEXT:    blr
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
1456   ret i32 %res
1459 define i32 @test_f64_uno_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
1460 ; P8-LABEL: test_f64_uno_s:
1461 ; P8:       # %bb.0:
1462 ; P8-NEXT:    fcmpo cr0, f1, f2
1463 ; P8-NEXT:    isel r3, r3, r4, un
1464 ; P8-NEXT:    blr
1466 ; P9-LABEL: test_f64_uno_s:
1467 ; P9:       # %bb.0:
1468 ; P9-NEXT:    fcmpo cr0, f1, f2
1469 ; P9-NEXT:    isel r3, r3, r4, un
1470 ; P9-NEXT:    blr
1472 ; NOVSX-LABEL: test_f64_uno_s:
1473 ; NOVSX:       # %bb.0:
1474 ; NOVSX-NEXT:    fcmpo cr0, f1, f2
1475 ; NOVSX-NEXT:    isel r3, r3, r4, un
1476 ; NOVSX-NEXT:    blr
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
1481   ret i32 %res
1484 define i32 @fcmp_olt_f128(fp128 %a, fp128 %b) #0 {
1485 ; P8-LABEL: fcmp_olt_f128:
1486 ; P8:       # %bb.0:
1487 ; P8-NEXT:    mflr r0
1488 ; P8-NEXT:    stdu r1, -112(r1)
1489 ; P8-NEXT:    std r0, 128(r1)
1490 ; P8-NEXT:    bl __ltkf2
1491 ; P8-NEXT:    nop
1492 ; P8-NEXT:    rlwinm r3, r3, 1, 31, 31
1493 ; P8-NEXT:    addi r1, r1, 112
1494 ; P8-NEXT:    ld r0, 16(r1)
1495 ; P8-NEXT:    mtlr r0
1496 ; P8-NEXT:    blr
1498 ; P9-LABEL: fcmp_olt_f128:
1499 ; P9:       # %bb.0:
1500 ; P9-NEXT:    xscmpuqp cr0, v2, v3
1501 ; P9-NEXT:    li r3, 0
1502 ; P9-NEXT:    li r4, 1
1503 ; P9-NEXT:    isellt r3, r4, r3
1504 ; P9-NEXT:    blr
1506 ; NOVSX-LABEL: fcmp_olt_f128:
1507 ; NOVSX:       # %bb.0:
1508 ; NOVSX-NEXT:    mflr r0
1509 ; NOVSX-NEXT:    stdu r1, -32(r1)
1510 ; NOVSX-NEXT:    std r0, 48(r1)
1511 ; NOVSX-NEXT:    bl __ltkf2
1512 ; NOVSX-NEXT:    nop
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
1517 ; NOVSX-NEXT:    blr
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
1520   ret i32 %conv
1523 define i32 @fcmp_ole_f128(fp128 %a, fp128 %b) #0 {
1524 ; P8-LABEL: fcmp_ole_f128:
1525 ; P8:       # %bb.0:
1526 ; P8-NEXT:    mflr r0
1527 ; P8-NEXT:    stdu r1, -112(r1)
1528 ; P8-NEXT:    std r0, 128(r1)
1529 ; P8-NEXT:    bl __lekf2
1530 ; P8-NEXT:    nop
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)
1537 ; P8-NEXT:    mtlr r0
1538 ; P8-NEXT:    blr
1540 ; P9-LABEL: fcmp_ole_f128:
1541 ; P9:       # %bb.0:
1542 ; P9-NEXT:    xscmpuqp cr0, v2, v3
1543 ; P9-NEXT:    li r3, 1
1544 ; P9-NEXT:    cror 4*cr5+lt, un, gt
1545 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
1546 ; P9-NEXT:    blr
1548 ; NOVSX-LABEL: fcmp_ole_f128:
1549 ; NOVSX:       # %bb.0:
1550 ; NOVSX-NEXT:    mflr r0
1551 ; NOVSX-NEXT:    stdu r1, -32(r1)
1552 ; NOVSX-NEXT:    std r0, 48(r1)
1553 ; NOVSX-NEXT:    bl __lekf2
1554 ; NOVSX-NEXT:    nop
1555 ; NOVSX-NEXT:    extsw r3, r3
1556 ; NOVSX-NEXT:    neg r3, r3
1557 ; NOVSX-NEXT:    rldicl r3, r3, 1, 63
1558 ; NOVSX-NEXT:    xori r3, r3, 1
1559 ; NOVSX-NEXT:    addi r1, r1, 32
1560 ; NOVSX-NEXT:    ld r0, 16(r1)
1561 ; NOVSX-NEXT:    mtlr r0
1562 ; NOVSX-NEXT:    blr
1563   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #0
1564   %conv = zext i1 %cmp to i32
1565   ret i32 %conv
1568 define i32 @fcmp_ogt_f128(fp128 %a, fp128 %b) #0 {
1569 ; P8-LABEL: fcmp_ogt_f128:
1570 ; P8:       # %bb.0:
1571 ; P8-NEXT:    mflr r0
1572 ; P8-NEXT:    stdu r1, -112(r1)
1573 ; P8-NEXT:    std r0, 128(r1)
1574 ; P8-NEXT:    bl __gtkf2
1575 ; P8-NEXT:    nop
1576 ; P8-NEXT:    extsw r3, r3
1577 ; P8-NEXT:    neg r3, r3
1578 ; P8-NEXT:    rldicl r3, r3, 1, 63
1579 ; P8-NEXT:    addi r1, r1, 112
1580 ; P8-NEXT:    ld r0, 16(r1)
1581 ; P8-NEXT:    mtlr r0
1582 ; P8-NEXT:    blr
1584 ; P9-LABEL: fcmp_ogt_f128:
1585 ; P9:       # %bb.0:
1586 ; P9-NEXT:    xscmpuqp cr0, v2, v3
1587 ; P9-NEXT:    li r3, 0
1588 ; P9-NEXT:    li r4, 1
1589 ; P9-NEXT:    iselgt r3, r4, r3
1590 ; P9-NEXT:    blr
1592 ; NOVSX-LABEL: fcmp_ogt_f128:
1593 ; NOVSX:       # %bb.0:
1594 ; NOVSX-NEXT:    mflr r0
1595 ; NOVSX-NEXT:    stdu r1, -32(r1)
1596 ; NOVSX-NEXT:    std r0, 48(r1)
1597 ; NOVSX-NEXT:    bl __gtkf2
1598 ; NOVSX-NEXT:    nop
1599 ; NOVSX-NEXT:    extsw r3, r3
1600 ; NOVSX-NEXT:    neg r3, r3
1601 ; NOVSX-NEXT:    rldicl r3, r3, 1, 63
1602 ; NOVSX-NEXT:    addi r1, r1, 32
1603 ; NOVSX-NEXT:    ld r0, 16(r1)
1604 ; NOVSX-NEXT:    mtlr r0
1605 ; NOVSX-NEXT:    blr
1606   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #0
1607   %conv = zext i1 %cmp to i32
1608   ret i32 %conv
1611 define i32 @fcmp_oge_f128(fp128 %a, fp128 %b) #0 {
1612 ; P8-LABEL: fcmp_oge_f128:
1613 ; P8:       # %bb.0:
1614 ; P8-NEXT:    mflr r0
1615 ; P8-NEXT:    stdu r1, -112(r1)
1616 ; P8-NEXT:    std r0, 128(r1)
1617 ; P8-NEXT:    bl __gekf2
1618 ; P8-NEXT:    nop
1619 ; P8-NEXT:    rlwinm r3, r3, 1, 31, 31
1620 ; P8-NEXT:    xori r3, r3, 1
1621 ; P8-NEXT:    addi r1, r1, 112
1622 ; P8-NEXT:    ld r0, 16(r1)
1623 ; P8-NEXT:    mtlr r0
1624 ; P8-NEXT:    blr
1626 ; P9-LABEL: fcmp_oge_f128:
1627 ; P9:       # %bb.0:
1628 ; P9-NEXT:    xscmpuqp cr0, v2, v3
1629 ; P9-NEXT:    li r3, 1
1630 ; P9-NEXT:    cror 4*cr5+lt, un, lt
1631 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
1632 ; P9-NEXT:    blr
1634 ; NOVSX-LABEL: fcmp_oge_f128:
1635 ; NOVSX:       # %bb.0:
1636 ; NOVSX-NEXT:    mflr r0
1637 ; NOVSX-NEXT:    stdu r1, -32(r1)
1638 ; NOVSX-NEXT:    std r0, 48(r1)
1639 ; NOVSX-NEXT:    bl __gekf2
1640 ; NOVSX-NEXT:    nop
1641 ; NOVSX-NEXT:    rlwinm r3, r3, 1, 31, 31
1642 ; NOVSX-NEXT:    xori r3, r3, 1
1643 ; NOVSX-NEXT:    addi r1, r1, 32
1644 ; NOVSX-NEXT:    ld r0, 16(r1)
1645 ; NOVSX-NEXT:    mtlr r0
1646 ; NOVSX-NEXT:    blr
1647   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #0
1648   %conv = zext i1 %cmp to i32
1649   ret i32 %conv
1652 define i32 @fcmp_oeq_f128(fp128 %a, fp128 %b) #0 {
1653 ; P8-LABEL: fcmp_oeq_f128:
1654 ; P8:       # %bb.0:
1655 ; P8-NEXT:    mflr r0
1656 ; P8-NEXT:    stdu r1, -112(r1)
1657 ; P8-NEXT:    std r0, 128(r1)
1658 ; P8-NEXT:    bl __eqkf2
1659 ; P8-NEXT:    nop
1660 ; P8-NEXT:    cntlzw r3, r3
1661 ; P8-NEXT:    srwi r3, r3, 5
1662 ; P8-NEXT:    addi r1, r1, 112
1663 ; P8-NEXT:    ld r0, 16(r1)
1664 ; P8-NEXT:    mtlr r0
1665 ; P8-NEXT:    blr
1667 ; P9-LABEL: fcmp_oeq_f128:
1668 ; P9:       # %bb.0:
1669 ; P9-NEXT:    xscmpuqp cr0, v2, v3
1670 ; P9-NEXT:    li r3, 0
1671 ; P9-NEXT:    li r4, 1
1672 ; P9-NEXT:    iseleq r3, r4, r3
1673 ; P9-NEXT:    blr
1675 ; NOVSX-LABEL: fcmp_oeq_f128:
1676 ; NOVSX:       # %bb.0:
1677 ; NOVSX-NEXT:    mflr r0
1678 ; NOVSX-NEXT:    stdu r1, -32(r1)
1679 ; NOVSX-NEXT:    std r0, 48(r1)
1680 ; NOVSX-NEXT:    bl __eqkf2
1681 ; NOVSX-NEXT:    nop
1682 ; NOVSX-NEXT:    cntlzw r3, r3
1683 ; NOVSX-NEXT:    srwi r3, r3, 5
1684 ; NOVSX-NEXT:    addi r1, r1, 32
1685 ; NOVSX-NEXT:    ld r0, 16(r1)
1686 ; NOVSX-NEXT:    mtlr r0
1687 ; NOVSX-NEXT:    blr
1688   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #0
1689   %conv = zext i1 %cmp to i32
1690   ret i32 %conv
1693 define i32 @fcmp_one_f128(fp128 %a, fp128 %b) #0 {
1694 ; P8-LABEL: fcmp_one_f128:
1695 ; P8:       # %bb.0:
1696 ; P8-NEXT:    mflr r0
1697 ; P8-NEXT:    stdu r1, -176(r1)
1698 ; P8-NEXT:    li r3, 128
1699 ; P8-NEXT:    std r0, 192(r1)
1700 ; P8-NEXT:    std r30, 160(r1) # 8-byte Folded Spill
1701 ; P8-NEXT:    stxvd2x v30, r1, r3 # 16-byte Folded Spill
1702 ; P8-NEXT:    li r3, 144
1703 ; P8-NEXT:    vmr v30, v2
1704 ; P8-NEXT:    stxvd2x v31, r1, r3 # 16-byte Folded Spill
1705 ; P8-NEXT:    vmr v31, v3
1706 ; P8-NEXT:    bl __unordkf2
1707 ; P8-NEXT:    nop
1708 ; P8-NEXT:    cntlzw r3, r3
1709 ; P8-NEXT:    vmr v2, v30
1710 ; P8-NEXT:    vmr v3, v31
1711 ; P8-NEXT:    srwi r30, r3, 5
1712 ; P8-NEXT:    bl __eqkf2
1713 ; P8-NEXT:    nop
1714 ; P8-NEXT:    cntlzw r3, r3
1715 ; P8-NEXT:    li r4, 144
1716 ; P8-NEXT:    lxvd2x v31, r1, r4 # 16-byte Folded Reload
1717 ; P8-NEXT:    li r4, 128
1718 ; P8-NEXT:    srwi r3, r3, 5
1719 ; P8-NEXT:    lxvd2x v30, r1, r4 # 16-byte Folded Reload
1720 ; P8-NEXT:    xori r3, r3, 1
1721 ; P8-NEXT:    and r3, r30, r3
1722 ; P8-NEXT:    ld r30, 160(r1) # 8-byte Folded Reload
1723 ; P8-NEXT:    addi r1, r1, 176
1724 ; P8-NEXT:    ld r0, 16(r1)
1725 ; P8-NEXT:    mtlr r0
1726 ; P8-NEXT:    blr
1728 ; P9-LABEL: fcmp_one_f128:
1729 ; P9:       # %bb.0:
1730 ; P9-NEXT:    xscmpuqp cr0, v2, v3
1731 ; P9-NEXT:    li r3, 1
1732 ; P9-NEXT:    cror 4*cr5+lt, un, eq
1733 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
1734 ; P9-NEXT:    blr
1736 ; NOVSX-LABEL: fcmp_one_f128:
1737 ; NOVSX:       # %bb.0:
1738 ; NOVSX-NEXT:    mflr r0
1739 ; NOVSX-NEXT:    std r26, -48(r1) # 8-byte Folded Spill
1740 ; NOVSX-NEXT:    std r27, -40(r1) # 8-byte Folded Spill
1741 ; NOVSX-NEXT:    std r28, -32(r1) # 8-byte Folded Spill
1742 ; NOVSX-NEXT:    std r29, -24(r1) # 8-byte Folded Spill
1743 ; NOVSX-NEXT:    std r30, -16(r1) # 8-byte Folded Spill
1744 ; NOVSX-NEXT:    stdu r1, -80(r1)
1745 ; NOVSX-NEXT:    std r0, 96(r1)
1746 ; NOVSX-NEXT:    mr r30, r6
1747 ; NOVSX-NEXT:    mr r29, r5
1748 ; NOVSX-NEXT:    mr r28, r4
1749 ; NOVSX-NEXT:    mr r27, r3
1750 ; NOVSX-NEXT:    bl __unordkf2
1751 ; NOVSX-NEXT:    nop
1752 ; NOVSX-NEXT:    cntlzw r3, r3
1753 ; NOVSX-NEXT:    mr r4, r28
1754 ; NOVSX-NEXT:    mr r5, r29
1755 ; NOVSX-NEXT:    mr r6, r30
1756 ; NOVSX-NEXT:    srwi r26, r3, 5
1757 ; NOVSX-NEXT:    mr r3, r27
1758 ; NOVSX-NEXT:    bl __eqkf2
1759 ; NOVSX-NEXT:    nop
1760 ; NOVSX-NEXT:    cntlzw r3, r3
1761 ; NOVSX-NEXT:    srwi r3, r3, 5
1762 ; NOVSX-NEXT:    xori r3, r3, 1
1763 ; NOVSX-NEXT:    and r3, r26, r3
1764 ; NOVSX-NEXT:    addi r1, r1, 80
1765 ; NOVSX-NEXT:    ld r0, 16(r1)
1766 ; NOVSX-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload
1767 ; NOVSX-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload
1768 ; NOVSX-NEXT:    ld r28, -32(r1) # 8-byte Folded Reload
1769 ; NOVSX-NEXT:    ld r27, -40(r1) # 8-byte Folded Reload
1770 ; NOVSX-NEXT:    ld r26, -48(r1) # 8-byte Folded Reload
1771 ; NOVSX-NEXT:    mtlr r0
1772 ; NOVSX-NEXT:    blr
1773   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"one", metadata !"fpexcept.strict") #0
1774   %conv = zext i1 %cmp to i32
1775   ret i32 %conv
1778 define i32 @fcmp_ult_f128(fp128 %a, fp128 %b) #0 {
1779 ; P8-LABEL: fcmp_ult_f128:
1780 ; P8:       # %bb.0:
1781 ; P8-NEXT:    mflr r0
1782 ; P8-NEXT:    stdu r1, -112(r1)
1783 ; P8-NEXT:    std r0, 128(r1)
1784 ; P8-NEXT:    bl __gekf2
1785 ; P8-NEXT:    nop
1786 ; P8-NEXT:    rlwinm r3, r3, 1, 31, 31
1787 ; P8-NEXT:    addi r1, r1, 112
1788 ; P8-NEXT:    ld r0, 16(r1)
1789 ; P8-NEXT:    mtlr r0
1790 ; P8-NEXT:    blr
1792 ; P9-LABEL: fcmp_ult_f128:
1793 ; P9:       # %bb.0:
1794 ; P9-NEXT:    xscmpuqp cr0, v2, v3
1795 ; P9-NEXT:    li r3, 1
1796 ; P9-NEXT:    crnor 4*cr5+lt, lt, un
1797 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
1798 ; P9-NEXT:    blr
1800 ; NOVSX-LABEL: fcmp_ult_f128:
1801 ; NOVSX:       # %bb.0:
1802 ; NOVSX-NEXT:    mflr r0
1803 ; NOVSX-NEXT:    stdu r1, -32(r1)
1804 ; NOVSX-NEXT:    std r0, 48(r1)
1805 ; NOVSX-NEXT:    bl __gekf2
1806 ; NOVSX-NEXT:    nop
1807 ; NOVSX-NEXT:    rlwinm r3, r3, 1, 31, 31
1808 ; NOVSX-NEXT:    addi r1, r1, 32
1809 ; NOVSX-NEXT:    ld r0, 16(r1)
1810 ; NOVSX-NEXT:    mtlr r0
1811 ; NOVSX-NEXT:    blr
1812   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #0
1813   %conv = zext i1 %cmp to i32
1814   ret i32 %conv
1817 define i32 @fcmp_ule_f128(fp128 %a, fp128 %b) #0 {
1818 ; P8-LABEL: fcmp_ule_f128:
1819 ; P8:       # %bb.0:
1820 ; P8-NEXT:    mflr r0
1821 ; P8-NEXT:    stdu r1, -112(r1)
1822 ; P8-NEXT:    std r0, 128(r1)
1823 ; P8-NEXT:    bl __gtkf2
1824 ; P8-NEXT:    nop
1825 ; P8-NEXT:    extsw r3, r3
1826 ; P8-NEXT:    neg r3, r3
1827 ; P8-NEXT:    rldicl r3, r3, 1, 63
1828 ; P8-NEXT:    xori r3, r3, 1
1829 ; P8-NEXT:    addi r1, r1, 112
1830 ; P8-NEXT:    ld r0, 16(r1)
1831 ; P8-NEXT:    mtlr r0
1832 ; P8-NEXT:    blr
1834 ; P9-LABEL: fcmp_ule_f128:
1835 ; P9:       # %bb.0:
1836 ; P9-NEXT:    xscmpuqp cr0, v2, v3
1837 ; P9-NEXT:    li r3, 1
1838 ; P9-NEXT:    iselgt r3, 0, r3
1839 ; P9-NEXT:    blr
1841 ; NOVSX-LABEL: fcmp_ule_f128:
1842 ; NOVSX:       # %bb.0:
1843 ; NOVSX-NEXT:    mflr r0
1844 ; NOVSX-NEXT:    stdu r1, -32(r1)
1845 ; NOVSX-NEXT:    std r0, 48(r1)
1846 ; NOVSX-NEXT:    bl __gtkf2
1847 ; NOVSX-NEXT:    nop
1848 ; NOVSX-NEXT:    extsw r3, r3
1849 ; NOVSX-NEXT:    neg r3, r3
1850 ; NOVSX-NEXT:    rldicl r3, r3, 1, 63
1851 ; NOVSX-NEXT:    xori r3, r3, 1
1852 ; NOVSX-NEXT:    addi r1, r1, 32
1853 ; NOVSX-NEXT:    ld r0, 16(r1)
1854 ; NOVSX-NEXT:    mtlr r0
1855 ; NOVSX-NEXT:    blr
1856   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #0
1857   %conv = zext i1 %cmp to i32
1858   ret i32 %conv
1861 define i32 @fcmp_ugt_f128(fp128 %a, fp128 %b) #0 {
1862 ; P8-LABEL: fcmp_ugt_f128:
1863 ; P8:       # %bb.0:
1864 ; P8-NEXT:    mflr r0
1865 ; P8-NEXT:    stdu r1, -112(r1)
1866 ; P8-NEXT:    std r0, 128(r1)
1867 ; P8-NEXT:    bl __lekf2
1868 ; P8-NEXT:    nop
1869 ; P8-NEXT:    extsw r3, r3
1870 ; P8-NEXT:    neg r3, r3
1871 ; P8-NEXT:    rldicl r3, r3, 1, 63
1872 ; P8-NEXT:    addi r1, r1, 112
1873 ; P8-NEXT:    ld r0, 16(r1)
1874 ; P8-NEXT:    mtlr r0
1875 ; P8-NEXT:    blr
1877 ; P9-LABEL: fcmp_ugt_f128:
1878 ; P9:       # %bb.0:
1879 ; P9-NEXT:    xscmpuqp cr0, v2, v3
1880 ; P9-NEXT:    li r3, 1
1881 ; P9-NEXT:    crnor 4*cr5+lt, gt, un
1882 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
1883 ; P9-NEXT:    blr
1885 ; NOVSX-LABEL: fcmp_ugt_f128:
1886 ; NOVSX:       # %bb.0:
1887 ; NOVSX-NEXT:    mflr r0
1888 ; NOVSX-NEXT:    stdu r1, -32(r1)
1889 ; NOVSX-NEXT:    std r0, 48(r1)
1890 ; NOVSX-NEXT:    bl __lekf2
1891 ; NOVSX-NEXT:    nop
1892 ; NOVSX-NEXT:    extsw r3, r3
1893 ; NOVSX-NEXT:    neg r3, r3
1894 ; NOVSX-NEXT:    rldicl r3, r3, 1, 63
1895 ; NOVSX-NEXT:    addi r1, r1, 32
1896 ; NOVSX-NEXT:    ld r0, 16(r1)
1897 ; NOVSX-NEXT:    mtlr r0
1898 ; NOVSX-NEXT:    blr
1899   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #0
1900   %conv = zext i1 %cmp to i32
1901   ret i32 %conv
1904 define i32 @fcmp_uge_f128(fp128 %a, fp128 %b) #0 {
1905 ; P8-LABEL: fcmp_uge_f128:
1906 ; P8:       # %bb.0:
1907 ; P8-NEXT:    mflr r0
1908 ; P8-NEXT:    stdu r1, -112(r1)
1909 ; P8-NEXT:    std r0, 128(r1)
1910 ; P8-NEXT:    bl __ltkf2
1911 ; P8-NEXT:    nop
1912 ; P8-NEXT:    rlwinm r3, r3, 1, 31, 31
1913 ; P8-NEXT:    xori r3, r3, 1
1914 ; P8-NEXT:    addi r1, r1, 112
1915 ; P8-NEXT:    ld r0, 16(r1)
1916 ; P8-NEXT:    mtlr r0
1917 ; P8-NEXT:    blr
1919 ; P9-LABEL: fcmp_uge_f128:
1920 ; P9:       # %bb.0:
1921 ; P9-NEXT:    xscmpuqp cr0, v2, v3
1922 ; P9-NEXT:    li r3, 1
1923 ; P9-NEXT:    isellt r3, 0, r3
1924 ; P9-NEXT:    blr
1926 ; NOVSX-LABEL: fcmp_uge_f128:
1927 ; NOVSX:       # %bb.0:
1928 ; NOVSX-NEXT:    mflr r0
1929 ; NOVSX-NEXT:    stdu r1, -32(r1)
1930 ; NOVSX-NEXT:    std r0, 48(r1)
1931 ; NOVSX-NEXT:    bl __ltkf2
1932 ; NOVSX-NEXT:    nop
1933 ; NOVSX-NEXT:    rlwinm r3, r3, 1, 31, 31
1934 ; NOVSX-NEXT:    xori r3, r3, 1
1935 ; NOVSX-NEXT:    addi r1, r1, 32
1936 ; NOVSX-NEXT:    ld r0, 16(r1)
1937 ; NOVSX-NEXT:    mtlr r0
1938 ; NOVSX-NEXT:    blr
1939   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #0
1940   %conv = zext i1 %cmp to i32
1941   ret i32 %conv
1944 define i32 @fcmp_ueq_f128(fp128 %a, fp128 %b) #0 {
1945 ; P8-LABEL: fcmp_ueq_f128:
1946 ; P8:       # %bb.0:
1947 ; P8-NEXT:    mflr r0
1948 ; P8-NEXT:    stdu r1, -176(r1)
1949 ; P8-NEXT:    li r3, 128
1950 ; P8-NEXT:    std r0, 192(r1)
1951 ; P8-NEXT:    std r30, 160(r1) # 8-byte Folded Spill
1952 ; P8-NEXT:    stxvd2x v30, r1, r3 # 16-byte Folded Spill
1953 ; P8-NEXT:    li r3, 144
1954 ; P8-NEXT:    vmr v30, v2
1955 ; P8-NEXT:    stxvd2x v31, r1, r3 # 16-byte Folded Spill
1956 ; P8-NEXT:    vmr v31, v3
1957 ; P8-NEXT:    bl __eqkf2
1958 ; P8-NEXT:    nop
1959 ; P8-NEXT:    cntlzw r3, r3
1960 ; P8-NEXT:    vmr v2, v30
1961 ; P8-NEXT:    vmr v3, v31
1962 ; P8-NEXT:    srwi r30, r3, 5
1963 ; P8-NEXT:    bl __unordkf2
1964 ; P8-NEXT:    nop
1965 ; P8-NEXT:    cntlzw r3, r3
1966 ; P8-NEXT:    li r4, 144
1967 ; P8-NEXT:    lxvd2x v31, r1, r4 # 16-byte Folded Reload
1968 ; P8-NEXT:    li r4, 128
1969 ; P8-NEXT:    srwi r3, r3, 5
1970 ; P8-NEXT:    lxvd2x v30, r1, r4 # 16-byte Folded Reload
1971 ; P8-NEXT:    xori r3, r3, 1
1972 ; P8-NEXT:    or r3, r3, r30
1973 ; P8-NEXT:    ld r30, 160(r1) # 8-byte Folded Reload
1974 ; P8-NEXT:    addi r1, r1, 176
1975 ; P8-NEXT:    ld r0, 16(r1)
1976 ; P8-NEXT:    mtlr r0
1977 ; P8-NEXT:    blr
1979 ; P9-LABEL: fcmp_ueq_f128:
1980 ; P9:       # %bb.0:
1981 ; P9-NEXT:    xscmpuqp cr0, v2, v3
1982 ; P9-NEXT:    li r3, 1
1983 ; P9-NEXT:    crnor 4*cr5+lt, eq, un
1984 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
1985 ; P9-NEXT:    blr
1987 ; NOVSX-LABEL: fcmp_ueq_f128:
1988 ; NOVSX:       # %bb.0:
1989 ; NOVSX-NEXT:    mflr r0
1990 ; NOVSX-NEXT:    std r26, -48(r1) # 8-byte Folded Spill
1991 ; NOVSX-NEXT:    std r27, -40(r1) # 8-byte Folded Spill
1992 ; NOVSX-NEXT:    std r28, -32(r1) # 8-byte Folded Spill
1993 ; NOVSX-NEXT:    std r29, -24(r1) # 8-byte Folded Spill
1994 ; NOVSX-NEXT:    std r30, -16(r1) # 8-byte Folded Spill
1995 ; NOVSX-NEXT:    stdu r1, -80(r1)
1996 ; NOVSX-NEXT:    std r0, 96(r1)
1997 ; NOVSX-NEXT:    mr r30, r6
1998 ; NOVSX-NEXT:    mr r29, r5
1999 ; NOVSX-NEXT:    mr r28, r4
2000 ; NOVSX-NEXT:    mr r27, r3
2001 ; NOVSX-NEXT:    bl __eqkf2
2002 ; NOVSX-NEXT:    nop
2003 ; NOVSX-NEXT:    cntlzw r3, r3
2004 ; NOVSX-NEXT:    mr r4, r28
2005 ; NOVSX-NEXT:    mr r5, r29
2006 ; NOVSX-NEXT:    mr r6, r30
2007 ; NOVSX-NEXT:    srwi r26, r3, 5
2008 ; NOVSX-NEXT:    mr r3, r27
2009 ; NOVSX-NEXT:    bl __unordkf2
2010 ; NOVSX-NEXT:    nop
2011 ; NOVSX-NEXT:    cntlzw r3, r3
2012 ; NOVSX-NEXT:    srwi r3, r3, 5
2013 ; NOVSX-NEXT:    xori r3, r3, 1
2014 ; NOVSX-NEXT:    or r3, r3, r26
2015 ; NOVSX-NEXT:    addi r1, r1, 80
2016 ; NOVSX-NEXT:    ld r0, 16(r1)
2017 ; NOVSX-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload
2018 ; NOVSX-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload
2019 ; NOVSX-NEXT:    ld r28, -32(r1) # 8-byte Folded Reload
2020 ; NOVSX-NEXT:    ld r27, -40(r1) # 8-byte Folded Reload
2021 ; NOVSX-NEXT:    ld r26, -48(r1) # 8-byte Folded Reload
2022 ; NOVSX-NEXT:    mtlr r0
2023 ; NOVSX-NEXT:    blr
2024   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #0
2025   %conv = zext i1 %cmp to i32
2026   ret i32 %conv
2029 define i32 @fcmp_une_f128(fp128 %a, fp128 %b) #0 {
2030 ; P8-LABEL: fcmp_une_f128:
2031 ; P8:       # %bb.0:
2032 ; P8-NEXT:    mflr r0
2033 ; P8-NEXT:    stdu r1, -112(r1)
2034 ; P8-NEXT:    std r0, 128(r1)
2035 ; P8-NEXT:    bl __nekf2
2036 ; P8-NEXT:    nop
2037 ; P8-NEXT:    cntlzw r3, r3
2038 ; P8-NEXT:    srwi r3, r3, 5
2039 ; P8-NEXT:    xori r3, r3, 1
2040 ; P8-NEXT:    addi r1, r1, 112
2041 ; P8-NEXT:    ld r0, 16(r1)
2042 ; P8-NEXT:    mtlr r0
2043 ; P8-NEXT:    blr
2045 ; P9-LABEL: fcmp_une_f128:
2046 ; P9:       # %bb.0:
2047 ; P9-NEXT:    xscmpuqp cr0, v2, v3
2048 ; P9-NEXT:    li r3, 1
2049 ; P9-NEXT:    iseleq r3, 0, r3
2050 ; P9-NEXT:    blr
2052 ; NOVSX-LABEL: fcmp_une_f128:
2053 ; NOVSX:       # %bb.0:
2054 ; NOVSX-NEXT:    mflr r0
2055 ; NOVSX-NEXT:    stdu r1, -32(r1)
2056 ; NOVSX-NEXT:    std r0, 48(r1)
2057 ; NOVSX-NEXT:    bl __nekf2
2058 ; NOVSX-NEXT:    nop
2059 ; NOVSX-NEXT:    cntlzw r3, r3
2060 ; NOVSX-NEXT:    srwi r3, r3, 5
2061 ; NOVSX-NEXT:    xori r3, r3, 1
2062 ; NOVSX-NEXT:    addi r1, r1, 32
2063 ; NOVSX-NEXT:    ld r0, 16(r1)
2064 ; NOVSX-NEXT:    mtlr r0
2065 ; NOVSX-NEXT:    blr
2066   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"une", metadata !"fpexcept.strict") #0
2067   %conv = zext i1 %cmp to i32
2068   ret i32 %conv
2071 define i32 @fcmps_olt_f128(fp128 %a, fp128 %b) #0 {
2072 ; P8-LABEL: fcmps_olt_f128:
2073 ; P8:       # %bb.0:
2074 ; P8-NEXT:    mflr r0
2075 ; P8-NEXT:    stdu r1, -112(r1)
2076 ; P8-NEXT:    std r0, 128(r1)
2077 ; P8-NEXT:    bl __ltkf2
2078 ; P8-NEXT:    nop
2079 ; P8-NEXT:    rlwinm r3, r3, 1, 31, 31
2080 ; P8-NEXT:    addi r1, r1, 112
2081 ; P8-NEXT:    ld r0, 16(r1)
2082 ; P8-NEXT:    mtlr r0
2083 ; P8-NEXT:    blr
2085 ; P9-LABEL: fcmps_olt_f128:
2086 ; P9:       # %bb.0:
2087 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2088 ; P9-NEXT:    li r3, 0
2089 ; P9-NEXT:    li r4, 1
2090 ; P9-NEXT:    isellt r3, r4, r3
2091 ; P9-NEXT:    blr
2093 ; NOVSX-LABEL: fcmps_olt_f128:
2094 ; NOVSX:       # %bb.0:
2095 ; NOVSX-NEXT:    mflr r0
2096 ; NOVSX-NEXT:    stdu r1, -32(r1)
2097 ; NOVSX-NEXT:    std r0, 48(r1)
2098 ; NOVSX-NEXT:    bl __ltkf2
2099 ; NOVSX-NEXT:    nop
2100 ; NOVSX-NEXT:    rlwinm r3, r3, 1, 31, 31
2101 ; NOVSX-NEXT:    addi r1, r1, 32
2102 ; NOVSX-NEXT:    ld r0, 16(r1)
2103 ; NOVSX-NEXT:    mtlr r0
2104 ; NOVSX-NEXT:    blr
2105   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #0
2106   %conv = zext i1 %cmp to i32
2107   ret i32 %conv
2110 define i32 @fcmps_ole_f128(fp128 %a, fp128 %b) #0 {
2111 ; P8-LABEL: fcmps_ole_f128:
2112 ; P8:       # %bb.0:
2113 ; P8-NEXT:    mflr r0
2114 ; P8-NEXT:    stdu r1, -112(r1)
2115 ; P8-NEXT:    std r0, 128(r1)
2116 ; P8-NEXT:    bl __lekf2
2117 ; P8-NEXT:    nop
2118 ; P8-NEXT:    extsw r3, r3
2119 ; P8-NEXT:    neg r3, r3
2120 ; P8-NEXT:    rldicl r3, r3, 1, 63
2121 ; P8-NEXT:    xori r3, r3, 1
2122 ; P8-NEXT:    addi r1, r1, 112
2123 ; P8-NEXT:    ld r0, 16(r1)
2124 ; P8-NEXT:    mtlr r0
2125 ; P8-NEXT:    blr
2127 ; P9-LABEL: fcmps_ole_f128:
2128 ; P9:       # %bb.0:
2129 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2130 ; P9-NEXT:    li r3, 1
2131 ; P9-NEXT:    cror 4*cr5+lt, un, gt
2132 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2133 ; P9-NEXT:    blr
2135 ; NOVSX-LABEL: fcmps_ole_f128:
2136 ; NOVSX:       # %bb.0:
2137 ; NOVSX-NEXT:    mflr r0
2138 ; NOVSX-NEXT:    stdu r1, -32(r1)
2139 ; NOVSX-NEXT:    std r0, 48(r1)
2140 ; NOVSX-NEXT:    bl __lekf2
2141 ; NOVSX-NEXT:    nop
2142 ; NOVSX-NEXT:    extsw r3, r3
2143 ; NOVSX-NEXT:    neg r3, r3
2144 ; NOVSX-NEXT:    rldicl r3, r3, 1, 63
2145 ; NOVSX-NEXT:    xori r3, r3, 1
2146 ; NOVSX-NEXT:    addi r1, r1, 32
2147 ; NOVSX-NEXT:    ld r0, 16(r1)
2148 ; NOVSX-NEXT:    mtlr r0
2149 ; NOVSX-NEXT:    blr
2150   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #0
2151   %conv = zext i1 %cmp to i32
2152   ret i32 %conv
2155 define i32 @fcmps_ogt_f128(fp128 %a, fp128 %b) #0 {
2156 ; P8-LABEL: fcmps_ogt_f128:
2157 ; P8:       # %bb.0:
2158 ; P8-NEXT:    mflr r0
2159 ; P8-NEXT:    stdu r1, -112(r1)
2160 ; P8-NEXT:    std r0, 128(r1)
2161 ; P8-NEXT:    bl __gtkf2
2162 ; P8-NEXT:    nop
2163 ; P8-NEXT:    extsw r3, r3
2164 ; P8-NEXT:    neg r3, r3
2165 ; P8-NEXT:    rldicl r3, r3, 1, 63
2166 ; P8-NEXT:    addi r1, r1, 112
2167 ; P8-NEXT:    ld r0, 16(r1)
2168 ; P8-NEXT:    mtlr r0
2169 ; P8-NEXT:    blr
2171 ; P9-LABEL: fcmps_ogt_f128:
2172 ; P9:       # %bb.0:
2173 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2174 ; P9-NEXT:    li r3, 0
2175 ; P9-NEXT:    li r4, 1
2176 ; P9-NEXT:    iselgt r3, r4, r3
2177 ; P9-NEXT:    blr
2179 ; NOVSX-LABEL: fcmps_ogt_f128:
2180 ; NOVSX:       # %bb.0:
2181 ; NOVSX-NEXT:    mflr r0
2182 ; NOVSX-NEXT:    stdu r1, -32(r1)
2183 ; NOVSX-NEXT:    std r0, 48(r1)
2184 ; NOVSX-NEXT:    bl __gtkf2
2185 ; NOVSX-NEXT:    nop
2186 ; NOVSX-NEXT:    extsw r3, r3
2187 ; NOVSX-NEXT:    neg r3, r3
2188 ; NOVSX-NEXT:    rldicl r3, r3, 1, 63
2189 ; NOVSX-NEXT:    addi r1, r1, 32
2190 ; NOVSX-NEXT:    ld r0, 16(r1)
2191 ; NOVSX-NEXT:    mtlr r0
2192 ; NOVSX-NEXT:    blr
2193   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #0
2194   %conv = zext i1 %cmp to i32
2195   ret i32 %conv
2198 define i32 @fcmps_oge_f128(fp128 %a, fp128 %b) #0 {
2199 ; P8-LABEL: fcmps_oge_f128:
2200 ; P8:       # %bb.0:
2201 ; P8-NEXT:    mflr r0
2202 ; P8-NEXT:    stdu r1, -112(r1)
2203 ; P8-NEXT:    std r0, 128(r1)
2204 ; P8-NEXT:    bl __gekf2
2205 ; P8-NEXT:    nop
2206 ; P8-NEXT:    rlwinm r3, r3, 1, 31, 31
2207 ; P8-NEXT:    xori r3, r3, 1
2208 ; P8-NEXT:    addi r1, r1, 112
2209 ; P8-NEXT:    ld r0, 16(r1)
2210 ; P8-NEXT:    mtlr r0
2211 ; P8-NEXT:    blr
2213 ; P9-LABEL: fcmps_oge_f128:
2214 ; P9:       # %bb.0:
2215 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2216 ; P9-NEXT:    li r3, 1
2217 ; P9-NEXT:    cror 4*cr5+lt, un, lt
2218 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2219 ; P9-NEXT:    blr
2221 ; NOVSX-LABEL: fcmps_oge_f128:
2222 ; NOVSX:       # %bb.0:
2223 ; NOVSX-NEXT:    mflr r0
2224 ; NOVSX-NEXT:    stdu r1, -32(r1)
2225 ; NOVSX-NEXT:    std r0, 48(r1)
2226 ; NOVSX-NEXT:    bl __gekf2
2227 ; NOVSX-NEXT:    nop
2228 ; NOVSX-NEXT:    rlwinm r3, r3, 1, 31, 31
2229 ; NOVSX-NEXT:    xori r3, r3, 1
2230 ; NOVSX-NEXT:    addi r1, r1, 32
2231 ; NOVSX-NEXT:    ld r0, 16(r1)
2232 ; NOVSX-NEXT:    mtlr r0
2233 ; NOVSX-NEXT:    blr
2234   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #0
2235   %conv = zext i1 %cmp to i32
2236   ret i32 %conv
2239 define i32 @fcmps_oeq_f128(fp128 %a, fp128 %b) #0 {
2240 ; P8-LABEL: fcmps_oeq_f128:
2241 ; P8:       # %bb.0:
2242 ; P8-NEXT:    mflr r0
2243 ; P8-NEXT:    stdu r1, -112(r1)
2244 ; P8-NEXT:    std r0, 128(r1)
2245 ; P8-NEXT:    bl __eqkf2
2246 ; P8-NEXT:    nop
2247 ; P8-NEXT:    cntlzw r3, r3
2248 ; P8-NEXT:    srwi r3, r3, 5
2249 ; P8-NEXT:    addi r1, r1, 112
2250 ; P8-NEXT:    ld r0, 16(r1)
2251 ; P8-NEXT:    mtlr r0
2252 ; P8-NEXT:    blr
2254 ; P9-LABEL: fcmps_oeq_f128:
2255 ; P9:       # %bb.0:
2256 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2257 ; P9-NEXT:    li r3, 0
2258 ; P9-NEXT:    li r4, 1
2259 ; P9-NEXT:    iseleq r3, r4, r3
2260 ; P9-NEXT:    blr
2262 ; NOVSX-LABEL: fcmps_oeq_f128:
2263 ; NOVSX:       # %bb.0:
2264 ; NOVSX-NEXT:    mflr r0
2265 ; NOVSX-NEXT:    stdu r1, -32(r1)
2266 ; NOVSX-NEXT:    std r0, 48(r1)
2267 ; NOVSX-NEXT:    bl __eqkf2
2268 ; NOVSX-NEXT:    nop
2269 ; NOVSX-NEXT:    cntlzw r3, r3
2270 ; NOVSX-NEXT:    srwi r3, r3, 5
2271 ; NOVSX-NEXT:    addi r1, r1, 32
2272 ; NOVSX-NEXT:    ld r0, 16(r1)
2273 ; NOVSX-NEXT:    mtlr r0
2274 ; NOVSX-NEXT:    blr
2275   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #0
2276   %conv = zext i1 %cmp to i32
2277   ret i32 %conv
2280 define i32 @fcmps_one_f128(fp128 %a, fp128 %b) #0 {
2281 ; P8-LABEL: fcmps_one_f128:
2282 ; P8:       # %bb.0:
2283 ; P8-NEXT:    mflr r0
2284 ; P8-NEXT:    stdu r1, -176(r1)
2285 ; P8-NEXT:    li r3, 128
2286 ; P8-NEXT:    std r0, 192(r1)
2287 ; P8-NEXT:    std r30, 160(r1) # 8-byte Folded Spill
2288 ; P8-NEXT:    stxvd2x v30, r1, r3 # 16-byte Folded Spill
2289 ; P8-NEXT:    li r3, 144
2290 ; P8-NEXT:    vmr v30, v2
2291 ; P8-NEXT:    stxvd2x v31, r1, r3 # 16-byte Folded Spill
2292 ; P8-NEXT:    vmr v31, v3
2293 ; P8-NEXT:    bl __unordkf2
2294 ; P8-NEXT:    nop
2295 ; P8-NEXT:    cntlzw r3, r3
2296 ; P8-NEXT:    vmr v2, v30
2297 ; P8-NEXT:    vmr v3, v31
2298 ; P8-NEXT:    srwi r30, r3, 5
2299 ; P8-NEXT:    bl __eqkf2
2300 ; P8-NEXT:    nop
2301 ; P8-NEXT:    cntlzw r3, r3
2302 ; P8-NEXT:    li r4, 144
2303 ; P8-NEXT:    lxvd2x v31, r1, r4 # 16-byte Folded Reload
2304 ; P8-NEXT:    li r4, 128
2305 ; P8-NEXT:    srwi r3, r3, 5
2306 ; P8-NEXT:    lxvd2x v30, r1, r4 # 16-byte Folded Reload
2307 ; P8-NEXT:    xori r3, r3, 1
2308 ; P8-NEXT:    and r3, r30, r3
2309 ; P8-NEXT:    ld r30, 160(r1) # 8-byte Folded Reload
2310 ; P8-NEXT:    addi r1, r1, 176
2311 ; P8-NEXT:    ld r0, 16(r1)
2312 ; P8-NEXT:    mtlr r0
2313 ; P8-NEXT:    blr
2315 ; P9-LABEL: fcmps_one_f128:
2316 ; P9:       # %bb.0:
2317 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2318 ; P9-NEXT:    li r3, 1
2319 ; P9-NEXT:    cror 4*cr5+lt, un, eq
2320 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2321 ; P9-NEXT:    blr
2323 ; NOVSX-LABEL: fcmps_one_f128:
2324 ; NOVSX:       # %bb.0:
2325 ; NOVSX-NEXT:    mflr r0
2326 ; NOVSX-NEXT:    std r26, -48(r1) # 8-byte Folded Spill
2327 ; NOVSX-NEXT:    std r27, -40(r1) # 8-byte Folded Spill
2328 ; NOVSX-NEXT:    std r28, -32(r1) # 8-byte Folded Spill
2329 ; NOVSX-NEXT:    std r29, -24(r1) # 8-byte Folded Spill
2330 ; NOVSX-NEXT:    std r30, -16(r1) # 8-byte Folded Spill
2331 ; NOVSX-NEXT:    stdu r1, -80(r1)
2332 ; NOVSX-NEXT:    std r0, 96(r1)
2333 ; NOVSX-NEXT:    mr r30, r6
2334 ; NOVSX-NEXT:    mr r29, r5
2335 ; NOVSX-NEXT:    mr r28, r4
2336 ; NOVSX-NEXT:    mr r27, r3
2337 ; NOVSX-NEXT:    bl __unordkf2
2338 ; NOVSX-NEXT:    nop
2339 ; NOVSX-NEXT:    cntlzw r3, r3
2340 ; NOVSX-NEXT:    mr r4, r28
2341 ; NOVSX-NEXT:    mr r5, r29
2342 ; NOVSX-NEXT:    mr r6, r30
2343 ; NOVSX-NEXT:    srwi r26, r3, 5
2344 ; NOVSX-NEXT:    mr r3, r27
2345 ; NOVSX-NEXT:    bl __eqkf2
2346 ; NOVSX-NEXT:    nop
2347 ; NOVSX-NEXT:    cntlzw r3, r3
2348 ; NOVSX-NEXT:    srwi r3, r3, 5
2349 ; NOVSX-NEXT:    xori r3, r3, 1
2350 ; NOVSX-NEXT:    and r3, r26, r3
2351 ; NOVSX-NEXT:    addi r1, r1, 80
2352 ; NOVSX-NEXT:    ld r0, 16(r1)
2353 ; NOVSX-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload
2354 ; NOVSX-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload
2355 ; NOVSX-NEXT:    ld r28, -32(r1) # 8-byte Folded Reload
2356 ; NOVSX-NEXT:    ld r27, -40(r1) # 8-byte Folded Reload
2357 ; NOVSX-NEXT:    ld r26, -48(r1) # 8-byte Folded Reload
2358 ; NOVSX-NEXT:    mtlr r0
2359 ; NOVSX-NEXT:    blr
2360   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"one", metadata !"fpexcept.strict") #0
2361   %conv = zext i1 %cmp to i32
2362   ret i32 %conv
2365 define i32 @fcmps_ult_f128(fp128 %a, fp128 %b) #0 {
2366 ; P8-LABEL: fcmps_ult_f128:
2367 ; P8:       # %bb.0:
2368 ; P8-NEXT:    mflr r0
2369 ; P8-NEXT:    stdu r1, -112(r1)
2370 ; P8-NEXT:    std r0, 128(r1)
2371 ; P8-NEXT:    bl __gekf2
2372 ; P8-NEXT:    nop
2373 ; P8-NEXT:    rlwinm r3, r3, 1, 31, 31
2374 ; P8-NEXT:    addi r1, r1, 112
2375 ; P8-NEXT:    ld r0, 16(r1)
2376 ; P8-NEXT:    mtlr r0
2377 ; P8-NEXT:    blr
2379 ; P9-LABEL: fcmps_ult_f128:
2380 ; P9:       # %bb.0:
2381 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2382 ; P9-NEXT:    li r3, 1
2383 ; P9-NEXT:    crnor 4*cr5+lt, lt, un
2384 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2385 ; P9-NEXT:    blr
2387 ; NOVSX-LABEL: fcmps_ult_f128:
2388 ; NOVSX:       # %bb.0:
2389 ; NOVSX-NEXT:    mflr r0
2390 ; NOVSX-NEXT:    stdu r1, -32(r1)
2391 ; NOVSX-NEXT:    std r0, 48(r1)
2392 ; NOVSX-NEXT:    bl __gekf2
2393 ; NOVSX-NEXT:    nop
2394 ; NOVSX-NEXT:    rlwinm r3, r3, 1, 31, 31
2395 ; NOVSX-NEXT:    addi r1, r1, 32
2396 ; NOVSX-NEXT:    ld r0, 16(r1)
2397 ; NOVSX-NEXT:    mtlr r0
2398 ; NOVSX-NEXT:    blr
2399   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #0
2400   %conv = zext i1 %cmp to i32
2401   ret i32 %conv
2404 define i32 @fcmps_ule_f128(fp128 %a, fp128 %b) #0 {
2405 ; P8-LABEL: fcmps_ule_f128:
2406 ; P8:       # %bb.0:
2407 ; P8-NEXT:    mflr r0
2408 ; P8-NEXT:    stdu r1, -112(r1)
2409 ; P8-NEXT:    std r0, 128(r1)
2410 ; P8-NEXT:    bl __gtkf2
2411 ; P8-NEXT:    nop
2412 ; P8-NEXT:    extsw r3, r3
2413 ; P8-NEXT:    neg r3, r3
2414 ; P8-NEXT:    rldicl r3, r3, 1, 63
2415 ; P8-NEXT:    xori r3, r3, 1
2416 ; P8-NEXT:    addi r1, r1, 112
2417 ; P8-NEXT:    ld r0, 16(r1)
2418 ; P8-NEXT:    mtlr r0
2419 ; P8-NEXT:    blr
2421 ; P9-LABEL: fcmps_ule_f128:
2422 ; P9:       # %bb.0:
2423 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2424 ; P9-NEXT:    li r3, 1
2425 ; P9-NEXT:    iselgt r3, 0, r3
2426 ; P9-NEXT:    blr
2428 ; NOVSX-LABEL: fcmps_ule_f128:
2429 ; NOVSX:       # %bb.0:
2430 ; NOVSX-NEXT:    mflr r0
2431 ; NOVSX-NEXT:    stdu r1, -32(r1)
2432 ; NOVSX-NEXT:    std r0, 48(r1)
2433 ; NOVSX-NEXT:    bl __gtkf2
2434 ; NOVSX-NEXT:    nop
2435 ; NOVSX-NEXT:    extsw r3, r3
2436 ; NOVSX-NEXT:    neg r3, r3
2437 ; NOVSX-NEXT:    rldicl r3, r3, 1, 63
2438 ; NOVSX-NEXT:    xori r3, r3, 1
2439 ; NOVSX-NEXT:    addi r1, r1, 32
2440 ; NOVSX-NEXT:    ld r0, 16(r1)
2441 ; NOVSX-NEXT:    mtlr r0
2442 ; NOVSX-NEXT:    blr
2443   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #0
2444   %conv = zext i1 %cmp to i32
2445   ret i32 %conv
2448 define i32 @fcmps_ugt_f128(fp128 %a, fp128 %b) #0 {
2449 ; P8-LABEL: fcmps_ugt_f128:
2450 ; P8:       # %bb.0:
2451 ; P8-NEXT:    mflr r0
2452 ; P8-NEXT:    stdu r1, -112(r1)
2453 ; P8-NEXT:    std r0, 128(r1)
2454 ; P8-NEXT:    bl __lekf2
2455 ; P8-NEXT:    nop
2456 ; P8-NEXT:    extsw r3, r3
2457 ; P8-NEXT:    neg r3, r3
2458 ; P8-NEXT:    rldicl r3, r3, 1, 63
2459 ; P8-NEXT:    addi r1, r1, 112
2460 ; P8-NEXT:    ld r0, 16(r1)
2461 ; P8-NEXT:    mtlr r0
2462 ; P8-NEXT:    blr
2464 ; P9-LABEL: fcmps_ugt_f128:
2465 ; P9:       # %bb.0:
2466 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2467 ; P9-NEXT:    li r3, 1
2468 ; P9-NEXT:    crnor 4*cr5+lt, gt, un
2469 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2470 ; P9-NEXT:    blr
2472 ; NOVSX-LABEL: fcmps_ugt_f128:
2473 ; NOVSX:       # %bb.0:
2474 ; NOVSX-NEXT:    mflr r0
2475 ; NOVSX-NEXT:    stdu r1, -32(r1)
2476 ; NOVSX-NEXT:    std r0, 48(r1)
2477 ; NOVSX-NEXT:    bl __lekf2
2478 ; NOVSX-NEXT:    nop
2479 ; NOVSX-NEXT:    extsw r3, r3
2480 ; NOVSX-NEXT:    neg r3, r3
2481 ; NOVSX-NEXT:    rldicl r3, r3, 1, 63
2482 ; NOVSX-NEXT:    addi r1, r1, 32
2483 ; NOVSX-NEXT:    ld r0, 16(r1)
2484 ; NOVSX-NEXT:    mtlr r0
2485 ; NOVSX-NEXT:    blr
2486   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #0
2487   %conv = zext i1 %cmp to i32
2488   ret i32 %conv
2491 define i32 @fcmps_uge_f128(fp128 %a, fp128 %b) #0 {
2492 ; P8-LABEL: fcmps_uge_f128:
2493 ; P8:       # %bb.0:
2494 ; P8-NEXT:    mflr r0
2495 ; P8-NEXT:    stdu r1, -112(r1)
2496 ; P8-NEXT:    std r0, 128(r1)
2497 ; P8-NEXT:    bl __ltkf2
2498 ; P8-NEXT:    nop
2499 ; P8-NEXT:    rlwinm r3, r3, 1, 31, 31
2500 ; P8-NEXT:    xori r3, r3, 1
2501 ; P8-NEXT:    addi r1, r1, 112
2502 ; P8-NEXT:    ld r0, 16(r1)
2503 ; P8-NEXT:    mtlr r0
2504 ; P8-NEXT:    blr
2506 ; P9-LABEL: fcmps_uge_f128:
2507 ; P9:       # %bb.0:
2508 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2509 ; P9-NEXT:    li r3, 1
2510 ; P9-NEXT:    isellt r3, 0, r3
2511 ; P9-NEXT:    blr
2513 ; NOVSX-LABEL: fcmps_uge_f128:
2514 ; NOVSX:       # %bb.0:
2515 ; NOVSX-NEXT:    mflr r0
2516 ; NOVSX-NEXT:    stdu r1, -32(r1)
2517 ; NOVSX-NEXT:    std r0, 48(r1)
2518 ; NOVSX-NEXT:    bl __ltkf2
2519 ; NOVSX-NEXT:    nop
2520 ; NOVSX-NEXT:    rlwinm r3, r3, 1, 31, 31
2521 ; NOVSX-NEXT:    xori r3, r3, 1
2522 ; NOVSX-NEXT:    addi r1, r1, 32
2523 ; NOVSX-NEXT:    ld r0, 16(r1)
2524 ; NOVSX-NEXT:    mtlr r0
2525 ; NOVSX-NEXT:    blr
2526   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #0
2527   %conv = zext i1 %cmp to i32
2528   ret i32 %conv
2531 define i32 @fcmps_ueq_f128(fp128 %a, fp128 %b) #0 {
2532 ; P8-LABEL: fcmps_ueq_f128:
2533 ; P8:       # %bb.0:
2534 ; P8-NEXT:    mflr r0
2535 ; P8-NEXT:    stdu r1, -176(r1)
2536 ; P8-NEXT:    li r3, 128
2537 ; P8-NEXT:    std r0, 192(r1)
2538 ; P8-NEXT:    std r30, 160(r1) # 8-byte Folded Spill
2539 ; P8-NEXT:    stxvd2x v30, r1, r3 # 16-byte Folded Spill
2540 ; P8-NEXT:    li r3, 144
2541 ; P8-NEXT:    vmr v30, v2
2542 ; P8-NEXT:    stxvd2x v31, r1, r3 # 16-byte Folded Spill
2543 ; P8-NEXT:    vmr v31, v3
2544 ; P8-NEXT:    bl __eqkf2
2545 ; P8-NEXT:    nop
2546 ; P8-NEXT:    cntlzw r3, r3
2547 ; P8-NEXT:    vmr v2, v30
2548 ; P8-NEXT:    vmr v3, v31
2549 ; P8-NEXT:    srwi r30, r3, 5
2550 ; P8-NEXT:    bl __unordkf2
2551 ; P8-NEXT:    nop
2552 ; P8-NEXT:    cntlzw r3, r3
2553 ; P8-NEXT:    li r4, 144
2554 ; P8-NEXT:    lxvd2x v31, r1, r4 # 16-byte Folded Reload
2555 ; P8-NEXT:    li r4, 128
2556 ; P8-NEXT:    srwi r3, r3, 5
2557 ; P8-NEXT:    lxvd2x v30, r1, r4 # 16-byte Folded Reload
2558 ; P8-NEXT:    xori r3, r3, 1
2559 ; P8-NEXT:    or r3, r3, r30
2560 ; P8-NEXT:    ld r30, 160(r1) # 8-byte Folded Reload
2561 ; P8-NEXT:    addi r1, r1, 176
2562 ; P8-NEXT:    ld r0, 16(r1)
2563 ; P8-NEXT:    mtlr r0
2564 ; P8-NEXT:    blr
2566 ; P9-LABEL: fcmps_ueq_f128:
2567 ; P9:       # %bb.0:
2568 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2569 ; P9-NEXT:    li r3, 1
2570 ; P9-NEXT:    crnor 4*cr5+lt, eq, un
2571 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2572 ; P9-NEXT:    blr
2574 ; NOVSX-LABEL: fcmps_ueq_f128:
2575 ; NOVSX:       # %bb.0:
2576 ; NOVSX-NEXT:    mflr r0
2577 ; NOVSX-NEXT:    std r26, -48(r1) # 8-byte Folded Spill
2578 ; NOVSX-NEXT:    std r27, -40(r1) # 8-byte Folded Spill
2579 ; NOVSX-NEXT:    std r28, -32(r1) # 8-byte Folded Spill
2580 ; NOVSX-NEXT:    std r29, -24(r1) # 8-byte Folded Spill
2581 ; NOVSX-NEXT:    std r30, -16(r1) # 8-byte Folded Spill
2582 ; NOVSX-NEXT:    stdu r1, -80(r1)
2583 ; NOVSX-NEXT:    std r0, 96(r1)
2584 ; NOVSX-NEXT:    mr r30, r6
2585 ; NOVSX-NEXT:    mr r29, r5
2586 ; NOVSX-NEXT:    mr r28, r4
2587 ; NOVSX-NEXT:    mr r27, r3
2588 ; NOVSX-NEXT:    bl __eqkf2
2589 ; NOVSX-NEXT:    nop
2590 ; NOVSX-NEXT:    cntlzw r3, r3
2591 ; NOVSX-NEXT:    mr r4, r28
2592 ; NOVSX-NEXT:    mr r5, r29
2593 ; NOVSX-NEXT:    mr r6, r30
2594 ; NOVSX-NEXT:    srwi r26, r3, 5
2595 ; NOVSX-NEXT:    mr r3, r27
2596 ; NOVSX-NEXT:    bl __unordkf2
2597 ; NOVSX-NEXT:    nop
2598 ; NOVSX-NEXT:    cntlzw r3, r3
2599 ; NOVSX-NEXT:    srwi r3, r3, 5
2600 ; NOVSX-NEXT:    xori r3, r3, 1
2601 ; NOVSX-NEXT:    or r3, r3, r26
2602 ; NOVSX-NEXT:    addi r1, r1, 80
2603 ; NOVSX-NEXT:    ld r0, 16(r1)
2604 ; NOVSX-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload
2605 ; NOVSX-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload
2606 ; NOVSX-NEXT:    ld r28, -32(r1) # 8-byte Folded Reload
2607 ; NOVSX-NEXT:    ld r27, -40(r1) # 8-byte Folded Reload
2608 ; NOVSX-NEXT:    ld r26, -48(r1) # 8-byte Folded Reload
2609 ; NOVSX-NEXT:    mtlr r0
2610 ; NOVSX-NEXT:    blr
2611   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #0
2612   %conv = zext i1 %cmp to i32
2613   ret i32 %conv
2616 define i32 @fcmps_une_f128(fp128 %a, fp128 %b) #0 {
2617 ; P8-LABEL: fcmps_une_f128:
2618 ; P8:       # %bb.0:
2619 ; P8-NEXT:    mflr r0
2620 ; P8-NEXT:    stdu r1, -112(r1)
2621 ; P8-NEXT:    std r0, 128(r1)
2622 ; P8-NEXT:    bl __nekf2
2623 ; P8-NEXT:    nop
2624 ; P8-NEXT:    cntlzw r3, r3
2625 ; P8-NEXT:    srwi r3, r3, 5
2626 ; P8-NEXT:    xori r3, r3, 1
2627 ; P8-NEXT:    addi r1, r1, 112
2628 ; P8-NEXT:    ld r0, 16(r1)
2629 ; P8-NEXT:    mtlr r0
2630 ; P8-NEXT:    blr
2632 ; P9-LABEL: fcmps_une_f128:
2633 ; P9:       # %bb.0:
2634 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2635 ; P9-NEXT:    li r3, 1
2636 ; P9-NEXT:    iseleq r3, 0, r3
2637 ; P9-NEXT:    blr
2639 ; NOVSX-LABEL: fcmps_une_f128:
2640 ; NOVSX:       # %bb.0:
2641 ; NOVSX-NEXT:    mflr r0
2642 ; NOVSX-NEXT:    stdu r1, -32(r1)
2643 ; NOVSX-NEXT:    std r0, 48(r1)
2644 ; NOVSX-NEXT:    bl __nekf2
2645 ; NOVSX-NEXT:    nop
2646 ; NOVSX-NEXT:    cntlzw r3, r3
2647 ; NOVSX-NEXT:    srwi r3, r3, 5
2648 ; NOVSX-NEXT:    xori r3, r3, 1
2649 ; NOVSX-NEXT:    addi r1, r1, 32
2650 ; NOVSX-NEXT:    ld r0, 16(r1)
2651 ; NOVSX-NEXT:    mtlr r0
2652 ; NOVSX-NEXT:    blr
2653   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"une", metadata !"fpexcept.strict") #0
2654   %conv = zext i1 %cmp to i32
2655   ret i32 %conv
2658 define i32 @fcmp_olt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2659 ; P8-LABEL: fcmp_olt_ppcf128:
2660 ; P8:       # %bb.0:
2661 ; P8-NEXT:    fcmpu cr0, f1, f3
2662 ; P8-NEXT:    li r3, 1
2663 ; P8-NEXT:    crandc 4*cr5+gt, lt, eq
2664 ; P8-NEXT:    fcmpu cr1, f2, f4
2665 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr1+lt
2666 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2667 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
2668 ; P8-NEXT:    blr
2670 ; P9-LABEL: fcmp_olt_ppcf128:
2671 ; P9:       # %bb.0:
2672 ; P9-NEXT:    fcmpu cr0, f1, f3
2673 ; P9-NEXT:    fcmpu cr1, f2, f4
2674 ; P9-NEXT:    li r3, 1
2675 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr1+lt
2676 ; P9-NEXT:    crandc 4*cr5+gt, lt, eq
2677 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2678 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2679 ; P9-NEXT:    blr
2681 ; NOVSX-LABEL: fcmp_olt_ppcf128:
2682 ; NOVSX:       # %bb.0:
2683 ; NOVSX-NEXT:    fcmpu cr0, f1, f3
2684 ; NOVSX-NEXT:    li r3, 1
2685 ; NOVSX-NEXT:    crandc 4*cr5+gt, lt, eq
2686 ; NOVSX-NEXT:    fcmpu cr1, f2, f4
2687 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr1+lt
2688 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2689 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
2690 ; NOVSX-NEXT:    blr
2691   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #0
2692   %conv = zext i1 %cmp to i32
2693   ret i32 %conv
2696 define i32 @fcmp_ole_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2697 ; P8-LABEL: fcmp_ole_ppcf128:
2698 ; P8:       # %bb.0:
2699 ; P8-NEXT:    fcmpu cr0, f2, f4
2700 ; P8-NEXT:    li r3, 1
2701 ; P8-NEXT:    crnor 4*cr5+lt, un, gt
2702 ; P8-NEXT:    fcmpu cr0, f1, f3
2703 ; P8-NEXT:    crnor 4*cr5+gt, un, gt
2704 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
2705 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
2706 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2707 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
2708 ; P8-NEXT:    blr
2710 ; P9-LABEL: fcmp_ole_ppcf128:
2711 ; P9:       # %bb.0:
2712 ; P9-NEXT:    fcmpu cr0, f2, f4
2713 ; P9-NEXT:    li r3, 1
2714 ; P9-NEXT:    crnor 4*cr5+lt, un, gt
2715 ; P9-NEXT:    fcmpu cr0, f1, f3
2716 ; P9-NEXT:    crnor 4*cr5+gt, un, gt
2717 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
2718 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
2719 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2720 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2721 ; P9-NEXT:    blr
2723 ; NOVSX-LABEL: fcmp_ole_ppcf128:
2724 ; NOVSX:       # %bb.0:
2725 ; NOVSX-NEXT:    fcmpu cr0, f2, f4
2726 ; NOVSX-NEXT:    li r3, 1
2727 ; NOVSX-NEXT:    crnor 4*cr5+lt, un, gt
2728 ; NOVSX-NEXT:    fcmpu cr0, f1, f3
2729 ; NOVSX-NEXT:    crnor 4*cr5+gt, un, gt
2730 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
2731 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
2732 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2733 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
2734 ; NOVSX-NEXT:    blr
2735   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #0
2736   %conv = zext i1 %cmp to i32
2737   ret i32 %conv
2740 define i32 @fcmp_ogt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2741 ; P8-LABEL: fcmp_ogt_ppcf128:
2742 ; P8:       # %bb.0:
2743 ; P8-NEXT:    fcmpu cr0, f1, f3
2744 ; P8-NEXT:    li r3, 1
2745 ; P8-NEXT:    crandc 4*cr5+gt, gt, eq
2746 ; P8-NEXT:    fcmpu cr1, f2, f4
2747 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr1+gt
2748 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2749 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
2750 ; P8-NEXT:    blr
2752 ; P9-LABEL: fcmp_ogt_ppcf128:
2753 ; P9:       # %bb.0:
2754 ; P9-NEXT:    fcmpu cr0, f1, f3
2755 ; P9-NEXT:    fcmpu cr1, f2, f4
2756 ; P9-NEXT:    li r3, 1
2757 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr1+gt
2758 ; P9-NEXT:    crandc 4*cr5+gt, gt, eq
2759 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2760 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2761 ; P9-NEXT:    blr
2763 ; NOVSX-LABEL: fcmp_ogt_ppcf128:
2764 ; NOVSX:       # %bb.0:
2765 ; NOVSX-NEXT:    fcmpu cr0, f1, f3
2766 ; NOVSX-NEXT:    li r3, 1
2767 ; NOVSX-NEXT:    crandc 4*cr5+gt, gt, eq
2768 ; NOVSX-NEXT:    fcmpu cr1, f2, f4
2769 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr1+gt
2770 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2771 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
2772 ; NOVSX-NEXT:    blr
2773   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #0
2774   %conv = zext i1 %cmp to i32
2775   ret i32 %conv
2778 define i32 @fcmp_oge_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2779 ; P8-LABEL: fcmp_oge_ppcf128:
2780 ; P8:       # %bb.0:
2781 ; P8-NEXT:    fcmpu cr0, f2, f4
2782 ; P8-NEXT:    li r3, 1
2783 ; P8-NEXT:    crnor 4*cr5+lt, un, lt
2784 ; P8-NEXT:    fcmpu cr0, f1, f3
2785 ; P8-NEXT:    crnor 4*cr5+gt, un, lt
2786 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
2787 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
2788 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2789 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
2790 ; P8-NEXT:    blr
2792 ; P9-LABEL: fcmp_oge_ppcf128:
2793 ; P9:       # %bb.0:
2794 ; P9-NEXT:    fcmpu cr0, f2, f4
2795 ; P9-NEXT:    li r3, 1
2796 ; P9-NEXT:    crnor 4*cr5+lt, un, lt
2797 ; P9-NEXT:    fcmpu cr0, f1, f3
2798 ; P9-NEXT:    crnor 4*cr5+gt, un, lt
2799 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
2800 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
2801 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2802 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2803 ; P9-NEXT:    blr
2805 ; NOVSX-LABEL: fcmp_oge_ppcf128:
2806 ; NOVSX:       # %bb.0:
2807 ; NOVSX-NEXT:    fcmpu cr0, f2, f4
2808 ; NOVSX-NEXT:    li r3, 1
2809 ; NOVSX-NEXT:    crnor 4*cr5+lt, un, lt
2810 ; NOVSX-NEXT:    fcmpu cr0, f1, f3
2811 ; NOVSX-NEXT:    crnor 4*cr5+gt, un, lt
2812 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
2813 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
2814 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2815 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
2816 ; NOVSX-NEXT:    blr
2817   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #0
2818   %conv = zext i1 %cmp to i32
2819   ret i32 %conv
2822 define i32 @fcmp_oeq_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2823 ; P8-LABEL: fcmp_oeq_ppcf128:
2824 ; P8:       # %bb.0:
2825 ; P8-NEXT:    fcmpu cr0, f1, f3
2826 ; P8-NEXT:    li r3, 1
2827 ; P8-NEXT:    crandc 4*cr5+gt, eq, eq
2828 ; P8-NEXT:    fcmpu cr1, f2, f4
2829 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr1+eq
2830 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2831 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
2832 ; P8-NEXT:    blr
2834 ; P9-LABEL: fcmp_oeq_ppcf128:
2835 ; P9:       # %bb.0:
2836 ; P9-NEXT:    fcmpu cr0, f1, f3
2837 ; P9-NEXT:    fcmpu cr1, f2, f4
2838 ; P9-NEXT:    li r3, 1
2839 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr1+eq
2840 ; P9-NEXT:    crandc 4*cr5+gt, eq, eq
2841 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2842 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2843 ; P9-NEXT:    blr
2845 ; NOVSX-LABEL: fcmp_oeq_ppcf128:
2846 ; NOVSX:       # %bb.0:
2847 ; NOVSX-NEXT:    fcmpu cr0, f1, f3
2848 ; NOVSX-NEXT:    li r3, 1
2849 ; NOVSX-NEXT:    crandc 4*cr5+gt, eq, eq
2850 ; NOVSX-NEXT:    fcmpu cr1, f2, f4
2851 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr1+eq
2852 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2853 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
2854 ; NOVSX-NEXT:    blr
2855   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #0
2856   %conv = zext i1 %cmp to i32
2857   ret i32 %conv
2860 define i32 @fcmp_one_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2861 ; P8-LABEL: fcmp_one_ppcf128:
2862 ; P8:       # %bb.0:
2863 ; P8-NEXT:    fcmpu cr0, f2, f4
2864 ; P8-NEXT:    li r3, 1
2865 ; P8-NEXT:    crnor 4*cr5+lt, un, eq
2866 ; P8-NEXT:    fcmpu cr0, f1, f3
2867 ; P8-NEXT:    crnor 4*cr5+gt, un, eq
2868 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
2869 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
2870 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2871 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
2872 ; P8-NEXT:    blr
2874 ; P9-LABEL: fcmp_one_ppcf128:
2875 ; P9:       # %bb.0:
2876 ; P9-NEXT:    fcmpu cr0, f2, f4
2877 ; P9-NEXT:    li r3, 1
2878 ; P9-NEXT:    crnor 4*cr5+lt, un, eq
2879 ; P9-NEXT:    fcmpu cr0, f1, f3
2880 ; P9-NEXT:    crnor 4*cr5+gt, un, eq
2881 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
2882 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
2883 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2884 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2885 ; P9-NEXT:    blr
2887 ; NOVSX-LABEL: fcmp_one_ppcf128:
2888 ; NOVSX:       # %bb.0:
2889 ; NOVSX-NEXT:    fcmpu cr0, f2, f4
2890 ; NOVSX-NEXT:    li r3, 1
2891 ; NOVSX-NEXT:    crnor 4*cr5+lt, un, eq
2892 ; NOVSX-NEXT:    fcmpu cr0, f1, f3
2893 ; NOVSX-NEXT:    crnor 4*cr5+gt, un, eq
2894 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
2895 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
2896 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2897 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
2898 ; NOVSX-NEXT:    blr
2899   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"one", metadata !"fpexcept.strict") #0
2900   %conv = zext i1 %cmp to i32
2901   ret i32 %conv
2904 define i32 @fcmp_ult_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2905 ; P8-LABEL: fcmp_ult_ppcf128:
2906 ; P8:       # %bb.0:
2907 ; P8-NEXT:    fcmpu cr0, f1, f3
2908 ; P8-NEXT:    li r3, 1
2909 ; P8-NEXT:    cror 4*cr5+gt, lt, un
2910 ; P8-NEXT:    fcmpu cr1, f2, f4
2911 ; P8-NEXT:    cror 4*cr5+lt, 4*cr1+lt, 4*cr1+un
2912 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
2913 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
2914 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2915 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
2916 ; P8-NEXT:    blr
2918 ; P9-LABEL: fcmp_ult_ppcf128:
2919 ; P9:       # %bb.0:
2920 ; P9-NEXT:    fcmpu cr0, f1, f3
2921 ; P9-NEXT:    fcmpu cr1, f2, f4
2922 ; P9-NEXT:    li r3, 1
2923 ; P9-NEXT:    cror 4*cr5+lt, 4*cr1+lt, 4*cr1+un
2924 ; P9-NEXT:    cror 4*cr5+gt, lt, un
2925 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
2926 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
2927 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2928 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2929 ; P9-NEXT:    blr
2931 ; NOVSX-LABEL: fcmp_ult_ppcf128:
2932 ; NOVSX:       # %bb.0:
2933 ; NOVSX-NEXT:    fcmpu cr0, f1, f3
2934 ; NOVSX-NEXT:    li r3, 1
2935 ; NOVSX-NEXT:    cror 4*cr5+gt, lt, un
2936 ; NOVSX-NEXT:    fcmpu cr1, f2, f4
2937 ; NOVSX-NEXT:    cror 4*cr5+lt, 4*cr1+lt, 4*cr1+un
2938 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
2939 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
2940 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2941 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
2942 ; NOVSX-NEXT:    blr
2943   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #0
2944   %conv = zext i1 %cmp to i32
2945   ret i32 %conv
2948 define i32 @fcmp_ule_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2949 ; P8-LABEL: fcmp_ule_ppcf128:
2950 ; P8:       # %bb.0:
2951 ; P8-NEXT:    fcmpu cr0, f2, f4
2952 ; P8-NEXT:    li r3, 1
2953 ; P8-NEXT:    fcmpu cr1, f1, f3
2954 ; P8-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, gt
2955 ; P8-NEXT:    crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq
2956 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2957 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
2958 ; P8-NEXT:    blr
2960 ; P9-LABEL: fcmp_ule_ppcf128:
2961 ; P9:       # %bb.0:
2962 ; P9-NEXT:    fcmpu cr0, f2, f4
2963 ; P9-NEXT:    fcmpu cr1, f1, f3
2964 ; P9-NEXT:    li r3, 1
2965 ; P9-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, gt
2966 ; P9-NEXT:    crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq
2967 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2968 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2969 ; P9-NEXT:    blr
2971 ; NOVSX-LABEL: fcmp_ule_ppcf128:
2972 ; NOVSX:       # %bb.0:
2973 ; NOVSX-NEXT:    fcmpu cr0, f2, f4
2974 ; NOVSX-NEXT:    li r3, 1
2975 ; NOVSX-NEXT:    fcmpu cr1, f1, f3
2976 ; NOVSX-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, gt
2977 ; NOVSX-NEXT:    crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq
2978 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2979 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
2980 ; NOVSX-NEXT:    blr
2981   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #0
2982   %conv = zext i1 %cmp to i32
2983   ret i32 %conv
2986 define i32 @fcmp_ugt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2987 ; P8-LABEL: fcmp_ugt_ppcf128:
2988 ; P8:       # %bb.0:
2989 ; P8-NEXT:    fcmpu cr0, f1, f3
2990 ; P8-NEXT:    li r3, 1
2991 ; P8-NEXT:    cror 4*cr5+gt, gt, un
2992 ; P8-NEXT:    fcmpu cr1, f2, f4
2993 ; P8-NEXT:    cror 4*cr5+lt, 4*cr1+gt, 4*cr1+un
2994 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
2995 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
2996 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2997 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
2998 ; P8-NEXT:    blr
3000 ; P9-LABEL: fcmp_ugt_ppcf128:
3001 ; P9:       # %bb.0:
3002 ; P9-NEXT:    fcmpu cr0, f1, f3
3003 ; P9-NEXT:    fcmpu cr1, f2, f4
3004 ; P9-NEXT:    li r3, 1
3005 ; P9-NEXT:    cror 4*cr5+lt, 4*cr1+gt, 4*cr1+un
3006 ; P9-NEXT:    cror 4*cr5+gt, gt, un
3007 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3008 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3009 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3010 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3011 ; P9-NEXT:    blr
3013 ; NOVSX-LABEL: fcmp_ugt_ppcf128:
3014 ; NOVSX:       # %bb.0:
3015 ; NOVSX-NEXT:    fcmpu cr0, f1, f3
3016 ; NOVSX-NEXT:    li r3, 1
3017 ; NOVSX-NEXT:    cror 4*cr5+gt, gt, un
3018 ; NOVSX-NEXT:    fcmpu cr1, f2, f4
3019 ; NOVSX-NEXT:    cror 4*cr5+lt, 4*cr1+gt, 4*cr1+un
3020 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3021 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3022 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3023 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3024 ; NOVSX-NEXT:    blr
3025   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #0
3026   %conv = zext i1 %cmp to i32
3027   ret i32 %conv
3030 define i32 @fcmp_uge_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3031 ; P8-LABEL: fcmp_uge_ppcf128:
3032 ; P8:       # %bb.0:
3033 ; P8-NEXT:    fcmpu cr0, f2, f4
3034 ; P8-NEXT:    li r3, 1
3035 ; P8-NEXT:    fcmpu cr1, f1, f3
3036 ; P8-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, lt
3037 ; P8-NEXT:    crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq
3038 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3039 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3040 ; P8-NEXT:    blr
3042 ; P9-LABEL: fcmp_uge_ppcf128:
3043 ; P9:       # %bb.0:
3044 ; P9-NEXT:    fcmpu cr0, f2, f4
3045 ; P9-NEXT:    fcmpu cr1, f1, f3
3046 ; P9-NEXT:    li r3, 1
3047 ; P9-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, lt
3048 ; P9-NEXT:    crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq
3049 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3050 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3051 ; P9-NEXT:    blr
3053 ; NOVSX-LABEL: fcmp_uge_ppcf128:
3054 ; NOVSX:       # %bb.0:
3055 ; NOVSX-NEXT:    fcmpu cr0, f2, f4
3056 ; NOVSX-NEXT:    li r3, 1
3057 ; NOVSX-NEXT:    fcmpu cr1, f1, f3
3058 ; NOVSX-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, lt
3059 ; NOVSX-NEXT:    crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq
3060 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3061 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3062 ; NOVSX-NEXT:    blr
3063   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #0
3064   %conv = zext i1 %cmp to i32
3065   ret i32 %conv
3068 define i32 @fcmp_ueq_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3069 ; P8-LABEL: fcmp_ueq_ppcf128:
3070 ; P8:       # %bb.0:
3071 ; P8-NEXT:    fcmpu cr0, f1, f3
3072 ; P8-NEXT:    li r3, 1
3073 ; P8-NEXT:    cror 4*cr5+gt, eq, un
3074 ; P8-NEXT:    fcmpu cr1, f2, f4
3075 ; P8-NEXT:    cror 4*cr5+lt, 4*cr1+eq, 4*cr1+un
3076 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3077 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3078 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3079 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3080 ; P8-NEXT:    blr
3082 ; P9-LABEL: fcmp_ueq_ppcf128:
3083 ; P9:       # %bb.0:
3084 ; P9-NEXT:    fcmpu cr0, f1, f3
3085 ; P9-NEXT:    fcmpu cr1, f2, f4
3086 ; P9-NEXT:    li r3, 1
3087 ; P9-NEXT:    cror 4*cr5+lt, 4*cr1+eq, 4*cr1+un
3088 ; P9-NEXT:    cror 4*cr5+gt, eq, un
3089 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3090 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3091 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3092 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3093 ; P9-NEXT:    blr
3095 ; NOVSX-LABEL: fcmp_ueq_ppcf128:
3096 ; NOVSX:       # %bb.0:
3097 ; NOVSX-NEXT:    fcmpu cr0, f1, f3
3098 ; NOVSX-NEXT:    li r3, 1
3099 ; NOVSX-NEXT:    cror 4*cr5+gt, eq, un
3100 ; NOVSX-NEXT:    fcmpu cr1, f2, f4
3101 ; NOVSX-NEXT:    cror 4*cr5+lt, 4*cr1+eq, 4*cr1+un
3102 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3103 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3104 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3105 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3106 ; NOVSX-NEXT:    blr
3107   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #0
3108   %conv = zext i1 %cmp to i32
3109   ret i32 %conv
3112 define i32 @fcmp_une_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3113 ; P8-LABEL: fcmp_une_ppcf128:
3114 ; P8:       # %bb.0:
3115 ; P8-NEXT:    fcmpu cr0, f2, f4
3116 ; P8-NEXT:    li r3, 1
3117 ; P8-NEXT:    fcmpu cr1, f1, f3
3118 ; P8-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, eq
3119 ; P8-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3120 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3121 ; P8-NEXT:    blr
3123 ; P9-LABEL: fcmp_une_ppcf128:
3124 ; P9:       # %bb.0:
3125 ; P9-NEXT:    fcmpu cr0, f2, f4
3126 ; P9-NEXT:    fcmpu cr1, f1, f3
3127 ; P9-NEXT:    li r3, 1
3128 ; P9-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, eq
3129 ; P9-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3130 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3131 ; P9-NEXT:    blr
3133 ; NOVSX-LABEL: fcmp_une_ppcf128:
3134 ; NOVSX:       # %bb.0:
3135 ; NOVSX-NEXT:    fcmpu cr0, f2, f4
3136 ; NOVSX-NEXT:    li r3, 1
3137 ; NOVSX-NEXT:    fcmpu cr1, f1, f3
3138 ; NOVSX-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, eq
3139 ; NOVSX-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3140 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3141 ; NOVSX-NEXT:    blr
3142   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"une", metadata !"fpexcept.strict") #0
3143   %conv = zext i1 %cmp to i32
3144   ret i32 %conv
3147 define i32 @fcmps_olt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3148 ; P8-LABEL: fcmps_olt_ppcf128:
3149 ; P8:       # %bb.0:
3150 ; P8-NEXT:    fcmpo cr0, f1, f3
3151 ; P8-NEXT:    li r3, 1
3152 ; P8-NEXT:    crandc 4*cr5+gt, lt, eq
3153 ; P8-NEXT:    fcmpo cr1, f2, f4
3154 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr1+lt
3155 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3156 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3157 ; P8-NEXT:    blr
3159 ; P9-LABEL: fcmps_olt_ppcf128:
3160 ; P9:       # %bb.0:
3161 ; P9-NEXT:    fcmpo cr0, f1, f3
3162 ; P9-NEXT:    fcmpo cr1, f2, f4
3163 ; P9-NEXT:    li r3, 1
3164 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr1+lt
3165 ; P9-NEXT:    crandc 4*cr5+gt, lt, eq
3166 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3167 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3168 ; P9-NEXT:    blr
3170 ; NOVSX-LABEL: fcmps_olt_ppcf128:
3171 ; NOVSX:       # %bb.0:
3172 ; NOVSX-NEXT:    fcmpo cr0, f1, f3
3173 ; NOVSX-NEXT:    li r3, 1
3174 ; NOVSX-NEXT:    crandc 4*cr5+gt, lt, eq
3175 ; NOVSX-NEXT:    fcmpo cr1, f2, f4
3176 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr1+lt
3177 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3178 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3179 ; NOVSX-NEXT:    blr
3180   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #0
3181   %conv = zext i1 %cmp to i32
3182   ret i32 %conv
3185 define i32 @fcmps_ole_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3186 ; P8-LABEL: fcmps_ole_ppcf128:
3187 ; P8:       # %bb.0:
3188 ; P8-NEXT:    fcmpo cr0, f2, f4
3189 ; P8-NEXT:    li r3, 1
3190 ; P8-NEXT:    crnor 4*cr5+lt, un, gt
3191 ; P8-NEXT:    fcmpo cr0, f1, f3
3192 ; P8-NEXT:    crnor 4*cr5+gt, un, gt
3193 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3194 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3195 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3196 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3197 ; P8-NEXT:    blr
3199 ; P9-LABEL: fcmps_ole_ppcf128:
3200 ; P9:       # %bb.0:
3201 ; P9-NEXT:    fcmpo cr0, f2, f4
3202 ; P9-NEXT:    li r3, 1
3203 ; P9-NEXT:    crnor 4*cr5+lt, un, gt
3204 ; P9-NEXT:    fcmpo cr0, f1, f3
3205 ; P9-NEXT:    crnor 4*cr5+gt, un, gt
3206 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3207 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3208 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3209 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3210 ; P9-NEXT:    blr
3212 ; NOVSX-LABEL: fcmps_ole_ppcf128:
3213 ; NOVSX:       # %bb.0:
3214 ; NOVSX-NEXT:    fcmpo cr0, f2, f4
3215 ; NOVSX-NEXT:    li r3, 1
3216 ; NOVSX-NEXT:    crnor 4*cr5+lt, un, gt
3217 ; NOVSX-NEXT:    fcmpo cr0, f1, f3
3218 ; NOVSX-NEXT:    crnor 4*cr5+gt, un, gt
3219 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3220 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3221 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3222 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3223 ; NOVSX-NEXT:    blr
3224   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #0
3225   %conv = zext i1 %cmp to i32
3226   ret i32 %conv
3229 define i32 @fcmps_ogt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3230 ; P8-LABEL: fcmps_ogt_ppcf128:
3231 ; P8:       # %bb.0:
3232 ; P8-NEXT:    fcmpo cr0, f1, f3
3233 ; P8-NEXT:    li r3, 1
3234 ; P8-NEXT:    crandc 4*cr5+gt, gt, eq
3235 ; P8-NEXT:    fcmpo cr1, f2, f4
3236 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr1+gt
3237 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3238 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3239 ; P8-NEXT:    blr
3241 ; P9-LABEL: fcmps_ogt_ppcf128:
3242 ; P9:       # %bb.0:
3243 ; P9-NEXT:    fcmpo cr0, f1, f3
3244 ; P9-NEXT:    fcmpo cr1, f2, f4
3245 ; P9-NEXT:    li r3, 1
3246 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr1+gt
3247 ; P9-NEXT:    crandc 4*cr5+gt, gt, eq
3248 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3249 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3250 ; P9-NEXT:    blr
3252 ; NOVSX-LABEL: fcmps_ogt_ppcf128:
3253 ; NOVSX:       # %bb.0:
3254 ; NOVSX-NEXT:    fcmpo cr0, f1, f3
3255 ; NOVSX-NEXT:    li r3, 1
3256 ; NOVSX-NEXT:    crandc 4*cr5+gt, gt, eq
3257 ; NOVSX-NEXT:    fcmpo cr1, f2, f4
3258 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr1+gt
3259 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3260 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3261 ; NOVSX-NEXT:    blr
3262   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #0
3263   %conv = zext i1 %cmp to i32
3264   ret i32 %conv
3267 define i32 @fcmps_oge_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3268 ; P8-LABEL: fcmps_oge_ppcf128:
3269 ; P8:       # %bb.0:
3270 ; P8-NEXT:    fcmpo cr0, f2, f4
3271 ; P8-NEXT:    li r3, 1
3272 ; P8-NEXT:    crnor 4*cr5+lt, un, lt
3273 ; P8-NEXT:    fcmpo cr0, f1, f3
3274 ; P8-NEXT:    crnor 4*cr5+gt, un, lt
3275 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3276 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3277 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3278 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3279 ; P8-NEXT:    blr
3281 ; P9-LABEL: fcmps_oge_ppcf128:
3282 ; P9:       # %bb.0:
3283 ; P9-NEXT:    fcmpo cr0, f2, f4
3284 ; P9-NEXT:    li r3, 1
3285 ; P9-NEXT:    crnor 4*cr5+lt, un, lt
3286 ; P9-NEXT:    fcmpo cr0, f1, f3
3287 ; P9-NEXT:    crnor 4*cr5+gt, un, lt
3288 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3289 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3290 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3291 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3292 ; P9-NEXT:    blr
3294 ; NOVSX-LABEL: fcmps_oge_ppcf128:
3295 ; NOVSX:       # %bb.0:
3296 ; NOVSX-NEXT:    fcmpo cr0, f2, f4
3297 ; NOVSX-NEXT:    li r3, 1
3298 ; NOVSX-NEXT:    crnor 4*cr5+lt, un, lt
3299 ; NOVSX-NEXT:    fcmpo cr0, f1, f3
3300 ; NOVSX-NEXT:    crnor 4*cr5+gt, un, lt
3301 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3302 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3303 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3304 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3305 ; NOVSX-NEXT:    blr
3306   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #0
3307   %conv = zext i1 %cmp to i32
3308   ret i32 %conv
3311 define i32 @fcmps_oeq_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3312 ; P8-LABEL: fcmps_oeq_ppcf128:
3313 ; P8:       # %bb.0:
3314 ; P8-NEXT:    fcmpo cr0, f1, f3
3315 ; P8-NEXT:    li r3, 1
3316 ; P8-NEXT:    crandc 4*cr5+gt, eq, eq
3317 ; P8-NEXT:    fcmpo cr1, f2, f4
3318 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr1+eq
3319 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3320 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3321 ; P8-NEXT:    blr
3323 ; P9-LABEL: fcmps_oeq_ppcf128:
3324 ; P9:       # %bb.0:
3325 ; P9-NEXT:    fcmpo cr0, f1, f3
3326 ; P9-NEXT:    fcmpo cr1, f2, f4
3327 ; P9-NEXT:    li r3, 1
3328 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr1+eq
3329 ; P9-NEXT:    crandc 4*cr5+gt, eq, eq
3330 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3331 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3332 ; P9-NEXT:    blr
3334 ; NOVSX-LABEL: fcmps_oeq_ppcf128:
3335 ; NOVSX:       # %bb.0:
3336 ; NOVSX-NEXT:    fcmpo cr0, f1, f3
3337 ; NOVSX-NEXT:    li r3, 1
3338 ; NOVSX-NEXT:    crandc 4*cr5+gt, eq, eq
3339 ; NOVSX-NEXT:    fcmpo cr1, f2, f4
3340 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr1+eq
3341 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3342 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3343 ; NOVSX-NEXT:    blr
3344   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #0
3345   %conv = zext i1 %cmp to i32
3346   ret i32 %conv
3349 define i32 @fcmps_one_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3350 ; P8-LABEL: fcmps_one_ppcf128:
3351 ; P8:       # %bb.0:
3352 ; P8-NEXT:    fcmpo cr0, f2, f4
3353 ; P8-NEXT:    li r3, 1
3354 ; P8-NEXT:    crnor 4*cr5+lt, un, eq
3355 ; P8-NEXT:    fcmpo cr0, f1, f3
3356 ; P8-NEXT:    crnor 4*cr5+gt, un, eq
3357 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3358 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3359 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3360 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3361 ; P8-NEXT:    blr
3363 ; P9-LABEL: fcmps_one_ppcf128:
3364 ; P9:       # %bb.0:
3365 ; P9-NEXT:    fcmpo cr0, f2, f4
3366 ; P9-NEXT:    li r3, 1
3367 ; P9-NEXT:    crnor 4*cr5+lt, un, eq
3368 ; P9-NEXT:    fcmpo cr0, f1, f3
3369 ; P9-NEXT:    crnor 4*cr5+gt, un, eq
3370 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3371 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3372 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3373 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3374 ; P9-NEXT:    blr
3376 ; NOVSX-LABEL: fcmps_one_ppcf128:
3377 ; NOVSX:       # %bb.0:
3378 ; NOVSX-NEXT:    fcmpo cr0, f2, f4
3379 ; NOVSX-NEXT:    li r3, 1
3380 ; NOVSX-NEXT:    crnor 4*cr5+lt, un, eq
3381 ; NOVSX-NEXT:    fcmpo cr0, f1, f3
3382 ; NOVSX-NEXT:    crnor 4*cr5+gt, un, eq
3383 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3384 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3385 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3386 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3387 ; NOVSX-NEXT:    blr
3388   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"one", metadata !"fpexcept.strict") #0
3389   %conv = zext i1 %cmp to i32
3390   ret i32 %conv
3393 define i32 @fcmps_ult_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3394 ; P8-LABEL: fcmps_ult_ppcf128:
3395 ; P8:       # %bb.0:
3396 ; P8-NEXT:    fcmpo cr0, f1, f3
3397 ; P8-NEXT:    li r3, 1
3398 ; P8-NEXT:    cror 4*cr5+gt, lt, un
3399 ; P8-NEXT:    fcmpo cr1, f2, f4
3400 ; P8-NEXT:    cror 4*cr5+lt, 4*cr1+lt, 4*cr1+un
3401 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3402 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3403 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3404 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3405 ; P8-NEXT:    blr
3407 ; P9-LABEL: fcmps_ult_ppcf128:
3408 ; P9:       # %bb.0:
3409 ; P9-NEXT:    fcmpo cr0, f1, f3
3410 ; P9-NEXT:    fcmpo cr1, f2, f4
3411 ; P9-NEXT:    li r3, 1
3412 ; P9-NEXT:    cror 4*cr5+lt, 4*cr1+lt, 4*cr1+un
3413 ; P9-NEXT:    cror 4*cr5+gt, lt, un
3414 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3415 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3416 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3417 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3418 ; P9-NEXT:    blr
3420 ; NOVSX-LABEL: fcmps_ult_ppcf128:
3421 ; NOVSX:       # %bb.0:
3422 ; NOVSX-NEXT:    fcmpo cr0, f1, f3
3423 ; NOVSX-NEXT:    li r3, 1
3424 ; NOVSX-NEXT:    cror 4*cr5+gt, lt, un
3425 ; NOVSX-NEXT:    fcmpo cr1, f2, f4
3426 ; NOVSX-NEXT:    cror 4*cr5+lt, 4*cr1+lt, 4*cr1+un
3427 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3428 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3429 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3430 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3431 ; NOVSX-NEXT:    blr
3432   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #0
3433   %conv = zext i1 %cmp to i32
3434   ret i32 %conv
3437 define i32 @fcmps_ule_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3438 ; P8-LABEL: fcmps_ule_ppcf128:
3439 ; P8:       # %bb.0:
3440 ; P8-NEXT:    fcmpo cr0, f2, f4
3441 ; P8-NEXT:    li r3, 1
3442 ; P8-NEXT:    fcmpo cr1, f1, f3
3443 ; P8-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, gt
3444 ; P8-NEXT:    crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq
3445 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3446 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3447 ; P8-NEXT:    blr
3449 ; P9-LABEL: fcmps_ule_ppcf128:
3450 ; P9:       # %bb.0:
3451 ; P9-NEXT:    fcmpo cr0, f2, f4
3452 ; P9-NEXT:    fcmpo cr1, f1, f3
3453 ; P9-NEXT:    li r3, 1
3454 ; P9-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, gt
3455 ; P9-NEXT:    crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq
3456 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3457 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3458 ; P9-NEXT:    blr
3460 ; NOVSX-LABEL: fcmps_ule_ppcf128:
3461 ; NOVSX:       # %bb.0:
3462 ; NOVSX-NEXT:    fcmpo cr0, f2, f4
3463 ; NOVSX-NEXT:    li r3, 1
3464 ; NOVSX-NEXT:    fcmpo cr1, f1, f3
3465 ; NOVSX-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, gt
3466 ; NOVSX-NEXT:    crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq
3467 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3468 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3469 ; NOVSX-NEXT:    blr
3470   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #0
3471   %conv = zext i1 %cmp to i32
3472   ret i32 %conv
3475 define i32 @fcmps_ugt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3476 ; P8-LABEL: fcmps_ugt_ppcf128:
3477 ; P8:       # %bb.0:
3478 ; P8-NEXT:    fcmpo cr0, f1, f3
3479 ; P8-NEXT:    li r3, 1
3480 ; P8-NEXT:    cror 4*cr5+gt, gt, un
3481 ; P8-NEXT:    fcmpo cr1, f2, f4
3482 ; P8-NEXT:    cror 4*cr5+lt, 4*cr1+gt, 4*cr1+un
3483 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3484 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3485 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3486 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3487 ; P8-NEXT:    blr
3489 ; P9-LABEL: fcmps_ugt_ppcf128:
3490 ; P9:       # %bb.0:
3491 ; P9-NEXT:    fcmpo cr0, f1, f3
3492 ; P9-NEXT:    fcmpo cr1, f2, f4
3493 ; P9-NEXT:    li r3, 1
3494 ; P9-NEXT:    cror 4*cr5+lt, 4*cr1+gt, 4*cr1+un
3495 ; P9-NEXT:    cror 4*cr5+gt, gt, un
3496 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3497 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3498 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3499 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3500 ; P9-NEXT:    blr
3502 ; NOVSX-LABEL: fcmps_ugt_ppcf128:
3503 ; NOVSX:       # %bb.0:
3504 ; NOVSX-NEXT:    fcmpo cr0, f1, f3
3505 ; NOVSX-NEXT:    li r3, 1
3506 ; NOVSX-NEXT:    cror 4*cr5+gt, gt, un
3507 ; NOVSX-NEXT:    fcmpo cr1, f2, f4
3508 ; NOVSX-NEXT:    cror 4*cr5+lt, 4*cr1+gt, 4*cr1+un
3509 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3510 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3511 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3512 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3513 ; NOVSX-NEXT:    blr
3514   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #0
3515   %conv = zext i1 %cmp to i32
3516   ret i32 %conv
3519 define i32 @fcmps_uge_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3520 ; P8-LABEL: fcmps_uge_ppcf128:
3521 ; P8:       # %bb.0:
3522 ; P8-NEXT:    fcmpo cr0, f2, f4
3523 ; P8-NEXT:    li r3, 1
3524 ; P8-NEXT:    fcmpo cr1, f1, f3
3525 ; P8-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, lt
3526 ; P8-NEXT:    crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq
3527 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3528 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3529 ; P8-NEXT:    blr
3531 ; P9-LABEL: fcmps_uge_ppcf128:
3532 ; P9:       # %bb.0:
3533 ; P9-NEXT:    fcmpo cr0, f2, f4
3534 ; P9-NEXT:    fcmpo cr1, f1, f3
3535 ; P9-NEXT:    li r3, 1
3536 ; P9-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, lt
3537 ; P9-NEXT:    crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq
3538 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3539 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3540 ; P9-NEXT:    blr
3542 ; NOVSX-LABEL: fcmps_uge_ppcf128:
3543 ; NOVSX:       # %bb.0:
3544 ; NOVSX-NEXT:    fcmpo cr0, f2, f4
3545 ; NOVSX-NEXT:    li r3, 1
3546 ; NOVSX-NEXT:    fcmpo cr1, f1, f3
3547 ; NOVSX-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, lt
3548 ; NOVSX-NEXT:    crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq
3549 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3550 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3551 ; NOVSX-NEXT:    blr
3552   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #0
3553   %conv = zext i1 %cmp to i32
3554   ret i32 %conv
3557 define i32 @fcmps_ueq_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3558 ; P8-LABEL: fcmps_ueq_ppcf128:
3559 ; P8:       # %bb.0:
3560 ; P8-NEXT:    fcmpo cr0, f1, f3
3561 ; P8-NEXT:    li r3, 1
3562 ; P8-NEXT:    cror 4*cr5+gt, eq, un
3563 ; P8-NEXT:    fcmpo cr1, f2, f4
3564 ; P8-NEXT:    cror 4*cr5+lt, 4*cr1+eq, 4*cr1+un
3565 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3566 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3567 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3568 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3569 ; P8-NEXT:    blr
3571 ; P9-LABEL: fcmps_ueq_ppcf128:
3572 ; P9:       # %bb.0:
3573 ; P9-NEXT:    fcmpo cr0, f1, f3
3574 ; P9-NEXT:    fcmpo cr1, f2, f4
3575 ; P9-NEXT:    li r3, 1
3576 ; P9-NEXT:    cror 4*cr5+lt, 4*cr1+eq, 4*cr1+un
3577 ; P9-NEXT:    cror 4*cr5+gt, eq, un
3578 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3579 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3580 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3581 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3582 ; P9-NEXT:    blr
3584 ; NOVSX-LABEL: fcmps_ueq_ppcf128:
3585 ; NOVSX:       # %bb.0:
3586 ; NOVSX-NEXT:    fcmpo cr0, f1, f3
3587 ; NOVSX-NEXT:    li r3, 1
3588 ; NOVSX-NEXT:    cror 4*cr5+gt, eq, un
3589 ; NOVSX-NEXT:    fcmpo cr1, f2, f4
3590 ; NOVSX-NEXT:    cror 4*cr5+lt, 4*cr1+eq, 4*cr1+un
3591 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3592 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3593 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3594 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3595 ; NOVSX-NEXT:    blr
3596   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #0
3597   %conv = zext i1 %cmp to i32
3598   ret i32 %conv
3601 define i32 @fcmps_une_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3602 ; P8-LABEL: fcmps_une_ppcf128:
3603 ; P8:       # %bb.0:
3604 ; P8-NEXT:    fcmpo cr0, f2, f4
3605 ; P8-NEXT:    li r3, 1
3606 ; P8-NEXT:    fcmpo cr1, f1, f3
3607 ; P8-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, eq
3608 ; P8-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3609 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3610 ; P8-NEXT:    blr
3612 ; P9-LABEL: fcmps_une_ppcf128:
3613 ; P9:       # %bb.0:
3614 ; P9-NEXT:    fcmpo cr0, f2, f4
3615 ; P9-NEXT:    fcmpo cr1, f1, f3
3616 ; P9-NEXT:    li r3, 1
3617 ; P9-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, eq
3618 ; P9-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3619 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3620 ; P9-NEXT:    blr
3622 ; NOVSX-LABEL: fcmps_une_ppcf128:
3623 ; NOVSX:       # %bb.0:
3624 ; NOVSX-NEXT:    fcmpo cr0, f2, f4
3625 ; NOVSX-NEXT:    li r3, 1
3626 ; NOVSX-NEXT:    fcmpo cr1, f1, f3
3627 ; NOVSX-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, eq
3628 ; NOVSX-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3629 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3630 ; NOVSX-NEXT:    blr
3631   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"une", metadata !"fpexcept.strict") #0
3632   %conv = zext i1 %cmp to i32
3633   ret i32 %conv
3636 attributes #0 = { strictfp nounwind }
3638 declare i1 @llvm.experimental.constrained.fcmp.f32(float, float, metadata, metadata)
3639 declare i1 @llvm.experimental.constrained.fcmp.f64(double, double, metadata, metadata)
3640 declare i1 @llvm.experimental.constrained.fcmps.f32(float, float, metadata, metadata)
3641 declare i1 @llvm.experimental.constrained.fcmps.f64(double, double, metadata, metadata)
3642 declare i1 @llvm.experimental.constrained.fcmps.f128(fp128, fp128, metadata, metadata)
3643 declare i1 @llvm.experimental.constrained.fcmp.f128(fp128, fp128, metadata, metadata)
3644 declare i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata)
3645 declare i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata)