[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / PowerPC / fp-strict-fcmp-spe.ll
blob6aae299786cc7e93f7e74d311fa5addab4379496
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:
6 ; SPE:       # %bb.0:
7 ; SPE-NEXT:    efscmpeq cr0, r5, r6
8 ; SPE-NEXT:    bclr 12, gt, 0
9 ; SPE-NEXT:  # %bb.1:
10 ; SPE-NEXT:    ori r3, r4, 0
11 ; SPE-NEXT:    blr
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
14   ret i32 %res
17 define i32 @test_f32_ogt_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
18 ; SPE-LABEL: test_f32_ogt_s:
19 ; SPE:       # %bb.0:
20 ; SPE-NEXT:    efscmpgt cr0, r5, r6
21 ; SPE-NEXT:    bclr 12, gt, 0
22 ; SPE-NEXT:  # %bb.1:
23 ; SPE-NEXT:    ori r3, r4, 0
24 ; SPE-NEXT:    blr
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
27   ret i32 %res
30 define i32 @test_f32_oge_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
31 ; SPE-LABEL: test_f32_oge_s:
32 ; SPE:       # %bb.0:
33 ; SPE-NEXT:    efscmpeq cr0, r6, r6
34 ; SPE-NEXT:    efscmpeq cr1, r5, r5
35 ; SPE-NEXT:    crand 4*cr5+lt, 4*cr1+gt, gt
36 ; SPE-NEXT:    efscmplt cr0, r5, r6
37 ; SPE-NEXT:    crandc 4*cr5+lt, 4*cr5+lt, gt
38 ; SPE-NEXT:    bclr 12, 4*cr5+lt, 0
39 ; SPE-NEXT:  # %bb.1:
40 ; SPE-NEXT:    ori r3, r4, 0
41 ; SPE-NEXT:    blr
42   %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"oge", metadata !"fpexcept.strict") #0
43   %res = select i1 %cond, i32 %a, i32 %b
44   ret i32 %res
47 define i32 @test_f32_olt_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
48 ; SPE-LABEL: test_f32_olt_s:
49 ; SPE:       # %bb.0:
50 ; SPE-NEXT:    efscmplt cr0, r5, r6
51 ; SPE-NEXT:    bclr 12, gt, 0
52 ; SPE-NEXT:  # %bb.1:
53 ; SPE-NEXT:    ori r3, r4, 0
54 ; SPE-NEXT:    blr
55   %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"olt", metadata !"fpexcept.strict") #0
56   %res = select i1 %cond, i32 %a, i32 %b
57   ret i32 %res
60 define i32 @test_f32_ole_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
61 ; SPE-LABEL: test_f32_ole_s:
62 ; SPE:       # %bb.0:
63 ; SPE-NEXT:    efscmpeq cr0, r6, r6
64 ; SPE-NEXT:    efscmpeq cr1, r5, r5
65 ; SPE-NEXT:    crand 4*cr5+lt, 4*cr1+gt, gt
66 ; SPE-NEXT:    efscmpgt cr0, r5, r6
67 ; SPE-NEXT:    crandc 4*cr5+lt, 4*cr5+lt, gt
68 ; SPE-NEXT:    bclr 12, 4*cr5+lt, 0
69 ; SPE-NEXT:  # %bb.1:
70 ; SPE-NEXT:    ori r3, r4, 0
71 ; SPE-NEXT:    blr
72   %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"ole", metadata !"fpexcept.strict") #0
73   %res = select i1 %cond, i32 %a, i32 %b
74   ret i32 %res
77 define i32 @test_f32_one_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
78 ; SPE-LABEL: test_f32_one_s:
79 ; SPE:       # %bb.0:
80 ; SPE-NEXT:    efscmplt cr0, r5, r6
81 ; SPE-NEXT:    efscmpgt cr1, r5, r6
82 ; SPE-NEXT:    cror 4*cr5+lt, 4*cr1+gt, gt
83 ; SPE-NEXT:    bclr 12, 4*cr5+lt, 0
84 ; SPE-NEXT:  # %bb.1:
85 ; SPE-NEXT:    ori r3, r4, 0
86 ; SPE-NEXT:    blr
87   %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"one", metadata !"fpexcept.strict") #0
88   %res = select i1 %cond, i32 %a, i32 %b
89   ret i32 %res
92 define i32 @test_f32_ord_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
93 ; SPE-LABEL: test_f32_ord_s:
94 ; SPE:       # %bb.0:
95 ; SPE-NEXT:    efscmpeq cr0, r6, r6
96 ; SPE-NEXT:    efscmpeq cr1, r5, r5
97 ; SPE-NEXT:    crand 4*cr5+lt, 4*cr1+gt, gt
98 ; SPE-NEXT:    bclr 12, 4*cr5+lt, 0
99 ; SPE-NEXT:  # %bb.1:
100 ; SPE-NEXT:    ori r3, r4, 0
101 ; SPE-NEXT:    blr
102   %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"ord", metadata !"fpexcept.strict") #0
103   %res = select i1 %cond, i32 %a, i32 %b
104   ret i32 %res
107 define i32 @test_f32_ueq_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
108 ; SPE-LABEL: test_f32_ueq_s:
109 ; SPE:       # %bb.0:
110 ; SPE-NEXT:    efscmplt cr0, r5, r6
111 ; SPE-NEXT:    efscmpgt cr1, r5, r6
112 ; SPE-NEXT:    cror 4*cr5+lt, 4*cr1+gt, gt
113 ; SPE-NEXT:    bc 12, 4*cr5+lt, .LBB7_1
114 ; SPE-NEXT:    blr
115 ; SPE-NEXT:  .LBB7_1:
116 ; SPE-NEXT:    addi r3, r4, 0
117 ; SPE-NEXT:    blr
118   %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"ueq", metadata !"fpexcept.strict") #0
119   %res = select i1 %cond, i32 %a, i32 %b
120   ret i32 %res
123 define i32 @test_f32_ugt_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
124 ; SPE-LABEL: test_f32_ugt_s:
125 ; SPE:       # %bb.0:
126 ; SPE-NEXT:    efscmpeq cr0, r5, r5
127 ; SPE-NEXT:    efscmpeq cr1, r6, r6
128 ; SPE-NEXT:    crnand 4*cr5+lt, 4*cr1+gt, gt
129 ; SPE-NEXT:    efscmpgt cr0, r5, r6
130 ; SPE-NEXT:    cror 4*cr5+lt, gt, 4*cr5+lt
131 ; SPE-NEXT:    bclr 12, 4*cr5+lt, 0
132 ; SPE-NEXT:  # %bb.1:
133 ; SPE-NEXT:    ori r3, r4, 0
134 ; SPE-NEXT:    blr
135   %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"ugt", metadata !"fpexcept.strict") #0
136   %res = select i1 %cond, i32 %a, i32 %b
137   ret i32 %res
140 define i32 @test_f32_uge_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
141 ; SPE-LABEL: test_f32_uge_s:
142 ; SPE:       # %bb.0:
143 ; SPE-NEXT:    efscmplt cr0, r5, r6
144 ; SPE-NEXT:    bc 12, gt, .LBB9_1
145 ; SPE-NEXT:    blr
146 ; SPE-NEXT:  .LBB9_1:
147 ; SPE-NEXT:    addi r3, r4, 0
148 ; SPE-NEXT:    blr
149   %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"uge", metadata !"fpexcept.strict") #0
150   %res = select i1 %cond, i32 %a, i32 %b
151   ret i32 %res
154 define i32 @test_f32_ult_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
155 ; SPE-LABEL: test_f32_ult_s:
156 ; SPE:       # %bb.0:
157 ; SPE-NEXT:    efscmpeq cr0, r5, r5
158 ; SPE-NEXT:    efscmpeq cr1, r6, r6
159 ; SPE-NEXT:    crnand 4*cr5+lt, 4*cr1+gt, gt
160 ; SPE-NEXT:    efscmplt cr0, r5, r6
161 ; SPE-NEXT:    cror 4*cr5+lt, gt, 4*cr5+lt
162 ; SPE-NEXT:    bclr 12, 4*cr5+lt, 0
163 ; SPE-NEXT:  # %bb.1:
164 ; SPE-NEXT:    ori r3, r4, 0
165 ; SPE-NEXT:    blr
166   %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"ult", metadata !"fpexcept.strict") #0
167   %res = select i1 %cond, i32 %a, i32 %b
168   ret i32 %res
171 define i32 @test_f32_ule_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
172 ; SPE-LABEL: test_f32_ule_s:
173 ; SPE:       # %bb.0:
174 ; SPE-NEXT:    efscmpgt cr0, r5, r6
175 ; SPE-NEXT:    bc 12, gt, .LBB11_1
176 ; SPE-NEXT:    blr
177 ; SPE-NEXT:  .LBB11_1:
178 ; SPE-NEXT:    addi r3, r4, 0
179 ; SPE-NEXT:    blr
180   %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"ule", metadata !"fpexcept.strict") #0
181   %res = select i1 %cond, i32 %a, i32 %b
182   ret i32 %res
185 define i32 @test_f32_une_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
186 ; SPE-LABEL: test_f32_une_s:
187 ; SPE:       # %bb.0:
188 ; SPE-NEXT:    efscmpeq cr0, r5, r6
189 ; SPE-NEXT:    bc 12, gt, .LBB12_1
190 ; SPE-NEXT:    blr
191 ; SPE-NEXT:  .LBB12_1:
192 ; SPE-NEXT:    addi r3, r4, 0
193 ; SPE-NEXT:    blr
194   %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"une", metadata !"fpexcept.strict") #0
195   %res = select i1 %cond, i32 %a, i32 %b
196   ret i32 %res
199 define i32 @test_f32_uno_s(i32 %a, i32 %b, float %f1, float %f2) #0 {
200 ; SPE-LABEL: test_f32_uno_s:
201 ; SPE:       # %bb.0:
202 ; SPE-NEXT:    efscmpeq cr0, r5, r5
203 ; SPE-NEXT:    efscmpeq cr1, r6, r6
204 ; SPE-NEXT:    crnand 4*cr5+lt, 4*cr1+gt, gt
205 ; SPE-NEXT:    bclr 12, 4*cr5+lt, 0
206 ; SPE-NEXT:  # %bb.1:
207 ; SPE-NEXT:    ori r3, r4, 0
208 ; SPE-NEXT:    blr
209   %cond = call i1 @llvm.experimental.constrained.fcmps.f32(float %f1, float %f2, metadata !"uno", metadata !"fpexcept.strict") #0
210   %res = select i1 %cond, i32 %a, i32 %b
211   ret i32 %res
214 define i32 @test_f64_oeq_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
215 ; SPE-LABEL: test_f64_oeq_s:
216 ; SPE:       # %bb.0:
217 ; SPE-NEXT:    evmergelo r7, r7, r8
218 ; SPE-NEXT:    evmergelo r5, r5, r6
219 ; SPE-NEXT:    efdcmpeq cr0, r5, r7
220 ; SPE-NEXT:    bclr 12, gt, 0
221 ; SPE-NEXT:  # %bb.1:
222 ; SPE-NEXT:    ori r3, r4, 0
223 ; SPE-NEXT:    blr
224   %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"oeq", metadata !"fpexcept.strict") #0
225   %res = select i1 %cond, i32 %a, i32 %b
226   ret i32 %res
229 define i32 @test_f64_ogt_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
230 ; SPE-LABEL: test_f64_ogt_s:
231 ; SPE:       # %bb.0:
232 ; SPE-NEXT:    evmergelo r7, r7, r8
233 ; SPE-NEXT:    evmergelo r5, r5, r6
234 ; SPE-NEXT:    efdcmpgt cr0, r5, r7
235 ; SPE-NEXT:    bclr 12, gt, 0
236 ; SPE-NEXT:  # %bb.1:
237 ; SPE-NEXT:    ori r3, r4, 0
238 ; SPE-NEXT:    blr
239   %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"ogt", metadata !"fpexcept.strict") #0
240   %res = select i1 %cond, i32 %a, i32 %b
241   ret i32 %res
244 define i32 @test_f64_oge_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
245 ; SPE-LABEL: test_f64_oge_s:
246 ; SPE:       # %bb.0:
247 ; SPE-NEXT:    evmergelo r5, r5, r6
248 ; SPE-NEXT:    evmergelo r6, r7, r8
249 ; SPE-NEXT:    efdcmpeq cr0, r6, r6
250 ; SPE-NEXT:    efdcmpeq cr1, r5, r5
251 ; SPE-NEXT:    efdcmplt cr5, r5, r6
252 ; SPE-NEXT:    crand 4*cr5+lt, 4*cr1+gt, gt
253 ; SPE-NEXT:    crandc 4*cr5+lt, 4*cr5+lt, 4*cr5+gt
254 ; SPE-NEXT:    bclr 12, 4*cr5+lt, 0
255 ; SPE-NEXT:  # %bb.1:
256 ; SPE-NEXT:    ori r3, r4, 0
257 ; SPE-NEXT:    blr
258   %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"oge", metadata !"fpexcept.strict") #0
259   %res = select i1 %cond, i32 %a, i32 %b
260   ret i32 %res
263 define i32 @test_f64_olt_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
264 ; SPE-LABEL: test_f64_olt_s:
265 ; SPE:       # %bb.0:
266 ; SPE-NEXT:    evmergelo r7, r7, r8
267 ; SPE-NEXT:    evmergelo r5, r5, r6
268 ; SPE-NEXT:    efdcmplt cr0, r5, r7
269 ; SPE-NEXT:    bclr 12, gt, 0
270 ; SPE-NEXT:  # %bb.1:
271 ; SPE-NEXT:    ori r3, r4, 0
272 ; SPE-NEXT:    blr
273   %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"olt", metadata !"fpexcept.strict") #0
274   %res = select i1 %cond, i32 %a, i32 %b
275   ret i32 %res
278 define i32 @test_f64_ole_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
279 ; SPE-LABEL: test_f64_ole_s:
280 ; SPE:       # %bb.0:
281 ; SPE-NEXT:    evmergelo r5, r5, r6
282 ; SPE-NEXT:    evmergelo r6, r7, r8
283 ; SPE-NEXT:    efdcmpeq cr0, r6, r6
284 ; SPE-NEXT:    efdcmpeq cr1, r5, r5
285 ; SPE-NEXT:    efdcmpgt cr5, r5, r6
286 ; SPE-NEXT:    crand 4*cr5+lt, 4*cr1+gt, gt
287 ; SPE-NEXT:    crandc 4*cr5+lt, 4*cr5+lt, 4*cr5+gt
288 ; SPE-NEXT:    bclr 12, 4*cr5+lt, 0
289 ; SPE-NEXT:  # %bb.1:
290 ; SPE-NEXT:    ori r3, r4, 0
291 ; SPE-NEXT:    blr
292   %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"ole", metadata !"fpexcept.strict") #0
293   %res = select i1 %cond, i32 %a, i32 %b
294   ret i32 %res
297 define i32 @test_f64_one_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
298 ; SPE-LABEL: test_f64_one_s:
299 ; SPE:       # %bb.0:
300 ; SPE-NEXT:    evmergelo r7, r7, r8
301 ; SPE-NEXT:    evmergelo r5, r5, r6
302 ; SPE-NEXT:    efdcmplt cr0, r5, r7
303 ; SPE-NEXT:    efdcmpgt cr1, r5, r7
304 ; SPE-NEXT:    cror 4*cr5+lt, 4*cr1+gt, gt
305 ; SPE-NEXT:    bclr 12, 4*cr5+lt, 0
306 ; SPE-NEXT:  # %bb.1:
307 ; SPE-NEXT:    ori r3, r4, 0
308 ; SPE-NEXT:    blr
309   %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"one", metadata !"fpexcept.strict") #0
310   %res = select i1 %cond, i32 %a, i32 %b
311   ret i32 %res
314 define i32 @test_f64_ord_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
315 ; SPE-LABEL: test_f64_ord_s:
316 ; SPE:       # %bb.0:
317 ; SPE-NEXT:    evmergelo r5, r5, r6
318 ; SPE-NEXT:    evmergelo r6, r7, r8
319 ; SPE-NEXT:    efdcmpeq cr0, r6, r6
320 ; SPE-NEXT:    efdcmpeq cr1, r5, r5
321 ; SPE-NEXT:    crand 4*cr5+lt, 4*cr1+gt, gt
322 ; SPE-NEXT:    bclr 12, 4*cr5+lt, 0
323 ; SPE-NEXT:  # %bb.1:
324 ; SPE-NEXT:    ori r3, r4, 0
325 ; SPE-NEXT:    blr
326   %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"ord", metadata !"fpexcept.strict") #0
327   %res = select i1 %cond, i32 %a, i32 %b
328   ret i32 %res
331 define i32 @test_f64_ueq_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
332 ; SPE-LABEL: test_f64_ueq_s:
333 ; SPE:       # %bb.0:
334 ; SPE-NEXT:    evmergelo r7, r7, r8
335 ; SPE-NEXT:    evmergelo r5, r5, r6
336 ; SPE-NEXT:    efdcmplt cr0, r5, r7
337 ; SPE-NEXT:    efdcmpgt cr1, r5, r7
338 ; SPE-NEXT:    cror 4*cr5+lt, 4*cr1+gt, gt
339 ; SPE-NEXT:    bc 12, 4*cr5+lt, .LBB21_1
340 ; SPE-NEXT:    blr
341 ; SPE-NEXT:  .LBB21_1:
342 ; SPE-NEXT:    addi r3, r4, 0
343 ; SPE-NEXT:    blr
344   %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"ueq", metadata !"fpexcept.strict") #0
345   %res = select i1 %cond, i32 %a, i32 %b
346   ret i32 %res
349 define i32 @test_f64_ugt_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
350 ; SPE-LABEL: test_f64_ugt_s:
351 ; SPE:       # %bb.0:
352 ; SPE-NEXT:    evmergelo r7, r7, r8
353 ; SPE-NEXT:    evmergelo r5, r5, r6
354 ; SPE-NEXT:    efdcmpeq cr0, r5, r5
355 ; SPE-NEXT:    efdcmpeq cr1, r7, r7
356 ; SPE-NEXT:    efdcmpgt cr5, r5, r7
357 ; SPE-NEXT:    crnand 4*cr5+lt, 4*cr1+gt, gt
358 ; SPE-NEXT:    cror 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
359 ; SPE-NEXT:    bclr 12, 4*cr5+lt, 0
360 ; SPE-NEXT:  # %bb.1:
361 ; SPE-NEXT:    ori r3, r4, 0
362 ; SPE-NEXT:    blr
363   %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"ugt", metadata !"fpexcept.strict") #0
364   %res = select i1 %cond, i32 %a, i32 %b
365   ret i32 %res
368 define i32 @test_f64_uge_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
369 ; SPE-LABEL: test_f64_uge_s:
370 ; SPE:       # %bb.0:
371 ; SPE-NEXT:    evmergelo r7, r7, r8
372 ; SPE-NEXT:    evmergelo r5, r5, r6
373 ; SPE-NEXT:    efdcmplt cr0, r5, r7
374 ; SPE-NEXT:    bc 12, gt, .LBB23_1
375 ; SPE-NEXT:    blr
376 ; SPE-NEXT:  .LBB23_1:
377 ; SPE-NEXT:    addi r3, r4, 0
378 ; SPE-NEXT:    blr
379   %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"uge", metadata !"fpexcept.strict") #0
380   %res = select i1 %cond, i32 %a, i32 %b
381   ret i32 %res
384 define i32 @test_f64_ult_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
385 ; SPE-LABEL: test_f64_ult_s:
386 ; SPE:       # %bb.0:
387 ; SPE-NEXT:    evmergelo r7, r7, r8
388 ; SPE-NEXT:    evmergelo r5, r5, r6
389 ; SPE-NEXT:    efdcmpeq cr0, r5, r5
390 ; SPE-NEXT:    efdcmpeq cr1, r7, r7
391 ; SPE-NEXT:    efdcmplt cr5, r5, r7
392 ; SPE-NEXT:    crnand 4*cr5+lt, 4*cr1+gt, gt
393 ; SPE-NEXT:    cror 4*cr5+lt, 4*cr5+gt, 4*cr5+lt
394 ; SPE-NEXT:    bclr 12, 4*cr5+lt, 0
395 ; SPE-NEXT:  # %bb.1:
396 ; SPE-NEXT:    ori r3, r4, 0
397 ; SPE-NEXT:    blr
398   %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"ult", metadata !"fpexcept.strict") #0
399   %res = select i1 %cond, i32 %a, i32 %b
400   ret i32 %res
403 define i32 @test_f64_ule_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
404 ; SPE-LABEL: test_f64_ule_s:
405 ; SPE:       # %bb.0:
406 ; SPE-NEXT:    evmergelo r7, r7, r8
407 ; SPE-NEXT:    evmergelo r5, r5, r6
408 ; SPE-NEXT:    efdcmpgt cr0, r5, r7
409 ; SPE-NEXT:    bc 12, gt, .LBB25_1
410 ; SPE-NEXT:    blr
411 ; SPE-NEXT:  .LBB25_1:
412 ; SPE-NEXT:    addi r3, r4, 0
413 ; SPE-NEXT:    blr
414   %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"ule", metadata !"fpexcept.strict") #0
415   %res = select i1 %cond, i32 %a, i32 %b
416   ret i32 %res
419 define i32 @test_f64_une_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
420 ; SPE-LABEL: test_f64_une_s:
421 ; SPE:       # %bb.0:
422 ; SPE-NEXT:    evmergelo r7, r7, r8
423 ; SPE-NEXT:    evmergelo r5, r5, r6
424 ; SPE-NEXT:    efdcmpeq cr0, r5, r7
425 ; SPE-NEXT:    bc 12, gt, .LBB26_1
426 ; SPE-NEXT:    blr
427 ; SPE-NEXT:  .LBB26_1:
428 ; SPE-NEXT:    addi r3, r4, 0
429 ; SPE-NEXT:    blr
430   %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"une", metadata !"fpexcept.strict") #0
431   %res = select i1 %cond, i32 %a, i32 %b
432   ret i32 %res
435 define i32 @test_f64_uno_s(i32 %a, i32 %b, double %f1, double %f2) #0 {
436 ; SPE-LABEL: test_f64_uno_s:
437 ; SPE:       # %bb.0:
438 ; SPE-NEXT:    evmergelo r7, r7, r8
439 ; SPE-NEXT:    evmergelo r5, r5, r6
440 ; SPE-NEXT:    efdcmpeq cr0, r5, r5
441 ; SPE-NEXT:    efdcmpeq cr1, r7, r7
442 ; SPE-NEXT:    crnand 4*cr5+lt, 4*cr1+gt, gt
443 ; SPE-NEXT:    bclr 12, 4*cr5+lt, 0
444 ; SPE-NEXT:  # %bb.1:
445 ; SPE-NEXT:    ori r3, r4, 0
446 ; SPE-NEXT:    blr
447   %cond = call i1 @llvm.experimental.constrained.fcmps.f64(double %f1, double %f2, metadata !"uno", metadata !"fpexcept.strict") #0
448   %res = select i1 %cond, i32 %a, i32 %b
449   ret i32 %res
452 attributes #0 = { strictfp nounwind }
454 declare i1 @llvm.experimental.constrained.fcmps.f32(float, float, metadata, metadata)
455 declare i1 @llvm.experimental.constrained.fcmps.f64(double, double, metadata, metadata)