Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / LoongArch / float-fcmp-strict.ll
blob0459d5019378f273837e68ff4ed91be327c6d9de
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 declare i1 @llvm.experimental.constrained.fcmp.f32(float, float, metadata, metadata)
7 define i32 @fcmp_oeq(float %a, float %b) nounwind strictfp {
8 ; LA32-LABEL: fcmp_oeq:
9 ; LA32:       # %bb.0:
10 ; LA32-NEXT:    fcmp.ceq.s $fcc0, $fa0, $fa1
11 ; LA32-NEXT:    movcf2gr $a0, $fcc0
12 ; LA32-NEXT:    ret
14 ; LA64-LABEL: fcmp_oeq:
15 ; LA64:       # %bb.0:
16 ; LA64-NEXT:    fcmp.ceq.s $fcc0, $fa0, $fa1
17 ; LA64-NEXT:    movcf2gr $a0, $fcc0
18 ; LA64-NEXT:    ret
19   %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"oeq", metadata !"fpexcept.strict") strictfp
20   %2 = zext i1 %1 to i32
21   ret i32 %2
24 define i32 @fcmp_ogt(float %a, float %b) nounwind strictfp {
25 ; LA32-LABEL: fcmp_ogt:
26 ; LA32:       # %bb.0:
27 ; LA32-NEXT:    fcmp.clt.s $fcc0, $fa1, $fa0
28 ; LA32-NEXT:    movcf2gr $a0, $fcc0
29 ; LA32-NEXT:    ret
31 ; LA64-LABEL: fcmp_ogt:
32 ; LA64:       # %bb.0:
33 ; LA64-NEXT:    fcmp.clt.s $fcc0, $fa1, $fa0
34 ; LA64-NEXT:    movcf2gr $a0, $fcc0
35 ; LA64-NEXT:    ret
36   %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ogt", metadata !"fpexcept.strict") strictfp
37   %2 = zext i1 %1 to i32
38   ret i32 %2
41 define i32 @fcmp_oge(float %a, float %b) nounwind strictfp {
42 ; LA32-LABEL: fcmp_oge:
43 ; LA32:       # %bb.0:
44 ; LA32-NEXT:    fcmp.cle.s $fcc0, $fa1, $fa0
45 ; LA32-NEXT:    movcf2gr $a0, $fcc0
46 ; LA32-NEXT:    ret
48 ; LA64-LABEL: fcmp_oge:
49 ; LA64:       # %bb.0:
50 ; LA64-NEXT:    fcmp.cle.s $fcc0, $fa1, $fa0
51 ; LA64-NEXT:    movcf2gr $a0, $fcc0
52 ; LA64-NEXT:    ret
53   %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"oge", metadata !"fpexcept.strict") strictfp
54   %2 = zext i1 %1 to i32
55   ret i32 %2
58 define i32 @fcmp_olt(float %a, float %b) nounwind strictfp {
59 ; LA32-LABEL: fcmp_olt:
60 ; LA32:       # %bb.0:
61 ; LA32-NEXT:    fcmp.clt.s $fcc0, $fa0, $fa1
62 ; LA32-NEXT:    movcf2gr $a0, $fcc0
63 ; LA32-NEXT:    ret
65 ; LA64-LABEL: fcmp_olt:
66 ; LA64:       # %bb.0:
67 ; LA64-NEXT:    fcmp.clt.s $fcc0, $fa0, $fa1
68 ; LA64-NEXT:    movcf2gr $a0, $fcc0
69 ; LA64-NEXT:    ret
70   %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"olt", metadata !"fpexcept.strict") strictfp
71   %2 = zext i1 %1 to i32
72   ret i32 %2
75 define i32 @fcmp_ole(float %a, float %b) nounwind strictfp {
76 ; LA32-LABEL: fcmp_ole:
77 ; LA32:       # %bb.0:
78 ; LA32-NEXT:    fcmp.cle.s $fcc0, $fa0, $fa1
79 ; LA32-NEXT:    movcf2gr $a0, $fcc0
80 ; LA32-NEXT:    ret
82 ; LA64-LABEL: fcmp_ole:
83 ; LA64:       # %bb.0:
84 ; LA64-NEXT:    fcmp.cle.s $fcc0, $fa0, $fa1
85 ; LA64-NEXT:    movcf2gr $a0, $fcc0
86 ; LA64-NEXT:    ret
87   %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ole", metadata !"fpexcept.strict") strictfp
88   %2 = zext i1 %1 to i32
89   ret i32 %2
92 define i32 @fcmp_one(float %a, float %b) nounwind strictfp {
93 ; LA32-LABEL: fcmp_one:
94 ; LA32:       # %bb.0:
95 ; LA32-NEXT:    fcmp.cne.s $fcc0, $fa0, $fa1
96 ; LA32-NEXT:    movcf2gr $a0, $fcc0
97 ; LA32-NEXT:    ret
99 ; LA64-LABEL: fcmp_one:
100 ; LA64:       # %bb.0:
101 ; LA64-NEXT:    fcmp.cne.s $fcc0, $fa0, $fa1
102 ; LA64-NEXT:    movcf2gr $a0, $fcc0
103 ; LA64-NEXT:    ret
104   %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"one", metadata !"fpexcept.strict") strictfp
105   %2 = zext i1 %1 to i32
106   ret i32 %2
109 define i32 @fcmp_ord(float %a, float %b) nounwind strictfp {
110 ; LA32-LABEL: fcmp_ord:
111 ; LA32:       # %bb.0:
112 ; LA32-NEXT:    fcmp.cor.s $fcc0, $fa0, $fa1
113 ; LA32-NEXT:    movcf2gr $a0, $fcc0
114 ; LA32-NEXT:    ret
116 ; LA64-LABEL: fcmp_ord:
117 ; LA64:       # %bb.0:
118 ; LA64-NEXT:    fcmp.cor.s $fcc0, $fa0, $fa1
119 ; LA64-NEXT:    movcf2gr $a0, $fcc0
120 ; LA64-NEXT:    ret
121   %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ord", metadata !"fpexcept.strict") strictfp
122   %2 = zext i1 %1 to i32
123   ret i32 %2
126 define i32 @fcmp_ueq(float %a, float %b) nounwind strictfp {
127 ; LA32-LABEL: fcmp_ueq:
128 ; LA32:       # %bb.0:
129 ; LA32-NEXT:    fcmp.cueq.s $fcc0, $fa0, $fa1
130 ; LA32-NEXT:    movcf2gr $a0, $fcc0
131 ; LA32-NEXT:    ret
133 ; LA64-LABEL: fcmp_ueq:
134 ; LA64:       # %bb.0:
135 ; LA64-NEXT:    fcmp.cueq.s $fcc0, $fa0, $fa1
136 ; LA64-NEXT:    movcf2gr $a0, $fcc0
137 ; LA64-NEXT:    ret
138   %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ueq", metadata !"fpexcept.strict") strictfp
139   %2 = zext i1 %1 to i32
140   ret i32 %2
143 define i32 @fcmp_ugt(float %a, float %b) nounwind strictfp {
144 ; LA32-LABEL: fcmp_ugt:
145 ; LA32:       # %bb.0:
146 ; LA32-NEXT:    fcmp.cult.s $fcc0, $fa1, $fa0
147 ; LA32-NEXT:    movcf2gr $a0, $fcc0
148 ; LA32-NEXT:    ret
150 ; LA64-LABEL: fcmp_ugt:
151 ; LA64:       # %bb.0:
152 ; LA64-NEXT:    fcmp.cult.s $fcc0, $fa1, $fa0
153 ; LA64-NEXT:    movcf2gr $a0, $fcc0
154 ; LA64-NEXT:    ret
155   %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ugt", metadata !"fpexcept.strict") strictfp
156   %2 = zext i1 %1 to i32
157   ret i32 %2
160 define i32 @fcmp_uge(float %a, float %b) nounwind strictfp {
161 ; LA32-LABEL: fcmp_uge:
162 ; LA32:       # %bb.0:
163 ; LA32-NEXT:    fcmp.cule.s $fcc0, $fa1, $fa0
164 ; LA32-NEXT:    movcf2gr $a0, $fcc0
165 ; LA32-NEXT:    ret
167 ; LA64-LABEL: fcmp_uge:
168 ; LA64:       # %bb.0:
169 ; LA64-NEXT:    fcmp.cule.s $fcc0, $fa1, $fa0
170 ; LA64-NEXT:    movcf2gr $a0, $fcc0
171 ; LA64-NEXT:    ret
172   %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"uge", metadata !"fpexcept.strict") strictfp
173   %2 = zext i1 %1 to i32
174   ret i32 %2
177 define i32 @fcmp_ult(float %a, float %b) nounwind strictfp {
178 ; LA32-LABEL: fcmp_ult:
179 ; LA32:       # %bb.0:
180 ; LA32-NEXT:    fcmp.cult.s $fcc0, $fa0, $fa1
181 ; LA32-NEXT:    movcf2gr $a0, $fcc0
182 ; LA32-NEXT:    ret
184 ; LA64-LABEL: fcmp_ult:
185 ; LA64:       # %bb.0:
186 ; LA64-NEXT:    fcmp.cult.s $fcc0, $fa0, $fa1
187 ; LA64-NEXT:    movcf2gr $a0, $fcc0
188 ; LA64-NEXT:    ret
189   %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ult", metadata !"fpexcept.strict") strictfp
190   %2 = zext i1 %1 to i32
191   ret i32 %2
194 define i32 @fcmp_ule(float %a, float %b) nounwind strictfp {
195 ; LA32-LABEL: fcmp_ule:
196 ; LA32:       # %bb.0:
197 ; LA32-NEXT:    fcmp.cule.s $fcc0, $fa0, $fa1
198 ; LA32-NEXT:    movcf2gr $a0, $fcc0
199 ; LA32-NEXT:    ret
201 ; LA64-LABEL: fcmp_ule:
202 ; LA64:       # %bb.0:
203 ; LA64-NEXT:    fcmp.cule.s $fcc0, $fa0, $fa1
204 ; LA64-NEXT:    movcf2gr $a0, $fcc0
205 ; LA64-NEXT:    ret
206   %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ule", metadata !"fpexcept.strict") strictfp
207   %2 = zext i1 %1 to i32
208   ret i32 %2
211 define i32 @fcmp_une(float %a, float %b) nounwind strictfp {
212 ; LA32-LABEL: fcmp_une:
213 ; LA32:       # %bb.0:
214 ; LA32-NEXT:    fcmp.cune.s $fcc0, $fa0, $fa1
215 ; LA32-NEXT:    movcf2gr $a0, $fcc0
216 ; LA32-NEXT:    ret
218 ; LA64-LABEL: fcmp_une:
219 ; LA64:       # %bb.0:
220 ; LA64-NEXT:    fcmp.cune.s $fcc0, $fa0, $fa1
221 ; LA64-NEXT:    movcf2gr $a0, $fcc0
222 ; LA64-NEXT:    ret
223   %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"une", metadata !"fpexcept.strict") strictfp
224   %2 = zext i1 %1 to i32
225   ret i32 %2
228 define i32 @fcmp_uno(float %a, float %b) nounwind strictfp {
229 ; LA32-LABEL: fcmp_uno:
230 ; LA32:       # %bb.0:
231 ; LA32-NEXT:    fcmp.cun.s $fcc0, $fa0, $fa1
232 ; LA32-NEXT:    movcf2gr $a0, $fcc0
233 ; LA32-NEXT:    ret
235 ; LA64-LABEL: fcmp_uno:
236 ; LA64:       # %bb.0:
237 ; LA64-NEXT:    fcmp.cun.s $fcc0, $fa0, $fa1
238 ; LA64-NEXT:    movcf2gr $a0, $fcc0
239 ; LA64-NEXT:    ret
240   %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"uno", metadata !"fpexcept.strict") strictfp
241   %2 = zext i1 %1 to i32
242   ret i32 %2