[ELF] Reorder SectionBase/InputSectionBase members
[llvm-project.git] / llvm / test / CodeGen / LoongArch / ir-instruction / select-fpcc-int.ll
blob3e88181a11fe82e3590cf309812c0f6fb44ef279
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc --mtriple=loongarch32 --mattr=+d < %s | FileCheck %s --check-prefix=LA32
3 ; RUN: llc --mtriple=loongarch64 --mattr=+d < %s | FileCheck %s --check-prefix=LA64
5 ;; Test integers selection after `fcmp`
7 define i32 @f32_fcmp_false(float %a, float %b, i32 %x, i32 %y) {
8 ; LA32-LABEL: f32_fcmp_false:
9 ; LA32:       # %bb.0:
10 ; LA32-NEXT:    move $a0, $a1
11 ; LA32-NEXT:    ret
13 ; LA64-LABEL: f32_fcmp_false:
14 ; LA64:       # %bb.0:
15 ; LA64-NEXT:    move $a0, $a1
16 ; LA64-NEXT:    ret
17   %cmp = fcmp false float %a, %b
18   %res = select i1 %cmp, i32 %x, i32 %y
19   ret i32 %res
22 define i32 @f32_fcmp_oeq(float %a, float %b, i32 %x, i32 %y) {
23 ; LA32-LABEL: f32_fcmp_oeq:
24 ; LA32:       # %bb.0:
25 ; LA32-NEXT:    fcmp.ceq.s $fcc0, $fa0, $fa1
26 ; LA32-NEXT:    movcf2gr $a2, $fcc0
27 ; LA32-NEXT:    masknez $a1, $a1, $a2
28 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
29 ; LA32-NEXT:    or $a0, $a0, $a1
30 ; LA32-NEXT:    ret
32 ; LA64-LABEL: f32_fcmp_oeq:
33 ; LA64:       # %bb.0:
34 ; LA64-NEXT:    fcmp.ceq.s $fcc0, $fa0, $fa1
35 ; LA64-NEXT:    movcf2gr $a2, $fcc0
36 ; LA64-NEXT:    masknez $a1, $a1, $a2
37 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
38 ; LA64-NEXT:    or $a0, $a0, $a1
39 ; LA64-NEXT:    ret
40   %cmp = fcmp oeq float %a, %b
41   %res = select i1 %cmp, i32 %x, i32 %y
42   ret i32 %res
45 define i32 @f32_fcmp_ogt(float %a, float %b, i32 %x, i32 %y) {
46 ; LA32-LABEL: f32_fcmp_ogt:
47 ; LA32:       # %bb.0:
48 ; LA32-NEXT:    fcmp.clt.s $fcc0, $fa1, $fa0
49 ; LA32-NEXT:    movcf2gr $a2, $fcc0
50 ; LA32-NEXT:    masknez $a1, $a1, $a2
51 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
52 ; LA32-NEXT:    or $a0, $a0, $a1
53 ; LA32-NEXT:    ret
55 ; LA64-LABEL: f32_fcmp_ogt:
56 ; LA64:       # %bb.0:
57 ; LA64-NEXT:    fcmp.clt.s $fcc0, $fa1, $fa0
58 ; LA64-NEXT:    movcf2gr $a2, $fcc0
59 ; LA64-NEXT:    masknez $a1, $a1, $a2
60 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
61 ; LA64-NEXT:    or $a0, $a0, $a1
62 ; LA64-NEXT:    ret
63   %cmp = fcmp ogt float %a, %b
64   %res = select i1 %cmp, i32 %x, i32 %y
65   ret i32 %res
68 define i32 @f32_fcmp_oge(float %a, float %b, i32 %x, i32 %y) {
69 ; LA32-LABEL: f32_fcmp_oge:
70 ; LA32:       # %bb.0:
71 ; LA32-NEXT:    fcmp.cle.s $fcc0, $fa1, $fa0
72 ; LA32-NEXT:    movcf2gr $a2, $fcc0
73 ; LA32-NEXT:    masknez $a1, $a1, $a2
74 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
75 ; LA32-NEXT:    or $a0, $a0, $a1
76 ; LA32-NEXT:    ret
78 ; LA64-LABEL: f32_fcmp_oge:
79 ; LA64:       # %bb.0:
80 ; LA64-NEXT:    fcmp.cle.s $fcc0, $fa1, $fa0
81 ; LA64-NEXT:    movcf2gr $a2, $fcc0
82 ; LA64-NEXT:    masknez $a1, $a1, $a2
83 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
84 ; LA64-NEXT:    or $a0, $a0, $a1
85 ; LA64-NEXT:    ret
86   %cmp = fcmp oge float %a, %b
87   %res = select i1 %cmp, i32 %x, i32 %y
88   ret i32 %res
91 define i32 @f32_fcmp_olt(float %a, float %b, i32 %x, i32 %y) {
92 ; LA32-LABEL: f32_fcmp_olt:
93 ; LA32:       # %bb.0:
94 ; LA32-NEXT:    fcmp.clt.s $fcc0, $fa0, $fa1
95 ; LA32-NEXT:    movcf2gr $a2, $fcc0
96 ; LA32-NEXT:    masknez $a1, $a1, $a2
97 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
98 ; LA32-NEXT:    or $a0, $a0, $a1
99 ; LA32-NEXT:    ret
101 ; LA64-LABEL: f32_fcmp_olt:
102 ; LA64:       # %bb.0:
103 ; LA64-NEXT:    fcmp.clt.s $fcc0, $fa0, $fa1
104 ; LA64-NEXT:    movcf2gr $a2, $fcc0
105 ; LA64-NEXT:    masknez $a1, $a1, $a2
106 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
107 ; LA64-NEXT:    or $a0, $a0, $a1
108 ; LA64-NEXT:    ret
109   %cmp = fcmp olt float %a, %b
110   %res = select i1 %cmp, i32 %x, i32 %y
111   ret i32 %res
114 define i32 @f32_fcmp_ole(float %a, float %b, i32 %x, i32 %y) {
115 ; LA32-LABEL: f32_fcmp_ole:
116 ; LA32:       # %bb.0:
117 ; LA32-NEXT:    fcmp.cle.s $fcc0, $fa0, $fa1
118 ; LA32-NEXT:    movcf2gr $a2, $fcc0
119 ; LA32-NEXT:    masknez $a1, $a1, $a2
120 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
121 ; LA32-NEXT:    or $a0, $a0, $a1
122 ; LA32-NEXT:    ret
124 ; LA64-LABEL: f32_fcmp_ole:
125 ; LA64:       # %bb.0:
126 ; LA64-NEXT:    fcmp.cle.s $fcc0, $fa0, $fa1
127 ; LA64-NEXT:    movcf2gr $a2, $fcc0
128 ; LA64-NEXT:    masknez $a1, $a1, $a2
129 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
130 ; LA64-NEXT:    or $a0, $a0, $a1
131 ; LA64-NEXT:    ret
132   %cmp = fcmp ole float %a, %b
133   %res = select i1 %cmp, i32 %x, i32 %y
134   ret i32 %res
137 define i32 @f32_fcmp_one(float %a, float %b, i32 %x, i32 %y) {
138 ; LA32-LABEL: f32_fcmp_one:
139 ; LA32:       # %bb.0:
140 ; LA32-NEXT:    fcmp.cne.s $fcc0, $fa0, $fa1
141 ; LA32-NEXT:    movcf2gr $a2, $fcc0
142 ; LA32-NEXT:    masknez $a1, $a1, $a2
143 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
144 ; LA32-NEXT:    or $a0, $a0, $a1
145 ; LA32-NEXT:    ret
147 ; LA64-LABEL: f32_fcmp_one:
148 ; LA64:       # %bb.0:
149 ; LA64-NEXT:    fcmp.cne.s $fcc0, $fa0, $fa1
150 ; LA64-NEXT:    movcf2gr $a2, $fcc0
151 ; LA64-NEXT:    masknez $a1, $a1, $a2
152 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
153 ; LA64-NEXT:    or $a0, $a0, $a1
154 ; LA64-NEXT:    ret
155   %cmp = fcmp one float %a, %b
156   %res = select i1 %cmp, i32 %x, i32 %y
157   ret i32 %res
160 define i32 @f32_fcmp_ord(float %a, float %b, i32 %x, i32 %y) {
161 ; LA32-LABEL: f32_fcmp_ord:
162 ; LA32:       # %bb.0:
163 ; LA32-NEXT:    fcmp.cor.s $fcc0, $fa0, $fa1
164 ; LA32-NEXT:    movcf2gr $a2, $fcc0
165 ; LA32-NEXT:    masknez $a1, $a1, $a2
166 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
167 ; LA32-NEXT:    or $a0, $a0, $a1
168 ; LA32-NEXT:    ret
170 ; LA64-LABEL: f32_fcmp_ord:
171 ; LA64:       # %bb.0:
172 ; LA64-NEXT:    fcmp.cor.s $fcc0, $fa0, $fa1
173 ; LA64-NEXT:    movcf2gr $a2, $fcc0
174 ; LA64-NEXT:    masknez $a1, $a1, $a2
175 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
176 ; LA64-NEXT:    or $a0, $a0, $a1
177 ; LA64-NEXT:    ret
178   %cmp = fcmp ord float %a, %b
179   %res = select i1 %cmp, i32 %x, i32 %y
180   ret i32 %res
183 define i32 @f32_fcmp_ueq(float %a, float %b, i32 %x, i32 %y) {
184 ; LA32-LABEL: f32_fcmp_ueq:
185 ; LA32:       # %bb.0:
186 ; LA32-NEXT:    fcmp.cueq.s $fcc0, $fa0, $fa1
187 ; LA32-NEXT:    movcf2gr $a2, $fcc0
188 ; LA32-NEXT:    masknez $a1, $a1, $a2
189 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
190 ; LA32-NEXT:    or $a0, $a0, $a1
191 ; LA32-NEXT:    ret
193 ; LA64-LABEL: f32_fcmp_ueq:
194 ; LA64:       # %bb.0:
195 ; LA64-NEXT:    fcmp.cueq.s $fcc0, $fa0, $fa1
196 ; LA64-NEXT:    movcf2gr $a2, $fcc0
197 ; LA64-NEXT:    masknez $a1, $a1, $a2
198 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
199 ; LA64-NEXT:    or $a0, $a0, $a1
200 ; LA64-NEXT:    ret
201   %cmp = fcmp ueq float %a, %b
202   %res = select i1 %cmp, i32 %x, i32 %y
203   ret i32 %res
206 define i32 @f32_fcmp_ugt(float %a, float %b, i32 %x, i32 %y) {
207 ; LA32-LABEL: f32_fcmp_ugt:
208 ; LA32:       # %bb.0:
209 ; LA32-NEXT:    fcmp.cult.s $fcc0, $fa1, $fa0
210 ; LA32-NEXT:    movcf2gr $a2, $fcc0
211 ; LA32-NEXT:    masknez $a1, $a1, $a2
212 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
213 ; LA32-NEXT:    or $a0, $a0, $a1
214 ; LA32-NEXT:    ret
216 ; LA64-LABEL: f32_fcmp_ugt:
217 ; LA64:       # %bb.0:
218 ; LA64-NEXT:    fcmp.cult.s $fcc0, $fa1, $fa0
219 ; LA64-NEXT:    movcf2gr $a2, $fcc0
220 ; LA64-NEXT:    masknez $a1, $a1, $a2
221 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
222 ; LA64-NEXT:    or $a0, $a0, $a1
223 ; LA64-NEXT:    ret
224   %cmp = fcmp ugt float %a, %b
225   %res = select i1 %cmp, i32 %x, i32 %y
226   ret i32 %res
229 define i32 @f32_fcmp_uge(float %a, float %b, i32 %x, i32 %y) {
230 ; LA32-LABEL: f32_fcmp_uge:
231 ; LA32:       # %bb.0:
232 ; LA32-NEXT:    fcmp.cule.s $fcc0, $fa1, $fa0
233 ; LA32-NEXT:    movcf2gr $a2, $fcc0
234 ; LA32-NEXT:    masknez $a1, $a1, $a2
235 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
236 ; LA32-NEXT:    or $a0, $a0, $a1
237 ; LA32-NEXT:    ret
239 ; LA64-LABEL: f32_fcmp_uge:
240 ; LA64:       # %bb.0:
241 ; LA64-NEXT:    fcmp.cule.s $fcc0, $fa1, $fa0
242 ; LA64-NEXT:    movcf2gr $a2, $fcc0
243 ; LA64-NEXT:    masknez $a1, $a1, $a2
244 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
245 ; LA64-NEXT:    or $a0, $a0, $a1
246 ; LA64-NEXT:    ret
247   %cmp = fcmp uge float %a, %b
248   %res = select i1 %cmp, i32 %x, i32 %y
249   ret i32 %res
252 define i32 @f32_fcmp_ult(float %a, float %b, i32 %x, i32 %y) {
253 ; LA32-LABEL: f32_fcmp_ult:
254 ; LA32:       # %bb.0:
255 ; LA32-NEXT:    fcmp.cult.s $fcc0, $fa0, $fa1
256 ; LA32-NEXT:    movcf2gr $a2, $fcc0
257 ; LA32-NEXT:    masknez $a1, $a1, $a2
258 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
259 ; LA32-NEXT:    or $a0, $a0, $a1
260 ; LA32-NEXT:    ret
262 ; LA64-LABEL: f32_fcmp_ult:
263 ; LA64:       # %bb.0:
264 ; LA64-NEXT:    fcmp.cult.s $fcc0, $fa0, $fa1
265 ; LA64-NEXT:    movcf2gr $a2, $fcc0
266 ; LA64-NEXT:    masknez $a1, $a1, $a2
267 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
268 ; LA64-NEXT:    or $a0, $a0, $a1
269 ; LA64-NEXT:    ret
270   %cmp = fcmp ult float %a, %b
271   %res = select i1 %cmp, i32 %x, i32 %y
272   ret i32 %res
275 define i32 @f32_fcmp_ule(float %a, float %b, i32 %x, i32 %y) {
276 ; LA32-LABEL: f32_fcmp_ule:
277 ; LA32:       # %bb.0:
278 ; LA32-NEXT:    fcmp.cule.s $fcc0, $fa0, $fa1
279 ; LA32-NEXT:    movcf2gr $a2, $fcc0
280 ; LA32-NEXT:    masknez $a1, $a1, $a2
281 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
282 ; LA32-NEXT:    or $a0, $a0, $a1
283 ; LA32-NEXT:    ret
285 ; LA64-LABEL: f32_fcmp_ule:
286 ; LA64:       # %bb.0:
287 ; LA64-NEXT:    fcmp.cule.s $fcc0, $fa0, $fa1
288 ; LA64-NEXT:    movcf2gr $a2, $fcc0
289 ; LA64-NEXT:    masknez $a1, $a1, $a2
290 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
291 ; LA64-NEXT:    or $a0, $a0, $a1
292 ; LA64-NEXT:    ret
293   %cmp = fcmp ule float %a, %b
294   %res = select i1 %cmp, i32 %x, i32 %y
295   ret i32 %res
298 define i32 @f32_fcmp_une(float %a, float %b, i32 %x, i32 %y) {
299 ; LA32-LABEL: f32_fcmp_une:
300 ; LA32:       # %bb.0:
301 ; LA32-NEXT:    fcmp.cune.s $fcc0, $fa0, $fa1
302 ; LA32-NEXT:    movcf2gr $a2, $fcc0
303 ; LA32-NEXT:    masknez $a1, $a1, $a2
304 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
305 ; LA32-NEXT:    or $a0, $a0, $a1
306 ; LA32-NEXT:    ret
308 ; LA64-LABEL: f32_fcmp_une:
309 ; LA64:       # %bb.0:
310 ; LA64-NEXT:    fcmp.cune.s $fcc0, $fa0, $fa1
311 ; LA64-NEXT:    movcf2gr $a2, $fcc0
312 ; LA64-NEXT:    masknez $a1, $a1, $a2
313 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
314 ; LA64-NEXT:    or $a0, $a0, $a1
315 ; LA64-NEXT:    ret
316   %cmp = fcmp une float %a, %b
317   %res = select i1 %cmp, i32 %x, i32 %y
318   ret i32 %res
321 define i32 @f32_fcmp_uno(float %a, float %b, i32 %x, i32 %y) {
322 ; LA32-LABEL: f32_fcmp_uno:
323 ; LA32:       # %bb.0:
324 ; LA32-NEXT:    fcmp.cun.s $fcc0, $fa0, $fa1
325 ; LA32-NEXT:    movcf2gr $a2, $fcc0
326 ; LA32-NEXT:    masknez $a1, $a1, $a2
327 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
328 ; LA32-NEXT:    or $a0, $a0, $a1
329 ; LA32-NEXT:    ret
331 ; LA64-LABEL: f32_fcmp_uno:
332 ; LA64:       # %bb.0:
333 ; LA64-NEXT:    fcmp.cun.s $fcc0, $fa0, $fa1
334 ; LA64-NEXT:    movcf2gr $a2, $fcc0
335 ; LA64-NEXT:    masknez $a1, $a1, $a2
336 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
337 ; LA64-NEXT:    or $a0, $a0, $a1
338 ; LA64-NEXT:    ret
339   %cmp = fcmp uno float %a, %b
340   %res = select i1 %cmp, i32 %x, i32 %y
341   ret i32 %res
344 define i32 @f32_fcmp_true(float %a, float %b, i32 %x, i32 %y) {
345 ; LA32-LABEL: f32_fcmp_true:
346 ; LA32:       # %bb.0:
347 ; LA32-NEXT:    ret
349 ; LA64-LABEL: f32_fcmp_true:
350 ; LA64:       # %bb.0:
351 ; LA64-NEXT:    ret
352   %cmp = fcmp true float %a, %b
353   %res = select i1 %cmp, i32 %x, i32 %y
354   ret i32 %res
357 define i32 @f64_fcmp_false(double %a, double %b, i32 %x, i32 %y) {
358 ; LA32-LABEL: f64_fcmp_false:
359 ; LA32:       # %bb.0:
360 ; LA32-NEXT:    move $a0, $a1
361 ; LA32-NEXT:    ret
363 ; LA64-LABEL: f64_fcmp_false:
364 ; LA64:       # %bb.0:
365 ; LA64-NEXT:    move $a0, $a1
366 ; LA64-NEXT:    ret
367   %cmp = fcmp false double %a, %b
368   %res = select i1 %cmp, i32 %x, i32 %y
369   ret i32 %res
372 define i32 @f64_fcmp_oeq(double %a, double %b, i32 %x, i32 %y) {
373 ; LA32-LABEL: f64_fcmp_oeq:
374 ; LA32:       # %bb.0:
375 ; LA32-NEXT:    fcmp.ceq.d $fcc0, $fa0, $fa1
376 ; LA32-NEXT:    movcf2gr $a2, $fcc0
377 ; LA32-NEXT:    masknez $a1, $a1, $a2
378 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
379 ; LA32-NEXT:    or $a0, $a0, $a1
380 ; LA32-NEXT:    ret
382 ; LA64-LABEL: f64_fcmp_oeq:
383 ; LA64:       # %bb.0:
384 ; LA64-NEXT:    fcmp.ceq.d $fcc0, $fa0, $fa1
385 ; LA64-NEXT:    movcf2gr $a2, $fcc0
386 ; LA64-NEXT:    masknez $a1, $a1, $a2
387 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
388 ; LA64-NEXT:    or $a0, $a0, $a1
389 ; LA64-NEXT:    ret
390   %cmp = fcmp oeq double %a, %b
391   %res = select i1 %cmp, i32 %x, i32 %y
392   ret i32 %res
395 define i32 @f64_fcmp_ogt(double %a, double %b, i32 %x, i32 %y) {
396 ; LA32-LABEL: f64_fcmp_ogt:
397 ; LA32:       # %bb.0:
398 ; LA32-NEXT:    fcmp.clt.d $fcc0, $fa1, $fa0
399 ; LA32-NEXT:    movcf2gr $a2, $fcc0
400 ; LA32-NEXT:    masknez $a1, $a1, $a2
401 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
402 ; LA32-NEXT:    or $a0, $a0, $a1
403 ; LA32-NEXT:    ret
405 ; LA64-LABEL: f64_fcmp_ogt:
406 ; LA64:       # %bb.0:
407 ; LA64-NEXT:    fcmp.clt.d $fcc0, $fa1, $fa0
408 ; LA64-NEXT:    movcf2gr $a2, $fcc0
409 ; LA64-NEXT:    masknez $a1, $a1, $a2
410 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
411 ; LA64-NEXT:    or $a0, $a0, $a1
412 ; LA64-NEXT:    ret
413   %cmp = fcmp ogt double %a, %b
414   %res = select i1 %cmp, i32 %x, i32 %y
415   ret i32 %res
418 define i32 @f64_fcmp_oge(double %a, double %b, i32 %x, i32 %y) {
419 ; LA32-LABEL: f64_fcmp_oge:
420 ; LA32:       # %bb.0:
421 ; LA32-NEXT:    fcmp.cle.d $fcc0, $fa1, $fa0
422 ; LA32-NEXT:    movcf2gr $a2, $fcc0
423 ; LA32-NEXT:    masknez $a1, $a1, $a2
424 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
425 ; LA32-NEXT:    or $a0, $a0, $a1
426 ; LA32-NEXT:    ret
428 ; LA64-LABEL: f64_fcmp_oge:
429 ; LA64:       # %bb.0:
430 ; LA64-NEXT:    fcmp.cle.d $fcc0, $fa1, $fa0
431 ; LA64-NEXT:    movcf2gr $a2, $fcc0
432 ; LA64-NEXT:    masknez $a1, $a1, $a2
433 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
434 ; LA64-NEXT:    or $a0, $a0, $a1
435 ; LA64-NEXT:    ret
436   %cmp = fcmp oge double %a, %b
437   %res = select i1 %cmp, i32 %x, i32 %y
438   ret i32 %res
441 define i32 @f64_fcmp_olt(double %a, double %b, i32 %x, i32 %y) {
442 ; LA32-LABEL: f64_fcmp_olt:
443 ; LA32:       # %bb.0:
444 ; LA32-NEXT:    fcmp.clt.d $fcc0, $fa0, $fa1
445 ; LA32-NEXT:    movcf2gr $a2, $fcc0
446 ; LA32-NEXT:    masknez $a1, $a1, $a2
447 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
448 ; LA32-NEXT:    or $a0, $a0, $a1
449 ; LA32-NEXT:    ret
451 ; LA64-LABEL: f64_fcmp_olt:
452 ; LA64:       # %bb.0:
453 ; LA64-NEXT:    fcmp.clt.d $fcc0, $fa0, $fa1
454 ; LA64-NEXT:    movcf2gr $a2, $fcc0
455 ; LA64-NEXT:    masknez $a1, $a1, $a2
456 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
457 ; LA64-NEXT:    or $a0, $a0, $a1
458 ; LA64-NEXT:    ret
459   %cmp = fcmp olt double %a, %b
460   %res = select i1 %cmp, i32 %x, i32 %y
461   ret i32 %res
464 define i32 @f64_fcmp_ole(double %a, double %b, i32 %x, i32 %y) {
465 ; LA32-LABEL: f64_fcmp_ole:
466 ; LA32:       # %bb.0:
467 ; LA32-NEXT:    fcmp.cle.d $fcc0, $fa0, $fa1
468 ; LA32-NEXT:    movcf2gr $a2, $fcc0
469 ; LA32-NEXT:    masknez $a1, $a1, $a2
470 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
471 ; LA32-NEXT:    or $a0, $a0, $a1
472 ; LA32-NEXT:    ret
474 ; LA64-LABEL: f64_fcmp_ole:
475 ; LA64:       # %bb.0:
476 ; LA64-NEXT:    fcmp.cle.d $fcc0, $fa0, $fa1
477 ; LA64-NEXT:    movcf2gr $a2, $fcc0
478 ; LA64-NEXT:    masknez $a1, $a1, $a2
479 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
480 ; LA64-NEXT:    or $a0, $a0, $a1
481 ; LA64-NEXT:    ret
482   %cmp = fcmp ole double %a, %b
483   %res = select i1 %cmp, i32 %x, i32 %y
484   ret i32 %res
487 define i32 @f64_fcmp_one(double %a, double %b, i32 %x, i32 %y) {
488 ; LA32-LABEL: f64_fcmp_one:
489 ; LA32:       # %bb.0:
490 ; LA32-NEXT:    fcmp.cne.d $fcc0, $fa0, $fa1
491 ; LA32-NEXT:    movcf2gr $a2, $fcc0
492 ; LA32-NEXT:    masknez $a1, $a1, $a2
493 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
494 ; LA32-NEXT:    or $a0, $a0, $a1
495 ; LA32-NEXT:    ret
497 ; LA64-LABEL: f64_fcmp_one:
498 ; LA64:       # %bb.0:
499 ; LA64-NEXT:    fcmp.cne.d $fcc0, $fa0, $fa1
500 ; LA64-NEXT:    movcf2gr $a2, $fcc0
501 ; LA64-NEXT:    masknez $a1, $a1, $a2
502 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
503 ; LA64-NEXT:    or $a0, $a0, $a1
504 ; LA64-NEXT:    ret
505   %cmp = fcmp one double %a, %b
506   %res = select i1 %cmp, i32 %x, i32 %y
507   ret i32 %res
510 define i32 @f64_fcmp_ord(double %a, double %b, i32 %x, i32 %y) {
511 ; LA32-LABEL: f64_fcmp_ord:
512 ; LA32:       # %bb.0:
513 ; LA32-NEXT:    fcmp.cor.d $fcc0, $fa0, $fa1
514 ; LA32-NEXT:    movcf2gr $a2, $fcc0
515 ; LA32-NEXT:    masknez $a1, $a1, $a2
516 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
517 ; LA32-NEXT:    or $a0, $a0, $a1
518 ; LA32-NEXT:    ret
520 ; LA64-LABEL: f64_fcmp_ord:
521 ; LA64:       # %bb.0:
522 ; LA64-NEXT:    fcmp.cor.d $fcc0, $fa0, $fa1
523 ; LA64-NEXT:    movcf2gr $a2, $fcc0
524 ; LA64-NEXT:    masknez $a1, $a1, $a2
525 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
526 ; LA64-NEXT:    or $a0, $a0, $a1
527 ; LA64-NEXT:    ret
528   %cmp = fcmp ord double %a, %b
529   %res = select i1 %cmp, i32 %x, i32 %y
530   ret i32 %res
533 define i32 @f64_fcmp_ueq(double %a, double %b, i32 %x, i32 %y) {
534 ; LA32-LABEL: f64_fcmp_ueq:
535 ; LA32:       # %bb.0:
536 ; LA32-NEXT:    fcmp.cueq.d $fcc0, $fa0, $fa1
537 ; LA32-NEXT:    movcf2gr $a2, $fcc0
538 ; LA32-NEXT:    masknez $a1, $a1, $a2
539 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
540 ; LA32-NEXT:    or $a0, $a0, $a1
541 ; LA32-NEXT:    ret
543 ; LA64-LABEL: f64_fcmp_ueq:
544 ; LA64:       # %bb.0:
545 ; LA64-NEXT:    fcmp.cueq.d $fcc0, $fa0, $fa1
546 ; LA64-NEXT:    movcf2gr $a2, $fcc0
547 ; LA64-NEXT:    masknez $a1, $a1, $a2
548 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
549 ; LA64-NEXT:    or $a0, $a0, $a1
550 ; LA64-NEXT:    ret
551   %cmp = fcmp ueq double %a, %b
552   %res = select i1 %cmp, i32 %x, i32 %y
553   ret i32 %res
556 define i32 @f64_fcmp_ugt(double %a, double %b, i32 %x, i32 %y) {
557 ; LA32-LABEL: f64_fcmp_ugt:
558 ; LA32:       # %bb.0:
559 ; LA32-NEXT:    fcmp.cult.d $fcc0, $fa1, $fa0
560 ; LA32-NEXT:    movcf2gr $a2, $fcc0
561 ; LA32-NEXT:    masknez $a1, $a1, $a2
562 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
563 ; LA32-NEXT:    or $a0, $a0, $a1
564 ; LA32-NEXT:    ret
566 ; LA64-LABEL: f64_fcmp_ugt:
567 ; LA64:       # %bb.0:
568 ; LA64-NEXT:    fcmp.cult.d $fcc0, $fa1, $fa0
569 ; LA64-NEXT:    movcf2gr $a2, $fcc0
570 ; LA64-NEXT:    masknez $a1, $a1, $a2
571 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
572 ; LA64-NEXT:    or $a0, $a0, $a1
573 ; LA64-NEXT:    ret
574   %cmp = fcmp ugt double %a, %b
575   %res = select i1 %cmp, i32 %x, i32 %y
576   ret i32 %res
579 define i32 @f64_fcmp_uge(double %a, double %b, i32 %x, i32 %y) {
580 ; LA32-LABEL: f64_fcmp_uge:
581 ; LA32:       # %bb.0:
582 ; LA32-NEXT:    fcmp.cule.d $fcc0, $fa1, $fa0
583 ; LA32-NEXT:    movcf2gr $a2, $fcc0
584 ; LA32-NEXT:    masknez $a1, $a1, $a2
585 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
586 ; LA32-NEXT:    or $a0, $a0, $a1
587 ; LA32-NEXT:    ret
589 ; LA64-LABEL: f64_fcmp_uge:
590 ; LA64:       # %bb.0:
591 ; LA64-NEXT:    fcmp.cule.d $fcc0, $fa1, $fa0
592 ; LA64-NEXT:    movcf2gr $a2, $fcc0
593 ; LA64-NEXT:    masknez $a1, $a1, $a2
594 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
595 ; LA64-NEXT:    or $a0, $a0, $a1
596 ; LA64-NEXT:    ret
597   %cmp = fcmp uge double %a, %b
598   %res = select i1 %cmp, i32 %x, i32 %y
599   ret i32 %res
602 define i32 @f64_fcmp_ult(double %a, double %b, i32 %x, i32 %y) {
603 ; LA32-LABEL: f64_fcmp_ult:
604 ; LA32:       # %bb.0:
605 ; LA32-NEXT:    fcmp.cult.d $fcc0, $fa0, $fa1
606 ; LA32-NEXT:    movcf2gr $a2, $fcc0
607 ; LA32-NEXT:    masknez $a1, $a1, $a2
608 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
609 ; LA32-NEXT:    or $a0, $a0, $a1
610 ; LA32-NEXT:    ret
612 ; LA64-LABEL: f64_fcmp_ult:
613 ; LA64:       # %bb.0:
614 ; LA64-NEXT:    fcmp.cult.d $fcc0, $fa0, $fa1
615 ; LA64-NEXT:    movcf2gr $a2, $fcc0
616 ; LA64-NEXT:    masknez $a1, $a1, $a2
617 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
618 ; LA64-NEXT:    or $a0, $a0, $a1
619 ; LA64-NEXT:    ret
620   %cmp = fcmp ult double %a, %b
621   %res = select i1 %cmp, i32 %x, i32 %y
622   ret i32 %res
625 define i32 @f64_fcmp_ule(double %a, double %b, i32 %x, i32 %y) {
626 ; LA32-LABEL: f64_fcmp_ule:
627 ; LA32:       # %bb.0:
628 ; LA32-NEXT:    fcmp.cule.d $fcc0, $fa0, $fa1
629 ; LA32-NEXT:    movcf2gr $a2, $fcc0
630 ; LA32-NEXT:    masknez $a1, $a1, $a2
631 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
632 ; LA32-NEXT:    or $a0, $a0, $a1
633 ; LA32-NEXT:    ret
635 ; LA64-LABEL: f64_fcmp_ule:
636 ; LA64:       # %bb.0:
637 ; LA64-NEXT:    fcmp.cule.d $fcc0, $fa0, $fa1
638 ; LA64-NEXT:    movcf2gr $a2, $fcc0
639 ; LA64-NEXT:    masknez $a1, $a1, $a2
640 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
641 ; LA64-NEXT:    or $a0, $a0, $a1
642 ; LA64-NEXT:    ret
643   %cmp = fcmp ule double %a, %b
644   %res = select i1 %cmp, i32 %x, i32 %y
645   ret i32 %res
648 define i32 @f64_fcmp_une(double %a, double %b, i32 %x, i32 %y) {
649 ; LA32-LABEL: f64_fcmp_une:
650 ; LA32:       # %bb.0:
651 ; LA32-NEXT:    fcmp.cune.d $fcc0, $fa0, $fa1
652 ; LA32-NEXT:    movcf2gr $a2, $fcc0
653 ; LA32-NEXT:    masknez $a1, $a1, $a2
654 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
655 ; LA32-NEXT:    or $a0, $a0, $a1
656 ; LA32-NEXT:    ret
658 ; LA64-LABEL: f64_fcmp_une:
659 ; LA64:       # %bb.0:
660 ; LA64-NEXT:    fcmp.cune.d $fcc0, $fa0, $fa1
661 ; LA64-NEXT:    movcf2gr $a2, $fcc0
662 ; LA64-NEXT:    masknez $a1, $a1, $a2
663 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
664 ; LA64-NEXT:    or $a0, $a0, $a1
665 ; LA64-NEXT:    ret
666   %cmp = fcmp une double %a, %b
667   %res = select i1 %cmp, i32 %x, i32 %y
668   ret i32 %res
671 define i32 @f64_fcmp_uno(double %a, double %b, i32 %x, i32 %y) {
672 ; LA32-LABEL: f64_fcmp_uno:
673 ; LA32:       # %bb.0:
674 ; LA32-NEXT:    fcmp.cun.d $fcc0, $fa0, $fa1
675 ; LA32-NEXT:    movcf2gr $a2, $fcc0
676 ; LA32-NEXT:    masknez $a1, $a1, $a2
677 ; LA32-NEXT:    maskeqz $a0, $a0, $a2
678 ; LA32-NEXT:    or $a0, $a0, $a1
679 ; LA32-NEXT:    ret
681 ; LA64-LABEL: f64_fcmp_uno:
682 ; LA64:       # %bb.0:
683 ; LA64-NEXT:    fcmp.cun.d $fcc0, $fa0, $fa1
684 ; LA64-NEXT:    movcf2gr $a2, $fcc0
685 ; LA64-NEXT:    masknez $a1, $a1, $a2
686 ; LA64-NEXT:    maskeqz $a0, $a0, $a2
687 ; LA64-NEXT:    or $a0, $a0, $a1
688 ; LA64-NEXT:    ret
689   %cmp = fcmp uno double %a, %b
690   %res = select i1 %cmp, i32 %x, i32 %y
691   ret i32 %res
694 define i32 @f64_fcmp_true(double %a, double %b, i32 %x, i32 %y) {
695 ; LA32-LABEL: f64_fcmp_true:
696 ; LA32:       # %bb.0:
697 ; LA32-NEXT:    ret
699 ; LA64-LABEL: f64_fcmp_true:
700 ; LA64:       # %bb.0:
701 ; LA64-NEXT:    ret
702   %cmp = fcmp true double %a, %b
703   %res = select i1 %cmp, i32 %x, i32 %y
704   ret i32 %res