xref: /llvm-project/llvm/test/CodeGen/LoongArch/ir-instruction/select-fpcc-int.ll (revision ed078c48f0d7b499a4565d4da2dde22a4dbf19d9)
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
4
5;; Test integers selection after `fcmp`
6
7define 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
12;
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
20}
21
22define 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
31;
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
43}
44
45define 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
54;
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
66}
67
68define 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
77;
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
89}
90
91define 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
100;
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
112}
113
114define 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
123;
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
135}
136
137define 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
146;
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
158}
159
160define 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
169;
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
181}
182
183define 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
192;
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
204}
205
206define 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
215;
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
227}
228
229define 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
238;
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
250}
251
252define 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
261;
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
273}
274
275define 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
284;
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
296}
297
298define 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
307;
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
319}
320
321define 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
330;
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
342}
343
344define 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
348;
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
355}
356
357define 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
362;
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
370}
371
372define 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
381;
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
393}
394
395define 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
404;
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
416}
417
418define 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
427;
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
439}
440
441define 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
450;
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
462}
463
464define 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
473;
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
485}
486
487define 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
496;
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
508}
509
510define 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
519;
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
531}
532
533define 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
542;
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
554}
555
556define 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
565;
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
577}
578
579define 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
588;
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
600}
601
602define 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
611;
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
623}
624
625define 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
634;
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
646}
647
648define 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
657;
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
669}
670
671define 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
680;
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
692}
693
694define 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
698;
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
705}
706