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