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