xref: /llvm-project/llvm/test/CodeGen/LoongArch/ir-instruction/select-fpcc-flt.ll (revision ed078c48f0d7b499a4565d4da2dde22a4dbf19d9)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc --mtriple=loongarch32 --mattr=+f,-d < %s | FileCheck %s --check-prefix=LA32
3; RUN: llc --mtriple=loongarch64 --mattr=+f,-d < %s | FileCheck %s --check-prefix=LA64
4
5;; Test single-precision floating-point values selection after comparison
6
7define float @fcmp_false(float %a, float %b, float %x, float %y) {
8; LA32-LABEL: fcmp_false:
9; LA32:       # %bb.0:
10; LA32-NEXT:    fmov.s $fa0, $fa3
11; LA32-NEXT:    ret
12;
13; LA64-LABEL: fcmp_false:
14; LA64:       # %bb.0:
15; LA64-NEXT:    fmov.s $fa0, $fa3
16; LA64-NEXT:    ret
17  %cmp = fcmp false float %a, %b
18  %res = select i1 %cmp, float %x, float %y
19  ret float %res
20}
21
22define float @fcmp_oeq(float %a, float %b, float %x, float %y) {
23; LA32-LABEL: fcmp_oeq:
24; LA32:       # %bb.0:
25; LA32-NEXT:    fcmp.ceq.s $fcc0, $fa0, $fa1
26; LA32-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
27; LA32-NEXT:    ret
28;
29; LA64-LABEL: fcmp_oeq:
30; LA64:       # %bb.0:
31; LA64-NEXT:    fcmp.ceq.s $fcc0, $fa0, $fa1
32; LA64-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
33; LA64-NEXT:    ret
34  %cmp = fcmp oeq float %a, %b
35  %res = select i1 %cmp, float %x, float %y
36  ret float %res
37}
38
39define float @fcmp_ogt(float %a, float %b, float %x, float %y) {
40; LA32-LABEL: fcmp_ogt:
41; LA32:       # %bb.0:
42; LA32-NEXT:    fcmp.clt.s $fcc0, $fa1, $fa0
43; LA32-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
44; LA32-NEXT:    ret
45;
46; LA64-LABEL: fcmp_ogt:
47; LA64:       # %bb.0:
48; LA64-NEXT:    fcmp.clt.s $fcc0, $fa1, $fa0
49; LA64-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
50; LA64-NEXT:    ret
51  %cmp = fcmp ogt float %a, %b
52  %res = select i1 %cmp, float %x, float %y
53  ret float %res
54}
55
56define float @fcmp_oge(float %a, float %b, float %x, float %y) {
57; LA32-LABEL: fcmp_oge:
58; LA32:       # %bb.0:
59; LA32-NEXT:    fcmp.cle.s $fcc0, $fa1, $fa0
60; LA32-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
61; LA32-NEXT:    ret
62;
63; LA64-LABEL: fcmp_oge:
64; LA64:       # %bb.0:
65; LA64-NEXT:    fcmp.cle.s $fcc0, $fa1, $fa0
66; LA64-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
67; LA64-NEXT:    ret
68  %cmp = fcmp oge float %a, %b
69  %res = select i1 %cmp, float %x, float %y
70  ret float %res
71}
72
73define float @fcmp_olt(float %a, float %b, float %x, float %y) {
74; LA32-LABEL: fcmp_olt:
75; LA32:       # %bb.0:
76; LA32-NEXT:    fcmp.clt.s $fcc0, $fa0, $fa1
77; LA32-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
78; LA32-NEXT:    ret
79;
80; LA64-LABEL: fcmp_olt:
81; LA64:       # %bb.0:
82; LA64-NEXT:    fcmp.clt.s $fcc0, $fa0, $fa1
83; LA64-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
84; LA64-NEXT:    ret
85  %cmp = fcmp olt float %a, %b
86  %res = select i1 %cmp, float %x, float %y
87  ret float %res
88}
89
90define float @fcmp_ole(float %a, float %b, float %x, float %y) {
91; LA32-LABEL: fcmp_ole:
92; LA32:       # %bb.0:
93; LA32-NEXT:    fcmp.cle.s $fcc0, $fa0, $fa1
94; LA32-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
95; LA32-NEXT:    ret
96;
97; LA64-LABEL: fcmp_ole:
98; LA64:       # %bb.0:
99; LA64-NEXT:    fcmp.cle.s $fcc0, $fa0, $fa1
100; LA64-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
101; LA64-NEXT:    ret
102  %cmp = fcmp ole float %a, %b
103  %res = select i1 %cmp, float %x, float %y
104  ret float %res
105}
106
107define float @fcmp_one(float %a, float %b, float %x, float %y) {
108; LA32-LABEL: fcmp_one:
109; LA32:       # %bb.0:
110; LA32-NEXT:    fcmp.cne.s $fcc0, $fa0, $fa1
111; LA32-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
112; LA32-NEXT:    ret
113;
114; LA64-LABEL: fcmp_one:
115; LA64:       # %bb.0:
116; LA64-NEXT:    fcmp.cne.s $fcc0, $fa0, $fa1
117; LA64-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
118; LA64-NEXT:    ret
119  %cmp = fcmp one float %a, %b
120  %res = select i1 %cmp, float %x, float %y
121  ret float %res
122}
123
124define float @fcmp_ord(float %a, float %b, float %x, float %y) {
125; LA32-LABEL: fcmp_ord:
126; LA32:       # %bb.0:
127; LA32-NEXT:    fcmp.cor.s $fcc0, $fa0, $fa1
128; LA32-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
129; LA32-NEXT:    ret
130;
131; LA64-LABEL: fcmp_ord:
132; LA64:       # %bb.0:
133; LA64-NEXT:    fcmp.cor.s $fcc0, $fa0, $fa1
134; LA64-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
135; LA64-NEXT:    ret
136  %cmp = fcmp ord float %a, %b
137  %res = select i1 %cmp, float %x, float %y
138  ret float %res
139}
140
141define float @fcmp_ueq(float %a, float %b, float %x, float %y) {
142; LA32-LABEL: fcmp_ueq:
143; LA32:       # %bb.0:
144; LA32-NEXT:    fcmp.cueq.s $fcc0, $fa0, $fa1
145; LA32-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
146; LA32-NEXT:    ret
147;
148; LA64-LABEL: fcmp_ueq:
149; LA64:       # %bb.0:
150; LA64-NEXT:    fcmp.cueq.s $fcc0, $fa0, $fa1
151; LA64-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
152; LA64-NEXT:    ret
153  %cmp = fcmp ueq float %a, %b
154  %res = select i1 %cmp, float %x, float %y
155  ret float %res
156}
157
158define float @fcmp_ugt(float %a, float %b, float %x, float %y) {
159; LA32-LABEL: fcmp_ugt:
160; LA32:       # %bb.0:
161; LA32-NEXT:    fcmp.cult.s $fcc0, $fa1, $fa0
162; LA32-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
163; LA32-NEXT:    ret
164;
165; LA64-LABEL: fcmp_ugt:
166; LA64:       # %bb.0:
167; LA64-NEXT:    fcmp.cult.s $fcc0, $fa1, $fa0
168; LA64-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
169; LA64-NEXT:    ret
170  %cmp = fcmp ugt float %a, %b
171  %res = select i1 %cmp, float %x, float %y
172  ret float %res
173}
174
175define float @fcmp_uge(float %a, float %b, float %x, float %y) {
176; LA32-LABEL: fcmp_uge:
177; LA32:       # %bb.0:
178; LA32-NEXT:    fcmp.cule.s $fcc0, $fa1, $fa0
179; LA32-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
180; LA32-NEXT:    ret
181;
182; LA64-LABEL: fcmp_uge:
183; LA64:       # %bb.0:
184; LA64-NEXT:    fcmp.cule.s $fcc0, $fa1, $fa0
185; LA64-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
186; LA64-NEXT:    ret
187  %cmp = fcmp uge float %a, %b
188  %res = select i1 %cmp, float %x, float %y
189  ret float %res
190}
191
192define float @fcmp_ult(float %a, float %b, float %x, float %y) {
193; LA32-LABEL: fcmp_ult:
194; LA32:       # %bb.0:
195; LA32-NEXT:    fcmp.cult.s $fcc0, $fa0, $fa1
196; LA32-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
197; LA32-NEXT:    ret
198;
199; LA64-LABEL: fcmp_ult:
200; LA64:       # %bb.0:
201; LA64-NEXT:    fcmp.cult.s $fcc0, $fa0, $fa1
202; LA64-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
203; LA64-NEXT:    ret
204  %cmp = fcmp ult float %a, %b
205  %res = select i1 %cmp, float %x, float %y
206  ret float %res
207}
208
209define float @fcmp_ule(float %a, float %b, float %x, float %y) {
210; LA32-LABEL: fcmp_ule:
211; LA32:       # %bb.0:
212; LA32-NEXT:    fcmp.cule.s $fcc0, $fa0, $fa1
213; LA32-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
214; LA32-NEXT:    ret
215;
216; LA64-LABEL: fcmp_ule:
217; LA64:       # %bb.0:
218; LA64-NEXT:    fcmp.cule.s $fcc0, $fa0, $fa1
219; LA64-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
220; LA64-NEXT:    ret
221  %cmp = fcmp ule float %a, %b
222  %res = select i1 %cmp, float %x, float %y
223  ret float %res
224}
225
226define float @fcmp_une(float %a, float %b, float %x, float %y) {
227; LA32-LABEL: fcmp_une:
228; LA32:       # %bb.0:
229; LA32-NEXT:    fcmp.cune.s $fcc0, $fa0, $fa1
230; LA32-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
231; LA32-NEXT:    ret
232;
233; LA64-LABEL: fcmp_une:
234; LA64:       # %bb.0:
235; LA64-NEXT:    fcmp.cune.s $fcc0, $fa0, $fa1
236; LA64-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
237; LA64-NEXT:    ret
238  %cmp = fcmp une float %a, %b
239  %res = select i1 %cmp, float %x, float %y
240  ret float %res
241}
242
243define float @fcmp_uno(float %a, float %b, float %x, float %y) {
244; LA32-LABEL: fcmp_uno:
245; LA32:       # %bb.0:
246; LA32-NEXT:    fcmp.cun.s $fcc0, $fa0, $fa1
247; LA32-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
248; LA32-NEXT:    ret
249;
250; LA64-LABEL: fcmp_uno:
251; LA64:       # %bb.0:
252; LA64-NEXT:    fcmp.cun.s $fcc0, $fa0, $fa1
253; LA64-NEXT:    fsel $fa0, $fa3, $fa2, $fcc0
254; LA64-NEXT:    ret
255  %cmp = fcmp uno float %a, %b
256  %res = select i1 %cmp, float %x, float %y
257  ret float %res
258}
259
260define float @fcmp_true(float %a, float %b, float %x, float %y) {
261; LA32-LABEL: fcmp_true:
262; LA32:       # %bb.0:
263; LA32-NEXT:    fmov.s $fa0, $fa2
264; LA32-NEXT:    ret
265;
266; LA64-LABEL: fcmp_true:
267; LA64:       # %bb.0:
268; LA64-NEXT:    fmov.s $fa0, $fa2
269; LA64-NEXT:    ret
270  %cmp = fcmp true float %a, %b
271  %res = select i1 %cmp, float %x, float %y
272  ret float %res
273}
274