xref: /llvm-project/llvm/test/CodeGen/LoongArch/float-fcmp-strict.ll (revision a6d699b55df3ca83b25fd0c0898dd51bb4b61e9c)
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
5declare i1 @llvm.experimental.constrained.fcmp.f32(float, float, metadata, metadata)
6
7define 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
13;
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
22}
23
24define 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
30;
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
39}
40
41define 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
47;
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
56}
57
58define 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
64;
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
73}
74
75define 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
81;
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
90}
91
92define 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
98;
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
107}
108
109define 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
115;
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
124}
125
126define 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
132;
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
141}
142
143define 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
149;
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
158}
159
160define 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
166;
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
175}
176
177define 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
183;
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
192}
193
194define 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
200;
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
209}
210
211define 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
217;
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
226}
227
228define 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
234;
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
243}
244