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 < %s -mtriple=powerpc-unknown-linux -mattr=spe | FileCheck %s -check-prefix=SPE
4 define i32 @test_f32_oeq_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
5 ; SPE-LABEL: test_f32_oeq_s:
7 ; SPE-NEXT: efscmpeq cr0, r5, r6
8 ; SPE-NEXT: bclr 12, gt, 0
10 ; SPE-NEXT: ori r3, r4, 0
12 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"oeq", metadata !"fpexcept.strict") #0
13 %res = select i1 %cond, i32 %a, i32 %b
17 define i32 @test_f32_ogt_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
18 ; SPE-LABEL: test_f32_ogt_s:
20 ; SPE-NEXT: efscmpgt cr0, r5, r6
21 ; SPE-NEXT: bclr 12, gt, 0
23 ; SPE-NEXT: ori r3, r4, 0
25 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"ogt", metadata !"fpexcept.strict") #0
26 %res = select i1 %cond, i32 %a, i32 %b
30 define i32 @test_f32_oge_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
31 ; SPE-LABEL: test_f32_oge_s:
33 ; SPE-NEXT: efscmplt cr0, r5, r6
34 ; SPE-NEXT: efscmplt cr1, r5, r6
35 ; SPE-NEXT: crnor 4*cr5+lt, gt, 4*cr1+gt
36 ; SPE-NEXT: efscmpeq cr0, r6, r6
37 ; SPE-NEXT: efscmpeq cr1, r5, r5
38 ; SPE-NEXT: crand 4*cr5+gt, 4*cr1+gt, gt
39 ; SPE-NEXT: crand 4*cr5+lt, 4*cr5+lt, 4*cr5+gt
40 ; SPE-NEXT: bclr 12, 4*cr5+lt, 0
42 ; SPE-NEXT: ori r3, r4, 0
44 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"oge", metadata !"fpexcept.strict") #0
45 %res = select i1 %cond, i32 %a, i32 %b
49 define i32 @test_f32_olt_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
50 ; SPE-LABEL: test_f32_olt_s:
52 ; SPE-NEXT: efscmplt cr0, r5, r6
53 ; SPE-NEXT: bclr 12, gt, 0
55 ; SPE-NEXT: ori r3, r4, 0
57 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"olt", metadata !"fpexcept.strict") #0
58 %res = select i1 %cond, i32 %a, i32 %b
62 define i32 @test_f32_ole_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
63 ; SPE-LABEL: test_f32_ole_s:
65 ; SPE-NEXT: efscmpgt cr0, r5, r6
66 ; SPE-NEXT: efscmpgt cr1, r5, r6
67 ; SPE-NEXT: crnor 4*cr5+lt, gt, 4*cr1+gt
68 ; SPE-NEXT: efscmpeq cr0, r6, r6
69 ; SPE-NEXT: efscmpeq cr1, r5, r5
70 ; SPE-NEXT: crand 4*cr5+gt, 4*cr1+gt, gt
71 ; SPE-NEXT: crand 4*cr5+lt, 4*cr5+lt, 4*cr5+gt
72 ; SPE-NEXT: bclr 12, 4*cr5+lt, 0
74 ; SPE-NEXT: ori r3, r4, 0
76 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"ole", metadata !"fpexcept.strict") #0
77 %res = select i1 %cond, i32 %a, i32 %b
81 define i32 @test_f32_one_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
82 ; SPE-LABEL: test_f32_one_s:
84 ; SPE-NEXT: efscmplt cr0, r5, r6
85 ; SPE-NEXT: efscmpgt cr1, r5, r6
86 ; SPE-NEXT: cror 4*cr5+lt, 4*cr1+gt, gt
87 ; SPE-NEXT: bclr 12, 4*cr5+lt, 0
89 ; SPE-NEXT: ori r3, r4, 0
91 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"one", metadata !"fpexcept.strict") #0
92 %res = select i1 %cond, i32 %a, i32 %b
96 define i32 @test_f32_ord_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
97 ; SPE-LABEL: test_f32_ord_s:
99 ; SPE-NEXT: efscmpeq cr0, r6, r6
100 ; SPE-NEXT: efscmpeq cr1, r5, r5
101 ; SPE-NEXT: crand 4*cr5+lt, 4*cr1+gt, gt
102 ; SPE-NEXT: bclr 12, 4*cr5+lt, 0
104 ; SPE-NEXT: ori r3, r4, 0
106 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"ord", metadata !"fpexcept.strict") #0
107 %res = select i1 %cond, i32 %a, i32 %b
111 define i32 @test_f32_ueq_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
112 ; SPE-LABEL: test_f32_ueq_s:
114 ; SPE-NEXT: efscmplt cr0, r5, r6
115 ; SPE-NEXT: efscmpgt cr1, r5, r6
116 ; SPE-NEXT: cror 4*cr5+lt, 4*cr1+gt, gt
117 ; SPE-NEXT: bc 12, 4*cr5+lt, .LBB7_1
120 ; SPE-NEXT: addi r3, r4, 0
122 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"ueq", metadata !"fpexcept.strict") #0
123 %res = select i1 %cond, i32 %a, i32 %b
127 define i32 @test_f32_ugt_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
128 ; SPE-LABEL: test_f32_ugt_s:
130 ; SPE-NEXT: efscmpeq cr0, r6, r6
131 ; SPE-NEXT: efscmpeq cr1, r6, r6
132 ; SPE-NEXT: crnor 4*cr5+lt, gt, 4*cr1+gt
133 ; SPE-NEXT: efscmpeq cr0, r5, r5
134 ; SPE-NEXT: efscmpeq cr1, r5, r5
135 ; SPE-NEXT: crnor 4*cr5+gt, gt, 4*cr1+gt
136 ; SPE-NEXT: cror 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
137 ; SPE-NEXT: efscmpgt cr0, r5, r6
138 ; SPE-NEXT: cror 4*cr5+lt, gt, 4*cr5+lt
139 ; SPE-NEXT: bclr 12, 4*cr5+lt, 0
141 ; SPE-NEXT: ori r3, r4, 0
143 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"ugt", metadata !"fpexcept.strict") #0
144 %res = select i1 %cond, i32 %a, i32 %b
148 define i32 @test_f32_uge_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
149 ; SPE-LABEL: test_f32_uge_s:
151 ; SPE-NEXT: efscmplt cr0, r5, r6
152 ; SPE-NEXT: efscmplt cr1, r5, r6
153 ; SPE-NEXT: crnor 4*cr5+lt, gt, 4*cr1+gt
154 ; SPE-NEXT: bclr 12, 4*cr5+lt, 0
156 ; SPE-NEXT: ori r3, r4, 0
158 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"uge", metadata !"fpexcept.strict") #0
159 %res = select i1 %cond, i32 %a, i32 %b
163 define i32 @test_f32_ult_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
164 ; SPE-LABEL: test_f32_ult_s:
166 ; SPE-NEXT: efscmpeq cr0, r6, r6
167 ; SPE-NEXT: efscmpeq cr1, r6, r6
168 ; SPE-NEXT: crnor 4*cr5+lt, gt, 4*cr1+gt
169 ; SPE-NEXT: efscmpeq cr0, r5, r5
170 ; SPE-NEXT: efscmpeq cr1, r5, r5
171 ; SPE-NEXT: crnor 4*cr5+gt, gt, 4*cr1+gt
172 ; SPE-NEXT: cror 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
173 ; SPE-NEXT: efscmplt cr0, r5, r6
174 ; SPE-NEXT: cror 4*cr5+lt, gt, 4*cr5+lt
175 ; SPE-NEXT: bclr 12, 4*cr5+lt, 0
177 ; SPE-NEXT: ori r3, r4, 0
179 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"ult", metadata !"fpexcept.strict") #0
180 %res = select i1 %cond, i32 %a, i32 %b
184 define i32 @test_f32_ule_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
185 ; SPE-LABEL: test_f32_ule_s:
187 ; SPE-NEXT: efscmpgt cr0, r5, r6
188 ; SPE-NEXT: efscmpgt cr1, r5, r6
189 ; SPE-NEXT: crnor 4*cr5+lt, gt, 4*cr1+gt
190 ; SPE-NEXT: bclr 12, 4*cr5+lt, 0
192 ; SPE-NEXT: ori r3, r4, 0
194 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"ule", metadata !"fpexcept.strict") #0
195 %res = select i1 %cond, i32 %a, i32 %b
199 define i32 @test_f32_une_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
200 ; SPE-LABEL: test_f32_une_s:
202 ; SPE-NEXT: efscmpeq cr0, r5, r6
203 ; SPE-NEXT: efscmpeq cr1, r5, r6
204 ; SPE-NEXT: crnor 4*cr5+lt, gt, 4*cr1+gt
205 ; SPE-NEXT: bclr 12, 4*cr5+lt, 0
207 ; SPE-NEXT: ori r3, r4, 0
209 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"une", metadata !"fpexcept.strict") #0
210 %res = select i1 %cond, i32 %a, i32 %b
214 define i32 @test_f32_uno_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
215 ; SPE-LABEL: test_f32_uno_s:
217 ; SPE-NEXT: efscmpeq cr0, r6, r6
218 ; SPE-NEXT: efscmpeq cr1, r6, r6
219 ; SPE-NEXT: crnor 4*cr5+lt, gt, 4*cr1+gt
220 ; SPE-NEXT: efscmpeq cr0, r5, r5
221 ; SPE-NEXT: efscmpeq cr1, r5, r5
222 ; SPE-NEXT: crnor 4*cr5+gt, gt, 4*cr1+gt
223 ; SPE-NEXT: cror 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
224 ; SPE-NEXT: bclr 12, 4*cr5+lt, 0
226 ; SPE-NEXT: ori r3, r4, 0
228 %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"uno", metadata !"fpexcept.strict") #0
229 %res = select i1 %cond, i32 %a, i32 %b
233 define i32 @test_f64_oeq_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
234 ; SPE-LABEL: test_f64_oeq_s:
236 ; SPE-NEXT: evmergelo r7, r7, r8
237 ; SPE-NEXT: evmergelo r5, r5, r6
238 ; SPE-NEXT: efdcmpeq cr0, r5, r7
239 ; SPE-NEXT: bclr 12, gt, 0
241 ; SPE-NEXT: ori r3, r4, 0
243 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"oeq", metadata !"fpexcept.strict") #0
244 %res = select i1 %cond, i32 %a, i32 %b
248 define i32 @test_f64_ogt_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
249 ; SPE-LABEL: test_f64_ogt_s:
251 ; SPE-NEXT: evmergelo r7, r7, r8
252 ; SPE-NEXT: evmergelo r5, r5, r6
253 ; SPE-NEXT: efdcmpgt cr0, r5, r7
254 ; SPE-NEXT: bclr 12, gt, 0
256 ; SPE-NEXT: ori r3, r4, 0
258 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"ogt", metadata !"fpexcept.strict") #0
259 %res = select i1 %cond, i32 %a, i32 %b
263 define i32 @test_f64_oge_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
264 ; SPE-LABEL: test_f64_oge_s:
266 ; SPE-NEXT: evmergelo r7, r7, r8
267 ; SPE-NEXT: evmergelo r5, r5, r6
268 ; SPE-NEXT: efdcmplt cr0, r5, r7
269 ; SPE-NEXT: efdcmplt cr1, r5, r7
270 ; SPE-NEXT: efdcmpeq cr5, r7, r7
271 ; SPE-NEXT: efdcmpeq cr6, r5, r5
272 ; SPE-NEXT: crnor 4*cr7+lt, gt, 4*cr1+gt
273 ; SPE-NEXT: crand 4*cr5+lt, 4*cr6+gt, 4*cr5+gt
274 ; SPE-NEXT: crand 4*cr5+lt, 4*cr7+lt, 4*cr5+lt
275 ; SPE-NEXT: bclr 12, 4*cr5+lt, 0
277 ; SPE-NEXT: ori r3, r4, 0
279 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"oge", metadata !"fpexcept.strict") #0
280 %res = select i1 %cond, i32 %a, i32 %b
284 define i32 @test_f64_olt_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
285 ; SPE-LABEL: test_f64_olt_s:
287 ; SPE-NEXT: evmergelo r7, r7, r8
288 ; SPE-NEXT: evmergelo r5, r5, r6
289 ; SPE-NEXT: efdcmplt cr0, r5, r7
290 ; SPE-NEXT: bclr 12, gt, 0
292 ; SPE-NEXT: ori r3, r4, 0
294 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"olt", metadata !"fpexcept.strict") #0
295 %res = select i1 %cond, i32 %a, i32 %b
299 define i32 @test_f64_ole_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
300 ; SPE-LABEL: test_f64_ole_s:
302 ; SPE-NEXT: evmergelo r7, r7, r8
303 ; SPE-NEXT: evmergelo r5, r5, r6
304 ; SPE-NEXT: efdcmpgt cr0, r5, r7
305 ; SPE-NEXT: efdcmpgt cr1, r5, r7
306 ; SPE-NEXT: efdcmpeq cr5, r7, r7
307 ; SPE-NEXT: efdcmpeq cr6, r5, r5
308 ; SPE-NEXT: crnor 4*cr7+lt, gt, 4*cr1+gt
309 ; SPE-NEXT: crand 4*cr5+lt, 4*cr6+gt, 4*cr5+gt
310 ; SPE-NEXT: crand 4*cr5+lt, 4*cr7+lt, 4*cr5+lt
311 ; SPE-NEXT: bclr 12, 4*cr5+lt, 0
313 ; SPE-NEXT: ori r3, r4, 0
315 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"ole", metadata !"fpexcept.strict") #0
316 %res = select i1 %cond, i32 %a, i32 %b
320 define i32 @test_f64_one_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
321 ; SPE-LABEL: test_f64_one_s:
323 ; SPE-NEXT: evmergelo r7, r7, r8
324 ; SPE-NEXT: evmergelo r5, r5, r6
325 ; SPE-NEXT: efdcmplt cr0, r5, r7
326 ; SPE-NEXT: efdcmpgt cr1, r5, r7
327 ; SPE-NEXT: cror 4*cr5+lt, 4*cr1+gt, gt
328 ; SPE-NEXT: bclr 12, 4*cr5+lt, 0
330 ; SPE-NEXT: ori r3, r4, 0
332 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"one", metadata !"fpexcept.strict") #0
333 %res = select i1 %cond, i32 %a, i32 %b
337 define i32 @test_f64_ord_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
338 ; SPE-LABEL: test_f64_ord_s:
340 ; SPE-NEXT: evmergelo r5, r5, r6
341 ; SPE-NEXT: evmergelo r6, r7, r8
342 ; SPE-NEXT: efdcmpeq cr0, r6, r6
343 ; SPE-NEXT: efdcmpeq cr1, r5, r5
344 ; SPE-NEXT: crand 4*cr5+lt, 4*cr1+gt, gt
345 ; SPE-NEXT: bclr 12, 4*cr5+lt, 0
347 ; SPE-NEXT: ori r3, r4, 0
349 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"ord", metadata !"fpexcept.strict") #0
350 %res = select i1 %cond, i32 %a, i32 %b
354 define i32 @test_f64_ueq_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
355 ; SPE-LABEL: test_f64_ueq_s:
357 ; SPE-NEXT: evmergelo r7, r7, r8
358 ; SPE-NEXT: evmergelo r5, r5, r6
359 ; SPE-NEXT: efdcmplt cr0, r5, r7
360 ; SPE-NEXT: efdcmpgt cr1, r5, r7
361 ; SPE-NEXT: cror 4*cr5+lt, 4*cr1+gt, gt
362 ; SPE-NEXT: bc 12, 4*cr5+lt, .LBB21_1
364 ; SPE-NEXT: .LBB21_1:
365 ; SPE-NEXT: addi r3, r4, 0
367 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"ueq", metadata !"fpexcept.strict") #0
368 %res = select i1 %cond, i32 %a, i32 %b
372 define i32 @test_f64_ugt_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
373 ; SPE-LABEL: test_f64_ugt_s:
375 ; SPE-NEXT: evmergelo r5, r5, r6
376 ; SPE-NEXT: evmergelo r6, r7, r8
377 ; SPE-NEXT: efdcmpeq cr0, r6, r6
378 ; SPE-NEXT: efdcmpeq cr1, r6, r6
379 ; SPE-NEXT: efdcmpeq cr5, r5, r5
380 ; SPE-NEXT: efdcmpeq cr6, r5, r5
381 ; SPE-NEXT: efdcmpgt cr7, r5, r6
382 ; SPE-NEXT: crnor 4*cr1+lt, gt, 4*cr1+gt
383 ; SPE-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr6+gt
384 ; SPE-NEXT: cror 4*cr5+lt, 4*cr5+lt, 4*cr1+lt
385 ; SPE-NEXT: cror 4*cr5+lt, 4*cr7+gt, 4*cr5+lt
386 ; SPE-NEXT: bclr 12, 4*cr5+lt, 0
388 ; SPE-NEXT: ori r3, r4, 0
390 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"ugt", metadata !"fpexcept.strict") #0
391 %res = select i1 %cond, i32 %a, i32 %b
395 define i32 @test_f64_uge_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
396 ; SPE-LABEL: test_f64_uge_s:
398 ; SPE-NEXT: evmergelo r7, r7, r8
399 ; SPE-NEXT: evmergelo r5, r5, r6
400 ; SPE-NEXT: efdcmplt cr0, r5, r7
401 ; SPE-NEXT: efdcmplt cr1, r5, r7
402 ; SPE-NEXT: crnor 4*cr5+lt, gt, 4*cr1+gt
403 ; SPE-NEXT: bclr 12, 4*cr5+lt, 0
405 ; SPE-NEXT: ori r3, r4, 0
407 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"uge", metadata !"fpexcept.strict") #0
408 %res = select i1 %cond, i32 %a, i32 %b
412 define i32 @test_f64_ult_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
413 ; SPE-LABEL: test_f64_ult_s:
415 ; SPE-NEXT: evmergelo r5, r5, r6
416 ; SPE-NEXT: evmergelo r6, r7, r8
417 ; SPE-NEXT: efdcmpeq cr0, r6, r6
418 ; SPE-NEXT: efdcmpeq cr1, r6, r6
419 ; SPE-NEXT: efdcmpeq cr5, r5, r5
420 ; SPE-NEXT: efdcmpeq cr6, r5, r5
421 ; SPE-NEXT: efdcmplt cr7, r5, r6
422 ; SPE-NEXT: crnor 4*cr1+lt, gt, 4*cr1+gt
423 ; SPE-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr6+gt
424 ; SPE-NEXT: cror 4*cr5+lt, 4*cr5+lt, 4*cr1+lt
425 ; SPE-NEXT: cror 4*cr5+lt, 4*cr7+gt, 4*cr5+lt
426 ; SPE-NEXT: bclr 12, 4*cr5+lt, 0
428 ; SPE-NEXT: ori r3, r4, 0
430 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"ult", metadata !"fpexcept.strict") #0
431 %res = select i1 %cond, i32 %a, i32 %b
435 define i32 @test_f64_ule_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
436 ; SPE-LABEL: test_f64_ule_s:
438 ; SPE-NEXT: evmergelo r7, r7, r8
439 ; SPE-NEXT: evmergelo r5, r5, r6
440 ; SPE-NEXT: efdcmpgt cr0, r5, r7
441 ; SPE-NEXT: efdcmpgt cr1, r5, r7
442 ; SPE-NEXT: crnor 4*cr5+lt, gt, 4*cr1+gt
443 ; SPE-NEXT: bclr 12, 4*cr5+lt, 0
445 ; SPE-NEXT: ori r3, r4, 0
447 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"ule", metadata !"fpexcept.strict") #0
448 %res = select i1 %cond, i32 %a, i32 %b
452 define i32 @test_f64_une_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
453 ; SPE-LABEL: test_f64_une_s:
455 ; SPE-NEXT: evmergelo r7, r7, r8
456 ; SPE-NEXT: evmergelo r5, r5, r6
457 ; SPE-NEXT: efdcmpeq cr0, r5, r7
458 ; SPE-NEXT: efdcmpeq cr1, r5, r7
459 ; SPE-NEXT: crnor 4*cr5+lt, gt, 4*cr1+gt
460 ; SPE-NEXT: bclr 12, 4*cr5+lt, 0
462 ; SPE-NEXT: ori r3, r4, 0
464 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"une", metadata !"fpexcept.strict") #0
465 %res = select i1 %cond, i32 %a, i32 %b
469 define i32 @test_f64_uno_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
470 ; SPE-LABEL: test_f64_uno_s:
472 ; SPE-NEXT: evmergelo r5, r5, r6
473 ; SPE-NEXT: evmergelo r6, r7, r8
474 ; SPE-NEXT: efdcmpeq cr0, r6, r6
475 ; SPE-NEXT: efdcmpeq cr1, r6, r6
476 ; SPE-NEXT: efdcmpeq cr5, r5, r5
477 ; SPE-NEXT: efdcmpeq cr6, r5, r5
478 ; SPE-NEXT: crnor 4*cr7+lt, gt, 4*cr1+gt
479 ; SPE-NEXT: crnor 4*cr5+lt, 4*cr5+gt, 4*cr6+gt
480 ; SPE-NEXT: cror 4*cr5+lt, 4*cr5+lt, 4*cr7+lt
481 ; SPE-NEXT: bclr 12, 4*cr5+lt, 0
483 ; SPE-NEXT: ori r3, r4, 0
485 %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"uno", metadata !"fpexcept.strict") #0
486 %res = select i1 %cond, i32 %a, i32 %b
490 attributes #0 = { strictfp nounwind }
492 declare i1 @llvm.experimental.constrained.fcmps.f32(float, float, metadata, metadata)
493 declare i1 @llvm.experimental.constrained.fcmps.f64(double, double, metadata, metadata)