[ELF] Make SyntheticSection parameter order match InputSection
[llvm-project.git] / llvm / test / CodeGen / LoongArch / ir-instruction / select-fpcc-flt.ll
blob1f6d2313ab72cb87d4ca25149cb763cc4481e283
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
5 ;; Test single-precision floating-point values selection after comparison
7 define 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
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
22 define 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
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
39 define 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
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
56 define 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
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
73 define 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
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
90 define 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
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
107 define 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
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
124 define 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
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
141 define 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
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
158 define 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
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
175 define 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
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
192 define 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
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
209 define 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
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
226 define 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
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
243 define 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
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
260 define 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
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