[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / PowerPC / fp-strict-fcmp.ll
blob438e1768beabf48da481fbd44937310a5303cf79
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:    std r0, 16(r1)
1489 ; P8-NEXT:    stdu r1, -112(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:    std r0, 16(r1)
1510 ; NOVSX-NEXT:    stdu r1, -32(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:    std r0, 16(r1)
1528 ; P8-NEXT:    stdu r1, -112(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:    xscmpuqp cr1, v2, v3
1544 ; P9-NEXT:    li r3, 1
1545 ; P9-NEXT:    crnor 4*cr5+lt, un, 4*cr1+un
1546 ; P9-NEXT:    crnor 4*cr5+gt, gt, 4*cr1+gt
1547 ; P9-NEXT:    crnand 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
1548 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
1549 ; P9-NEXT:    blr
1551 ; NOVSX-LABEL: fcmp_ole_f128:
1552 ; NOVSX:       # %bb.0:
1553 ; NOVSX-NEXT:    mflr r0
1554 ; NOVSX-NEXT:    std r0, 16(r1)
1555 ; NOVSX-NEXT:    stdu r1, -32(r1)
1556 ; NOVSX-NEXT:    bl __lekf2
1557 ; NOVSX-NEXT:    nop
1558 ; NOVSX-NEXT:    extsw r3, r3
1559 ; NOVSX-NEXT:    neg r3, r3
1560 ; NOVSX-NEXT:    rldicl r3, r3, 1, 63
1561 ; NOVSX-NEXT:    xori r3, r3, 1
1562 ; NOVSX-NEXT:    addi r1, r1, 32
1563 ; NOVSX-NEXT:    ld r0, 16(r1)
1564 ; NOVSX-NEXT:    mtlr r0
1565 ; NOVSX-NEXT:    blr
1566   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #0
1567   %conv = zext i1 %cmp to i32
1568   ret i32 %conv
1571 define i32 @fcmp_ogt_f128(fp128 %a, fp128 %b) #0 {
1572 ; P8-LABEL: fcmp_ogt_f128:
1573 ; P8:       # %bb.0:
1574 ; P8-NEXT:    mflr r0
1575 ; P8-NEXT:    std r0, 16(r1)
1576 ; P8-NEXT:    stdu r1, -112(r1)
1577 ; P8-NEXT:    bl __gtkf2
1578 ; P8-NEXT:    nop
1579 ; P8-NEXT:    extsw r3, r3
1580 ; P8-NEXT:    neg r3, r3
1581 ; P8-NEXT:    rldicl r3, r3, 1, 63
1582 ; P8-NEXT:    addi r1, r1, 112
1583 ; P8-NEXT:    ld r0, 16(r1)
1584 ; P8-NEXT:    mtlr r0
1585 ; P8-NEXT:    blr
1587 ; P9-LABEL: fcmp_ogt_f128:
1588 ; P9:       # %bb.0:
1589 ; P9-NEXT:    xscmpuqp cr0, v2, v3
1590 ; P9-NEXT:    li r3, 0
1591 ; P9-NEXT:    li r4, 1
1592 ; P9-NEXT:    iselgt r3, r4, r3
1593 ; P9-NEXT:    blr
1595 ; NOVSX-LABEL: fcmp_ogt_f128:
1596 ; NOVSX:       # %bb.0:
1597 ; NOVSX-NEXT:    mflr r0
1598 ; NOVSX-NEXT:    std r0, 16(r1)
1599 ; NOVSX-NEXT:    stdu r1, -32(r1)
1600 ; NOVSX-NEXT:    bl __gtkf2
1601 ; NOVSX-NEXT:    nop
1602 ; NOVSX-NEXT:    extsw r3, r3
1603 ; NOVSX-NEXT:    neg r3, r3
1604 ; NOVSX-NEXT:    rldicl r3, r3, 1, 63
1605 ; NOVSX-NEXT:    addi r1, r1, 32
1606 ; NOVSX-NEXT:    ld r0, 16(r1)
1607 ; NOVSX-NEXT:    mtlr r0
1608 ; NOVSX-NEXT:    blr
1609   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #0
1610   %conv = zext i1 %cmp to i32
1611   ret i32 %conv
1614 define i32 @fcmp_oge_f128(fp128 %a, fp128 %b) #0 {
1615 ; P8-LABEL: fcmp_oge_f128:
1616 ; P8:       # %bb.0:
1617 ; P8-NEXT:    mflr r0
1618 ; P8-NEXT:    std r0, 16(r1)
1619 ; P8-NEXT:    stdu r1, -112(r1)
1620 ; P8-NEXT:    bl __gekf2
1621 ; P8-NEXT:    nop
1622 ; P8-NEXT:    rlwinm r3, r3, 1, 31, 31
1623 ; P8-NEXT:    xori r3, r3, 1
1624 ; P8-NEXT:    addi r1, r1, 112
1625 ; P8-NEXT:    ld r0, 16(r1)
1626 ; P8-NEXT:    mtlr r0
1627 ; P8-NEXT:    blr
1629 ; P9-LABEL: fcmp_oge_f128:
1630 ; P9:       # %bb.0:
1631 ; P9-NEXT:    xscmpuqp cr0, v2, v3
1632 ; P9-NEXT:    xscmpuqp cr1, v2, v3
1633 ; P9-NEXT:    li r3, 1
1634 ; P9-NEXT:    crnor 4*cr5+lt, un, 4*cr1+un
1635 ; P9-NEXT:    crnor 4*cr5+gt, lt, 4*cr1+lt
1636 ; P9-NEXT:    crnand 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
1637 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
1638 ; P9-NEXT:    blr
1640 ; NOVSX-LABEL: fcmp_oge_f128:
1641 ; NOVSX:       # %bb.0:
1642 ; NOVSX-NEXT:    mflr r0
1643 ; NOVSX-NEXT:    std r0, 16(r1)
1644 ; NOVSX-NEXT:    stdu r1, -32(r1)
1645 ; NOVSX-NEXT:    bl __gekf2
1646 ; NOVSX-NEXT:    nop
1647 ; NOVSX-NEXT:    rlwinm r3, r3, 1, 31, 31
1648 ; NOVSX-NEXT:    xori r3, r3, 1
1649 ; NOVSX-NEXT:    addi r1, r1, 32
1650 ; NOVSX-NEXT:    ld r0, 16(r1)
1651 ; NOVSX-NEXT:    mtlr r0
1652 ; NOVSX-NEXT:    blr
1653   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #0
1654   %conv = zext i1 %cmp to i32
1655   ret i32 %conv
1658 define i32 @fcmp_oeq_f128(fp128 %a, fp128 %b) #0 {
1659 ; P8-LABEL: fcmp_oeq_f128:
1660 ; P8:       # %bb.0:
1661 ; P8-NEXT:    mflr r0
1662 ; P8-NEXT:    std r0, 16(r1)
1663 ; P8-NEXT:    stdu r1, -112(r1)
1664 ; P8-NEXT:    bl __eqkf2
1665 ; P8-NEXT:    nop
1666 ; P8-NEXT:    cntlzw r3, r3
1667 ; P8-NEXT:    srwi r3, r3, 5
1668 ; P8-NEXT:    addi r1, r1, 112
1669 ; P8-NEXT:    ld r0, 16(r1)
1670 ; P8-NEXT:    mtlr r0
1671 ; P8-NEXT:    blr
1673 ; P9-LABEL: fcmp_oeq_f128:
1674 ; P9:       # %bb.0:
1675 ; P9-NEXT:    xscmpuqp cr0, v2, v3
1676 ; P9-NEXT:    li r3, 0
1677 ; P9-NEXT:    li r4, 1
1678 ; P9-NEXT:    iseleq r3, r4, r3
1679 ; P9-NEXT:    blr
1681 ; NOVSX-LABEL: fcmp_oeq_f128:
1682 ; NOVSX:       # %bb.0:
1683 ; NOVSX-NEXT:    mflr r0
1684 ; NOVSX-NEXT:    std r0, 16(r1)
1685 ; NOVSX-NEXT:    stdu r1, -32(r1)
1686 ; NOVSX-NEXT:    bl __eqkf2
1687 ; NOVSX-NEXT:    nop
1688 ; NOVSX-NEXT:    cntlzw r3, r3
1689 ; NOVSX-NEXT:    srwi r3, r3, 5
1690 ; NOVSX-NEXT:    addi r1, r1, 32
1691 ; NOVSX-NEXT:    ld r0, 16(r1)
1692 ; NOVSX-NEXT:    mtlr r0
1693 ; NOVSX-NEXT:    blr
1694   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #0
1695   %conv = zext i1 %cmp to i32
1696   ret i32 %conv
1699 define i32 @fcmp_one_f128(fp128 %a, fp128 %b) #0 {
1700 ; P8-LABEL: fcmp_one_f128:
1701 ; P8:       # %bb.0:
1702 ; P8-NEXT:    mflr r0
1703 ; P8-NEXT:    std r0, 16(r1)
1704 ; P8-NEXT:    stdu r1, -176(r1)
1705 ; P8-NEXT:    li r3, 128
1706 ; P8-NEXT:    std r30, 160(r1) # 8-byte Folded Spill
1707 ; P8-NEXT:    stxvd2x v30, r1, r3 # 16-byte Folded Spill
1708 ; P8-NEXT:    li r3, 144
1709 ; P8-NEXT:    vmr v30, v2
1710 ; P8-NEXT:    stxvd2x v31, r1, r3 # 16-byte Folded Spill
1711 ; P8-NEXT:    vmr v31, v3
1712 ; P8-NEXT:    bl __unordkf2
1713 ; P8-NEXT:    nop
1714 ; P8-NEXT:    vmr v2, v30
1715 ; P8-NEXT:    cntlzw r3, r3
1716 ; P8-NEXT:    vmr v3, v31
1717 ; P8-NEXT:    srwi r30, r3, 5
1718 ; P8-NEXT:    bl __eqkf2
1719 ; P8-NEXT:    nop
1720 ; P8-NEXT:    cntlzw r3, r3
1721 ; P8-NEXT:    li r4, 144
1722 ; P8-NEXT:    srwi r3, r3, 5
1723 ; P8-NEXT:    lxvd2x v31, r1, r4 # 16-byte Folded Reload
1724 ; P8-NEXT:    li r4, 128
1725 ; P8-NEXT:    xori r3, r3, 1
1726 ; P8-NEXT:    lxvd2x v30, r1, r4 # 16-byte Folded Reload
1727 ; P8-NEXT:    and r3, r30, r3
1728 ; P8-NEXT:    ld r30, 160(r1) # 8-byte Folded Reload
1729 ; P8-NEXT:    addi r1, r1, 176
1730 ; P8-NEXT:    ld r0, 16(r1)
1731 ; P8-NEXT:    mtlr r0
1732 ; P8-NEXT:    blr
1734 ; P9-LABEL: fcmp_one_f128:
1735 ; P9:       # %bb.0:
1736 ; P9-NEXT:    xscmpuqp cr0, v2, v3
1737 ; P9-NEXT:    xscmpuqp cr1, v2, v3
1738 ; P9-NEXT:    li r3, 1
1739 ; P9-NEXT:    crnor 4*cr5+lt, un, 4*cr1+un
1740 ; P9-NEXT:    crnor 4*cr5+gt, eq, 4*cr1+eq
1741 ; P9-NEXT:    crnand 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
1742 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
1743 ; P9-NEXT:    blr
1745 ; NOVSX-LABEL: fcmp_one_f128:
1746 ; NOVSX:       # %bb.0:
1747 ; NOVSX-NEXT:    mflr r0
1748 ; NOVSX-NEXT:    std r26, -48(r1) # 8-byte Folded Spill
1749 ; NOVSX-NEXT:    std r27, -40(r1) # 8-byte Folded Spill
1750 ; NOVSX-NEXT:    std r28, -32(r1) # 8-byte Folded Spill
1751 ; NOVSX-NEXT:    std r29, -24(r1) # 8-byte Folded Spill
1752 ; NOVSX-NEXT:    std r30, -16(r1) # 8-byte Folded Spill
1753 ; NOVSX-NEXT:    std r0, 16(r1)
1754 ; NOVSX-NEXT:    stdu r1, -80(r1)
1755 ; NOVSX-NEXT:    mr r30, r6
1756 ; NOVSX-NEXT:    mr r29, r5
1757 ; NOVSX-NEXT:    mr r28, r4
1758 ; NOVSX-NEXT:    mr r27, r3
1759 ; NOVSX-NEXT:    bl __unordkf2
1760 ; NOVSX-NEXT:    nop
1761 ; NOVSX-NEXT:    cntlzw r3, r3
1762 ; NOVSX-NEXT:    mr r4, r28
1763 ; NOVSX-NEXT:    mr r5, r29
1764 ; NOVSX-NEXT:    mr r6, r30
1765 ; NOVSX-NEXT:    srwi r26, r3, 5
1766 ; NOVSX-NEXT:    mr r3, r27
1767 ; NOVSX-NEXT:    bl __eqkf2
1768 ; NOVSX-NEXT:    nop
1769 ; NOVSX-NEXT:    cntlzw r3, r3
1770 ; NOVSX-NEXT:    srwi r3, r3, 5
1771 ; NOVSX-NEXT:    xori r3, r3, 1
1772 ; NOVSX-NEXT:    and r3, r26, r3
1773 ; NOVSX-NEXT:    addi r1, r1, 80
1774 ; NOVSX-NEXT:    ld r0, 16(r1)
1775 ; NOVSX-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload
1776 ; NOVSX-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload
1777 ; NOVSX-NEXT:    ld r28, -32(r1) # 8-byte Folded Reload
1778 ; NOVSX-NEXT:    ld r27, -40(r1) # 8-byte Folded Reload
1779 ; NOVSX-NEXT:    ld r26, -48(r1) # 8-byte Folded Reload
1780 ; NOVSX-NEXT:    mtlr r0
1781 ; NOVSX-NEXT:    blr
1782   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"one", metadata !"fpexcept.strict") #0
1783   %conv = zext i1 %cmp to i32
1784   ret i32 %conv
1787 define i32 @fcmp_ult_f128(fp128 %a, fp128 %b) #0 {
1788 ; P8-LABEL: fcmp_ult_f128:
1789 ; P8:       # %bb.0:
1790 ; P8-NEXT:    mflr r0
1791 ; P8-NEXT:    std r0, 16(r1)
1792 ; P8-NEXT:    stdu r1, -112(r1)
1793 ; P8-NEXT:    bl __gekf2
1794 ; P8-NEXT:    nop
1795 ; P8-NEXT:    rlwinm r3, r3, 1, 31, 31
1796 ; P8-NEXT:    addi r1, r1, 112
1797 ; P8-NEXT:    ld r0, 16(r1)
1798 ; P8-NEXT:    mtlr r0
1799 ; P8-NEXT:    blr
1801 ; P9-LABEL: fcmp_ult_f128:
1802 ; P9:       # %bb.0:
1803 ; P9-NEXT:    xscmpuqp cr0, v2, v3
1804 ; P9-NEXT:    li r3, 1
1805 ; P9-NEXT:    crnor 4*cr5+lt, lt, un
1806 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
1807 ; P9-NEXT:    blr
1809 ; NOVSX-LABEL: fcmp_ult_f128:
1810 ; NOVSX:       # %bb.0:
1811 ; NOVSX-NEXT:    mflr r0
1812 ; NOVSX-NEXT:    std r0, 16(r1)
1813 ; NOVSX-NEXT:    stdu r1, -32(r1)
1814 ; NOVSX-NEXT:    bl __gekf2
1815 ; NOVSX-NEXT:    nop
1816 ; NOVSX-NEXT:    rlwinm r3, r3, 1, 31, 31
1817 ; NOVSX-NEXT:    addi r1, r1, 32
1818 ; NOVSX-NEXT:    ld r0, 16(r1)
1819 ; NOVSX-NEXT:    mtlr r0
1820 ; NOVSX-NEXT:    blr
1821   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #0
1822   %conv = zext i1 %cmp to i32
1823   ret i32 %conv
1826 define i32 @fcmp_ule_f128(fp128 %a, fp128 %b) #0 {
1827 ; P8-LABEL: fcmp_ule_f128:
1828 ; P8:       # %bb.0:
1829 ; P8-NEXT:    mflr r0
1830 ; P8-NEXT:    std r0, 16(r1)
1831 ; P8-NEXT:    stdu r1, -112(r1)
1832 ; P8-NEXT:    bl __gtkf2
1833 ; P8-NEXT:    nop
1834 ; P8-NEXT:    extsw r3, r3
1835 ; P8-NEXT:    neg r3, r3
1836 ; P8-NEXT:    rldicl r3, r3, 1, 63
1837 ; P8-NEXT:    xori r3, r3, 1
1838 ; P8-NEXT:    addi r1, r1, 112
1839 ; P8-NEXT:    ld r0, 16(r1)
1840 ; P8-NEXT:    mtlr r0
1841 ; P8-NEXT:    blr
1843 ; P9-LABEL: fcmp_ule_f128:
1844 ; P9:       # %bb.0:
1845 ; P9-NEXT:    xscmpuqp cr0, v2, v3
1846 ; P9-NEXT:    li r3, 1
1847 ; P9-NEXT:    iselgt r3, 0, r3
1848 ; P9-NEXT:    blr
1850 ; NOVSX-LABEL: fcmp_ule_f128:
1851 ; NOVSX:       # %bb.0:
1852 ; NOVSX-NEXT:    mflr r0
1853 ; NOVSX-NEXT:    std r0, 16(r1)
1854 ; NOVSX-NEXT:    stdu r1, -32(r1)
1855 ; NOVSX-NEXT:    bl __gtkf2
1856 ; NOVSX-NEXT:    nop
1857 ; NOVSX-NEXT:    extsw r3, r3
1858 ; NOVSX-NEXT:    neg r3, r3
1859 ; NOVSX-NEXT:    rldicl r3, r3, 1, 63
1860 ; NOVSX-NEXT:    xori r3, r3, 1
1861 ; NOVSX-NEXT:    addi r1, r1, 32
1862 ; NOVSX-NEXT:    ld r0, 16(r1)
1863 ; NOVSX-NEXT:    mtlr r0
1864 ; NOVSX-NEXT:    blr
1865   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #0
1866   %conv = zext i1 %cmp to i32
1867   ret i32 %conv
1870 define i32 @fcmp_ugt_f128(fp128 %a, fp128 %b) #0 {
1871 ; P8-LABEL: fcmp_ugt_f128:
1872 ; P8:       # %bb.0:
1873 ; P8-NEXT:    mflr r0
1874 ; P8-NEXT:    std r0, 16(r1)
1875 ; P8-NEXT:    stdu r1, -112(r1)
1876 ; P8-NEXT:    bl __lekf2
1877 ; P8-NEXT:    nop
1878 ; P8-NEXT:    extsw r3, r3
1879 ; P8-NEXT:    neg r3, r3
1880 ; P8-NEXT:    rldicl r3, r3, 1, 63
1881 ; P8-NEXT:    addi r1, r1, 112
1882 ; P8-NEXT:    ld r0, 16(r1)
1883 ; P8-NEXT:    mtlr r0
1884 ; P8-NEXT:    blr
1886 ; P9-LABEL: fcmp_ugt_f128:
1887 ; P9:       # %bb.0:
1888 ; P9-NEXT:    xscmpuqp cr0, v2, v3
1889 ; P9-NEXT:    li r3, 1
1890 ; P9-NEXT:    crnor 4*cr5+lt, gt, un
1891 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
1892 ; P9-NEXT:    blr
1894 ; NOVSX-LABEL: fcmp_ugt_f128:
1895 ; NOVSX:       # %bb.0:
1896 ; NOVSX-NEXT:    mflr r0
1897 ; NOVSX-NEXT:    std r0, 16(r1)
1898 ; NOVSX-NEXT:    stdu r1, -32(r1)
1899 ; NOVSX-NEXT:    bl __lekf2
1900 ; NOVSX-NEXT:    nop
1901 ; NOVSX-NEXT:    extsw r3, r3
1902 ; NOVSX-NEXT:    neg r3, r3
1903 ; NOVSX-NEXT:    rldicl r3, r3, 1, 63
1904 ; NOVSX-NEXT:    addi r1, r1, 32
1905 ; NOVSX-NEXT:    ld r0, 16(r1)
1906 ; NOVSX-NEXT:    mtlr r0
1907 ; NOVSX-NEXT:    blr
1908   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #0
1909   %conv = zext i1 %cmp to i32
1910   ret i32 %conv
1913 define i32 @fcmp_uge_f128(fp128 %a, fp128 %b) #0 {
1914 ; P8-LABEL: fcmp_uge_f128:
1915 ; P8:       # %bb.0:
1916 ; P8-NEXT:    mflr r0
1917 ; P8-NEXT:    std r0, 16(r1)
1918 ; P8-NEXT:    stdu r1, -112(r1)
1919 ; P8-NEXT:    bl __ltkf2
1920 ; P8-NEXT:    nop
1921 ; P8-NEXT:    rlwinm r3, r3, 1, 31, 31
1922 ; P8-NEXT:    xori r3, r3, 1
1923 ; P8-NEXT:    addi r1, r1, 112
1924 ; P8-NEXT:    ld r0, 16(r1)
1925 ; P8-NEXT:    mtlr r0
1926 ; P8-NEXT:    blr
1928 ; P9-LABEL: fcmp_uge_f128:
1929 ; P9:       # %bb.0:
1930 ; P9-NEXT:    xscmpuqp cr0, v2, v3
1931 ; P9-NEXT:    li r3, 1
1932 ; P9-NEXT:    isellt r3, 0, r3
1933 ; P9-NEXT:    blr
1935 ; NOVSX-LABEL: fcmp_uge_f128:
1936 ; NOVSX:       # %bb.0:
1937 ; NOVSX-NEXT:    mflr r0
1938 ; NOVSX-NEXT:    std r0, 16(r1)
1939 ; NOVSX-NEXT:    stdu r1, -32(r1)
1940 ; NOVSX-NEXT:    bl __ltkf2
1941 ; NOVSX-NEXT:    nop
1942 ; NOVSX-NEXT:    rlwinm r3, r3, 1, 31, 31
1943 ; NOVSX-NEXT:    xori r3, r3, 1
1944 ; NOVSX-NEXT:    addi r1, r1, 32
1945 ; NOVSX-NEXT:    ld r0, 16(r1)
1946 ; NOVSX-NEXT:    mtlr r0
1947 ; NOVSX-NEXT:    blr
1948   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #0
1949   %conv = zext i1 %cmp to i32
1950   ret i32 %conv
1953 define i32 @fcmp_ueq_f128(fp128 %a, fp128 %b) #0 {
1954 ; P8-LABEL: fcmp_ueq_f128:
1955 ; P8:       # %bb.0:
1956 ; P8-NEXT:    mflr r0
1957 ; P8-NEXT:    std r0, 16(r1)
1958 ; P8-NEXT:    stdu r1, -176(r1)
1959 ; P8-NEXT:    li r3, 128
1960 ; P8-NEXT:    std r30, 160(r1) # 8-byte Folded Spill
1961 ; P8-NEXT:    stxvd2x v30, r1, r3 # 16-byte Folded Spill
1962 ; P8-NEXT:    li r3, 144
1963 ; P8-NEXT:    vmr v30, v2
1964 ; P8-NEXT:    stxvd2x v31, r1, r3 # 16-byte Folded Spill
1965 ; P8-NEXT:    vmr v31, v3
1966 ; P8-NEXT:    bl __eqkf2
1967 ; P8-NEXT:    nop
1968 ; P8-NEXT:    vmr v2, v30
1969 ; P8-NEXT:    cntlzw r3, r3
1970 ; P8-NEXT:    vmr v3, v31
1971 ; P8-NEXT:    srwi r30, r3, 5
1972 ; P8-NEXT:    bl __unordkf2
1973 ; P8-NEXT:    nop
1974 ; P8-NEXT:    cntlzw r3, r3
1975 ; P8-NEXT:    li r4, 144
1976 ; P8-NEXT:    srwi r3, r3, 5
1977 ; P8-NEXT:    lxvd2x v31, r1, r4 # 16-byte Folded Reload
1978 ; P8-NEXT:    li r4, 128
1979 ; P8-NEXT:    xori r3, r3, 1
1980 ; P8-NEXT:    lxvd2x v30, r1, r4 # 16-byte Folded Reload
1981 ; P8-NEXT:    or r3, r3, r30
1982 ; P8-NEXT:    ld r30, 160(r1) # 8-byte Folded Reload
1983 ; P8-NEXT:    addi r1, r1, 176
1984 ; P8-NEXT:    ld r0, 16(r1)
1985 ; P8-NEXT:    mtlr r0
1986 ; P8-NEXT:    blr
1988 ; P9-LABEL: fcmp_ueq_f128:
1989 ; P9:       # %bb.0:
1990 ; P9-NEXT:    xscmpuqp cr0, v2, v3
1991 ; P9-NEXT:    li r3, 1
1992 ; P9-NEXT:    crnor 4*cr5+lt, eq, un
1993 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
1994 ; P9-NEXT:    blr
1996 ; NOVSX-LABEL: fcmp_ueq_f128:
1997 ; NOVSX:       # %bb.0:
1998 ; NOVSX-NEXT:    mflr r0
1999 ; NOVSX-NEXT:    std r26, -48(r1) # 8-byte Folded Spill
2000 ; NOVSX-NEXT:    std r27, -40(r1) # 8-byte Folded Spill
2001 ; NOVSX-NEXT:    std r28, -32(r1) # 8-byte Folded Spill
2002 ; NOVSX-NEXT:    std r29, -24(r1) # 8-byte Folded Spill
2003 ; NOVSX-NEXT:    std r30, -16(r1) # 8-byte Folded Spill
2004 ; NOVSX-NEXT:    std r0, 16(r1)
2005 ; NOVSX-NEXT:    stdu r1, -80(r1)
2006 ; NOVSX-NEXT:    mr r30, r6
2007 ; NOVSX-NEXT:    mr r29, r5
2008 ; NOVSX-NEXT:    mr r28, r4
2009 ; NOVSX-NEXT:    mr r27, r3
2010 ; NOVSX-NEXT:    bl __eqkf2
2011 ; NOVSX-NEXT:    nop
2012 ; NOVSX-NEXT:    cntlzw r3, r3
2013 ; NOVSX-NEXT:    mr r4, r28
2014 ; NOVSX-NEXT:    mr r5, r29
2015 ; NOVSX-NEXT:    mr r6, r30
2016 ; NOVSX-NEXT:    srwi r26, r3, 5
2017 ; NOVSX-NEXT:    mr r3, r27
2018 ; NOVSX-NEXT:    bl __unordkf2
2019 ; NOVSX-NEXT:    nop
2020 ; NOVSX-NEXT:    cntlzw r3, r3
2021 ; NOVSX-NEXT:    srwi r3, r3, 5
2022 ; NOVSX-NEXT:    xori r3, r3, 1
2023 ; NOVSX-NEXT:    or r3, r3, r26
2024 ; NOVSX-NEXT:    addi r1, r1, 80
2025 ; NOVSX-NEXT:    ld r0, 16(r1)
2026 ; NOVSX-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload
2027 ; NOVSX-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload
2028 ; NOVSX-NEXT:    ld r28, -32(r1) # 8-byte Folded Reload
2029 ; NOVSX-NEXT:    ld r27, -40(r1) # 8-byte Folded Reload
2030 ; NOVSX-NEXT:    ld r26, -48(r1) # 8-byte Folded Reload
2031 ; NOVSX-NEXT:    mtlr r0
2032 ; NOVSX-NEXT:    blr
2033   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #0
2034   %conv = zext i1 %cmp to i32
2035   ret i32 %conv
2038 define i32 @fcmp_une_f128(fp128 %a, fp128 %b) #0 {
2039 ; P8-LABEL: fcmp_une_f128:
2040 ; P8:       # %bb.0:
2041 ; P8-NEXT:    mflr r0
2042 ; P8-NEXT:    std r0, 16(r1)
2043 ; P8-NEXT:    stdu r1, -112(r1)
2044 ; P8-NEXT:    bl __nekf2
2045 ; P8-NEXT:    nop
2046 ; P8-NEXT:    cntlzw r3, r3
2047 ; P8-NEXT:    srwi r3, r3, 5
2048 ; P8-NEXT:    xori r3, r3, 1
2049 ; P8-NEXT:    addi r1, r1, 112
2050 ; P8-NEXT:    ld r0, 16(r1)
2051 ; P8-NEXT:    mtlr r0
2052 ; P8-NEXT:    blr
2054 ; P9-LABEL: fcmp_une_f128:
2055 ; P9:       # %bb.0:
2056 ; P9-NEXT:    xscmpuqp cr0, v2, v3
2057 ; P9-NEXT:    li r3, 1
2058 ; P9-NEXT:    iseleq r3, 0, r3
2059 ; P9-NEXT:    blr
2061 ; NOVSX-LABEL: fcmp_une_f128:
2062 ; NOVSX:       # %bb.0:
2063 ; NOVSX-NEXT:    mflr r0
2064 ; NOVSX-NEXT:    std r0, 16(r1)
2065 ; NOVSX-NEXT:    stdu r1, -32(r1)
2066 ; NOVSX-NEXT:    bl __nekf2
2067 ; NOVSX-NEXT:    nop
2068 ; NOVSX-NEXT:    cntlzw r3, r3
2069 ; NOVSX-NEXT:    srwi r3, r3, 5
2070 ; NOVSX-NEXT:    xori r3, r3, 1
2071 ; NOVSX-NEXT:    addi r1, r1, 32
2072 ; NOVSX-NEXT:    ld r0, 16(r1)
2073 ; NOVSX-NEXT:    mtlr r0
2074 ; NOVSX-NEXT:    blr
2075   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"une", metadata !"fpexcept.strict") #0
2076   %conv = zext i1 %cmp to i32
2077   ret i32 %conv
2080 define i32 @fcmps_olt_f128(fp128 %a, fp128 %b) #0 {
2081 ; P8-LABEL: fcmps_olt_f128:
2082 ; P8:       # %bb.0:
2083 ; P8-NEXT:    mflr r0
2084 ; P8-NEXT:    std r0, 16(r1)
2085 ; P8-NEXT:    stdu r1, -112(r1)
2086 ; P8-NEXT:    bl __ltkf2
2087 ; P8-NEXT:    nop
2088 ; P8-NEXT:    rlwinm r3, r3, 1, 31, 31
2089 ; P8-NEXT:    addi r1, r1, 112
2090 ; P8-NEXT:    ld r0, 16(r1)
2091 ; P8-NEXT:    mtlr r0
2092 ; P8-NEXT:    blr
2094 ; P9-LABEL: fcmps_olt_f128:
2095 ; P9:       # %bb.0:
2096 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2097 ; P9-NEXT:    li r3, 0
2098 ; P9-NEXT:    li r4, 1
2099 ; P9-NEXT:    isellt r3, r4, r3
2100 ; P9-NEXT:    blr
2102 ; NOVSX-LABEL: fcmps_olt_f128:
2103 ; NOVSX:       # %bb.0:
2104 ; NOVSX-NEXT:    mflr r0
2105 ; NOVSX-NEXT:    std r0, 16(r1)
2106 ; NOVSX-NEXT:    stdu r1, -32(r1)
2107 ; NOVSX-NEXT:    bl __ltkf2
2108 ; NOVSX-NEXT:    nop
2109 ; NOVSX-NEXT:    rlwinm r3, r3, 1, 31, 31
2110 ; NOVSX-NEXT:    addi r1, r1, 32
2111 ; NOVSX-NEXT:    ld r0, 16(r1)
2112 ; NOVSX-NEXT:    mtlr r0
2113 ; NOVSX-NEXT:    blr
2114   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #0
2115   %conv = zext i1 %cmp to i32
2116   ret i32 %conv
2119 define i32 @fcmps_ole_f128(fp128 %a, fp128 %b) #0 {
2120 ; P8-LABEL: fcmps_ole_f128:
2121 ; P8:       # %bb.0:
2122 ; P8-NEXT:    mflr r0
2123 ; P8-NEXT:    std r0, 16(r1)
2124 ; P8-NEXT:    stdu r1, -112(r1)
2125 ; P8-NEXT:    bl __lekf2
2126 ; P8-NEXT:    nop
2127 ; P8-NEXT:    extsw r3, r3
2128 ; P8-NEXT:    neg r3, r3
2129 ; P8-NEXT:    rldicl r3, r3, 1, 63
2130 ; P8-NEXT:    xori r3, r3, 1
2131 ; P8-NEXT:    addi r1, r1, 112
2132 ; P8-NEXT:    ld r0, 16(r1)
2133 ; P8-NEXT:    mtlr r0
2134 ; P8-NEXT:    blr
2136 ; P9-LABEL: fcmps_ole_f128:
2137 ; P9:       # %bb.0:
2138 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2139 ; P9-NEXT:    xscmpoqp cr1, v2, v3
2140 ; P9-NEXT:    li r3, 1
2141 ; P9-NEXT:    crnor 4*cr5+lt, un, 4*cr1+un
2142 ; P9-NEXT:    crnor 4*cr5+gt, gt, 4*cr1+gt
2143 ; P9-NEXT:    crnand 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2144 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2145 ; P9-NEXT:    blr
2147 ; NOVSX-LABEL: fcmps_ole_f128:
2148 ; NOVSX:       # %bb.0:
2149 ; NOVSX-NEXT:    mflr r0
2150 ; NOVSX-NEXT:    std r0, 16(r1)
2151 ; NOVSX-NEXT:    stdu r1, -32(r1)
2152 ; NOVSX-NEXT:    bl __lekf2
2153 ; NOVSX-NEXT:    nop
2154 ; NOVSX-NEXT:    extsw r3, r3
2155 ; NOVSX-NEXT:    neg r3, r3
2156 ; NOVSX-NEXT:    rldicl r3, r3, 1, 63
2157 ; NOVSX-NEXT:    xori r3, r3, 1
2158 ; NOVSX-NEXT:    addi r1, r1, 32
2159 ; NOVSX-NEXT:    ld r0, 16(r1)
2160 ; NOVSX-NEXT:    mtlr r0
2161 ; NOVSX-NEXT:    blr
2162   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #0
2163   %conv = zext i1 %cmp to i32
2164   ret i32 %conv
2167 define i32 @fcmps_ogt_f128(fp128 %a, fp128 %b) #0 {
2168 ; P8-LABEL: fcmps_ogt_f128:
2169 ; P8:       # %bb.0:
2170 ; P8-NEXT:    mflr r0
2171 ; P8-NEXT:    std r0, 16(r1)
2172 ; P8-NEXT:    stdu r1, -112(r1)
2173 ; P8-NEXT:    bl __gtkf2
2174 ; P8-NEXT:    nop
2175 ; P8-NEXT:    extsw r3, r3
2176 ; P8-NEXT:    neg r3, r3
2177 ; P8-NEXT:    rldicl r3, r3, 1, 63
2178 ; P8-NEXT:    addi r1, r1, 112
2179 ; P8-NEXT:    ld r0, 16(r1)
2180 ; P8-NEXT:    mtlr r0
2181 ; P8-NEXT:    blr
2183 ; P9-LABEL: fcmps_ogt_f128:
2184 ; P9:       # %bb.0:
2185 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2186 ; P9-NEXT:    li r3, 0
2187 ; P9-NEXT:    li r4, 1
2188 ; P9-NEXT:    iselgt r3, r4, r3
2189 ; P9-NEXT:    blr
2191 ; NOVSX-LABEL: fcmps_ogt_f128:
2192 ; NOVSX:       # %bb.0:
2193 ; NOVSX-NEXT:    mflr r0
2194 ; NOVSX-NEXT:    std r0, 16(r1)
2195 ; NOVSX-NEXT:    stdu r1, -32(r1)
2196 ; NOVSX-NEXT:    bl __gtkf2
2197 ; NOVSX-NEXT:    nop
2198 ; NOVSX-NEXT:    extsw r3, r3
2199 ; NOVSX-NEXT:    neg r3, r3
2200 ; NOVSX-NEXT:    rldicl r3, r3, 1, 63
2201 ; NOVSX-NEXT:    addi r1, r1, 32
2202 ; NOVSX-NEXT:    ld r0, 16(r1)
2203 ; NOVSX-NEXT:    mtlr r0
2204 ; NOVSX-NEXT:    blr
2205   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #0
2206   %conv = zext i1 %cmp to i32
2207   ret i32 %conv
2210 define i32 @fcmps_oge_f128(fp128 %a, fp128 %b) #0 {
2211 ; P8-LABEL: fcmps_oge_f128:
2212 ; P8:       # %bb.0:
2213 ; P8-NEXT:    mflr r0
2214 ; P8-NEXT:    std r0, 16(r1)
2215 ; P8-NEXT:    stdu r1, -112(r1)
2216 ; P8-NEXT:    bl __gekf2
2217 ; P8-NEXT:    nop
2218 ; P8-NEXT:    rlwinm r3, r3, 1, 31, 31
2219 ; P8-NEXT:    xori r3, r3, 1
2220 ; P8-NEXT:    addi r1, r1, 112
2221 ; P8-NEXT:    ld r0, 16(r1)
2222 ; P8-NEXT:    mtlr r0
2223 ; P8-NEXT:    blr
2225 ; P9-LABEL: fcmps_oge_f128:
2226 ; P9:       # %bb.0:
2227 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2228 ; P9-NEXT:    xscmpoqp cr1, v2, v3
2229 ; P9-NEXT:    li r3, 1
2230 ; P9-NEXT:    crnor 4*cr5+lt, un, 4*cr1+un
2231 ; P9-NEXT:    crnor 4*cr5+gt, lt, 4*cr1+lt
2232 ; P9-NEXT:    crnand 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2233 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2234 ; P9-NEXT:    blr
2236 ; NOVSX-LABEL: fcmps_oge_f128:
2237 ; NOVSX:       # %bb.0:
2238 ; NOVSX-NEXT:    mflr r0
2239 ; NOVSX-NEXT:    std r0, 16(r1)
2240 ; NOVSX-NEXT:    stdu r1, -32(r1)
2241 ; NOVSX-NEXT:    bl __gekf2
2242 ; NOVSX-NEXT:    nop
2243 ; NOVSX-NEXT:    rlwinm r3, r3, 1, 31, 31
2244 ; NOVSX-NEXT:    xori r3, r3, 1
2245 ; NOVSX-NEXT:    addi r1, r1, 32
2246 ; NOVSX-NEXT:    ld r0, 16(r1)
2247 ; NOVSX-NEXT:    mtlr r0
2248 ; NOVSX-NEXT:    blr
2249   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #0
2250   %conv = zext i1 %cmp to i32
2251   ret i32 %conv
2254 define i32 @fcmps_oeq_f128(fp128 %a, fp128 %b) #0 {
2255 ; P8-LABEL: fcmps_oeq_f128:
2256 ; P8:       # %bb.0:
2257 ; P8-NEXT:    mflr r0
2258 ; P8-NEXT:    std r0, 16(r1)
2259 ; P8-NEXT:    stdu r1, -112(r1)
2260 ; P8-NEXT:    bl __eqkf2
2261 ; P8-NEXT:    nop
2262 ; P8-NEXT:    cntlzw r3, r3
2263 ; P8-NEXT:    srwi r3, r3, 5
2264 ; P8-NEXT:    addi r1, r1, 112
2265 ; P8-NEXT:    ld r0, 16(r1)
2266 ; P8-NEXT:    mtlr r0
2267 ; P8-NEXT:    blr
2269 ; P9-LABEL: fcmps_oeq_f128:
2270 ; P9:       # %bb.0:
2271 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2272 ; P9-NEXT:    li r3, 0
2273 ; P9-NEXT:    li r4, 1
2274 ; P9-NEXT:    iseleq r3, r4, r3
2275 ; P9-NEXT:    blr
2277 ; NOVSX-LABEL: fcmps_oeq_f128:
2278 ; NOVSX:       # %bb.0:
2279 ; NOVSX-NEXT:    mflr r0
2280 ; NOVSX-NEXT:    std r0, 16(r1)
2281 ; NOVSX-NEXT:    stdu r1, -32(r1)
2282 ; NOVSX-NEXT:    bl __eqkf2
2283 ; NOVSX-NEXT:    nop
2284 ; NOVSX-NEXT:    cntlzw r3, r3
2285 ; NOVSX-NEXT:    srwi r3, r3, 5
2286 ; NOVSX-NEXT:    addi r1, r1, 32
2287 ; NOVSX-NEXT:    ld r0, 16(r1)
2288 ; NOVSX-NEXT:    mtlr r0
2289 ; NOVSX-NEXT:    blr
2290   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #0
2291   %conv = zext i1 %cmp to i32
2292   ret i32 %conv
2295 define i32 @fcmps_one_f128(fp128 %a, fp128 %b) #0 {
2296 ; P8-LABEL: fcmps_one_f128:
2297 ; P8:       # %bb.0:
2298 ; P8-NEXT:    mflr r0
2299 ; P8-NEXT:    std r0, 16(r1)
2300 ; P8-NEXT:    stdu r1, -176(r1)
2301 ; P8-NEXT:    li r3, 128
2302 ; P8-NEXT:    std r30, 160(r1) # 8-byte Folded Spill
2303 ; P8-NEXT:    stxvd2x v30, r1, r3 # 16-byte Folded Spill
2304 ; P8-NEXT:    li r3, 144
2305 ; P8-NEXT:    vmr v30, v2
2306 ; P8-NEXT:    stxvd2x v31, r1, r3 # 16-byte Folded Spill
2307 ; P8-NEXT:    vmr v31, v3
2308 ; P8-NEXT:    bl __unordkf2
2309 ; P8-NEXT:    nop
2310 ; P8-NEXT:    vmr v2, v30
2311 ; P8-NEXT:    cntlzw r3, r3
2312 ; P8-NEXT:    vmr v3, v31
2313 ; P8-NEXT:    srwi r30, r3, 5
2314 ; P8-NEXT:    bl __eqkf2
2315 ; P8-NEXT:    nop
2316 ; P8-NEXT:    cntlzw r3, r3
2317 ; P8-NEXT:    li r4, 144
2318 ; P8-NEXT:    srwi r3, r3, 5
2319 ; P8-NEXT:    lxvd2x v31, r1, r4 # 16-byte Folded Reload
2320 ; P8-NEXT:    li r4, 128
2321 ; P8-NEXT:    xori r3, r3, 1
2322 ; P8-NEXT:    lxvd2x v30, r1, r4 # 16-byte Folded Reload
2323 ; P8-NEXT:    and r3, r30, r3
2324 ; P8-NEXT:    ld r30, 160(r1) # 8-byte Folded Reload
2325 ; P8-NEXT:    addi r1, r1, 176
2326 ; P8-NEXT:    ld r0, 16(r1)
2327 ; P8-NEXT:    mtlr r0
2328 ; P8-NEXT:    blr
2330 ; P9-LABEL: fcmps_one_f128:
2331 ; P9:       # %bb.0:
2332 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2333 ; P9-NEXT:    xscmpoqp cr1, v2, v3
2334 ; P9-NEXT:    li r3, 1
2335 ; P9-NEXT:    crnor 4*cr5+lt, un, 4*cr1+un
2336 ; P9-NEXT:    crnor 4*cr5+gt, eq, 4*cr1+eq
2337 ; P9-NEXT:    crnand 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2338 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2339 ; P9-NEXT:    blr
2341 ; NOVSX-LABEL: fcmps_one_f128:
2342 ; NOVSX:       # %bb.0:
2343 ; NOVSX-NEXT:    mflr r0
2344 ; NOVSX-NEXT:    std r26, -48(r1) # 8-byte Folded Spill
2345 ; NOVSX-NEXT:    std r27, -40(r1) # 8-byte Folded Spill
2346 ; NOVSX-NEXT:    std r28, -32(r1) # 8-byte Folded Spill
2347 ; NOVSX-NEXT:    std r29, -24(r1) # 8-byte Folded Spill
2348 ; NOVSX-NEXT:    std r30, -16(r1) # 8-byte Folded Spill
2349 ; NOVSX-NEXT:    std r0, 16(r1)
2350 ; NOVSX-NEXT:    stdu r1, -80(r1)
2351 ; NOVSX-NEXT:    mr r30, r6
2352 ; NOVSX-NEXT:    mr r29, r5
2353 ; NOVSX-NEXT:    mr r28, r4
2354 ; NOVSX-NEXT:    mr r27, r3
2355 ; NOVSX-NEXT:    bl __unordkf2
2356 ; NOVSX-NEXT:    nop
2357 ; NOVSX-NEXT:    cntlzw r3, r3
2358 ; NOVSX-NEXT:    mr r4, r28
2359 ; NOVSX-NEXT:    mr r5, r29
2360 ; NOVSX-NEXT:    mr r6, r30
2361 ; NOVSX-NEXT:    srwi r26, r3, 5
2362 ; NOVSX-NEXT:    mr r3, r27
2363 ; NOVSX-NEXT:    bl __eqkf2
2364 ; NOVSX-NEXT:    nop
2365 ; NOVSX-NEXT:    cntlzw r3, r3
2366 ; NOVSX-NEXT:    srwi r3, r3, 5
2367 ; NOVSX-NEXT:    xori r3, r3, 1
2368 ; NOVSX-NEXT:    and r3, r26, r3
2369 ; NOVSX-NEXT:    addi r1, r1, 80
2370 ; NOVSX-NEXT:    ld r0, 16(r1)
2371 ; NOVSX-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload
2372 ; NOVSX-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload
2373 ; NOVSX-NEXT:    ld r28, -32(r1) # 8-byte Folded Reload
2374 ; NOVSX-NEXT:    ld r27, -40(r1) # 8-byte Folded Reload
2375 ; NOVSX-NEXT:    ld r26, -48(r1) # 8-byte Folded Reload
2376 ; NOVSX-NEXT:    mtlr r0
2377 ; NOVSX-NEXT:    blr
2378   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"one", metadata !"fpexcept.strict") #0
2379   %conv = zext i1 %cmp to i32
2380   ret i32 %conv
2383 define i32 @fcmps_ult_f128(fp128 %a, fp128 %b) #0 {
2384 ; P8-LABEL: fcmps_ult_f128:
2385 ; P8:       # %bb.0:
2386 ; P8-NEXT:    mflr r0
2387 ; P8-NEXT:    std r0, 16(r1)
2388 ; P8-NEXT:    stdu r1, -112(r1)
2389 ; P8-NEXT:    bl __gekf2
2390 ; P8-NEXT:    nop
2391 ; P8-NEXT:    rlwinm r3, r3, 1, 31, 31
2392 ; P8-NEXT:    addi r1, r1, 112
2393 ; P8-NEXT:    ld r0, 16(r1)
2394 ; P8-NEXT:    mtlr r0
2395 ; P8-NEXT:    blr
2397 ; P9-LABEL: fcmps_ult_f128:
2398 ; P9:       # %bb.0:
2399 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2400 ; P9-NEXT:    li r3, 1
2401 ; P9-NEXT:    crnor 4*cr5+lt, lt, un
2402 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2403 ; P9-NEXT:    blr
2405 ; NOVSX-LABEL: fcmps_ult_f128:
2406 ; NOVSX:       # %bb.0:
2407 ; NOVSX-NEXT:    mflr r0
2408 ; NOVSX-NEXT:    std r0, 16(r1)
2409 ; NOVSX-NEXT:    stdu r1, -32(r1)
2410 ; NOVSX-NEXT:    bl __gekf2
2411 ; NOVSX-NEXT:    nop
2412 ; NOVSX-NEXT:    rlwinm r3, r3, 1, 31, 31
2413 ; NOVSX-NEXT:    addi r1, r1, 32
2414 ; NOVSX-NEXT:    ld r0, 16(r1)
2415 ; NOVSX-NEXT:    mtlr r0
2416 ; NOVSX-NEXT:    blr
2417   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #0
2418   %conv = zext i1 %cmp to i32
2419   ret i32 %conv
2422 define i32 @fcmps_ule_f128(fp128 %a, fp128 %b) #0 {
2423 ; P8-LABEL: fcmps_ule_f128:
2424 ; P8:       # %bb.0:
2425 ; P8-NEXT:    mflr r0
2426 ; P8-NEXT:    std r0, 16(r1)
2427 ; P8-NEXT:    stdu r1, -112(r1)
2428 ; P8-NEXT:    bl __gtkf2
2429 ; P8-NEXT:    nop
2430 ; P8-NEXT:    extsw r3, r3
2431 ; P8-NEXT:    neg r3, r3
2432 ; P8-NEXT:    rldicl r3, r3, 1, 63
2433 ; P8-NEXT:    xori r3, r3, 1
2434 ; P8-NEXT:    addi r1, r1, 112
2435 ; P8-NEXT:    ld r0, 16(r1)
2436 ; P8-NEXT:    mtlr r0
2437 ; P8-NEXT:    blr
2439 ; P9-LABEL: fcmps_ule_f128:
2440 ; P9:       # %bb.0:
2441 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2442 ; P9-NEXT:    li r3, 1
2443 ; P9-NEXT:    iselgt r3, 0, r3
2444 ; P9-NEXT:    blr
2446 ; NOVSX-LABEL: fcmps_ule_f128:
2447 ; NOVSX:       # %bb.0:
2448 ; NOVSX-NEXT:    mflr r0
2449 ; NOVSX-NEXT:    std r0, 16(r1)
2450 ; NOVSX-NEXT:    stdu r1, -32(r1)
2451 ; NOVSX-NEXT:    bl __gtkf2
2452 ; NOVSX-NEXT:    nop
2453 ; NOVSX-NEXT:    extsw r3, r3
2454 ; NOVSX-NEXT:    neg r3, r3
2455 ; NOVSX-NEXT:    rldicl r3, r3, 1, 63
2456 ; NOVSX-NEXT:    xori r3, r3, 1
2457 ; NOVSX-NEXT:    addi r1, r1, 32
2458 ; NOVSX-NEXT:    ld r0, 16(r1)
2459 ; NOVSX-NEXT:    mtlr r0
2460 ; NOVSX-NEXT:    blr
2461   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #0
2462   %conv = zext i1 %cmp to i32
2463   ret i32 %conv
2466 define i32 @fcmps_ugt_f128(fp128 %a, fp128 %b) #0 {
2467 ; P8-LABEL: fcmps_ugt_f128:
2468 ; P8:       # %bb.0:
2469 ; P8-NEXT:    mflr r0
2470 ; P8-NEXT:    std r0, 16(r1)
2471 ; P8-NEXT:    stdu r1, -112(r1)
2472 ; P8-NEXT:    bl __lekf2
2473 ; P8-NEXT:    nop
2474 ; P8-NEXT:    extsw r3, r3
2475 ; P8-NEXT:    neg r3, r3
2476 ; P8-NEXT:    rldicl r3, r3, 1, 63
2477 ; P8-NEXT:    addi r1, r1, 112
2478 ; P8-NEXT:    ld r0, 16(r1)
2479 ; P8-NEXT:    mtlr r0
2480 ; P8-NEXT:    blr
2482 ; P9-LABEL: fcmps_ugt_f128:
2483 ; P9:       # %bb.0:
2484 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2485 ; P9-NEXT:    li r3, 1
2486 ; P9-NEXT:    crnor 4*cr5+lt, gt, un
2487 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2488 ; P9-NEXT:    blr
2490 ; NOVSX-LABEL: fcmps_ugt_f128:
2491 ; NOVSX:       # %bb.0:
2492 ; NOVSX-NEXT:    mflr r0
2493 ; NOVSX-NEXT:    std r0, 16(r1)
2494 ; NOVSX-NEXT:    stdu r1, -32(r1)
2495 ; NOVSX-NEXT:    bl __lekf2
2496 ; NOVSX-NEXT:    nop
2497 ; NOVSX-NEXT:    extsw r3, r3
2498 ; NOVSX-NEXT:    neg r3, r3
2499 ; NOVSX-NEXT:    rldicl r3, r3, 1, 63
2500 ; NOVSX-NEXT:    addi r1, r1, 32
2501 ; NOVSX-NEXT:    ld r0, 16(r1)
2502 ; NOVSX-NEXT:    mtlr r0
2503 ; NOVSX-NEXT:    blr
2504   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #0
2505   %conv = zext i1 %cmp to i32
2506   ret i32 %conv
2509 define i32 @fcmps_uge_f128(fp128 %a, fp128 %b) #0 {
2510 ; P8-LABEL: fcmps_uge_f128:
2511 ; P8:       # %bb.0:
2512 ; P8-NEXT:    mflr r0
2513 ; P8-NEXT:    std r0, 16(r1)
2514 ; P8-NEXT:    stdu r1, -112(r1)
2515 ; P8-NEXT:    bl __ltkf2
2516 ; P8-NEXT:    nop
2517 ; P8-NEXT:    rlwinm r3, r3, 1, 31, 31
2518 ; P8-NEXT:    xori r3, r3, 1
2519 ; P8-NEXT:    addi r1, r1, 112
2520 ; P8-NEXT:    ld r0, 16(r1)
2521 ; P8-NEXT:    mtlr r0
2522 ; P8-NEXT:    blr
2524 ; P9-LABEL: fcmps_uge_f128:
2525 ; P9:       # %bb.0:
2526 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2527 ; P9-NEXT:    li r3, 1
2528 ; P9-NEXT:    isellt r3, 0, r3
2529 ; P9-NEXT:    blr
2531 ; NOVSX-LABEL: fcmps_uge_f128:
2532 ; NOVSX:       # %bb.0:
2533 ; NOVSX-NEXT:    mflr r0
2534 ; NOVSX-NEXT:    std r0, 16(r1)
2535 ; NOVSX-NEXT:    stdu r1, -32(r1)
2536 ; NOVSX-NEXT:    bl __ltkf2
2537 ; NOVSX-NEXT:    nop
2538 ; NOVSX-NEXT:    rlwinm r3, r3, 1, 31, 31
2539 ; NOVSX-NEXT:    xori r3, r3, 1
2540 ; NOVSX-NEXT:    addi r1, r1, 32
2541 ; NOVSX-NEXT:    ld r0, 16(r1)
2542 ; NOVSX-NEXT:    mtlr r0
2543 ; NOVSX-NEXT:    blr
2544   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #0
2545   %conv = zext i1 %cmp to i32
2546   ret i32 %conv
2549 define i32 @fcmps_ueq_f128(fp128 %a, fp128 %b) #0 {
2550 ; P8-LABEL: fcmps_ueq_f128:
2551 ; P8:       # %bb.0:
2552 ; P8-NEXT:    mflr r0
2553 ; P8-NEXT:    std r0, 16(r1)
2554 ; P8-NEXT:    stdu r1, -176(r1)
2555 ; P8-NEXT:    li r3, 128
2556 ; P8-NEXT:    std r30, 160(r1) # 8-byte Folded Spill
2557 ; P8-NEXT:    stxvd2x v30, r1, r3 # 16-byte Folded Spill
2558 ; P8-NEXT:    li r3, 144
2559 ; P8-NEXT:    vmr v30, v2
2560 ; P8-NEXT:    stxvd2x v31, r1, r3 # 16-byte Folded Spill
2561 ; P8-NEXT:    vmr v31, v3
2562 ; P8-NEXT:    bl __eqkf2
2563 ; P8-NEXT:    nop
2564 ; P8-NEXT:    vmr v2, v30
2565 ; P8-NEXT:    cntlzw r3, r3
2566 ; P8-NEXT:    vmr v3, v31
2567 ; P8-NEXT:    srwi r30, r3, 5
2568 ; P8-NEXT:    bl __unordkf2
2569 ; P8-NEXT:    nop
2570 ; P8-NEXT:    cntlzw r3, r3
2571 ; P8-NEXT:    li r4, 144
2572 ; P8-NEXT:    srwi r3, r3, 5
2573 ; P8-NEXT:    lxvd2x v31, r1, r4 # 16-byte Folded Reload
2574 ; P8-NEXT:    li r4, 128
2575 ; P8-NEXT:    xori r3, r3, 1
2576 ; P8-NEXT:    lxvd2x v30, r1, r4 # 16-byte Folded Reload
2577 ; P8-NEXT:    or r3, r3, r30
2578 ; P8-NEXT:    ld r30, 160(r1) # 8-byte Folded Reload
2579 ; P8-NEXT:    addi r1, r1, 176
2580 ; P8-NEXT:    ld r0, 16(r1)
2581 ; P8-NEXT:    mtlr r0
2582 ; P8-NEXT:    blr
2584 ; P9-LABEL: fcmps_ueq_f128:
2585 ; P9:       # %bb.0:
2586 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2587 ; P9-NEXT:    li r3, 1
2588 ; P9-NEXT:    crnor 4*cr5+lt, eq, un
2589 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2590 ; P9-NEXT:    blr
2592 ; NOVSX-LABEL: fcmps_ueq_f128:
2593 ; NOVSX:       # %bb.0:
2594 ; NOVSX-NEXT:    mflr r0
2595 ; NOVSX-NEXT:    std r26, -48(r1) # 8-byte Folded Spill
2596 ; NOVSX-NEXT:    std r27, -40(r1) # 8-byte Folded Spill
2597 ; NOVSX-NEXT:    std r28, -32(r1) # 8-byte Folded Spill
2598 ; NOVSX-NEXT:    std r29, -24(r1) # 8-byte Folded Spill
2599 ; NOVSX-NEXT:    std r30, -16(r1) # 8-byte Folded Spill
2600 ; NOVSX-NEXT:    std r0, 16(r1)
2601 ; NOVSX-NEXT:    stdu r1, -80(r1)
2602 ; NOVSX-NEXT:    mr r30, r6
2603 ; NOVSX-NEXT:    mr r29, r5
2604 ; NOVSX-NEXT:    mr r28, r4
2605 ; NOVSX-NEXT:    mr r27, r3
2606 ; NOVSX-NEXT:    bl __eqkf2
2607 ; NOVSX-NEXT:    nop
2608 ; NOVSX-NEXT:    cntlzw r3, r3
2609 ; NOVSX-NEXT:    mr r4, r28
2610 ; NOVSX-NEXT:    mr r5, r29
2611 ; NOVSX-NEXT:    mr r6, r30
2612 ; NOVSX-NEXT:    srwi r26, r3, 5
2613 ; NOVSX-NEXT:    mr r3, r27
2614 ; NOVSX-NEXT:    bl __unordkf2
2615 ; NOVSX-NEXT:    nop
2616 ; NOVSX-NEXT:    cntlzw r3, r3
2617 ; NOVSX-NEXT:    srwi r3, r3, 5
2618 ; NOVSX-NEXT:    xori r3, r3, 1
2619 ; NOVSX-NEXT:    or r3, r3, r26
2620 ; NOVSX-NEXT:    addi r1, r1, 80
2621 ; NOVSX-NEXT:    ld r0, 16(r1)
2622 ; NOVSX-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload
2623 ; NOVSX-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload
2624 ; NOVSX-NEXT:    ld r28, -32(r1) # 8-byte Folded Reload
2625 ; NOVSX-NEXT:    ld r27, -40(r1) # 8-byte Folded Reload
2626 ; NOVSX-NEXT:    ld r26, -48(r1) # 8-byte Folded Reload
2627 ; NOVSX-NEXT:    mtlr r0
2628 ; NOVSX-NEXT:    blr
2629   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #0
2630   %conv = zext i1 %cmp to i32
2631   ret i32 %conv
2634 define i32 @fcmps_une_f128(fp128 %a, fp128 %b) #0 {
2635 ; P8-LABEL: fcmps_une_f128:
2636 ; P8:       # %bb.0:
2637 ; P8-NEXT:    mflr r0
2638 ; P8-NEXT:    std r0, 16(r1)
2639 ; P8-NEXT:    stdu r1, -112(r1)
2640 ; P8-NEXT:    bl __nekf2
2641 ; P8-NEXT:    nop
2642 ; P8-NEXT:    cntlzw r3, r3
2643 ; P8-NEXT:    srwi r3, r3, 5
2644 ; P8-NEXT:    xori r3, r3, 1
2645 ; P8-NEXT:    addi r1, r1, 112
2646 ; P8-NEXT:    ld r0, 16(r1)
2647 ; P8-NEXT:    mtlr r0
2648 ; P8-NEXT:    blr
2650 ; P9-LABEL: fcmps_une_f128:
2651 ; P9:       # %bb.0:
2652 ; P9-NEXT:    xscmpoqp cr0, v2, v3
2653 ; P9-NEXT:    li r3, 1
2654 ; P9-NEXT:    iseleq r3, 0, r3
2655 ; P9-NEXT:    blr
2657 ; NOVSX-LABEL: fcmps_une_f128:
2658 ; NOVSX:       # %bb.0:
2659 ; NOVSX-NEXT:    mflr r0
2660 ; NOVSX-NEXT:    std r0, 16(r1)
2661 ; NOVSX-NEXT:    stdu r1, -32(r1)
2662 ; NOVSX-NEXT:    bl __nekf2
2663 ; NOVSX-NEXT:    nop
2664 ; NOVSX-NEXT:    cntlzw r3, r3
2665 ; NOVSX-NEXT:    srwi r3, r3, 5
2666 ; NOVSX-NEXT:    xori r3, r3, 1
2667 ; NOVSX-NEXT:    addi r1, r1, 32
2668 ; NOVSX-NEXT:    ld r0, 16(r1)
2669 ; NOVSX-NEXT:    mtlr r0
2670 ; NOVSX-NEXT:    blr
2671   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"une", metadata !"fpexcept.strict") #0
2672   %conv = zext i1 %cmp to i32
2673   ret i32 %conv
2676 define i32 @fcmp_olt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2677 ; P8-LABEL: fcmp_olt_ppcf128:
2678 ; P8:       # %bb.0:
2679 ; P8-NEXT:    fcmpu cr0, f1, f3
2680 ; P8-NEXT:    fcmpu cr1, f2, f4
2681 ; P8-NEXT:    li r3, 1
2682 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr1+lt
2683 ; P8-NEXT:    crandc 4*cr5+gt, lt, eq
2684 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2685 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
2686 ; P8-NEXT:    blr
2688 ; P9-LABEL: fcmp_olt_ppcf128:
2689 ; P9:       # %bb.0:
2690 ; P9-NEXT:    fcmpu cr0, f1, f3
2691 ; P9-NEXT:    fcmpu cr1, f2, f4
2692 ; P9-NEXT:    li r3, 1
2693 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr1+lt
2694 ; P9-NEXT:    crandc 4*cr5+gt, lt, eq
2695 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2696 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2697 ; P9-NEXT:    blr
2699 ; NOVSX-LABEL: fcmp_olt_ppcf128:
2700 ; NOVSX:       # %bb.0:
2701 ; NOVSX-NEXT:    fcmpu cr0, f1, f3
2702 ; NOVSX-NEXT:    fcmpu cr1, f2, f4
2703 ; NOVSX-NEXT:    li r3, 1
2704 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr1+lt
2705 ; NOVSX-NEXT:    crandc 4*cr5+gt, lt, eq
2706 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2707 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
2708 ; NOVSX-NEXT:    blr
2709   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #0
2710   %conv = zext i1 %cmp to i32
2711   ret i32 %conv
2714 define i32 @fcmp_ole_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2715 ; P8-LABEL: fcmp_ole_ppcf128:
2716 ; P8:       # %bb.0:
2717 ; P8-NEXT:    fcmpu cr0, f2, f4
2718 ; P8-NEXT:    fcmpu cr1, f1, f3
2719 ; P8-NEXT:    li r3, 1
2720 ; P8-NEXT:    crnor 4*cr5+lt, un, gt
2721 ; P8-NEXT:    crnor 4*cr5+gt, 4*cr1+un, 4*cr1+gt
2722 ; P8-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
2723 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
2724 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2725 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
2726 ; P8-NEXT:    blr
2728 ; P9-LABEL: fcmp_ole_ppcf128:
2729 ; P9:       # %bb.0:
2730 ; P9-NEXT:    fcmpu cr0, f2, f4
2731 ; P9-NEXT:    li r3, 1
2732 ; P9-NEXT:    crnor 4*cr5+lt, un, gt
2733 ; P9-NEXT:    fcmpu cr0, f1, f3
2734 ; P9-NEXT:    crnor 4*cr5+gt, un, gt
2735 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
2736 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
2737 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2738 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2739 ; P9-NEXT:    blr
2741 ; NOVSX-LABEL: fcmp_ole_ppcf128:
2742 ; NOVSX:       # %bb.0:
2743 ; NOVSX-NEXT:    fcmpu cr0, f2, f4
2744 ; NOVSX-NEXT:    fcmpu cr1, f1, f3
2745 ; NOVSX-NEXT:    li r3, 1
2746 ; NOVSX-NEXT:    crnor 4*cr5+lt, un, gt
2747 ; NOVSX-NEXT:    crnor 4*cr5+gt, 4*cr1+un, 4*cr1+gt
2748 ; NOVSX-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
2749 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
2750 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2751 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
2752 ; NOVSX-NEXT:    blr
2753   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #0
2754   %conv = zext i1 %cmp to i32
2755   ret i32 %conv
2758 define i32 @fcmp_ogt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2759 ; P8-LABEL: fcmp_ogt_ppcf128:
2760 ; P8:       # %bb.0:
2761 ; P8-NEXT:    fcmpu cr0, f1, f3
2762 ; P8-NEXT:    fcmpu cr1, f2, f4
2763 ; P8-NEXT:    li r3, 1
2764 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr1+gt
2765 ; P8-NEXT:    crandc 4*cr5+gt, gt, eq
2766 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2767 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
2768 ; P8-NEXT:    blr
2770 ; P9-LABEL: fcmp_ogt_ppcf128:
2771 ; P9:       # %bb.0:
2772 ; P9-NEXT:    fcmpu cr0, f1, f3
2773 ; P9-NEXT:    fcmpu cr1, f2, f4
2774 ; P9-NEXT:    li r3, 1
2775 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr1+gt
2776 ; P9-NEXT:    crandc 4*cr5+gt, gt, eq
2777 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2778 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2779 ; P9-NEXT:    blr
2781 ; NOVSX-LABEL: fcmp_ogt_ppcf128:
2782 ; NOVSX:       # %bb.0:
2783 ; NOVSX-NEXT:    fcmpu cr0, f1, f3
2784 ; NOVSX-NEXT:    fcmpu cr1, f2, f4
2785 ; NOVSX-NEXT:    li r3, 1
2786 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr1+gt
2787 ; NOVSX-NEXT:    crandc 4*cr5+gt, gt, eq
2788 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2789 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
2790 ; NOVSX-NEXT:    blr
2791   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #0
2792   %conv = zext i1 %cmp to i32
2793   ret i32 %conv
2796 define i32 @fcmp_oge_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2797 ; P8-LABEL: fcmp_oge_ppcf128:
2798 ; P8:       # %bb.0:
2799 ; P8-NEXT:    fcmpu cr0, f2, f4
2800 ; P8-NEXT:    fcmpu cr1, f1, f3
2801 ; P8-NEXT:    li r3, 1
2802 ; P8-NEXT:    crnor 4*cr5+lt, un, lt
2803 ; P8-NEXT:    crnor 4*cr5+gt, 4*cr1+un, 4*cr1+lt
2804 ; P8-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
2805 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
2806 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2807 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
2808 ; P8-NEXT:    blr
2810 ; P9-LABEL: fcmp_oge_ppcf128:
2811 ; P9:       # %bb.0:
2812 ; P9-NEXT:    fcmpu cr0, f2, f4
2813 ; P9-NEXT:    li r3, 1
2814 ; P9-NEXT:    crnor 4*cr5+lt, un, lt
2815 ; P9-NEXT:    fcmpu cr0, f1, f3
2816 ; P9-NEXT:    crnor 4*cr5+gt, un, lt
2817 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
2818 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
2819 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2820 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2821 ; P9-NEXT:    blr
2823 ; NOVSX-LABEL: fcmp_oge_ppcf128:
2824 ; NOVSX:       # %bb.0:
2825 ; NOVSX-NEXT:    fcmpu cr0, f2, f4
2826 ; NOVSX-NEXT:    fcmpu cr1, f1, f3
2827 ; NOVSX-NEXT:    li r3, 1
2828 ; NOVSX-NEXT:    crnor 4*cr5+lt, un, lt
2829 ; NOVSX-NEXT:    crnor 4*cr5+gt, 4*cr1+un, 4*cr1+lt
2830 ; NOVSX-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
2831 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
2832 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2833 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
2834 ; NOVSX-NEXT:    blr
2835   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #0
2836   %conv = zext i1 %cmp to i32
2837   ret i32 %conv
2840 define i32 @fcmp_oeq_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2841 ; P8-LABEL: fcmp_oeq_ppcf128:
2842 ; P8:       # %bb.0:
2843 ; P8-NEXT:    fcmpu cr0, f1, f3
2844 ; P8-NEXT:    fcmpu cr1, f2, f4
2845 ; P8-NEXT:    li r3, 1
2846 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr1+eq
2847 ; P8-NEXT:    crandc 4*cr5+gt, eq, eq
2848 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2849 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
2850 ; P8-NEXT:    blr
2852 ; P9-LABEL: fcmp_oeq_ppcf128:
2853 ; P9:       # %bb.0:
2854 ; P9-NEXT:    fcmpu cr0, f1, f3
2855 ; P9-NEXT:    fcmpu cr1, f2, f4
2856 ; P9-NEXT:    li r3, 1
2857 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr1+eq
2858 ; P9-NEXT:    crandc 4*cr5+gt, eq, eq
2859 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2860 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2861 ; P9-NEXT:    blr
2863 ; NOVSX-LABEL: fcmp_oeq_ppcf128:
2864 ; NOVSX:       # %bb.0:
2865 ; NOVSX-NEXT:    fcmpu cr0, f1, f3
2866 ; NOVSX-NEXT:    fcmpu cr1, f2, f4
2867 ; NOVSX-NEXT:    li r3, 1
2868 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr1+eq
2869 ; NOVSX-NEXT:    crandc 4*cr5+gt, eq, eq
2870 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2871 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
2872 ; NOVSX-NEXT:    blr
2873   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #0
2874   %conv = zext i1 %cmp to i32
2875   ret i32 %conv
2878 define i32 @fcmp_one_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2879 ; P8-LABEL: fcmp_one_ppcf128:
2880 ; P8:       # %bb.0:
2881 ; P8-NEXT:    fcmpu cr0, f2, f4
2882 ; P8-NEXT:    fcmpu cr1, f1, f3
2883 ; P8-NEXT:    li r3, 1
2884 ; P8-NEXT:    crnor 4*cr5+lt, un, eq
2885 ; P8-NEXT:    crnor 4*cr5+gt, 4*cr1+un, 4*cr1+eq
2886 ; P8-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
2887 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
2888 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2889 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
2890 ; P8-NEXT:    blr
2892 ; P9-LABEL: fcmp_one_ppcf128:
2893 ; P9:       # %bb.0:
2894 ; P9-NEXT:    fcmpu cr0, f2, f4
2895 ; P9-NEXT:    li r3, 1
2896 ; P9-NEXT:    crnor 4*cr5+lt, un, eq
2897 ; P9-NEXT:    fcmpu cr0, f1, f3
2898 ; P9-NEXT:    crnor 4*cr5+gt, un, eq
2899 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
2900 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
2901 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2902 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2903 ; P9-NEXT:    blr
2905 ; NOVSX-LABEL: fcmp_one_ppcf128:
2906 ; NOVSX:       # %bb.0:
2907 ; NOVSX-NEXT:    fcmpu cr0, f2, f4
2908 ; NOVSX-NEXT:    fcmpu cr1, f1, f3
2909 ; NOVSX-NEXT:    li r3, 1
2910 ; NOVSX-NEXT:    crnor 4*cr5+lt, un, eq
2911 ; NOVSX-NEXT:    crnor 4*cr5+gt, 4*cr1+un, 4*cr1+eq
2912 ; NOVSX-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
2913 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
2914 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2915 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
2916 ; NOVSX-NEXT:    blr
2917   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"one", metadata !"fpexcept.strict") #0
2918   %conv = zext i1 %cmp to i32
2919   ret i32 %conv
2922 define i32 @fcmp_ult_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2923 ; P8-LABEL: fcmp_ult_ppcf128:
2924 ; P8:       # %bb.0:
2925 ; P8-NEXT:    fcmpu cr0, f2, f4
2926 ; P8-NEXT:    fcmpu cr1, f1, f3
2927 ; P8-NEXT:    li r3, 1
2928 ; P8-NEXT:    cror 4*cr5+lt, lt, un
2929 ; P8-NEXT:    cror 4*cr5+gt, 4*cr1+lt, 4*cr1+un
2930 ; P8-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
2931 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
2932 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2933 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
2934 ; P8-NEXT:    blr
2936 ; P9-LABEL: fcmp_ult_ppcf128:
2937 ; P9:       # %bb.0:
2938 ; P9-NEXT:    fcmpu cr0, f1, f3
2939 ; P9-NEXT:    fcmpu cr1, f2, f4
2940 ; P9-NEXT:    li r3, 1
2941 ; P9-NEXT:    cror 4*cr5+lt, 4*cr1+lt, 4*cr1+un
2942 ; P9-NEXT:    cror 4*cr5+gt, lt, un
2943 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
2944 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
2945 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2946 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2947 ; P9-NEXT:    blr
2949 ; NOVSX-LABEL: fcmp_ult_ppcf128:
2950 ; NOVSX:       # %bb.0:
2951 ; NOVSX-NEXT:    fcmpu cr0, f2, f4
2952 ; NOVSX-NEXT:    fcmpu cr1, f1, f3
2953 ; NOVSX-NEXT:    li r3, 1
2954 ; NOVSX-NEXT:    cror 4*cr5+lt, lt, un
2955 ; NOVSX-NEXT:    cror 4*cr5+gt, 4*cr1+lt, 4*cr1+un
2956 ; NOVSX-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
2957 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
2958 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2959 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
2960 ; NOVSX-NEXT:    blr
2961   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #0
2962   %conv = zext i1 %cmp to i32
2963   ret i32 %conv
2966 define i32 @fcmp_ule_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
2967 ; P8-LABEL: fcmp_ule_ppcf128:
2968 ; P8:       # %bb.0:
2969 ; P8-NEXT:    fcmpu cr0, f2, f4
2970 ; P8-NEXT:    fcmpu cr1, f1, f3
2971 ; P8-NEXT:    li r3, 1
2972 ; P8-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, gt
2973 ; P8-NEXT:    crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq
2974 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2975 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
2976 ; P8-NEXT:    blr
2978 ; P9-LABEL: fcmp_ule_ppcf128:
2979 ; P9:       # %bb.0:
2980 ; P9-NEXT:    fcmpu cr0, f2, f4
2981 ; P9-NEXT:    fcmpu cr1, f1, f3
2982 ; P9-NEXT:    li r3, 1
2983 ; P9-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, gt
2984 ; P9-NEXT:    crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq
2985 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2986 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
2987 ; P9-NEXT:    blr
2989 ; NOVSX-LABEL: fcmp_ule_ppcf128:
2990 ; NOVSX:       # %bb.0:
2991 ; NOVSX-NEXT:    fcmpu cr0, f2, f4
2992 ; NOVSX-NEXT:    fcmpu cr1, f1, f3
2993 ; NOVSX-NEXT:    li r3, 1
2994 ; NOVSX-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, gt
2995 ; NOVSX-NEXT:    crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq
2996 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
2997 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
2998 ; NOVSX-NEXT:    blr
2999   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #0
3000   %conv = zext i1 %cmp to i32
3001   ret i32 %conv
3004 define i32 @fcmp_ugt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3005 ; P8-LABEL: fcmp_ugt_ppcf128:
3006 ; P8:       # %bb.0:
3007 ; P8-NEXT:    fcmpu cr0, f2, f4
3008 ; P8-NEXT:    fcmpu cr1, f1, f3
3009 ; P8-NEXT:    li r3, 1
3010 ; P8-NEXT:    cror 4*cr5+lt, gt, un
3011 ; P8-NEXT:    cror 4*cr5+gt, 4*cr1+gt, 4*cr1+un
3012 ; P8-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3013 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3014 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3015 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3016 ; P8-NEXT:    blr
3018 ; P9-LABEL: fcmp_ugt_ppcf128:
3019 ; P9:       # %bb.0:
3020 ; P9-NEXT:    fcmpu cr0, f1, f3
3021 ; P9-NEXT:    fcmpu cr1, f2, f4
3022 ; P9-NEXT:    li r3, 1
3023 ; P9-NEXT:    cror 4*cr5+lt, 4*cr1+gt, 4*cr1+un
3024 ; P9-NEXT:    cror 4*cr5+gt, gt, un
3025 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3026 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3027 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3028 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3029 ; P9-NEXT:    blr
3031 ; NOVSX-LABEL: fcmp_ugt_ppcf128:
3032 ; NOVSX:       # %bb.0:
3033 ; NOVSX-NEXT:    fcmpu cr0, f2, f4
3034 ; NOVSX-NEXT:    fcmpu cr1, f1, f3
3035 ; NOVSX-NEXT:    li r3, 1
3036 ; NOVSX-NEXT:    cror 4*cr5+lt, gt, un
3037 ; NOVSX-NEXT:    cror 4*cr5+gt, 4*cr1+gt, 4*cr1+un
3038 ; NOVSX-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3039 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3040 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3041 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3042 ; NOVSX-NEXT:    blr
3043   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #0
3044   %conv = zext i1 %cmp to i32
3045   ret i32 %conv
3048 define i32 @fcmp_uge_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3049 ; P8-LABEL: fcmp_uge_ppcf128:
3050 ; P8:       # %bb.0:
3051 ; P8-NEXT:    fcmpu cr0, f2, f4
3052 ; P8-NEXT:    fcmpu cr1, f1, f3
3053 ; P8-NEXT:    li r3, 1
3054 ; P8-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, lt
3055 ; P8-NEXT:    crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq
3056 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3057 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3058 ; P8-NEXT:    blr
3060 ; P9-LABEL: fcmp_uge_ppcf128:
3061 ; P9:       # %bb.0:
3062 ; P9-NEXT:    fcmpu cr0, f2, f4
3063 ; P9-NEXT:    fcmpu cr1, f1, f3
3064 ; P9-NEXT:    li r3, 1
3065 ; P9-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, lt
3066 ; P9-NEXT:    crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq
3067 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3068 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3069 ; P9-NEXT:    blr
3071 ; NOVSX-LABEL: fcmp_uge_ppcf128:
3072 ; NOVSX:       # %bb.0:
3073 ; NOVSX-NEXT:    fcmpu cr0, f2, f4
3074 ; NOVSX-NEXT:    fcmpu cr1, f1, f3
3075 ; NOVSX-NEXT:    li r3, 1
3076 ; NOVSX-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, lt
3077 ; NOVSX-NEXT:    crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq
3078 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3079 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3080 ; NOVSX-NEXT:    blr
3081   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #0
3082   %conv = zext i1 %cmp to i32
3083   ret i32 %conv
3086 define i32 @fcmp_ueq_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3087 ; P8-LABEL: fcmp_ueq_ppcf128:
3088 ; P8:       # %bb.0:
3089 ; P8-NEXT:    fcmpu cr0, f2, f4
3090 ; P8-NEXT:    fcmpu cr1, f1, f3
3091 ; P8-NEXT:    li r3, 1
3092 ; P8-NEXT:    cror 4*cr5+lt, eq, un
3093 ; P8-NEXT:    cror 4*cr5+gt, 4*cr1+eq, 4*cr1+un
3094 ; P8-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3095 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3096 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3097 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3098 ; P8-NEXT:    blr
3100 ; P9-LABEL: fcmp_ueq_ppcf128:
3101 ; P9:       # %bb.0:
3102 ; P9-NEXT:    fcmpu cr0, f1, f3
3103 ; P9-NEXT:    fcmpu cr1, f2, f4
3104 ; P9-NEXT:    li r3, 1
3105 ; P9-NEXT:    cror 4*cr5+lt, 4*cr1+eq, 4*cr1+un
3106 ; P9-NEXT:    cror 4*cr5+gt, eq, un
3107 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3108 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3109 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3110 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3111 ; P9-NEXT:    blr
3113 ; NOVSX-LABEL: fcmp_ueq_ppcf128:
3114 ; NOVSX:       # %bb.0:
3115 ; NOVSX-NEXT:    fcmpu cr0, f2, f4
3116 ; NOVSX-NEXT:    fcmpu cr1, f1, f3
3117 ; NOVSX-NEXT:    li r3, 1
3118 ; NOVSX-NEXT:    cror 4*cr5+lt, eq, un
3119 ; NOVSX-NEXT:    cror 4*cr5+gt, 4*cr1+eq, 4*cr1+un
3120 ; NOVSX-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3121 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3122 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3123 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3124 ; NOVSX-NEXT:    blr
3125   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #0
3126   %conv = zext i1 %cmp to i32
3127   ret i32 %conv
3130 define i32 @fcmp_une_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3131 ; P8-LABEL: fcmp_une_ppcf128:
3132 ; P8:       # %bb.0:
3133 ; P8-NEXT:    fcmpu cr0, f2, f4
3134 ; P8-NEXT:    fcmpu cr1, f1, f3
3135 ; P8-NEXT:    li r3, 1
3136 ; P8-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, eq
3137 ; P8-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3138 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3139 ; P8-NEXT:    blr
3141 ; P9-LABEL: fcmp_une_ppcf128:
3142 ; P9:       # %bb.0:
3143 ; P9-NEXT:    fcmpu cr0, f2, f4
3144 ; P9-NEXT:    fcmpu cr1, f1, f3
3145 ; P9-NEXT:    li r3, 1
3146 ; P9-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, eq
3147 ; P9-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3148 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3149 ; P9-NEXT:    blr
3151 ; NOVSX-LABEL: fcmp_une_ppcf128:
3152 ; NOVSX:       # %bb.0:
3153 ; NOVSX-NEXT:    fcmpu cr0, f2, f4
3154 ; NOVSX-NEXT:    fcmpu cr1, f1, f3
3155 ; NOVSX-NEXT:    li r3, 1
3156 ; NOVSX-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, eq
3157 ; NOVSX-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3158 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3159 ; NOVSX-NEXT:    blr
3160   %cmp = call i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"une", metadata !"fpexcept.strict") #0
3161   %conv = zext i1 %cmp to i32
3162   ret i32 %conv
3165 define i32 @fcmps_olt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3166 ; P8-LABEL: fcmps_olt_ppcf128:
3167 ; P8:       # %bb.0:
3168 ; P8-NEXT:    fcmpo cr0, f1, f3
3169 ; P8-NEXT:    fcmpo cr1, f2, f4
3170 ; P8-NEXT:    li r3, 1
3171 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr1+lt
3172 ; P8-NEXT:    crandc 4*cr5+gt, lt, eq
3173 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3174 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3175 ; P8-NEXT:    blr
3177 ; P9-LABEL: fcmps_olt_ppcf128:
3178 ; P9:       # %bb.0:
3179 ; P9-NEXT:    fcmpo cr0, f1, f3
3180 ; P9-NEXT:    fcmpo cr1, f2, f4
3181 ; P9-NEXT:    li r3, 1
3182 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr1+lt
3183 ; P9-NEXT:    crandc 4*cr5+gt, lt, eq
3184 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3185 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3186 ; P9-NEXT:    blr
3188 ; NOVSX-LABEL: fcmps_olt_ppcf128:
3189 ; NOVSX:       # %bb.0:
3190 ; NOVSX-NEXT:    fcmpo cr0, f1, f3
3191 ; NOVSX-NEXT:    fcmpo cr1, f2, f4
3192 ; NOVSX-NEXT:    li r3, 1
3193 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr1+lt
3194 ; NOVSX-NEXT:    crandc 4*cr5+gt, lt, eq
3195 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3196 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3197 ; NOVSX-NEXT:    blr
3198   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #0
3199   %conv = zext i1 %cmp to i32
3200   ret i32 %conv
3203 define i32 @fcmps_ole_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3204 ; P8-LABEL: fcmps_ole_ppcf128:
3205 ; P8:       # %bb.0:
3206 ; P8-NEXT:    fcmpo cr0, f2, f4
3207 ; P8-NEXT:    fcmpo cr1, f1, f3
3208 ; P8-NEXT:    li r3, 1
3209 ; P8-NEXT:    crnor 4*cr5+lt, un, gt
3210 ; P8-NEXT:    crnor 4*cr5+gt, 4*cr1+un, 4*cr1+gt
3211 ; P8-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3212 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3213 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3214 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3215 ; P8-NEXT:    blr
3217 ; P9-LABEL: fcmps_ole_ppcf128:
3218 ; P9:       # %bb.0:
3219 ; P9-NEXT:    fcmpo cr0, f2, f4
3220 ; P9-NEXT:    li r3, 1
3221 ; P9-NEXT:    crnor 4*cr5+lt, un, gt
3222 ; P9-NEXT:    fcmpo cr0, f1, f3
3223 ; P9-NEXT:    crnor 4*cr5+gt, un, gt
3224 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3225 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3226 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3227 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3228 ; P9-NEXT:    blr
3230 ; NOVSX-LABEL: fcmps_ole_ppcf128:
3231 ; NOVSX:       # %bb.0:
3232 ; NOVSX-NEXT:    fcmpo cr0, f2, f4
3233 ; NOVSX-NEXT:    fcmpo cr1, f1, f3
3234 ; NOVSX-NEXT:    li r3, 1
3235 ; NOVSX-NEXT:    crnor 4*cr5+lt, un, gt
3236 ; NOVSX-NEXT:    crnor 4*cr5+gt, 4*cr1+un, 4*cr1+gt
3237 ; NOVSX-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3238 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3239 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3240 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3241 ; NOVSX-NEXT:    blr
3242   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #0
3243   %conv = zext i1 %cmp to i32
3244   ret i32 %conv
3247 define i32 @fcmps_ogt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3248 ; P8-LABEL: fcmps_ogt_ppcf128:
3249 ; P8:       # %bb.0:
3250 ; P8-NEXT:    fcmpo cr0, f1, f3
3251 ; P8-NEXT:    fcmpo cr1, f2, f4
3252 ; P8-NEXT:    li r3, 1
3253 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr1+gt
3254 ; P8-NEXT:    crandc 4*cr5+gt, gt, eq
3255 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3256 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3257 ; P8-NEXT:    blr
3259 ; P9-LABEL: fcmps_ogt_ppcf128:
3260 ; P9:       # %bb.0:
3261 ; P9-NEXT:    fcmpo cr0, f1, f3
3262 ; P9-NEXT:    fcmpo cr1, f2, f4
3263 ; P9-NEXT:    li r3, 1
3264 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr1+gt
3265 ; P9-NEXT:    crandc 4*cr5+gt, gt, eq
3266 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3267 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3268 ; P9-NEXT:    blr
3270 ; NOVSX-LABEL: fcmps_ogt_ppcf128:
3271 ; NOVSX:       # %bb.0:
3272 ; NOVSX-NEXT:    fcmpo cr0, f1, f3
3273 ; NOVSX-NEXT:    fcmpo cr1, f2, f4
3274 ; NOVSX-NEXT:    li r3, 1
3275 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr1+gt
3276 ; NOVSX-NEXT:    crandc 4*cr5+gt, gt, eq
3277 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3278 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3279 ; NOVSX-NEXT:    blr
3280   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #0
3281   %conv = zext i1 %cmp to i32
3282   ret i32 %conv
3285 define i32 @fcmps_oge_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3286 ; P8-LABEL: fcmps_oge_ppcf128:
3287 ; P8:       # %bb.0:
3288 ; P8-NEXT:    fcmpo cr0, f2, f4
3289 ; P8-NEXT:    fcmpo cr1, f1, f3
3290 ; P8-NEXT:    li r3, 1
3291 ; P8-NEXT:    crnor 4*cr5+lt, un, lt
3292 ; P8-NEXT:    crnor 4*cr5+gt, 4*cr1+un, 4*cr1+lt
3293 ; P8-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3294 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3295 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3296 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3297 ; P8-NEXT:    blr
3299 ; P9-LABEL: fcmps_oge_ppcf128:
3300 ; P9:       # %bb.0:
3301 ; P9-NEXT:    fcmpo cr0, f2, f4
3302 ; P9-NEXT:    li r3, 1
3303 ; P9-NEXT:    crnor 4*cr5+lt, un, lt
3304 ; P9-NEXT:    fcmpo cr0, f1, f3
3305 ; P9-NEXT:    crnor 4*cr5+gt, un, lt
3306 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3307 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3308 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3309 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3310 ; P9-NEXT:    blr
3312 ; NOVSX-LABEL: fcmps_oge_ppcf128:
3313 ; NOVSX:       # %bb.0:
3314 ; NOVSX-NEXT:    fcmpo cr0, f2, f4
3315 ; NOVSX-NEXT:    fcmpo cr1, f1, f3
3316 ; NOVSX-NEXT:    li r3, 1
3317 ; NOVSX-NEXT:    crnor 4*cr5+lt, un, lt
3318 ; NOVSX-NEXT:    crnor 4*cr5+gt, 4*cr1+un, 4*cr1+lt
3319 ; NOVSX-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3320 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3321 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3322 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3323 ; NOVSX-NEXT:    blr
3324   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #0
3325   %conv = zext i1 %cmp to i32
3326   ret i32 %conv
3329 define i32 @fcmps_oeq_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3330 ; P8-LABEL: fcmps_oeq_ppcf128:
3331 ; P8:       # %bb.0:
3332 ; P8-NEXT:    fcmpo cr0, f1, f3
3333 ; P8-NEXT:    fcmpo cr1, f2, f4
3334 ; P8-NEXT:    li r3, 1
3335 ; P8-NEXT:    crand 4*cr5+lt, eq, 4*cr1+eq
3336 ; P8-NEXT:    crandc 4*cr5+gt, eq, eq
3337 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3338 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3339 ; P8-NEXT:    blr
3341 ; P9-LABEL: fcmps_oeq_ppcf128:
3342 ; P9:       # %bb.0:
3343 ; P9-NEXT:    fcmpo cr0, f1, f3
3344 ; P9-NEXT:    fcmpo cr1, f2, f4
3345 ; P9-NEXT:    li r3, 1
3346 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr1+eq
3347 ; P9-NEXT:    crandc 4*cr5+gt, eq, eq
3348 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3349 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3350 ; P9-NEXT:    blr
3352 ; NOVSX-LABEL: fcmps_oeq_ppcf128:
3353 ; NOVSX:       # %bb.0:
3354 ; NOVSX-NEXT:    fcmpo cr0, f1, f3
3355 ; NOVSX-NEXT:    fcmpo cr1, f2, f4
3356 ; NOVSX-NEXT:    li r3, 1
3357 ; NOVSX-NEXT:    crand 4*cr5+lt, eq, 4*cr1+eq
3358 ; NOVSX-NEXT:    crandc 4*cr5+gt, eq, eq
3359 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3360 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3361 ; NOVSX-NEXT:    blr
3362   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #0
3363   %conv = zext i1 %cmp to i32
3364   ret i32 %conv
3367 define i32 @fcmps_one_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3368 ; P8-LABEL: fcmps_one_ppcf128:
3369 ; P8:       # %bb.0:
3370 ; P8-NEXT:    fcmpo cr0, f2, f4
3371 ; P8-NEXT:    fcmpo cr1, f1, f3
3372 ; P8-NEXT:    li r3, 1
3373 ; P8-NEXT:    crnor 4*cr5+lt, un, eq
3374 ; P8-NEXT:    crnor 4*cr5+gt, 4*cr1+un, 4*cr1+eq
3375 ; P8-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3376 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3377 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3378 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3379 ; P8-NEXT:    blr
3381 ; P9-LABEL: fcmps_one_ppcf128:
3382 ; P9:       # %bb.0:
3383 ; P9-NEXT:    fcmpo cr0, f2, f4
3384 ; P9-NEXT:    li r3, 1
3385 ; P9-NEXT:    crnor 4*cr5+lt, un, eq
3386 ; P9-NEXT:    fcmpo cr0, f1, f3
3387 ; P9-NEXT:    crnor 4*cr5+gt, un, eq
3388 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3389 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3390 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3391 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3392 ; P9-NEXT:    blr
3394 ; NOVSX-LABEL: fcmps_one_ppcf128:
3395 ; NOVSX:       # %bb.0:
3396 ; NOVSX-NEXT:    fcmpo cr0, f2, f4
3397 ; NOVSX-NEXT:    fcmpo cr1, f1, f3
3398 ; NOVSX-NEXT:    li r3, 1
3399 ; NOVSX-NEXT:    crnor 4*cr5+lt, un, eq
3400 ; NOVSX-NEXT:    crnor 4*cr5+gt, 4*cr1+un, 4*cr1+eq
3401 ; NOVSX-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3402 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3403 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3404 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3405 ; NOVSX-NEXT:    blr
3406   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"one", metadata !"fpexcept.strict") #0
3407   %conv = zext i1 %cmp to i32
3408   ret i32 %conv
3411 define i32 @fcmps_ult_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3412 ; P8-LABEL: fcmps_ult_ppcf128:
3413 ; P8:       # %bb.0:
3414 ; P8-NEXT:    fcmpo cr0, f2, f4
3415 ; P8-NEXT:    fcmpo cr1, f1, f3
3416 ; P8-NEXT:    li r3, 1
3417 ; P8-NEXT:    cror 4*cr5+lt, lt, un
3418 ; P8-NEXT:    cror 4*cr5+gt, 4*cr1+lt, 4*cr1+un
3419 ; P8-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3420 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3421 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3422 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3423 ; P8-NEXT:    blr
3425 ; P9-LABEL: fcmps_ult_ppcf128:
3426 ; P9:       # %bb.0:
3427 ; P9-NEXT:    fcmpo cr0, f1, f3
3428 ; P9-NEXT:    fcmpo cr1, f2, f4
3429 ; P9-NEXT:    li r3, 1
3430 ; P9-NEXT:    cror 4*cr5+lt, 4*cr1+lt, 4*cr1+un
3431 ; P9-NEXT:    cror 4*cr5+gt, lt, un
3432 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3433 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3434 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3435 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3436 ; P9-NEXT:    blr
3438 ; NOVSX-LABEL: fcmps_ult_ppcf128:
3439 ; NOVSX:       # %bb.0:
3440 ; NOVSX-NEXT:    fcmpo cr0, f2, f4
3441 ; NOVSX-NEXT:    fcmpo cr1, f1, f3
3442 ; NOVSX-NEXT:    li r3, 1
3443 ; NOVSX-NEXT:    cror 4*cr5+lt, lt, un
3444 ; NOVSX-NEXT:    cror 4*cr5+gt, 4*cr1+lt, 4*cr1+un
3445 ; NOVSX-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3446 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3447 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3448 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3449 ; NOVSX-NEXT:    blr
3450   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #0
3451   %conv = zext i1 %cmp to i32
3452   ret i32 %conv
3455 define i32 @fcmps_ule_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3456 ; P8-LABEL: fcmps_ule_ppcf128:
3457 ; P8:       # %bb.0:
3458 ; P8-NEXT:    fcmpo cr0, f2, f4
3459 ; P8-NEXT:    fcmpo cr1, f1, f3
3460 ; P8-NEXT:    li r3, 1
3461 ; P8-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, gt
3462 ; P8-NEXT:    crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq
3463 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3464 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3465 ; P8-NEXT:    blr
3467 ; P9-LABEL: fcmps_ule_ppcf128:
3468 ; P9:       # %bb.0:
3469 ; P9-NEXT:    fcmpo cr0, f2, f4
3470 ; P9-NEXT:    fcmpo cr1, f1, f3
3471 ; P9-NEXT:    li r3, 1
3472 ; P9-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, gt
3473 ; P9-NEXT:    crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq
3474 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3475 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3476 ; P9-NEXT:    blr
3478 ; NOVSX-LABEL: fcmps_ule_ppcf128:
3479 ; NOVSX:       # %bb.0:
3480 ; NOVSX-NEXT:    fcmpo cr0, f2, f4
3481 ; NOVSX-NEXT:    fcmpo cr1, f1, f3
3482 ; NOVSX-NEXT:    li r3, 1
3483 ; NOVSX-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, gt
3484 ; NOVSX-NEXT:    crnor 4*cr5+gt, 4*cr1+gt, 4*cr1+eq
3485 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3486 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3487 ; NOVSX-NEXT:    blr
3488   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #0
3489   %conv = zext i1 %cmp to i32
3490   ret i32 %conv
3493 define i32 @fcmps_ugt_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3494 ; P8-LABEL: fcmps_ugt_ppcf128:
3495 ; P8:       # %bb.0:
3496 ; P8-NEXT:    fcmpo cr0, f2, f4
3497 ; P8-NEXT:    fcmpo cr1, f1, f3
3498 ; P8-NEXT:    li r3, 1
3499 ; P8-NEXT:    cror 4*cr5+lt, gt, un
3500 ; P8-NEXT:    cror 4*cr5+gt, 4*cr1+gt, 4*cr1+un
3501 ; P8-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3502 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3503 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3504 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3505 ; P8-NEXT:    blr
3507 ; P9-LABEL: fcmps_ugt_ppcf128:
3508 ; P9:       # %bb.0:
3509 ; P9-NEXT:    fcmpo cr0, f1, f3
3510 ; P9-NEXT:    fcmpo cr1, f2, f4
3511 ; P9-NEXT:    li r3, 1
3512 ; P9-NEXT:    cror 4*cr5+lt, 4*cr1+gt, 4*cr1+un
3513 ; P9-NEXT:    cror 4*cr5+gt, gt, un
3514 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3515 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3516 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3517 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3518 ; P9-NEXT:    blr
3520 ; NOVSX-LABEL: fcmps_ugt_ppcf128:
3521 ; NOVSX:       # %bb.0:
3522 ; NOVSX-NEXT:    fcmpo cr0, f2, f4
3523 ; NOVSX-NEXT:    fcmpo cr1, f1, f3
3524 ; NOVSX-NEXT:    li r3, 1
3525 ; NOVSX-NEXT:    cror 4*cr5+lt, gt, un
3526 ; NOVSX-NEXT:    cror 4*cr5+gt, 4*cr1+gt, 4*cr1+un
3527 ; NOVSX-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3528 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3529 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3530 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3531 ; NOVSX-NEXT:    blr
3532   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #0
3533   %conv = zext i1 %cmp to i32
3534   ret i32 %conv
3537 define i32 @fcmps_uge_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3538 ; P8-LABEL: fcmps_uge_ppcf128:
3539 ; P8:       # %bb.0:
3540 ; P8-NEXT:    fcmpo cr0, f2, f4
3541 ; P8-NEXT:    fcmpo cr1, f1, f3
3542 ; P8-NEXT:    li r3, 1
3543 ; P8-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, lt
3544 ; P8-NEXT:    crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq
3545 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3546 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3547 ; P8-NEXT:    blr
3549 ; P9-LABEL: fcmps_uge_ppcf128:
3550 ; P9:       # %bb.0:
3551 ; P9-NEXT:    fcmpo cr0, f2, f4
3552 ; P9-NEXT:    fcmpo cr1, f1, f3
3553 ; P9-NEXT:    li r3, 1
3554 ; P9-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, lt
3555 ; P9-NEXT:    crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq
3556 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3557 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3558 ; P9-NEXT:    blr
3560 ; NOVSX-LABEL: fcmps_uge_ppcf128:
3561 ; NOVSX:       # %bb.0:
3562 ; NOVSX-NEXT:    fcmpo cr0, f2, f4
3563 ; NOVSX-NEXT:    fcmpo cr1, f1, f3
3564 ; NOVSX-NEXT:    li r3, 1
3565 ; NOVSX-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, lt
3566 ; NOVSX-NEXT:    crnor 4*cr5+gt, 4*cr1+lt, 4*cr1+eq
3567 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3568 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3569 ; NOVSX-NEXT:    blr
3570   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #0
3571   %conv = zext i1 %cmp to i32
3572   ret i32 %conv
3575 define i32 @fcmps_ueq_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3576 ; P8-LABEL: fcmps_ueq_ppcf128:
3577 ; P8:       # %bb.0:
3578 ; P8-NEXT:    fcmpo cr0, f2, f4
3579 ; P8-NEXT:    fcmpo cr1, f1, f3
3580 ; P8-NEXT:    li r3, 1
3581 ; P8-NEXT:    cror 4*cr5+lt, eq, un
3582 ; P8-NEXT:    cror 4*cr5+gt, 4*cr1+eq, 4*cr1+un
3583 ; P8-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3584 ; P8-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3585 ; P8-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3586 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3587 ; P8-NEXT:    blr
3589 ; P9-LABEL: fcmps_ueq_ppcf128:
3590 ; P9:       # %bb.0:
3591 ; P9-NEXT:    fcmpo cr0, f1, f3
3592 ; P9-NEXT:    fcmpo cr1, f2, f4
3593 ; P9-NEXT:    li r3, 1
3594 ; P9-NEXT:    cror 4*cr5+lt, 4*cr1+eq, 4*cr1+un
3595 ; P9-NEXT:    cror 4*cr5+gt, eq, un
3596 ; P9-NEXT:    crand 4*cr5+lt, eq, 4*cr5+lt
3597 ; P9-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, eq
3598 ; P9-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3599 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3600 ; P9-NEXT:    blr
3602 ; NOVSX-LABEL: fcmps_ueq_ppcf128:
3603 ; NOVSX:       # %bb.0:
3604 ; NOVSX-NEXT:    fcmpo cr0, f2, f4
3605 ; NOVSX-NEXT:    fcmpo cr1, f1, f3
3606 ; NOVSX-NEXT:    li r3, 1
3607 ; NOVSX-NEXT:    cror 4*cr5+lt, eq, un
3608 ; NOVSX-NEXT:    cror 4*cr5+gt, 4*cr1+eq, 4*cr1+un
3609 ; NOVSX-NEXT:    crand 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3610 ; NOVSX-NEXT:    crandc 4*cr5+gt, 4*cr5+gt, 4*cr1+eq
3611 ; NOVSX-NEXT:    crnor 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
3612 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3613 ; NOVSX-NEXT:    blr
3614   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #0
3615   %conv = zext i1 %cmp to i32
3616   ret i32 %conv
3619 define i32 @fcmps_une_ppcf128(ppc_fp128 %a, ppc_fp128 %b) #0 {
3620 ; P8-LABEL: fcmps_une_ppcf128:
3621 ; P8:       # %bb.0:
3622 ; P8-NEXT:    fcmpo cr0, f2, f4
3623 ; P8-NEXT:    fcmpo cr1, f1, f3
3624 ; P8-NEXT:    li r3, 1
3625 ; P8-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, eq
3626 ; P8-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3627 ; P8-NEXT:    isel r3, 0, r3, 4*cr5+lt
3628 ; P8-NEXT:    blr
3630 ; P9-LABEL: fcmps_une_ppcf128:
3631 ; P9:       # %bb.0:
3632 ; P9-NEXT:    fcmpo cr0, f2, f4
3633 ; P9-NEXT:    fcmpo cr1, f1, f3
3634 ; P9-NEXT:    li r3, 1
3635 ; P9-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, eq
3636 ; P9-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3637 ; P9-NEXT:    isel r3, 0, r3, 4*cr5+lt
3638 ; P9-NEXT:    blr
3640 ; NOVSX-LABEL: fcmps_une_ppcf128:
3641 ; NOVSX:       # %bb.0:
3642 ; NOVSX-NEXT:    fcmpo cr0, f2, f4
3643 ; NOVSX-NEXT:    fcmpo cr1, f1, f3
3644 ; NOVSX-NEXT:    li r3, 1
3645 ; NOVSX-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, eq
3646 ; NOVSX-NEXT:    crandc 4*cr5+lt, 4*cr1+eq, 4*cr5+lt
3647 ; NOVSX-NEXT:    isel r3, 0, r3, 4*cr5+lt
3648 ; NOVSX-NEXT:    blr
3649   %cmp = call i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128 %a, ppc_fp128 %b, metadata !"une", metadata !"fpexcept.strict") #0
3650   %conv = zext i1 %cmp to i32
3651   ret i32 %conv
3654 attributes #0 = { strictfp nounwind }
3656 declare i1 @llvm.experimental.constrained.fcmp.f32(float, float, metadata, metadata)
3657 declare i1 @llvm.experimental.constrained.fcmp.f64(double, double, metadata, metadata)
3658 declare i1 @llvm.experimental.constrained.fcmps.f32(float, float, metadata, metadata)
3659 declare i1 @llvm.experimental.constrained.fcmps.f64(double, double, metadata, metadata)
3660 declare i1 @llvm.experimental.constrained.fcmps.f128(fp128, fp128, metadata, metadata)
3661 declare i1 @llvm.experimental.constrained.fcmp.f128(fp128, fp128, metadata, metadata)
3662 declare i1 @llvm.experimental.constrained.fcmps.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata)
3663 declare i1 @llvm.experimental.constrained.fcmp.ppcf128(ppc_fp128, ppc_fp128, metadata, metadata)