xref: /llvm-project/llvm/test/CodeGen/RISCV/double-fcmp-strict.ll (revision 7ba49685c020f7059fe0ba27c157ecf08b937d44)
163b17eb9SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
263b17eb9SCraig Topper; RUN: llc -mtriple=riscv32 -mattr=+d -verify-machineinstrs < %s \
363b17eb9SCraig Topper; RUN:   -disable-strictnode-mutation -target-abi=ilp32d \
484bacb18SShao-Ce SUN; RUN:   | FileCheck -check-prefix=CHECKIFD %s
563b17eb9SCraig Topper; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs < %s \
663b17eb9SCraig Topper; RUN:   -disable-strictnode-mutation -target-abi=lp64d \
784bacb18SShao-Ce SUN; RUN:   | FileCheck -check-prefix=CHECKIFD %s
88b90f8e0SShao-Ce SUN; RUN: llc -mtriple=riscv32 -mattr=+zdinx -verify-machineinstrs < %s \
98b90f8e0SShao-Ce SUN; RUN:   -disable-strictnode-mutation -target-abi=ilp32 \
108b90f8e0SShao-Ce SUN; RUN:   | FileCheck -check-prefix=RV32IZFINXZDINX %s
112dc0fa05SShao-Ce SUN; RUN: llc -mtriple=riscv64 -mattr=+zdinx -verify-machineinstrs < %s \
122dc0fa05SShao-Ce SUN; RUN:   -disable-strictnode-mutation -target-abi=lp64 \
132dc0fa05SShao-Ce SUN; RUN:   | FileCheck -check-prefix=RV64IZFINXZDINX %s
1463b17eb9SCraig Topper; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \
1563b17eb9SCraig Topper; RUN:   -disable-strictnode-mutation | FileCheck -check-prefix=RV32I %s
1663b17eb9SCraig Topper; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
1763b17eb9SCraig Topper; RUN:   -disable-strictnode-mutation | FileCheck -check-prefix=RV64I %s
1863b17eb9SCraig Topper
1963b17eb9SCraig Topperdefine i32 @fcmp_oeq(double %a, double %b) nounwind strictfp {
2084bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmp_oeq:
2184bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
2284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    feq.d a0, fa0, fa1
2384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
2463b17eb9SCraig Topper;
258b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmp_oeq:
268b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
278b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    feq.d a0, a0, a2
288b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
298b90f8e0SShao-Ce SUN;
302dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmp_oeq:
312dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
322dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    feq.d a0, a0, a1
332dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
342dc0fa05SShao-Ce SUN;
3563b17eb9SCraig Topper; RV32I-LABEL: fcmp_oeq:
3663b17eb9SCraig Topper; RV32I:       # %bb.0:
3763b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
3863b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
39eabaee0cSFangrui Song; RV32I-NEXT:    call __eqdf2
4063b17eb9SCraig Topper; RV32I-NEXT:    seqz a0, a0
4163b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
4263b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
4363b17eb9SCraig Topper; RV32I-NEXT:    ret
4463b17eb9SCraig Topper;
4563b17eb9SCraig Topper; RV64I-LABEL: fcmp_oeq:
4663b17eb9SCraig Topper; RV64I:       # %bb.0:
4763b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
4863b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
49eabaee0cSFangrui Song; RV64I-NEXT:    call __eqdf2
5063b17eb9SCraig Topper; RV64I-NEXT:    seqz a0, a0
5163b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
5263b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
5363b17eb9SCraig Topper; RV64I-NEXT:    ret
5463b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"oeq", metadata !"fpexcept.strict") strictfp
5563b17eb9SCraig Topper  %2 = zext i1 %1 to i32
5663b17eb9SCraig Topper  ret i32 %2
5763b17eb9SCraig Topper}
5863b17eb9SCraig Topperdeclare i1 @llvm.experimental.constrained.fcmp.f64(double, double, metadata, metadata)
5963b17eb9SCraig Topper
6063b17eb9SCraig Topperdefine i32 @fcmp_ogt(double %a, double %b) nounwind strictfp {
6184bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmp_ogt:
6284bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
6384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    frflags a1
6484bacb18SShao-Ce SUN; CHECKIFD-NEXT:    flt.d a0, fa1, fa0
6584bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fsflags a1
6684bacb18SShao-Ce SUN; CHECKIFD-NEXT:    feq.d zero, fa1, fa0
6784bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
6863b17eb9SCraig Topper;
698b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmp_ogt:
708b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
71*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    frflags a5
72576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    flt.d a4, a2, a0
73*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    fsflags a5
74576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d zero, a2, a0
75576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    mv a0, a4
768b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
778b90f8e0SShao-Ce SUN;
782dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmp_ogt:
792dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
80*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    frflags a3
812dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a2, a1, a0
82*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    fsflags a3
832dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    feq.d zero, a1, a0
842dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    mv a0, a2
852dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
862dc0fa05SShao-Ce SUN;
8763b17eb9SCraig Topper; RV32I-LABEL: fcmp_ogt:
8863b17eb9SCraig Topper; RV32I:       # %bb.0:
8963b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
9063b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
91eabaee0cSFangrui Song; RV32I-NEXT:    call __gtdf2
9263b17eb9SCraig Topper; RV32I-NEXT:    sgtz a0, a0
9363b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
9463b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
9563b17eb9SCraig Topper; RV32I-NEXT:    ret
9663b17eb9SCraig Topper;
9763b17eb9SCraig Topper; RV64I-LABEL: fcmp_ogt:
9863b17eb9SCraig Topper; RV64I:       # %bb.0:
9963b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
10063b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
101eabaee0cSFangrui Song; RV64I-NEXT:    call __gtdf2
10263b17eb9SCraig Topper; RV64I-NEXT:    sgtz a0, a0
10363b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
10463b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
10563b17eb9SCraig Topper; RV64I-NEXT:    ret
10663b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ogt", metadata !"fpexcept.strict") strictfp
10763b17eb9SCraig Topper  %2 = zext i1 %1 to i32
10863b17eb9SCraig Topper  ret i32 %2
10963b17eb9SCraig Topper}
11063b17eb9SCraig Topper
11163b17eb9SCraig Topperdefine i32 @fcmp_oge(double %a, double %b) nounwind strictfp {
11284bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmp_oge:
11384bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
11484bacb18SShao-Ce SUN; CHECKIFD-NEXT:    frflags a1
11584bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fle.d a0, fa1, fa0
11684bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fsflags a1
11784bacb18SShao-Ce SUN; CHECKIFD-NEXT:    feq.d zero, fa1, fa0
11884bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
11963b17eb9SCraig Topper;
1208b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmp_oge:
1218b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
122*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    frflags a5
123576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    fle.d a4, a2, a0
124*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    fsflags a5
125576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d zero, a2, a0
126576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    mv a0, a4
1278b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
1288b90f8e0SShao-Ce SUN;
1292dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmp_oge:
1302dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
131*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    frflags a3
1322dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fle.d a2, a1, a0
133*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    fsflags a3
1342dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    feq.d zero, a1, a0
1352dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    mv a0, a2
1362dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
1372dc0fa05SShao-Ce SUN;
13863b17eb9SCraig Topper; RV32I-LABEL: fcmp_oge:
13963b17eb9SCraig Topper; RV32I:       # %bb.0:
14063b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
14163b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
142eabaee0cSFangrui Song; RV32I-NEXT:    call __gedf2
143d660c0d7SLiqin Weng; RV32I-NEXT:    slti a0, a0, 0
144d660c0d7SLiqin Weng; RV32I-NEXT:    xori a0, a0, 1
14563b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
14663b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
14763b17eb9SCraig Topper; RV32I-NEXT:    ret
14863b17eb9SCraig Topper;
14963b17eb9SCraig Topper; RV64I-LABEL: fcmp_oge:
15063b17eb9SCraig Topper; RV64I:       # %bb.0:
15163b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
15263b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
153eabaee0cSFangrui Song; RV64I-NEXT:    call __gedf2
154d660c0d7SLiqin Weng; RV64I-NEXT:    slti a0, a0, 0
155d660c0d7SLiqin Weng; RV64I-NEXT:    xori a0, a0, 1
15663b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
15763b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
15863b17eb9SCraig Topper; RV64I-NEXT:    ret
15963b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"oge", metadata !"fpexcept.strict") strictfp
16063b17eb9SCraig Topper  %2 = zext i1 %1 to i32
16163b17eb9SCraig Topper  ret i32 %2
16263b17eb9SCraig Topper}
16363b17eb9SCraig Topper
16463b17eb9SCraig Topperdefine i32 @fcmp_olt(double %a, double %b) nounwind strictfp {
16584bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmp_olt:
16684bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
16784bacb18SShao-Ce SUN; CHECKIFD-NEXT:    frflags a1
16884bacb18SShao-Ce SUN; CHECKIFD-NEXT:    flt.d a0, fa0, fa1
16984bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fsflags a1
17084bacb18SShao-Ce SUN; CHECKIFD-NEXT:    feq.d zero, fa0, fa1
17184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
17263b17eb9SCraig Topper;
1738b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmp_olt:
1748b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
175*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    frflags a5
176576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    flt.d a4, a0, a2
177*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    fsflags a5
178576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d zero, a0, a2
179576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    mv a0, a4
1808b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
1818b90f8e0SShao-Ce SUN;
1822dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmp_olt:
1832dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
184*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    frflags a3
1852dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a2, a0, a1
186*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    fsflags a3
1872dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    feq.d zero, a0, a1
1882dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    mv a0, a2
1892dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
1902dc0fa05SShao-Ce SUN;
19163b17eb9SCraig Topper; RV32I-LABEL: fcmp_olt:
19263b17eb9SCraig Topper; RV32I:       # %bb.0:
19363b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
19463b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
195eabaee0cSFangrui Song; RV32I-NEXT:    call __ltdf2
19663b17eb9SCraig Topper; RV32I-NEXT:    slti a0, a0, 0
19763b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
19863b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
19963b17eb9SCraig Topper; RV32I-NEXT:    ret
20063b17eb9SCraig Topper;
20163b17eb9SCraig Topper; RV64I-LABEL: fcmp_olt:
20263b17eb9SCraig Topper; RV64I:       # %bb.0:
20363b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
20463b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
205eabaee0cSFangrui Song; RV64I-NEXT:    call __ltdf2
20663b17eb9SCraig Topper; RV64I-NEXT:    slti a0, a0, 0
20763b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
20863b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
20963b17eb9SCraig Topper; RV64I-NEXT:    ret
21063b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"olt", metadata !"fpexcept.strict") strictfp
21163b17eb9SCraig Topper  %2 = zext i1 %1 to i32
21263b17eb9SCraig Topper  ret i32 %2
21363b17eb9SCraig Topper}
21463b17eb9SCraig Topper
21563b17eb9SCraig Topperdefine i32 @fcmp_ole(double %a, double %b) nounwind strictfp {
21684bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmp_ole:
21784bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
21884bacb18SShao-Ce SUN; CHECKIFD-NEXT:    frflags a1
21984bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fle.d a0, fa0, fa1
22084bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fsflags a1
22184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    feq.d zero, fa0, fa1
22284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
22363b17eb9SCraig Topper;
2248b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmp_ole:
2258b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
226*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    frflags a5
227576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    fle.d a4, a0, a2
228*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    fsflags a5
229576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d zero, a0, a2
230576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    mv a0, a4
2318b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
2328b90f8e0SShao-Ce SUN;
2332dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmp_ole:
2342dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
235*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    frflags a3
2362dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fle.d a2, a0, a1
237*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    fsflags a3
2382dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    feq.d zero, a0, a1
2392dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    mv a0, a2
2402dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
2412dc0fa05SShao-Ce SUN;
24263b17eb9SCraig Topper; RV32I-LABEL: fcmp_ole:
24363b17eb9SCraig Topper; RV32I:       # %bb.0:
24463b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
24563b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
246eabaee0cSFangrui Song; RV32I-NEXT:    call __ledf2
24763b17eb9SCraig Topper; RV32I-NEXT:    slti a0, a0, 1
24863b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
24963b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
25063b17eb9SCraig Topper; RV32I-NEXT:    ret
25163b17eb9SCraig Topper;
25263b17eb9SCraig Topper; RV64I-LABEL: fcmp_ole:
25363b17eb9SCraig Topper; RV64I:       # %bb.0:
25463b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
25563b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
256eabaee0cSFangrui Song; RV64I-NEXT:    call __ledf2
25763b17eb9SCraig Topper; RV64I-NEXT:    slti a0, a0, 1
25863b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
25963b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
26063b17eb9SCraig Topper; RV64I-NEXT:    ret
26163b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ole", metadata !"fpexcept.strict") strictfp
26263b17eb9SCraig Topper  %2 = zext i1 %1 to i32
26363b17eb9SCraig Topper  ret i32 %2
26463b17eb9SCraig Topper}
26563b17eb9SCraig Topper
26663b17eb9SCraig Topper; FIXME: We only need one frflags before the two flts and one fsflags after the
26763b17eb9SCraig Topper; two flts.
26863b17eb9SCraig Topperdefine i32 @fcmp_one(double %a, double %b) nounwind strictfp {
26984bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmp_one:
27084bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
27184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    frflags a0
27284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    flt.d a1, fa0, fa1
27384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fsflags a0
27484bacb18SShao-Ce SUN; CHECKIFD-NEXT:    feq.d zero, fa0, fa1
27584bacb18SShao-Ce SUN; CHECKIFD-NEXT:    frflags a0
27684bacb18SShao-Ce SUN; CHECKIFD-NEXT:    flt.d a2, fa1, fa0
27784bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fsflags a0
27884bacb18SShao-Ce SUN; CHECKIFD-NEXT:    or a0, a2, a1
27984bacb18SShao-Ce SUN; CHECKIFD-NEXT:    feq.d zero, fa1, fa0
28084bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
28163b17eb9SCraig Topper;
2828b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmp_one:
2838b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
284*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    frflags a4
285576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    flt.d a5, a0, a2
286*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    fsflags a4
287576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d zero, a0, a2
288*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    frflags a4
289576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    flt.d a6, a2, a0
290*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    fsflags a4
291576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    or a4, a6, a5
292576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d zero, a2, a0
293576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    mv a0, a4
2948b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
2958b90f8e0SShao-Ce SUN;
2962dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmp_one:
2972dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
298*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    frflags a2
2992dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a3, a0, a1
300*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    fsflags a2
3012dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    feq.d zero, a0, a1
302*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    frflags a2
3032dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a4, a1, a0
304*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    fsflags a2
3052dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    or a2, a4, a3
3062dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    feq.d zero, a1, a0
3072dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    mv a0, a2
3082dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
3092dc0fa05SShao-Ce SUN;
31063b17eb9SCraig Topper; RV32I-LABEL: fcmp_one:
31163b17eb9SCraig Topper; RV32I:       # %bb.0:
31263b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -32
31363b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
31463b17eb9SCraig Topper; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
31563b17eb9SCraig Topper; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
31663b17eb9SCraig Topper; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
31763b17eb9SCraig Topper; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill
31863b17eb9SCraig Topper; RV32I-NEXT:    sw s4, 8(sp) # 4-byte Folded Spill
3198def89b5Swangpc; RV32I-NEXT:    mv s0, a3
3208def89b5Swangpc; RV32I-NEXT:    mv s1, a2
3218def89b5Swangpc; RV32I-NEXT:    mv s2, a1
3228def89b5Swangpc; RV32I-NEXT:    mv s3, a0
323eabaee0cSFangrui Song; RV32I-NEXT:    call __eqdf2
32463b17eb9SCraig Topper; RV32I-NEXT:    snez s4, a0
3258def89b5Swangpc; RV32I-NEXT:    mv a0, s3
3268def89b5Swangpc; RV32I-NEXT:    mv a1, s2
3278def89b5Swangpc; RV32I-NEXT:    mv a2, s1
3288def89b5Swangpc; RV32I-NEXT:    mv a3, s0
329eabaee0cSFangrui Song; RV32I-NEXT:    call __unorddf2
33063b17eb9SCraig Topper; RV32I-NEXT:    seqz a0, a0
33163b17eb9SCraig Topper; RV32I-NEXT:    and a0, a0, s4
33263b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
33363b17eb9SCraig Topper; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
33463b17eb9SCraig Topper; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
33563b17eb9SCraig Topper; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
33663b17eb9SCraig Topper; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload
33763b17eb9SCraig Topper; RV32I-NEXT:    lw s4, 8(sp) # 4-byte Folded Reload
33863b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 32
33963b17eb9SCraig Topper; RV32I-NEXT:    ret
34063b17eb9SCraig Topper;
34163b17eb9SCraig Topper; RV64I-LABEL: fcmp_one:
34263b17eb9SCraig Topper; RV64I:       # %bb.0:
34363b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -32
34463b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
34563b17eb9SCraig Topper; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
34663b17eb9SCraig Topper; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
34763b17eb9SCraig Topper; RV64I-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
34863b17eb9SCraig Topper; RV64I-NEXT:    mv s0, a1
34963b17eb9SCraig Topper; RV64I-NEXT:    mv s1, a0
350eabaee0cSFangrui Song; RV64I-NEXT:    call __eqdf2
35163b17eb9SCraig Topper; RV64I-NEXT:    snez s2, a0
35263b17eb9SCraig Topper; RV64I-NEXT:    mv a0, s1
35363b17eb9SCraig Topper; RV64I-NEXT:    mv a1, s0
354eabaee0cSFangrui Song; RV64I-NEXT:    call __unorddf2
35563b17eb9SCraig Topper; RV64I-NEXT:    seqz a0, a0
35663b17eb9SCraig Topper; RV64I-NEXT:    and a0, a0, s2
35763b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
35863b17eb9SCraig Topper; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
35963b17eb9SCraig Topper; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
36063b17eb9SCraig Topper; RV64I-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload
36163b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 32
36263b17eb9SCraig Topper; RV64I-NEXT:    ret
36363b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"one", metadata !"fpexcept.strict") strictfp
36463b17eb9SCraig Topper  %2 = zext i1 %1 to i32
36563b17eb9SCraig Topper  ret i32 %2
36663b17eb9SCraig Topper}
36763b17eb9SCraig Topper
36863b17eb9SCraig Topperdefine i32 @fcmp_ord(double %a, double %b) nounwind strictfp {
36984bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmp_ord:
37084bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
37184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    feq.d a0, fa1, fa1
37284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    feq.d a1, fa0, fa0
37384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    and a0, a1, a0
37484bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
37563b17eb9SCraig Topper;
3768b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmp_ord:
3778b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
3788b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    feq.d a2, a2, a2
3798b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    feq.d a0, a0, a0
3808b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    and a0, a0, a2
3818b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
3828b90f8e0SShao-Ce SUN;
3832dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmp_ord:
3842dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
3852dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    feq.d a1, a1, a1
3862dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    feq.d a0, a0, a0
3872dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    and a0, a0, a1
3882dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
3892dc0fa05SShao-Ce SUN;
39063b17eb9SCraig Topper; RV32I-LABEL: fcmp_ord:
39163b17eb9SCraig Topper; RV32I:       # %bb.0:
39263b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
39363b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
394eabaee0cSFangrui Song; RV32I-NEXT:    call __unorddf2
39563b17eb9SCraig Topper; RV32I-NEXT:    seqz a0, a0
39663b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
39763b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
39863b17eb9SCraig Topper; RV32I-NEXT:    ret
39963b17eb9SCraig Topper;
40063b17eb9SCraig Topper; RV64I-LABEL: fcmp_ord:
40163b17eb9SCraig Topper; RV64I:       # %bb.0:
40263b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
40363b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
404eabaee0cSFangrui Song; RV64I-NEXT:    call __unorddf2
40563b17eb9SCraig Topper; RV64I-NEXT:    seqz a0, a0
40663b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
40763b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
40863b17eb9SCraig Topper; RV64I-NEXT:    ret
40963b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ord", metadata !"fpexcept.strict") strictfp
41063b17eb9SCraig Topper  %2 = zext i1 %1 to i32
41163b17eb9SCraig Topper  ret i32 %2
41263b17eb9SCraig Topper}
41363b17eb9SCraig Topper
41463b17eb9SCraig Topper; FIXME: We only need one frflags before the two flts and one fsflags after the
41563b17eb9SCraig Topper; two flts.
41663b17eb9SCraig Topperdefine i32 @fcmp_ueq(double %a, double %b) nounwind strictfp {
41784bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmp_ueq:
41884bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
41984bacb18SShao-Ce SUN; CHECKIFD-NEXT:    frflags a0
42084bacb18SShao-Ce SUN; CHECKIFD-NEXT:    flt.d a1, fa0, fa1
42184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fsflags a0
42284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    feq.d zero, fa0, fa1
42384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    frflags a0
42484bacb18SShao-Ce SUN; CHECKIFD-NEXT:    flt.d a2, fa1, fa0
42584bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fsflags a0
426e00e20a0SCraig Topper; CHECKIFD-NEXT:    or a1, a2, a1
427e00e20a0SCraig Topper; CHECKIFD-NEXT:    xori a0, a1, 1
42884bacb18SShao-Ce SUN; CHECKIFD-NEXT:    feq.d zero, fa1, fa0
42984bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
43063b17eb9SCraig Topper;
4318b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmp_ueq:
4328b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
433*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    frflags a4
434576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    flt.d a5, a0, a2
435*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    fsflags a4
436576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d zero, a0, a2
437*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    frflags a4
438576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    flt.d a6, a2, a0
439*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    fsflags a4
440576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    or a4, a6, a5
441576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    xori a4, a4, 1
442576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d zero, a2, a0
443576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    mv a0, a4
4448b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
4458b90f8e0SShao-Ce SUN;
4462dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmp_ueq:
4472dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
448*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    frflags a2
4492dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a3, a0, a1
450*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    fsflags a2
4512dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    feq.d zero, a0, a1
452*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    frflags a2
4532dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a4, a1, a0
454*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    fsflags a2
4552dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    or a3, a4, a3
4562dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    xori a2, a3, 1
4572dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    feq.d zero, a1, a0
4582dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    mv a0, a2
4592dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
4602dc0fa05SShao-Ce SUN;
46163b17eb9SCraig Topper; RV32I-LABEL: fcmp_ueq:
46263b17eb9SCraig Topper; RV32I:       # %bb.0:
46363b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -32
46463b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
46563b17eb9SCraig Topper; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
46663b17eb9SCraig Topper; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
46763b17eb9SCraig Topper; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
46863b17eb9SCraig Topper; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill
46963b17eb9SCraig Topper; RV32I-NEXT:    sw s4, 8(sp) # 4-byte Folded Spill
4708def89b5Swangpc; RV32I-NEXT:    mv s0, a3
4718def89b5Swangpc; RV32I-NEXT:    mv s1, a2
4728def89b5Swangpc; RV32I-NEXT:    mv s2, a1
4738def89b5Swangpc; RV32I-NEXT:    mv s3, a0
474eabaee0cSFangrui Song; RV32I-NEXT:    call __eqdf2
47563b17eb9SCraig Topper; RV32I-NEXT:    seqz s4, a0
4768def89b5Swangpc; RV32I-NEXT:    mv a0, s3
4778def89b5Swangpc; RV32I-NEXT:    mv a1, s2
4788def89b5Swangpc; RV32I-NEXT:    mv a2, s1
4798def89b5Swangpc; RV32I-NEXT:    mv a3, s0
480eabaee0cSFangrui Song; RV32I-NEXT:    call __unorddf2
48163b17eb9SCraig Topper; RV32I-NEXT:    snez a0, a0
48263b17eb9SCraig Topper; RV32I-NEXT:    or a0, a0, s4
48363b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
48463b17eb9SCraig Topper; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
48563b17eb9SCraig Topper; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
48663b17eb9SCraig Topper; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
48763b17eb9SCraig Topper; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload
48863b17eb9SCraig Topper; RV32I-NEXT:    lw s4, 8(sp) # 4-byte Folded Reload
48963b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 32
49063b17eb9SCraig Topper; RV32I-NEXT:    ret
49163b17eb9SCraig Topper;
49263b17eb9SCraig Topper; RV64I-LABEL: fcmp_ueq:
49363b17eb9SCraig Topper; RV64I:       # %bb.0:
49463b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -32
49563b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
49663b17eb9SCraig Topper; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
49763b17eb9SCraig Topper; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
49863b17eb9SCraig Topper; RV64I-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
49963b17eb9SCraig Topper; RV64I-NEXT:    mv s0, a1
50063b17eb9SCraig Topper; RV64I-NEXT:    mv s1, a0
501eabaee0cSFangrui Song; RV64I-NEXT:    call __eqdf2
50263b17eb9SCraig Topper; RV64I-NEXT:    seqz s2, a0
50363b17eb9SCraig Topper; RV64I-NEXT:    mv a0, s1
50463b17eb9SCraig Topper; RV64I-NEXT:    mv a1, s0
505eabaee0cSFangrui Song; RV64I-NEXT:    call __unorddf2
50663b17eb9SCraig Topper; RV64I-NEXT:    snez a0, a0
50763b17eb9SCraig Topper; RV64I-NEXT:    or a0, a0, s2
50863b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
50963b17eb9SCraig Topper; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
51063b17eb9SCraig Topper; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
51163b17eb9SCraig Topper; RV64I-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload
51263b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 32
51363b17eb9SCraig Topper; RV64I-NEXT:    ret
51463b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ueq", metadata !"fpexcept.strict") strictfp
51563b17eb9SCraig Topper  %2 = zext i1 %1 to i32
51663b17eb9SCraig Topper  ret i32 %2
51763b17eb9SCraig Topper}
51863b17eb9SCraig Topper
51963b17eb9SCraig Topperdefine i32 @fcmp_ugt(double %a, double %b) nounwind strictfp {
52084bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmp_ugt:
52184bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
52284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    frflags a0
52384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fle.d a1, fa0, fa1
52484bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fsflags a0
52584bacb18SShao-Ce SUN; CHECKIFD-NEXT:    xori a0, a1, 1
52684bacb18SShao-Ce SUN; CHECKIFD-NEXT:    feq.d zero, fa0, fa1
52784bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
52863b17eb9SCraig Topper;
5298b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmp_ugt:
5308b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
531*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    frflags a4
532576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    fle.d a5, a0, a2
533*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    fsflags a4
534576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    xori a4, a5, 1
535576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d zero, a0, a2
536576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    mv a0, a4
5378b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
5388b90f8e0SShao-Ce SUN;
5392dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmp_ugt:
5402dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
541*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    frflags a2
5422dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fle.d a3, a0, a1
543*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    fsflags a2
5442dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    xori a2, a3, 1
5452dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    feq.d zero, a0, a1
5462dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    mv a0, a2
5472dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
5482dc0fa05SShao-Ce SUN;
54963b17eb9SCraig Topper; RV32I-LABEL: fcmp_ugt:
55063b17eb9SCraig Topper; RV32I:       # %bb.0:
55163b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
55263b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
553eabaee0cSFangrui Song; RV32I-NEXT:    call __ledf2
55463b17eb9SCraig Topper; RV32I-NEXT:    sgtz a0, a0
55563b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
55663b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
55763b17eb9SCraig Topper; RV32I-NEXT:    ret
55863b17eb9SCraig Topper;
55963b17eb9SCraig Topper; RV64I-LABEL: fcmp_ugt:
56063b17eb9SCraig Topper; RV64I:       # %bb.0:
56163b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
56263b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
563eabaee0cSFangrui Song; RV64I-NEXT:    call __ledf2
56463b17eb9SCraig Topper; RV64I-NEXT:    sgtz a0, a0
56563b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
56663b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
56763b17eb9SCraig Topper; RV64I-NEXT:    ret
56863b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ugt", metadata !"fpexcept.strict") strictfp
56963b17eb9SCraig Topper  %2 = zext i1 %1 to i32
57063b17eb9SCraig Topper  ret i32 %2
57163b17eb9SCraig Topper}
57263b17eb9SCraig Topper
57363b17eb9SCraig Topperdefine i32 @fcmp_uge(double %a, double %b) nounwind strictfp {
57484bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmp_uge:
57584bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
57684bacb18SShao-Ce SUN; CHECKIFD-NEXT:    frflags a0
57784bacb18SShao-Ce SUN; CHECKIFD-NEXT:    flt.d a1, fa0, fa1
57884bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fsflags a0
57984bacb18SShao-Ce SUN; CHECKIFD-NEXT:    xori a0, a1, 1
58084bacb18SShao-Ce SUN; CHECKIFD-NEXT:    feq.d zero, fa0, fa1
58184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
58263b17eb9SCraig Topper;
5838b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmp_uge:
5848b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
585*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    frflags a4
586576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    flt.d a5, a0, a2
587*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    fsflags a4
588576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    xori a4, a5, 1
589576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d zero, a0, a2
590576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    mv a0, a4
5918b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
5928b90f8e0SShao-Ce SUN;
5932dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmp_uge:
5942dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
595*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    frflags a2
5962dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a3, a0, a1
597*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    fsflags a2
5982dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    xori a2, a3, 1
5992dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    feq.d zero, a0, a1
6002dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    mv a0, a2
6012dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
6022dc0fa05SShao-Ce SUN;
60363b17eb9SCraig Topper; RV32I-LABEL: fcmp_uge:
60463b17eb9SCraig Topper; RV32I:       # %bb.0:
60563b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
60663b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
607eabaee0cSFangrui Song; RV32I-NEXT:    call __ltdf2
608d660c0d7SLiqin Weng; RV32I-NEXT:    slti a0, a0, 0
609d660c0d7SLiqin Weng; RV32I-NEXT:    xori a0, a0, 1
61063b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
61163b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
61263b17eb9SCraig Topper; RV32I-NEXT:    ret
61363b17eb9SCraig Topper;
61463b17eb9SCraig Topper; RV64I-LABEL: fcmp_uge:
61563b17eb9SCraig Topper; RV64I:       # %bb.0:
61663b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
61763b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
618eabaee0cSFangrui Song; RV64I-NEXT:    call __ltdf2
619d660c0d7SLiqin Weng; RV64I-NEXT:    slti a0, a0, 0
620d660c0d7SLiqin Weng; RV64I-NEXT:    xori a0, a0, 1
62163b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
62263b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
62363b17eb9SCraig Topper; RV64I-NEXT:    ret
62463b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"uge", metadata !"fpexcept.strict") strictfp
62563b17eb9SCraig Topper  %2 = zext i1 %1 to i32
62663b17eb9SCraig Topper  ret i32 %2
62763b17eb9SCraig Topper}
62863b17eb9SCraig Topper
62963b17eb9SCraig Topperdefine i32 @fcmp_ult(double %a, double %b) nounwind strictfp {
63084bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmp_ult:
63184bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
63284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    frflags a0
63384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fle.d a1, fa1, fa0
63484bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fsflags a0
63584bacb18SShao-Ce SUN; CHECKIFD-NEXT:    xori a0, a1, 1
63684bacb18SShao-Ce SUN; CHECKIFD-NEXT:    feq.d zero, fa1, fa0
63784bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
63863b17eb9SCraig Topper;
6398b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmp_ult:
6408b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
641*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    frflags a4
642576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    fle.d a5, a2, a0
643*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    fsflags a4
644576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    xori a4, a5, 1
645576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d zero, a2, a0
646576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    mv a0, a4
6478b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
6488b90f8e0SShao-Ce SUN;
6492dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmp_ult:
6502dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
651*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    frflags a2
6522dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fle.d a3, a1, a0
653*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    fsflags a2
6542dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    xori a2, a3, 1
6552dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    feq.d zero, a1, a0
6562dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    mv a0, a2
6572dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
6582dc0fa05SShao-Ce SUN;
65963b17eb9SCraig Topper; RV32I-LABEL: fcmp_ult:
66063b17eb9SCraig Topper; RV32I:       # %bb.0:
66163b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
66263b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
663eabaee0cSFangrui Song; RV32I-NEXT:    call __gedf2
66463b17eb9SCraig Topper; RV32I-NEXT:    slti a0, a0, 0
66563b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
66663b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
66763b17eb9SCraig Topper; RV32I-NEXT:    ret
66863b17eb9SCraig Topper;
66963b17eb9SCraig Topper; RV64I-LABEL: fcmp_ult:
67063b17eb9SCraig Topper; RV64I:       # %bb.0:
67163b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
67263b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
673eabaee0cSFangrui Song; RV64I-NEXT:    call __gedf2
67463b17eb9SCraig Topper; RV64I-NEXT:    slti a0, a0, 0
67563b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
67663b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
67763b17eb9SCraig Topper; RV64I-NEXT:    ret
67863b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ult", metadata !"fpexcept.strict") strictfp
67963b17eb9SCraig Topper  %2 = zext i1 %1 to i32
68063b17eb9SCraig Topper  ret i32 %2
68163b17eb9SCraig Topper}
68263b17eb9SCraig Topper
68363b17eb9SCraig Topperdefine i32 @fcmp_ule(double %a, double %b) nounwind strictfp {
68484bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmp_ule:
68584bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
68684bacb18SShao-Ce SUN; CHECKIFD-NEXT:    frflags a0
68784bacb18SShao-Ce SUN; CHECKIFD-NEXT:    flt.d a1, fa1, fa0
68884bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fsflags a0
68984bacb18SShao-Ce SUN; CHECKIFD-NEXT:    xori a0, a1, 1
69084bacb18SShao-Ce SUN; CHECKIFD-NEXT:    feq.d zero, fa1, fa0
69184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
69263b17eb9SCraig Topper;
6938b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmp_ule:
6948b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
695*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    frflags a4
696576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    flt.d a5, a2, a0
697*7ba49685SCraig Topper; RV32IZFINXZDINX-NEXT:    fsflags a4
698576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    xori a4, a5, 1
699576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d zero, a2, a0
700576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    mv a0, a4
7018b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
7028b90f8e0SShao-Ce SUN;
7032dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmp_ule:
7042dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
705*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    frflags a2
7062dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a3, a1, a0
707*7ba49685SCraig Topper; RV64IZFINXZDINX-NEXT:    fsflags a2
7082dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    xori a2, a3, 1
7092dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    feq.d zero, a1, a0
7102dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    mv a0, a2
7112dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
7122dc0fa05SShao-Ce SUN;
71363b17eb9SCraig Topper; RV32I-LABEL: fcmp_ule:
71463b17eb9SCraig Topper; RV32I:       # %bb.0:
71563b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
71663b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
717eabaee0cSFangrui Song; RV32I-NEXT:    call __gtdf2
71863b17eb9SCraig Topper; RV32I-NEXT:    slti a0, a0, 1
71963b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
72063b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
72163b17eb9SCraig Topper; RV32I-NEXT:    ret
72263b17eb9SCraig Topper;
72363b17eb9SCraig Topper; RV64I-LABEL: fcmp_ule:
72463b17eb9SCraig Topper; RV64I:       # %bb.0:
72563b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
72663b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
727eabaee0cSFangrui Song; RV64I-NEXT:    call __gtdf2
72863b17eb9SCraig Topper; RV64I-NEXT:    slti a0, a0, 1
72963b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
73063b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
73163b17eb9SCraig Topper; RV64I-NEXT:    ret
73263b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ule", metadata !"fpexcept.strict") strictfp
73363b17eb9SCraig Topper  %2 = zext i1 %1 to i32
73463b17eb9SCraig Topper  ret i32 %2
73563b17eb9SCraig Topper}
73663b17eb9SCraig Topper
73763b17eb9SCraig Topperdefine i32 @fcmp_une(double %a, double %b) nounwind strictfp {
73884bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmp_une:
73984bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
74084bacb18SShao-Ce SUN; CHECKIFD-NEXT:    feq.d a0, fa0, fa1
74184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    xori a0, a0, 1
74284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
74363b17eb9SCraig Topper;
7448b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmp_une:
7458b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
7468b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    feq.d a0, a0, a2
7478b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    xori a0, a0, 1
7488b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
7498b90f8e0SShao-Ce SUN;
7502dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmp_une:
7512dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
7522dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    feq.d a0, a0, a1
7532dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    xori a0, a0, 1
7542dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
7552dc0fa05SShao-Ce SUN;
75663b17eb9SCraig Topper; RV32I-LABEL: fcmp_une:
75763b17eb9SCraig Topper; RV32I:       # %bb.0:
75863b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
75963b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
760eabaee0cSFangrui Song; RV32I-NEXT:    call __nedf2
76163b17eb9SCraig Topper; RV32I-NEXT:    snez a0, a0
76263b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
76363b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
76463b17eb9SCraig Topper; RV32I-NEXT:    ret
76563b17eb9SCraig Topper;
76663b17eb9SCraig Topper; RV64I-LABEL: fcmp_une:
76763b17eb9SCraig Topper; RV64I:       # %bb.0:
76863b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
76963b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
770eabaee0cSFangrui Song; RV64I-NEXT:    call __nedf2
77163b17eb9SCraig Topper; RV64I-NEXT:    snez a0, a0
77263b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
77363b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
77463b17eb9SCraig Topper; RV64I-NEXT:    ret
77563b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"une", metadata !"fpexcept.strict") strictfp
77663b17eb9SCraig Topper  %2 = zext i1 %1 to i32
77763b17eb9SCraig Topper  ret i32 %2
77863b17eb9SCraig Topper}
77963b17eb9SCraig Topper
78063b17eb9SCraig Topperdefine i32 @fcmp_uno(double %a, double %b) nounwind strictfp {
78184bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmp_uno:
78284bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
78384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    feq.d a0, fa1, fa1
78484bacb18SShao-Ce SUN; CHECKIFD-NEXT:    feq.d a1, fa0, fa0
78584bacb18SShao-Ce SUN; CHECKIFD-NEXT:    and a0, a1, a0
78684bacb18SShao-Ce SUN; CHECKIFD-NEXT:    xori a0, a0, 1
78784bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
78863b17eb9SCraig Topper;
7898b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmp_uno:
7908b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
7918b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    feq.d a2, a2, a2
7928b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    feq.d a0, a0, a0
7938b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    and a0, a0, a2
7948b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    xori a0, a0, 1
7958b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
7968b90f8e0SShao-Ce SUN;
7972dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmp_uno:
7982dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
7992dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    feq.d a1, a1, a1
8002dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    feq.d a0, a0, a0
8012dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    and a0, a0, a1
8022dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    xori a0, a0, 1
8032dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
8042dc0fa05SShao-Ce SUN;
80563b17eb9SCraig Topper; RV32I-LABEL: fcmp_uno:
80663b17eb9SCraig Topper; RV32I:       # %bb.0:
80763b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
80863b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
809eabaee0cSFangrui Song; RV32I-NEXT:    call __unorddf2
81063b17eb9SCraig Topper; RV32I-NEXT:    snez a0, a0
81163b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
81263b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
81363b17eb9SCraig Topper; RV32I-NEXT:    ret
81463b17eb9SCraig Topper;
81563b17eb9SCraig Topper; RV64I-LABEL: fcmp_uno:
81663b17eb9SCraig Topper; RV64I:       # %bb.0:
81763b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
81863b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
819eabaee0cSFangrui Song; RV64I-NEXT:    call __unorddf2
82063b17eb9SCraig Topper; RV64I-NEXT:    snez a0, a0
82163b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
82263b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
82363b17eb9SCraig Topper; RV64I-NEXT:    ret
82463b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"uno", metadata !"fpexcept.strict") strictfp
82563b17eb9SCraig Topper  %2 = zext i1 %1 to i32
82663b17eb9SCraig Topper  ret i32 %2
82763b17eb9SCraig Topper}
82863b17eb9SCraig Topper
82963b17eb9SCraig Topperdefine i32 @fcmps_oeq(double %a, double %b) nounwind strictfp {
83084bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmps_oeq:
83184bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
83284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fle.d a0, fa1, fa0
83384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fle.d a1, fa0, fa1
83484bacb18SShao-Ce SUN; CHECKIFD-NEXT:    and a0, a1, a0
83584bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
83663b17eb9SCraig Topper;
8378b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmps_oeq:
8388b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
8398b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fle.d a4, a2, a0
8408b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fle.d a0, a0, a2
8418b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    and a0, a0, a4
8428b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
8438b90f8e0SShao-Ce SUN;
8442dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmps_oeq:
8452dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
8462dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fle.d a2, a1, a0
8472dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fle.d a0, a0, a1
8482dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    and a0, a0, a2
8492dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
8502dc0fa05SShao-Ce SUN;
85163b17eb9SCraig Topper; RV32I-LABEL: fcmps_oeq:
85263b17eb9SCraig Topper; RV32I:       # %bb.0:
85363b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
85463b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
855eabaee0cSFangrui Song; RV32I-NEXT:    call __eqdf2
85663b17eb9SCraig Topper; RV32I-NEXT:    seqz a0, a0
85763b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
85863b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
85963b17eb9SCraig Topper; RV32I-NEXT:    ret
86063b17eb9SCraig Topper;
86163b17eb9SCraig Topper; RV64I-LABEL: fcmps_oeq:
86263b17eb9SCraig Topper; RV64I:       # %bb.0:
86363b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
86463b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
865eabaee0cSFangrui Song; RV64I-NEXT:    call __eqdf2
86663b17eb9SCraig Topper; RV64I-NEXT:    seqz a0, a0
86763b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
86863b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
86963b17eb9SCraig Topper; RV64I-NEXT:    ret
87063b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"oeq", metadata !"fpexcept.strict") strictfp
87163b17eb9SCraig Topper  %2 = zext i1 %1 to i32
87263b17eb9SCraig Topper  ret i32 %2
87363b17eb9SCraig Topper}
87463b17eb9SCraig Topperdeclare i1 @llvm.experimental.constrained.fcmps.f64(double, double, metadata, metadata)
87563b17eb9SCraig Topper
87663b17eb9SCraig Topperdefine i32 @fcmps_ogt(double %a, double %b) nounwind strictfp {
87784bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmps_ogt:
87884bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
87984bacb18SShao-Ce SUN; CHECKIFD-NEXT:    flt.d a0, fa1, fa0
88084bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
88163b17eb9SCraig Topper;
8828b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmps_ogt:
8838b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
8848b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    flt.d a0, a2, a0
8858b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
8868b90f8e0SShao-Ce SUN;
8872dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmps_ogt:
8882dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
8892dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a0, a1, a0
8902dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
8912dc0fa05SShao-Ce SUN;
89263b17eb9SCraig Topper; RV32I-LABEL: fcmps_ogt:
89363b17eb9SCraig Topper; RV32I:       # %bb.0:
89463b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
89563b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
896eabaee0cSFangrui Song; RV32I-NEXT:    call __gtdf2
89763b17eb9SCraig Topper; RV32I-NEXT:    sgtz a0, a0
89863b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
89963b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
90063b17eb9SCraig Topper; RV32I-NEXT:    ret
90163b17eb9SCraig Topper;
90263b17eb9SCraig Topper; RV64I-LABEL: fcmps_ogt:
90363b17eb9SCraig Topper; RV64I:       # %bb.0:
90463b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
90563b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
906eabaee0cSFangrui Song; RV64I-NEXT:    call __gtdf2
90763b17eb9SCraig Topper; RV64I-NEXT:    sgtz a0, a0
90863b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
90963b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
91063b17eb9SCraig Topper; RV64I-NEXT:    ret
91163b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ogt", metadata !"fpexcept.strict") strictfp
91263b17eb9SCraig Topper  %2 = zext i1 %1 to i32
91363b17eb9SCraig Topper  ret i32 %2
91463b17eb9SCraig Topper}
91563b17eb9SCraig Topper
91663b17eb9SCraig Topperdefine i32 @fcmps_oge(double %a, double %b) nounwind strictfp {
91784bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmps_oge:
91884bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
91984bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fle.d a0, fa1, fa0
92084bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
92163b17eb9SCraig Topper;
9228b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmps_oge:
9238b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
9248b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fle.d a0, a2, a0
9258b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
9268b90f8e0SShao-Ce SUN;
9272dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmps_oge:
9282dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
9292dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fle.d a0, a1, a0
9302dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
9312dc0fa05SShao-Ce SUN;
93263b17eb9SCraig Topper; RV32I-LABEL: fcmps_oge:
93363b17eb9SCraig Topper; RV32I:       # %bb.0:
93463b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
93563b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
936eabaee0cSFangrui Song; RV32I-NEXT:    call __gedf2
937d660c0d7SLiqin Weng; RV32I-NEXT:    slti a0, a0, 0
938d660c0d7SLiqin Weng; RV32I-NEXT:    xori a0, a0, 1
93963b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
94063b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
94163b17eb9SCraig Topper; RV32I-NEXT:    ret
94263b17eb9SCraig Topper;
94363b17eb9SCraig Topper; RV64I-LABEL: fcmps_oge:
94463b17eb9SCraig Topper; RV64I:       # %bb.0:
94563b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
94663b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
947eabaee0cSFangrui Song; RV64I-NEXT:    call __gedf2
948d660c0d7SLiqin Weng; RV64I-NEXT:    slti a0, a0, 0
949d660c0d7SLiqin Weng; RV64I-NEXT:    xori a0, a0, 1
95063b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
95163b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
95263b17eb9SCraig Topper; RV64I-NEXT:    ret
95363b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"oge", metadata !"fpexcept.strict") strictfp
95463b17eb9SCraig Topper  %2 = zext i1 %1 to i32
95563b17eb9SCraig Topper  ret i32 %2
95663b17eb9SCraig Topper}
95763b17eb9SCraig Topper
95863b17eb9SCraig Topperdefine i32 @fcmps_olt(double %a, double %b) nounwind strictfp {
95984bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmps_olt:
96084bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
96184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    flt.d a0, fa0, fa1
96284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
96363b17eb9SCraig Topper;
9648b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmps_olt:
9658b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
9668b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    flt.d a0, a0, a2
9678b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
9688b90f8e0SShao-Ce SUN;
9692dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmps_olt:
9702dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
9712dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a0, a0, a1
9722dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
9732dc0fa05SShao-Ce SUN;
97463b17eb9SCraig Topper; RV32I-LABEL: fcmps_olt:
97563b17eb9SCraig Topper; RV32I:       # %bb.0:
97663b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
97763b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
978eabaee0cSFangrui Song; RV32I-NEXT:    call __ltdf2
97963b17eb9SCraig Topper; RV32I-NEXT:    slti a0, a0, 0
98063b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
98163b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
98263b17eb9SCraig Topper; RV32I-NEXT:    ret
98363b17eb9SCraig Topper;
98463b17eb9SCraig Topper; RV64I-LABEL: fcmps_olt:
98563b17eb9SCraig Topper; RV64I:       # %bb.0:
98663b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
98763b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
988eabaee0cSFangrui Song; RV64I-NEXT:    call __ltdf2
98963b17eb9SCraig Topper; RV64I-NEXT:    slti a0, a0, 0
99063b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
99163b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
99263b17eb9SCraig Topper; RV64I-NEXT:    ret
99363b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"olt", metadata !"fpexcept.strict") strictfp
99463b17eb9SCraig Topper  %2 = zext i1 %1 to i32
99563b17eb9SCraig Topper  ret i32 %2
99663b17eb9SCraig Topper}
99763b17eb9SCraig Topper
99863b17eb9SCraig Topperdefine i32 @fcmps_ole(double %a, double %b) nounwind strictfp {
99984bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmps_ole:
100084bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
100184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fle.d a0, fa0, fa1
100284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
100363b17eb9SCraig Topper;
10048b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmps_ole:
10058b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
10068b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fle.d a0, a0, a2
10078b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
10088b90f8e0SShao-Ce SUN;
10092dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmps_ole:
10102dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
10112dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fle.d a0, a0, a1
10122dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
10132dc0fa05SShao-Ce SUN;
101463b17eb9SCraig Topper; RV32I-LABEL: fcmps_ole:
101563b17eb9SCraig Topper; RV32I:       # %bb.0:
101663b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
101763b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1018eabaee0cSFangrui Song; RV32I-NEXT:    call __ledf2
101963b17eb9SCraig Topper; RV32I-NEXT:    slti a0, a0, 1
102063b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
102163b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
102263b17eb9SCraig Topper; RV32I-NEXT:    ret
102363b17eb9SCraig Topper;
102463b17eb9SCraig Topper; RV64I-LABEL: fcmps_ole:
102563b17eb9SCraig Topper; RV64I:       # %bb.0:
102663b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
102763b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1028eabaee0cSFangrui Song; RV64I-NEXT:    call __ledf2
102963b17eb9SCraig Topper; RV64I-NEXT:    slti a0, a0, 1
103063b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
103163b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
103263b17eb9SCraig Topper; RV64I-NEXT:    ret
103363b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ole", metadata !"fpexcept.strict") strictfp
103463b17eb9SCraig Topper  %2 = zext i1 %1 to i32
103563b17eb9SCraig Topper  ret i32 %2
103663b17eb9SCraig Topper}
103763b17eb9SCraig Topper
103863b17eb9SCraig Topperdefine i32 @fcmps_one(double %a, double %b) nounwind strictfp {
103984bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmps_one:
104084bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
104184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    flt.d a0, fa0, fa1
104284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    flt.d a1, fa1, fa0
104384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    or a0, a1, a0
104484bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
104563b17eb9SCraig Topper;
10468b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmps_one:
10478b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
10488b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    flt.d a4, a0, a2
10498b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    flt.d a0, a2, a0
10508b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    or a0, a0, a4
10518b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
10528b90f8e0SShao-Ce SUN;
10532dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmps_one:
10542dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
10552dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a2, a0, a1
10562dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a0, a1, a0
10572dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    or a0, a0, a2
10582dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
10592dc0fa05SShao-Ce SUN;
106063b17eb9SCraig Topper; RV32I-LABEL: fcmps_one:
106163b17eb9SCraig Topper; RV32I:       # %bb.0:
106263b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -32
106363b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
106463b17eb9SCraig Topper; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
106563b17eb9SCraig Topper; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
106663b17eb9SCraig Topper; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
106763b17eb9SCraig Topper; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill
106863b17eb9SCraig Topper; RV32I-NEXT:    sw s4, 8(sp) # 4-byte Folded Spill
10698def89b5Swangpc; RV32I-NEXT:    mv s0, a3
10708def89b5Swangpc; RV32I-NEXT:    mv s1, a2
10718def89b5Swangpc; RV32I-NEXT:    mv s2, a1
10728def89b5Swangpc; RV32I-NEXT:    mv s3, a0
1073eabaee0cSFangrui Song; RV32I-NEXT:    call __eqdf2
107463b17eb9SCraig Topper; RV32I-NEXT:    snez s4, a0
10758def89b5Swangpc; RV32I-NEXT:    mv a0, s3
10768def89b5Swangpc; RV32I-NEXT:    mv a1, s2
10778def89b5Swangpc; RV32I-NEXT:    mv a2, s1
10788def89b5Swangpc; RV32I-NEXT:    mv a3, s0
1079eabaee0cSFangrui Song; RV32I-NEXT:    call __unorddf2
108063b17eb9SCraig Topper; RV32I-NEXT:    seqz a0, a0
108163b17eb9SCraig Topper; RV32I-NEXT:    and a0, a0, s4
108263b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
108363b17eb9SCraig Topper; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
108463b17eb9SCraig Topper; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
108563b17eb9SCraig Topper; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
108663b17eb9SCraig Topper; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload
108763b17eb9SCraig Topper; RV32I-NEXT:    lw s4, 8(sp) # 4-byte Folded Reload
108863b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 32
108963b17eb9SCraig Topper; RV32I-NEXT:    ret
109063b17eb9SCraig Topper;
109163b17eb9SCraig Topper; RV64I-LABEL: fcmps_one:
109263b17eb9SCraig Topper; RV64I:       # %bb.0:
109363b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -32
109463b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
109563b17eb9SCraig Topper; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
109663b17eb9SCraig Topper; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
109763b17eb9SCraig Topper; RV64I-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
109863b17eb9SCraig Topper; RV64I-NEXT:    mv s0, a1
109963b17eb9SCraig Topper; RV64I-NEXT:    mv s1, a0
1100eabaee0cSFangrui Song; RV64I-NEXT:    call __eqdf2
110163b17eb9SCraig Topper; RV64I-NEXT:    snez s2, a0
110263b17eb9SCraig Topper; RV64I-NEXT:    mv a0, s1
110363b17eb9SCraig Topper; RV64I-NEXT:    mv a1, s0
1104eabaee0cSFangrui Song; RV64I-NEXT:    call __unorddf2
110563b17eb9SCraig Topper; RV64I-NEXT:    seqz a0, a0
110663b17eb9SCraig Topper; RV64I-NEXT:    and a0, a0, s2
110763b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
110863b17eb9SCraig Topper; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
110963b17eb9SCraig Topper; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
111063b17eb9SCraig Topper; RV64I-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload
111163b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 32
111263b17eb9SCraig Topper; RV64I-NEXT:    ret
111363b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"one", metadata !"fpexcept.strict") strictfp
111463b17eb9SCraig Topper  %2 = zext i1 %1 to i32
111563b17eb9SCraig Topper  ret i32 %2
111663b17eb9SCraig Topper}
111763b17eb9SCraig Topper
111863b17eb9SCraig Topperdefine i32 @fcmps_ord(double %a, double %b) nounwind strictfp {
111984bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmps_ord:
112084bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
112184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fle.d a0, fa1, fa1
112284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fle.d a1, fa0, fa0
112384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    and a0, a1, a0
112484bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
112563b17eb9SCraig Topper;
11268b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmps_ord:
11278b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
11288b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fle.d a2, a2, a2
11298b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fle.d a0, a0, a0
11308b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    and a0, a0, a2
11318b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
11328b90f8e0SShao-Ce SUN;
11332dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmps_ord:
11342dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
11352dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fle.d a1, a1, a1
11362dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fle.d a0, a0, a0
11372dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    and a0, a0, a1
11382dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
11392dc0fa05SShao-Ce SUN;
114063b17eb9SCraig Topper; RV32I-LABEL: fcmps_ord:
114163b17eb9SCraig Topper; RV32I:       # %bb.0:
114263b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
114363b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1144eabaee0cSFangrui Song; RV32I-NEXT:    call __unorddf2
114563b17eb9SCraig Topper; RV32I-NEXT:    seqz a0, a0
114663b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
114763b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
114863b17eb9SCraig Topper; RV32I-NEXT:    ret
114963b17eb9SCraig Topper;
115063b17eb9SCraig Topper; RV64I-LABEL: fcmps_ord:
115163b17eb9SCraig Topper; RV64I:       # %bb.0:
115263b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
115363b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1154eabaee0cSFangrui Song; RV64I-NEXT:    call __unorddf2
115563b17eb9SCraig Topper; RV64I-NEXT:    seqz a0, a0
115663b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
115763b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
115863b17eb9SCraig Topper; RV64I-NEXT:    ret
115963b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ord", metadata !"fpexcept.strict") strictfp
116063b17eb9SCraig Topper  %2 = zext i1 %1 to i32
116163b17eb9SCraig Topper  ret i32 %2
116263b17eb9SCraig Topper}
116363b17eb9SCraig Topper
116463b17eb9SCraig Topperdefine i32 @fcmps_ueq(double %a, double %b) nounwind strictfp {
116584bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmps_ueq:
116684bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
116784bacb18SShao-Ce SUN; CHECKIFD-NEXT:    flt.d a0, fa0, fa1
116884bacb18SShao-Ce SUN; CHECKIFD-NEXT:    flt.d a1, fa1, fa0
116984bacb18SShao-Ce SUN; CHECKIFD-NEXT:    or a0, a1, a0
117084bacb18SShao-Ce SUN; CHECKIFD-NEXT:    xori a0, a0, 1
117184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
117263b17eb9SCraig Topper;
11738b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmps_ueq:
11748b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
11758b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    flt.d a4, a0, a2
11768b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    flt.d a0, a2, a0
11778b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    or a0, a0, a4
11788b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    xori a0, a0, 1
11798b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
11808b90f8e0SShao-Ce SUN;
11812dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmps_ueq:
11822dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
11832dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a2, a0, a1
11842dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a0, a1, a0
11852dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    or a0, a0, a2
11862dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    xori a0, a0, 1
11872dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
11882dc0fa05SShao-Ce SUN;
118963b17eb9SCraig Topper; RV32I-LABEL: fcmps_ueq:
119063b17eb9SCraig Topper; RV32I:       # %bb.0:
119163b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -32
119263b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
119363b17eb9SCraig Topper; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
119463b17eb9SCraig Topper; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
119563b17eb9SCraig Topper; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
119663b17eb9SCraig Topper; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill
119763b17eb9SCraig Topper; RV32I-NEXT:    sw s4, 8(sp) # 4-byte Folded Spill
11988def89b5Swangpc; RV32I-NEXT:    mv s0, a3
11998def89b5Swangpc; RV32I-NEXT:    mv s1, a2
12008def89b5Swangpc; RV32I-NEXT:    mv s2, a1
12018def89b5Swangpc; RV32I-NEXT:    mv s3, a0
1202eabaee0cSFangrui Song; RV32I-NEXT:    call __eqdf2
120363b17eb9SCraig Topper; RV32I-NEXT:    seqz s4, a0
12048def89b5Swangpc; RV32I-NEXT:    mv a0, s3
12058def89b5Swangpc; RV32I-NEXT:    mv a1, s2
12068def89b5Swangpc; RV32I-NEXT:    mv a2, s1
12078def89b5Swangpc; RV32I-NEXT:    mv a3, s0
1208eabaee0cSFangrui Song; RV32I-NEXT:    call __unorddf2
120963b17eb9SCraig Topper; RV32I-NEXT:    snez a0, a0
121063b17eb9SCraig Topper; RV32I-NEXT:    or a0, a0, s4
121163b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
121263b17eb9SCraig Topper; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
121363b17eb9SCraig Topper; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
121463b17eb9SCraig Topper; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
121563b17eb9SCraig Topper; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload
121663b17eb9SCraig Topper; RV32I-NEXT:    lw s4, 8(sp) # 4-byte Folded Reload
121763b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 32
121863b17eb9SCraig Topper; RV32I-NEXT:    ret
121963b17eb9SCraig Topper;
122063b17eb9SCraig Topper; RV64I-LABEL: fcmps_ueq:
122163b17eb9SCraig Topper; RV64I:       # %bb.0:
122263b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -32
122363b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
122463b17eb9SCraig Topper; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
122563b17eb9SCraig Topper; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
122663b17eb9SCraig Topper; RV64I-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
122763b17eb9SCraig Topper; RV64I-NEXT:    mv s0, a1
122863b17eb9SCraig Topper; RV64I-NEXT:    mv s1, a0
1229eabaee0cSFangrui Song; RV64I-NEXT:    call __eqdf2
123063b17eb9SCraig Topper; RV64I-NEXT:    seqz s2, a0
123163b17eb9SCraig Topper; RV64I-NEXT:    mv a0, s1
123263b17eb9SCraig Topper; RV64I-NEXT:    mv a1, s0
1233eabaee0cSFangrui Song; RV64I-NEXT:    call __unorddf2
123463b17eb9SCraig Topper; RV64I-NEXT:    snez a0, a0
123563b17eb9SCraig Topper; RV64I-NEXT:    or a0, a0, s2
123663b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
123763b17eb9SCraig Topper; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
123863b17eb9SCraig Topper; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
123963b17eb9SCraig Topper; RV64I-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload
124063b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 32
124163b17eb9SCraig Topper; RV64I-NEXT:    ret
124263b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ueq", metadata !"fpexcept.strict") strictfp
124363b17eb9SCraig Topper  %2 = zext i1 %1 to i32
124463b17eb9SCraig Topper  ret i32 %2
124563b17eb9SCraig Topper}
124663b17eb9SCraig Topper
124763b17eb9SCraig Topperdefine i32 @fcmps_ugt(double %a, double %b) nounwind strictfp {
124884bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmps_ugt:
124984bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
125084bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fle.d a0, fa0, fa1
125184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    xori a0, a0, 1
125284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
125363b17eb9SCraig Topper;
12548b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmps_ugt:
12558b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
12568b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fle.d a0, a0, a2
12578b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    xori a0, a0, 1
12588b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
12598b90f8e0SShao-Ce SUN;
12602dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmps_ugt:
12612dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
12622dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fle.d a0, a0, a1
12632dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    xori a0, a0, 1
12642dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
12652dc0fa05SShao-Ce SUN;
126663b17eb9SCraig Topper; RV32I-LABEL: fcmps_ugt:
126763b17eb9SCraig Topper; RV32I:       # %bb.0:
126863b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
126963b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1270eabaee0cSFangrui Song; RV32I-NEXT:    call __ledf2
127163b17eb9SCraig Topper; RV32I-NEXT:    sgtz a0, a0
127263b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
127363b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
127463b17eb9SCraig Topper; RV32I-NEXT:    ret
127563b17eb9SCraig Topper;
127663b17eb9SCraig Topper; RV64I-LABEL: fcmps_ugt:
127763b17eb9SCraig Topper; RV64I:       # %bb.0:
127863b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
127963b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1280eabaee0cSFangrui Song; RV64I-NEXT:    call __ledf2
128163b17eb9SCraig Topper; RV64I-NEXT:    sgtz a0, a0
128263b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
128363b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
128463b17eb9SCraig Topper; RV64I-NEXT:    ret
128563b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ugt", metadata !"fpexcept.strict") strictfp
128663b17eb9SCraig Topper  %2 = zext i1 %1 to i32
128763b17eb9SCraig Topper  ret i32 %2
128863b17eb9SCraig Topper}
128963b17eb9SCraig Topper
129063b17eb9SCraig Topperdefine i32 @fcmps_uge(double %a, double %b) nounwind strictfp {
129184bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmps_uge:
129284bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
129384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    flt.d a0, fa0, fa1
129484bacb18SShao-Ce SUN; CHECKIFD-NEXT:    xori a0, a0, 1
129584bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
129663b17eb9SCraig Topper;
12978b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmps_uge:
12988b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
12998b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    flt.d a0, a0, a2
13008b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    xori a0, a0, 1
13018b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
13028b90f8e0SShao-Ce SUN;
13032dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmps_uge:
13042dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
13052dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a0, a0, a1
13062dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    xori a0, a0, 1
13072dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
13082dc0fa05SShao-Ce SUN;
130963b17eb9SCraig Topper; RV32I-LABEL: fcmps_uge:
131063b17eb9SCraig Topper; RV32I:       # %bb.0:
131163b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
131263b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1313eabaee0cSFangrui Song; RV32I-NEXT:    call __ltdf2
1314d660c0d7SLiqin Weng; RV32I-NEXT:    slti a0, a0, 0
1315d660c0d7SLiqin Weng; RV32I-NEXT:    xori a0, a0, 1
131663b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
131763b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
131863b17eb9SCraig Topper; RV32I-NEXT:    ret
131963b17eb9SCraig Topper;
132063b17eb9SCraig Topper; RV64I-LABEL: fcmps_uge:
132163b17eb9SCraig Topper; RV64I:       # %bb.0:
132263b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
132363b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1324eabaee0cSFangrui Song; RV64I-NEXT:    call __ltdf2
1325d660c0d7SLiqin Weng; RV64I-NEXT:    slti a0, a0, 0
1326d660c0d7SLiqin Weng; RV64I-NEXT:    xori a0, a0, 1
132763b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
132863b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
132963b17eb9SCraig Topper; RV64I-NEXT:    ret
133063b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"uge", metadata !"fpexcept.strict") strictfp
133163b17eb9SCraig Topper  %2 = zext i1 %1 to i32
133263b17eb9SCraig Topper  ret i32 %2
133363b17eb9SCraig Topper}
133463b17eb9SCraig Topper
133563b17eb9SCraig Topperdefine i32 @fcmps_ult(double %a, double %b) nounwind strictfp {
133684bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmps_ult:
133784bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
133884bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fle.d a0, fa1, fa0
133984bacb18SShao-Ce SUN; CHECKIFD-NEXT:    xori a0, a0, 1
134084bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
134163b17eb9SCraig Topper;
13428b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmps_ult:
13438b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
13448b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fle.d a0, a2, a0
13458b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    xori a0, a0, 1
13468b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
13478b90f8e0SShao-Ce SUN;
13482dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmps_ult:
13492dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
13502dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fle.d a0, a1, a0
13512dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    xori a0, a0, 1
13522dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
13532dc0fa05SShao-Ce SUN;
135463b17eb9SCraig Topper; RV32I-LABEL: fcmps_ult:
135563b17eb9SCraig Topper; RV32I:       # %bb.0:
135663b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
135763b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1358eabaee0cSFangrui Song; RV32I-NEXT:    call __gedf2
135963b17eb9SCraig Topper; RV32I-NEXT:    slti a0, a0, 0
136063b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
136163b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
136263b17eb9SCraig Topper; RV32I-NEXT:    ret
136363b17eb9SCraig Topper;
136463b17eb9SCraig Topper; RV64I-LABEL: fcmps_ult:
136563b17eb9SCraig Topper; RV64I:       # %bb.0:
136663b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
136763b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1368eabaee0cSFangrui Song; RV64I-NEXT:    call __gedf2
136963b17eb9SCraig Topper; RV64I-NEXT:    slti a0, a0, 0
137063b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
137163b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
137263b17eb9SCraig Topper; RV64I-NEXT:    ret
137363b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ult", metadata !"fpexcept.strict") strictfp
137463b17eb9SCraig Topper  %2 = zext i1 %1 to i32
137563b17eb9SCraig Topper  ret i32 %2
137663b17eb9SCraig Topper}
137763b17eb9SCraig Topper
137863b17eb9SCraig Topperdefine i32 @fcmps_ule(double %a, double %b) nounwind strictfp {
137984bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmps_ule:
138084bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
138184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    flt.d a0, fa1, fa0
138284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    xori a0, a0, 1
138384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
138463b17eb9SCraig Topper;
13858b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmps_ule:
13868b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
13878b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    flt.d a0, a2, a0
13888b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    xori a0, a0, 1
13898b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
13908b90f8e0SShao-Ce SUN;
13912dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmps_ule:
13922dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
13932dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a0, a1, a0
13942dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    xori a0, a0, 1
13952dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
13962dc0fa05SShao-Ce SUN;
139763b17eb9SCraig Topper; RV32I-LABEL: fcmps_ule:
139863b17eb9SCraig Topper; RV32I:       # %bb.0:
139963b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
140063b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1401eabaee0cSFangrui Song; RV32I-NEXT:    call __gtdf2
140263b17eb9SCraig Topper; RV32I-NEXT:    slti a0, a0, 1
140363b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
140463b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
140563b17eb9SCraig Topper; RV32I-NEXT:    ret
140663b17eb9SCraig Topper;
140763b17eb9SCraig Topper; RV64I-LABEL: fcmps_ule:
140863b17eb9SCraig Topper; RV64I:       # %bb.0:
140963b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
141063b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1411eabaee0cSFangrui Song; RV64I-NEXT:    call __gtdf2
141263b17eb9SCraig Topper; RV64I-NEXT:    slti a0, a0, 1
141363b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
141463b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
141563b17eb9SCraig Topper; RV64I-NEXT:    ret
141663b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ule", metadata !"fpexcept.strict") strictfp
141763b17eb9SCraig Topper  %2 = zext i1 %1 to i32
141863b17eb9SCraig Topper  ret i32 %2
141963b17eb9SCraig Topper}
142063b17eb9SCraig Topper
142163b17eb9SCraig Topperdefine i32 @fcmps_une(double %a, double %b) nounwind strictfp {
142284bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmps_une:
142384bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
142484bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fle.d a0, fa1, fa0
142584bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fle.d a1, fa0, fa1
142684bacb18SShao-Ce SUN; CHECKIFD-NEXT:    and a0, a1, a0
142784bacb18SShao-Ce SUN; CHECKIFD-NEXT:    xori a0, a0, 1
142884bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
142963b17eb9SCraig Topper;
14308b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmps_une:
14318b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
14328b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fle.d a4, a2, a0
14338b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fle.d a0, a0, a2
14348b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    and a0, a0, a4
14358b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    xori a0, a0, 1
14368b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
14378b90f8e0SShao-Ce SUN;
14382dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmps_une:
14392dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
14402dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fle.d a2, a1, a0
14412dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fle.d a0, a0, a1
14422dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    and a0, a0, a2
14432dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    xori a0, a0, 1
14442dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
14452dc0fa05SShao-Ce SUN;
144663b17eb9SCraig Topper; RV32I-LABEL: fcmps_une:
144763b17eb9SCraig Topper; RV32I:       # %bb.0:
144863b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
144963b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1450eabaee0cSFangrui Song; RV32I-NEXT:    call __nedf2
145163b17eb9SCraig Topper; RV32I-NEXT:    snez a0, a0
145263b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
145363b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
145463b17eb9SCraig Topper; RV32I-NEXT:    ret
145563b17eb9SCraig Topper;
145663b17eb9SCraig Topper; RV64I-LABEL: fcmps_une:
145763b17eb9SCraig Topper; RV64I:       # %bb.0:
145863b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
145963b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1460eabaee0cSFangrui Song; RV64I-NEXT:    call __nedf2
146163b17eb9SCraig Topper; RV64I-NEXT:    snez a0, a0
146263b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
146363b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
146463b17eb9SCraig Topper; RV64I-NEXT:    ret
146563b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"une", metadata !"fpexcept.strict") strictfp
146663b17eb9SCraig Topper  %2 = zext i1 %1 to i32
146763b17eb9SCraig Topper  ret i32 %2
146863b17eb9SCraig Topper}
146963b17eb9SCraig Topper
147063b17eb9SCraig Topperdefine i32 @fcmps_uno(double %a, double %b) nounwind strictfp {
147184bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcmps_uno:
147284bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
147384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fle.d a0, fa1, fa1
147484bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fle.d a1, fa0, fa0
147584bacb18SShao-Ce SUN; CHECKIFD-NEXT:    and a0, a1, a0
147684bacb18SShao-Ce SUN; CHECKIFD-NEXT:    xori a0, a0, 1
147784bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
147863b17eb9SCraig Topper;
14798b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcmps_uno:
14808b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
14818b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fle.d a2, a2, a2
14828b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fle.d a0, a0, a0
14838b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    and a0, a0, a2
14848b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    xori a0, a0, 1
14858b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
14868b90f8e0SShao-Ce SUN;
14872dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcmps_uno:
14882dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
14892dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fle.d a1, a1, a1
14902dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fle.d a0, a0, a0
14912dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    and a0, a0, a1
14922dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    xori a0, a0, 1
14932dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
14942dc0fa05SShao-Ce SUN;
149563b17eb9SCraig Topper; RV32I-LABEL: fcmps_uno:
149663b17eb9SCraig Topper; RV32I:       # %bb.0:
149763b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
149863b17eb9SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1499eabaee0cSFangrui Song; RV32I-NEXT:    call __unorddf2
150063b17eb9SCraig Topper; RV32I-NEXT:    snez a0, a0
150163b17eb9SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
150263b17eb9SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
150363b17eb9SCraig Topper; RV32I-NEXT:    ret
150463b17eb9SCraig Topper;
150563b17eb9SCraig Topper; RV64I-LABEL: fcmps_uno:
150663b17eb9SCraig Topper; RV64I:       # %bb.0:
150763b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
150863b17eb9SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1509eabaee0cSFangrui Song; RV64I-NEXT:    call __unorddf2
151063b17eb9SCraig Topper; RV64I-NEXT:    snez a0, a0
151163b17eb9SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
151263b17eb9SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
151363b17eb9SCraig Topper; RV64I-NEXT:    ret
151463b17eb9SCraig Topper  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"uno", metadata !"fpexcept.strict") strictfp
151563b17eb9SCraig Topper  %2 = zext i1 %1 to i32
151663b17eb9SCraig Topper  ret i32 %2
151763b17eb9SCraig Topper}
1518