115787ccdSCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 215787ccdSCraig Topper; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+d \ 3b271184fSCraig Topper; RUN: -verify-machineinstrs -disable-strictnode-mutation -target-abi=ilp32d \ 484bacb18SShao-Ce SUN; RUN: | FileCheck -check-prefixes=CHECKIFD,RV32IFD %s 515787ccdSCraig Topper; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+d \ 6b271184fSCraig Topper; RUN: -verify-machineinstrs -disable-strictnode-mutation -target-abi=lp64d \ 784bacb18SShao-Ce SUN; RUN: | FileCheck -check-prefixes=CHECKIFD,RV64IFD %s 88b90f8e0SShao-Ce SUN; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zdinx \ 98b90f8e0SShao-Ce SUN; RUN: -verify-machineinstrs -disable-strictnode-mutation -target-abi=ilp32 \ 108b90f8e0SShao-Ce SUN; RUN: | FileCheck -check-prefix=RV32IZFINXZDINX %s 112dc0fa05SShao-Ce SUN; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zdinx \ 122dc0fa05SShao-Ce SUN; RUN: -verify-machineinstrs -disable-strictnode-mutation -target-abi=lp64 \ 132dc0fa05SShao-Ce SUN; RUN: | FileCheck -check-prefix=RV64IZFINXZDINX %s 1415787ccdSCraig Topper; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 \ 1515787ccdSCraig Topper; RUN: -verify-machineinstrs -disable-strictnode-mutation \ 1615787ccdSCraig Topper; RUN: | FileCheck -check-prefix=RV32I %s 1715787ccdSCraig Topper; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 \ 1815787ccdSCraig Topper; RUN: -verify-machineinstrs -disable-strictnode-mutation \ 1915787ccdSCraig Topper; RUN: | FileCheck -check-prefix=RV64I %s 2015787ccdSCraig Topper 2115787ccdSCraig Topperdeclare double @llvm.experimental.constrained.sqrt.f64(double, metadata, metadata) 2215787ccdSCraig Topper 2315787ccdSCraig Topperdefine double @sqrt_f64(double %a) nounwind strictfp { 2484bacb18SShao-Ce SUN; CHECKIFD-LABEL: sqrt_f64: 2584bacb18SShao-Ce SUN; CHECKIFD: # %bb.0: 2684bacb18SShao-Ce SUN; CHECKIFD-NEXT: fsqrt.d fa0, fa0 2784bacb18SShao-Ce SUN; CHECKIFD-NEXT: ret 2815787ccdSCraig Topper; 298b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: sqrt_f64: 308b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 318b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: fsqrt.d a0, a0 328b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 338b90f8e0SShao-Ce SUN; 342dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: sqrt_f64: 352dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 362dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: fsqrt.d a0, a0 372dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 382dc0fa05SShao-Ce SUN; 3915787ccdSCraig Topper; RV32I-LABEL: sqrt_f64: 4015787ccdSCraig Topper; RV32I: # %bb.0: 4115787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 4215787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 43eabaee0cSFangrui Song; RV32I-NEXT: call sqrt 4415787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4515787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 4615787ccdSCraig Topper; RV32I-NEXT: ret 4715787ccdSCraig Topper; 4815787ccdSCraig Topper; RV64I-LABEL: sqrt_f64: 4915787ccdSCraig Topper; RV64I: # %bb.0: 5015787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 5115787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 52eabaee0cSFangrui Song; RV64I-NEXT: call sqrt 5315787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5415787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 5515787ccdSCraig Topper; RV64I-NEXT: ret 5615787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.sqrt.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 5715787ccdSCraig Topper ret double %1 5815787ccdSCraig Topper} 5915787ccdSCraig Topper 60819abe41SSerge Pavlovdeclare double @llvm.experimental.constrained.powi.f64(double, i32, metadata, metadata) 6115787ccdSCraig Topper 6215787ccdSCraig Topperdefine double @powi_f64(double %a, i32 %b) nounwind strictfp { 6315787ccdSCraig Topper; RV32IFD-LABEL: powi_f64: 6415787ccdSCraig Topper; RV32IFD: # %bb.0: 6515787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 6615787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 67eabaee0cSFangrui Song; RV32IFD-NEXT: call __powidf2 6815787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6915787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 7015787ccdSCraig Topper; RV32IFD-NEXT: ret 7115787ccdSCraig Topper; 7215787ccdSCraig Topper; RV64IFD-LABEL: powi_f64: 7315787ccdSCraig Topper; RV64IFD: # %bb.0: 7415787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 7515787ccdSCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 76b271184fSCraig Topper; RV64IFD-NEXT: sext.w a0, a0 77eabaee0cSFangrui Song; RV64IFD-NEXT: call __powidf2 7815787ccdSCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 7915787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 8015787ccdSCraig Topper; RV64IFD-NEXT: ret 8115787ccdSCraig Topper; 828b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: powi_f64: 838b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 848b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 858b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 86eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call __powidf2 878b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 888b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 898b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 908b90f8e0SShao-Ce SUN; 912dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: powi_f64: 922dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 932dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 942dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 952dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sext.w a1, a1 96eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT: call __powidf2 972dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 982dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 992dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 1002dc0fa05SShao-Ce SUN; 10115787ccdSCraig Topper; RV32I-LABEL: powi_f64: 10215787ccdSCraig Topper; RV32I: # %bb.0: 10315787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 10415787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 105eabaee0cSFangrui Song; RV32I-NEXT: call __powidf2 10615787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 10715787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 10815787ccdSCraig Topper; RV32I-NEXT: ret 10915787ccdSCraig Topper; 11015787ccdSCraig Topper; RV64I-LABEL: powi_f64: 11115787ccdSCraig Topper; RV64I: # %bb.0: 11215787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 11315787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 11415787ccdSCraig Topper; RV64I-NEXT: sext.w a1, a1 115eabaee0cSFangrui Song; RV64I-NEXT: call __powidf2 11615787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 11715787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 11815787ccdSCraig Topper; RV64I-NEXT: ret 119819abe41SSerge Pavlov %1 = call double @llvm.experimental.constrained.powi.f64(double %a, i32 %b, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 12015787ccdSCraig Topper ret double %1 12115787ccdSCraig Topper} 12215787ccdSCraig Topper 12315787ccdSCraig Topperdeclare double @llvm.experimental.constrained.sin.f64(double, metadata, metadata) 12415787ccdSCraig Topper 12515787ccdSCraig Topperdefine double @sin_f64(double %a) nounwind strictfp { 12615787ccdSCraig Topper; RV32IFD-LABEL: sin_f64: 12715787ccdSCraig Topper; RV32IFD: # %bb.0: 12815787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 12915787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 130eabaee0cSFangrui Song; RV32IFD-NEXT: call sin 13115787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 13215787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 13315787ccdSCraig Topper; RV32IFD-NEXT: ret 13415787ccdSCraig Topper; 13515787ccdSCraig Topper; RV64IFD-LABEL: sin_f64: 13615787ccdSCraig Topper; RV64IFD: # %bb.0: 13715787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 13815787ccdSCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 139eabaee0cSFangrui Song; RV64IFD-NEXT: call sin 14015787ccdSCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 14115787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 14215787ccdSCraig Topper; RV64IFD-NEXT: ret 14315787ccdSCraig Topper; 1448b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: sin_f64: 1458b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 1468b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 1478b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 148eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call sin 1498b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1508b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 1518b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 1528b90f8e0SShao-Ce SUN; 1532dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: sin_f64: 1542dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 1552dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 1562dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 157eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT: call sin 1582dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1592dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 1602dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 1612dc0fa05SShao-Ce SUN; 16215787ccdSCraig Topper; RV32I-LABEL: sin_f64: 16315787ccdSCraig Topper; RV32I: # %bb.0: 16415787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 16515787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 166eabaee0cSFangrui Song; RV32I-NEXT: call sin 16715787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 16815787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 16915787ccdSCraig Topper; RV32I-NEXT: ret 17015787ccdSCraig Topper; 17115787ccdSCraig Topper; RV64I-LABEL: sin_f64: 17215787ccdSCraig Topper; RV64I: # %bb.0: 17315787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 17415787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 175eabaee0cSFangrui Song; RV64I-NEXT: call sin 17615787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 17715787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 17815787ccdSCraig Topper; RV64I-NEXT: ret 17915787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.sin.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 18015787ccdSCraig Topper ret double %1 18115787ccdSCraig Topper} 18215787ccdSCraig Topper 18315787ccdSCraig Topperdeclare double @llvm.experimental.constrained.cos.f64(double, metadata, metadata) 18415787ccdSCraig Topper 18515787ccdSCraig Topperdefine double @cos_f64(double %a) nounwind strictfp { 18615787ccdSCraig Topper; RV32IFD-LABEL: cos_f64: 18715787ccdSCraig Topper; RV32IFD: # %bb.0: 18815787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 18915787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 190eabaee0cSFangrui Song; RV32IFD-NEXT: call cos 19115787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 19215787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 19315787ccdSCraig Topper; RV32IFD-NEXT: ret 19415787ccdSCraig Topper; 19515787ccdSCraig Topper; RV64IFD-LABEL: cos_f64: 19615787ccdSCraig Topper; RV64IFD: # %bb.0: 19715787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 19815787ccdSCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 199eabaee0cSFangrui Song; RV64IFD-NEXT: call cos 20015787ccdSCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 20115787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 20215787ccdSCraig Topper; RV64IFD-NEXT: ret 20315787ccdSCraig Topper; 2048b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: cos_f64: 2058b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 2068b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 2078b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 208eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call cos 2098b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2108b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 2118b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 2128b90f8e0SShao-Ce SUN; 2132dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: cos_f64: 2142dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 2152dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 2162dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 217eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT: call cos 2182dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2192dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 2202dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 2212dc0fa05SShao-Ce SUN; 22215787ccdSCraig Topper; RV32I-LABEL: cos_f64: 22315787ccdSCraig Topper; RV32I: # %bb.0: 22415787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 22515787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 226eabaee0cSFangrui Song; RV32I-NEXT: call cos 22715787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 22815787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 22915787ccdSCraig Topper; RV32I-NEXT: ret 23015787ccdSCraig Topper; 23115787ccdSCraig Topper; RV64I-LABEL: cos_f64: 23215787ccdSCraig Topper; RV64I: # %bb.0: 23315787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 23415787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 235eabaee0cSFangrui Song; RV64I-NEXT: call cos 23615787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 23715787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 23815787ccdSCraig Topper; RV64I-NEXT: ret 23915787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.cos.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 24015787ccdSCraig Topper ret double %1 24115787ccdSCraig Topper} 24215787ccdSCraig Topper 24315787ccdSCraig Topper; The sin+cos combination results in an FSINCOS SelectionDAG node. 24415787ccdSCraig Topperdefine double @sincos_f64(double %a) nounwind strictfp { 24515787ccdSCraig Topper; RV32IFD-LABEL: sincos_f64: 24615787ccdSCraig Topper; RV32IFD: # %bb.0: 24715787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -32 24815787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 28(sp) # 4-byte Folded Spill 249b271184fSCraig Topper; RV32IFD-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill 250b271184fSCraig Topper; RV32IFD-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill 251b271184fSCraig Topper; RV32IFD-NEXT: fmv.d fs0, fa0 252eabaee0cSFangrui Song; RV32IFD-NEXT: call sin 253b271184fSCraig Topper; RV32IFD-NEXT: fmv.d fs1, fa0 254b271184fSCraig Topper; RV32IFD-NEXT: fmv.d fa0, fs0 255eabaee0cSFangrui Song; RV32IFD-NEXT: call cos 256b271184fSCraig Topper; RV32IFD-NEXT: fadd.d fa0, fs1, fa0 25715787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 28(sp) # 4-byte Folded Reload 258b271184fSCraig Topper; RV32IFD-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload 259b271184fSCraig Topper; RV32IFD-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload 26015787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 32 26115787ccdSCraig Topper; RV32IFD-NEXT: ret 26215787ccdSCraig Topper; 26315787ccdSCraig Topper; RV64IFD-LABEL: sincos_f64: 26415787ccdSCraig Topper; RV64IFD: # %bb.0: 26515787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, -32 26615787ccdSCraig Topper; RV64IFD-NEXT: sd ra, 24(sp) # 8-byte Folded Spill 267b271184fSCraig Topper; RV64IFD-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill 268b271184fSCraig Topper; RV64IFD-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill 269b271184fSCraig Topper; RV64IFD-NEXT: fmv.d fs0, fa0 270eabaee0cSFangrui Song; RV64IFD-NEXT: call sin 271b271184fSCraig Topper; RV64IFD-NEXT: fmv.d fs1, fa0 272b271184fSCraig Topper; RV64IFD-NEXT: fmv.d fa0, fs0 273eabaee0cSFangrui Song; RV64IFD-NEXT: call cos 274b271184fSCraig Topper; RV64IFD-NEXT: fadd.d fa0, fs1, fa0 27515787ccdSCraig Topper; RV64IFD-NEXT: ld ra, 24(sp) # 8-byte Folded Reload 276b271184fSCraig Topper; RV64IFD-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload 277b271184fSCraig Topper; RV64IFD-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload 27815787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, 32 27915787ccdSCraig Topper; RV64IFD-NEXT: ret 28015787ccdSCraig Topper; 2818b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: sincos_f64: 2828b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 2838b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -32 2848b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 28(sp) # 4-byte Folded Spill 2858b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw s0, 24(sp) # 4-byte Folded Spill 2868b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw s1, 20(sp) # 4-byte Folded Spill 2878b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw s2, 16(sp) # 4-byte Folded Spill 2888b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw s3, 12(sp) # 4-byte Folded Spill 2898b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: mv s0, a1 2908b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: mv s1, a0 291eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call sin 292576d81baSCraig Topper; RV32IZFINXZDINX-NEXT: mv s2, a0 293576d81baSCraig Topper; RV32IZFINXZDINX-NEXT: mv s3, a1 2948b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: mv a0, s1 2958b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: mv a1, s0 296eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call cos 2978b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: fadd.d a0, s2, a0 2988b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 28(sp) # 4-byte Folded Reload 2998b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw s0, 24(sp) # 4-byte Folded Reload 3008b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw s1, 20(sp) # 4-byte Folded Reload 3018b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw s2, 16(sp) # 4-byte Folded Reload 3028b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw s3, 12(sp) # 4-byte Folded Reload 3038b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 32 3048b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 3058b90f8e0SShao-Ce SUN; 3062dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: sincos_f64: 3072dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 3082dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, -32 3092dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd ra, 24(sp) # 8-byte Folded Spill 3102dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd s0, 16(sp) # 8-byte Folded Spill 3112dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd s1, 8(sp) # 8-byte Folded Spill 3122dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: mv s0, a0 313eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT: call sin 3142dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: mv s1, a0 3152dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: mv a0, s0 316eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT: call cos 3172dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: fadd.d a0, s1, a0 3182dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld ra, 24(sp) # 8-byte Folded Reload 3192dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld s0, 16(sp) # 8-byte Folded Reload 3202dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld s1, 8(sp) # 8-byte Folded Reload 3212dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, 32 3222dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 3232dc0fa05SShao-Ce SUN; 32415787ccdSCraig Topper; RV32I-LABEL: sincos_f64: 32515787ccdSCraig Topper; RV32I: # %bb.0: 32615787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -32 32715787ccdSCraig Topper; RV32I-NEXT: sw ra, 28(sp) # 4-byte Folded Spill 32815787ccdSCraig Topper; RV32I-NEXT: sw s0, 24(sp) # 4-byte Folded Spill 32915787ccdSCraig Topper; RV32I-NEXT: sw s1, 20(sp) # 4-byte Folded Spill 33015787ccdSCraig Topper; RV32I-NEXT: sw s2, 16(sp) # 4-byte Folded Spill 33115787ccdSCraig Topper; RV32I-NEXT: sw s3, 12(sp) # 4-byte Folded Spill 33215787ccdSCraig Topper; RV32I-NEXT: mv s0, a1 33315787ccdSCraig Topper; RV32I-NEXT: mv s1, a0 334eabaee0cSFangrui Song; RV32I-NEXT: call sin 33515787ccdSCraig Topper; RV32I-NEXT: mv s2, a0 33615787ccdSCraig Topper; RV32I-NEXT: mv s3, a1 33715787ccdSCraig Topper; RV32I-NEXT: mv a0, s1 33815787ccdSCraig Topper; RV32I-NEXT: mv a1, s0 339eabaee0cSFangrui Song; RV32I-NEXT: call cos 34015787ccdSCraig Topper; RV32I-NEXT: mv a2, a0 34115787ccdSCraig Topper; RV32I-NEXT: mv a3, a1 34215787ccdSCraig Topper; RV32I-NEXT: mv a0, s2 34315787ccdSCraig Topper; RV32I-NEXT: mv a1, s3 344eabaee0cSFangrui Song; RV32I-NEXT: call __adddf3 34515787ccdSCraig Topper; RV32I-NEXT: lw ra, 28(sp) # 4-byte Folded Reload 34615787ccdSCraig Topper; RV32I-NEXT: lw s0, 24(sp) # 4-byte Folded Reload 34715787ccdSCraig Topper; RV32I-NEXT: lw s1, 20(sp) # 4-byte Folded Reload 34815787ccdSCraig Topper; RV32I-NEXT: lw s2, 16(sp) # 4-byte Folded Reload 34915787ccdSCraig Topper; RV32I-NEXT: lw s3, 12(sp) # 4-byte Folded Reload 35015787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 32 35115787ccdSCraig Topper; RV32I-NEXT: ret 35215787ccdSCraig Topper; 35315787ccdSCraig Topper; RV64I-LABEL: sincos_f64: 35415787ccdSCraig Topper; RV64I: # %bb.0: 35515787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -32 35615787ccdSCraig Topper; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill 35715787ccdSCraig Topper; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill 35815787ccdSCraig Topper; RV64I-NEXT: sd s1, 8(sp) # 8-byte Folded Spill 35915787ccdSCraig Topper; RV64I-NEXT: mv s0, a0 360eabaee0cSFangrui Song; RV64I-NEXT: call sin 36115787ccdSCraig Topper; RV64I-NEXT: mv s1, a0 36215787ccdSCraig Topper; RV64I-NEXT: mv a0, s0 363eabaee0cSFangrui Song; RV64I-NEXT: call cos 36415787ccdSCraig Topper; RV64I-NEXT: mv a1, a0 36515787ccdSCraig Topper; RV64I-NEXT: mv a0, s1 366eabaee0cSFangrui Song; RV64I-NEXT: call __adddf3 36715787ccdSCraig Topper; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload 36815787ccdSCraig Topper; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload 36915787ccdSCraig Topper; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload 37015787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 32 37115787ccdSCraig Topper; RV64I-NEXT: ret 37215787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.sin.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 37315787ccdSCraig Topper %2 = call double @llvm.experimental.constrained.cos.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 37415787ccdSCraig Topper %3 = fadd double %1, %2 37515787ccdSCraig Topper ret double %3 37615787ccdSCraig Topper} 37715787ccdSCraig Topper 378189d4711SFarzon Lotfideclare double @llvm.experimental.constrained.tan.f64(double, metadata, metadata) 379189d4711SFarzon Lotfi 380189d4711SFarzon Lotfidefine double @tan_f64(double %a) nounwind strictfp { 381189d4711SFarzon Lotfi; RV32IFD-LABEL: tan_f64: 382189d4711SFarzon Lotfi; RV32IFD: # %bb.0: 383189d4711SFarzon Lotfi; RV32IFD-NEXT: addi sp, sp, -16 384189d4711SFarzon Lotfi; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 385189d4711SFarzon Lotfi; RV32IFD-NEXT: call tan 386189d4711SFarzon Lotfi; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 387189d4711SFarzon Lotfi; RV32IFD-NEXT: addi sp, sp, 16 388189d4711SFarzon Lotfi; RV32IFD-NEXT: ret 389189d4711SFarzon Lotfi; 390189d4711SFarzon Lotfi; RV64IFD-LABEL: tan_f64: 391189d4711SFarzon Lotfi; RV64IFD: # %bb.0: 392189d4711SFarzon Lotfi; RV64IFD-NEXT: addi sp, sp, -16 393189d4711SFarzon Lotfi; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 394189d4711SFarzon Lotfi; RV64IFD-NEXT: call tan 395189d4711SFarzon Lotfi; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 396189d4711SFarzon Lotfi; RV64IFD-NEXT: addi sp, sp, 16 397189d4711SFarzon Lotfi; RV64IFD-NEXT: ret 398189d4711SFarzon Lotfi; 399189d4711SFarzon Lotfi; RV32IZFINXZDINX-LABEL: tan_f64: 400189d4711SFarzon Lotfi; RV32IZFINXZDINX: # %bb.0: 401189d4711SFarzon Lotfi; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 402189d4711SFarzon Lotfi; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 403189d4711SFarzon Lotfi; RV32IZFINXZDINX-NEXT: call tan 404189d4711SFarzon Lotfi; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 405189d4711SFarzon Lotfi; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 406189d4711SFarzon Lotfi; RV32IZFINXZDINX-NEXT: ret 407189d4711SFarzon Lotfi; 408189d4711SFarzon Lotfi; RV64IZFINXZDINX-LABEL: tan_f64: 409189d4711SFarzon Lotfi; RV64IZFINXZDINX: # %bb.0: 410189d4711SFarzon Lotfi; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 411189d4711SFarzon Lotfi; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 412189d4711SFarzon Lotfi; RV64IZFINXZDINX-NEXT: call tan 413189d4711SFarzon Lotfi; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 414189d4711SFarzon Lotfi; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 415189d4711SFarzon Lotfi; RV64IZFINXZDINX-NEXT: ret 416189d4711SFarzon Lotfi; 417189d4711SFarzon Lotfi; RV32I-LABEL: tan_f64: 418189d4711SFarzon Lotfi; RV32I: # %bb.0: 419189d4711SFarzon Lotfi; RV32I-NEXT: addi sp, sp, -16 420189d4711SFarzon Lotfi; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 421189d4711SFarzon Lotfi; RV32I-NEXT: call tan 422189d4711SFarzon Lotfi; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 423189d4711SFarzon Lotfi; RV32I-NEXT: addi sp, sp, 16 424189d4711SFarzon Lotfi; RV32I-NEXT: ret 425189d4711SFarzon Lotfi; 426189d4711SFarzon Lotfi; RV64I-LABEL: tan_f64: 427189d4711SFarzon Lotfi; RV64I: # %bb.0: 428189d4711SFarzon Lotfi; RV64I-NEXT: addi sp, sp, -16 429189d4711SFarzon Lotfi; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 430189d4711SFarzon Lotfi; RV64I-NEXT: call tan 431189d4711SFarzon Lotfi; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 432189d4711SFarzon Lotfi; RV64I-NEXT: addi sp, sp, 16 433189d4711SFarzon Lotfi; RV64I-NEXT: ret 434189d4711SFarzon Lotfi %1 = call double @llvm.experimental.constrained.tan.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 435189d4711SFarzon Lotfi ret double %1 436189d4711SFarzon Lotfi} 437189d4711SFarzon Lotfi 438*1bc9de24SCraig Topperdefine double @asin_f64(double %a) nounwind strictfp { 439*1bc9de24SCraig Topper; RV32IFD-LABEL: asin_f64: 440*1bc9de24SCraig Topper; RV32IFD: # %bb.0: 441*1bc9de24SCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 442*1bc9de24SCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 443*1bc9de24SCraig Topper; RV32IFD-NEXT: call asin 444*1bc9de24SCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 445*1bc9de24SCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 446*1bc9de24SCraig Topper; RV32IFD-NEXT: ret 447*1bc9de24SCraig Topper; 448*1bc9de24SCraig Topper; RV64IFD-LABEL: asin_f64: 449*1bc9de24SCraig Topper; RV64IFD: # %bb.0: 450*1bc9de24SCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 451*1bc9de24SCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 452*1bc9de24SCraig Topper; RV64IFD-NEXT: call asin 453*1bc9de24SCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 454*1bc9de24SCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 455*1bc9de24SCraig Topper; RV64IFD-NEXT: ret 456*1bc9de24SCraig Topper; 457*1bc9de24SCraig Topper; RV32IZFINXZDINX-LABEL: asin_f64: 458*1bc9de24SCraig Topper; RV32IZFINXZDINX: # %bb.0: 459*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 460*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 461*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: call asin 462*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 463*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 464*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: ret 465*1bc9de24SCraig Topper; 466*1bc9de24SCraig Topper; RV64IZFINXZDINX-LABEL: asin_f64: 467*1bc9de24SCraig Topper; RV64IZFINXZDINX: # %bb.0: 468*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 469*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 470*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: call asin 471*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 472*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 473*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: ret 474*1bc9de24SCraig Topper; 475*1bc9de24SCraig Topper; RV32I-LABEL: asin_f64: 476*1bc9de24SCraig Topper; RV32I: # %bb.0: 477*1bc9de24SCraig Topper; RV32I-NEXT: addi sp, sp, -16 478*1bc9de24SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 479*1bc9de24SCraig Topper; RV32I-NEXT: call asin 480*1bc9de24SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 481*1bc9de24SCraig Topper; RV32I-NEXT: addi sp, sp, 16 482*1bc9de24SCraig Topper; RV32I-NEXT: ret 483*1bc9de24SCraig Topper; 484*1bc9de24SCraig Topper; RV64I-LABEL: asin_f64: 485*1bc9de24SCraig Topper; RV64I: # %bb.0: 486*1bc9de24SCraig Topper; RV64I-NEXT: addi sp, sp, -16 487*1bc9de24SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 488*1bc9de24SCraig Topper; RV64I-NEXT: call asin 489*1bc9de24SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 490*1bc9de24SCraig Topper; RV64I-NEXT: addi sp, sp, 16 491*1bc9de24SCraig Topper; RV64I-NEXT: ret 492*1bc9de24SCraig Topper %1 = call double @llvm.experimental.constrained.asin.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 493*1bc9de24SCraig Topper ret double %1 494*1bc9de24SCraig Topper} 495*1bc9de24SCraig Topper 496*1bc9de24SCraig Topperdefine double @acos_f64(double %a) nounwind strictfp { 497*1bc9de24SCraig Topper; RV32IFD-LABEL: acos_f64: 498*1bc9de24SCraig Topper; RV32IFD: # %bb.0: 499*1bc9de24SCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 500*1bc9de24SCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 501*1bc9de24SCraig Topper; RV32IFD-NEXT: call acos 502*1bc9de24SCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 503*1bc9de24SCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 504*1bc9de24SCraig Topper; RV32IFD-NEXT: ret 505*1bc9de24SCraig Topper; 506*1bc9de24SCraig Topper; RV64IFD-LABEL: acos_f64: 507*1bc9de24SCraig Topper; RV64IFD: # %bb.0: 508*1bc9de24SCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 509*1bc9de24SCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 510*1bc9de24SCraig Topper; RV64IFD-NEXT: call acos 511*1bc9de24SCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 512*1bc9de24SCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 513*1bc9de24SCraig Topper; RV64IFD-NEXT: ret 514*1bc9de24SCraig Topper; 515*1bc9de24SCraig Topper; RV32IZFINXZDINX-LABEL: acos_f64: 516*1bc9de24SCraig Topper; RV32IZFINXZDINX: # %bb.0: 517*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 518*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 519*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: call acos 520*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 521*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 522*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: ret 523*1bc9de24SCraig Topper; 524*1bc9de24SCraig Topper; RV64IZFINXZDINX-LABEL: acos_f64: 525*1bc9de24SCraig Topper; RV64IZFINXZDINX: # %bb.0: 526*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 527*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 528*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: call acos 529*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 530*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 531*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: ret 532*1bc9de24SCraig Topper; 533*1bc9de24SCraig Topper; RV32I-LABEL: acos_f64: 534*1bc9de24SCraig Topper; RV32I: # %bb.0: 535*1bc9de24SCraig Topper; RV32I-NEXT: addi sp, sp, -16 536*1bc9de24SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 537*1bc9de24SCraig Topper; RV32I-NEXT: call acos 538*1bc9de24SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 539*1bc9de24SCraig Topper; RV32I-NEXT: addi sp, sp, 16 540*1bc9de24SCraig Topper; RV32I-NEXT: ret 541*1bc9de24SCraig Topper; 542*1bc9de24SCraig Topper; RV64I-LABEL: acos_f64: 543*1bc9de24SCraig Topper; RV64I: # %bb.0: 544*1bc9de24SCraig Topper; RV64I-NEXT: addi sp, sp, -16 545*1bc9de24SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 546*1bc9de24SCraig Topper; RV64I-NEXT: call acos 547*1bc9de24SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 548*1bc9de24SCraig Topper; RV64I-NEXT: addi sp, sp, 16 549*1bc9de24SCraig Topper; RV64I-NEXT: ret 550*1bc9de24SCraig Topper %1 = call double @llvm.experimental.constrained.acos.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 551*1bc9de24SCraig Topper ret double %1 552*1bc9de24SCraig Topper} 553*1bc9de24SCraig Topper 554*1bc9de24SCraig Topperdefine double @atan_f64(double %a) nounwind strictfp { 555*1bc9de24SCraig Topper; RV32IFD-LABEL: atan_f64: 556*1bc9de24SCraig Topper; RV32IFD: # %bb.0: 557*1bc9de24SCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 558*1bc9de24SCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 559*1bc9de24SCraig Topper; RV32IFD-NEXT: call atan 560*1bc9de24SCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 561*1bc9de24SCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 562*1bc9de24SCraig Topper; RV32IFD-NEXT: ret 563*1bc9de24SCraig Topper; 564*1bc9de24SCraig Topper; RV64IFD-LABEL: atan_f64: 565*1bc9de24SCraig Topper; RV64IFD: # %bb.0: 566*1bc9de24SCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 567*1bc9de24SCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 568*1bc9de24SCraig Topper; RV64IFD-NEXT: call atan 569*1bc9de24SCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 570*1bc9de24SCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 571*1bc9de24SCraig Topper; RV64IFD-NEXT: ret 572*1bc9de24SCraig Topper; 573*1bc9de24SCraig Topper; RV32IZFINXZDINX-LABEL: atan_f64: 574*1bc9de24SCraig Topper; RV32IZFINXZDINX: # %bb.0: 575*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 576*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 577*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: call atan 578*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 579*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 580*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: ret 581*1bc9de24SCraig Topper; 582*1bc9de24SCraig Topper; RV64IZFINXZDINX-LABEL: atan_f64: 583*1bc9de24SCraig Topper; RV64IZFINXZDINX: # %bb.0: 584*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 585*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 586*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: call atan 587*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 588*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 589*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: ret 590*1bc9de24SCraig Topper; 591*1bc9de24SCraig Topper; RV32I-LABEL: atan_f64: 592*1bc9de24SCraig Topper; RV32I: # %bb.0: 593*1bc9de24SCraig Topper; RV32I-NEXT: addi sp, sp, -16 594*1bc9de24SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 595*1bc9de24SCraig Topper; RV32I-NEXT: call atan 596*1bc9de24SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 597*1bc9de24SCraig Topper; RV32I-NEXT: addi sp, sp, 16 598*1bc9de24SCraig Topper; RV32I-NEXT: ret 599*1bc9de24SCraig Topper; 600*1bc9de24SCraig Topper; RV64I-LABEL: atan_f64: 601*1bc9de24SCraig Topper; RV64I: # %bb.0: 602*1bc9de24SCraig Topper; RV64I-NEXT: addi sp, sp, -16 603*1bc9de24SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 604*1bc9de24SCraig Topper; RV64I-NEXT: call atan 605*1bc9de24SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 606*1bc9de24SCraig Topper; RV64I-NEXT: addi sp, sp, 16 607*1bc9de24SCraig Topper; RV64I-NEXT: ret 608*1bc9de24SCraig Topper %1 = call double @llvm.experimental.constrained.atan.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 609*1bc9de24SCraig Topper ret double %1 610*1bc9de24SCraig Topper} 611*1bc9de24SCraig Topper 612*1bc9de24SCraig Topperdeclare double @llvm.experimental.constrained.atan2.f64(double, double, metadata, metadata) 613*1bc9de24SCraig Topper 614*1bc9de24SCraig Topperdefine double @atan2_f64(double %a, double %b) nounwind strictfp { 615*1bc9de24SCraig Topper; RV32IFD-LABEL: atan2_f64: 616*1bc9de24SCraig Topper; RV32IFD: # %bb.0: 617*1bc9de24SCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 618*1bc9de24SCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 619*1bc9de24SCraig Topper; RV32IFD-NEXT: call atan2 620*1bc9de24SCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 621*1bc9de24SCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 622*1bc9de24SCraig Topper; RV32IFD-NEXT: ret 623*1bc9de24SCraig Topper; 624*1bc9de24SCraig Topper; RV64IFD-LABEL: atan2_f64: 625*1bc9de24SCraig Topper; RV64IFD: # %bb.0: 626*1bc9de24SCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 627*1bc9de24SCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 628*1bc9de24SCraig Topper; RV64IFD-NEXT: call atan2 629*1bc9de24SCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 630*1bc9de24SCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 631*1bc9de24SCraig Topper; RV64IFD-NEXT: ret 632*1bc9de24SCraig Topper; 633*1bc9de24SCraig Topper; RV32IZFINXZDINX-LABEL: atan2_f64: 634*1bc9de24SCraig Topper; RV32IZFINXZDINX: # %bb.0: 635*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 636*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 637*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: call atan2 638*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 639*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 640*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: ret 641*1bc9de24SCraig Topper; 642*1bc9de24SCraig Topper; RV64IZFINXZDINX-LABEL: atan2_f64: 643*1bc9de24SCraig Topper; RV64IZFINXZDINX: # %bb.0: 644*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 645*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 646*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: call atan2 647*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 648*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 649*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: ret 650*1bc9de24SCraig Topper; 651*1bc9de24SCraig Topper; RV32I-LABEL: atan2_f64: 652*1bc9de24SCraig Topper; RV32I: # %bb.0: 653*1bc9de24SCraig Topper; RV32I-NEXT: addi sp, sp, -16 654*1bc9de24SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 655*1bc9de24SCraig Topper; RV32I-NEXT: call atan2 656*1bc9de24SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 657*1bc9de24SCraig Topper; RV32I-NEXT: addi sp, sp, 16 658*1bc9de24SCraig Topper; RV32I-NEXT: ret 659*1bc9de24SCraig Topper; 660*1bc9de24SCraig Topper; RV64I-LABEL: atan2_f64: 661*1bc9de24SCraig Topper; RV64I: # %bb.0: 662*1bc9de24SCraig Topper; RV64I-NEXT: addi sp, sp, -16 663*1bc9de24SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 664*1bc9de24SCraig Topper; RV64I-NEXT: call atan2 665*1bc9de24SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 666*1bc9de24SCraig Topper; RV64I-NEXT: addi sp, sp, 16 667*1bc9de24SCraig Topper; RV64I-NEXT: ret 668*1bc9de24SCraig Topper %1 = call double @llvm.experimental.constrained.atan2.f64(double %a, double %b, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 669*1bc9de24SCraig Topper ret double %1 670*1bc9de24SCraig Topper} 671*1bc9de24SCraig Topper 672*1bc9de24SCraig Topperdefine double @sinh_f64(double %a) nounwind strictfp { 673*1bc9de24SCraig Topper; RV32IFD-LABEL: sinh_f64: 674*1bc9de24SCraig Topper; RV32IFD: # %bb.0: 675*1bc9de24SCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 676*1bc9de24SCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 677*1bc9de24SCraig Topper; RV32IFD-NEXT: call sinh 678*1bc9de24SCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 679*1bc9de24SCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 680*1bc9de24SCraig Topper; RV32IFD-NEXT: ret 681*1bc9de24SCraig Topper; 682*1bc9de24SCraig Topper; RV64IFD-LABEL: sinh_f64: 683*1bc9de24SCraig Topper; RV64IFD: # %bb.0: 684*1bc9de24SCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 685*1bc9de24SCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 686*1bc9de24SCraig Topper; RV64IFD-NEXT: call sinh 687*1bc9de24SCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 688*1bc9de24SCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 689*1bc9de24SCraig Topper; RV64IFD-NEXT: ret 690*1bc9de24SCraig Topper; 691*1bc9de24SCraig Topper; RV32IZFINXZDINX-LABEL: sinh_f64: 692*1bc9de24SCraig Topper; RV32IZFINXZDINX: # %bb.0: 693*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 694*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 695*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: call sinh 696*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 697*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 698*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: ret 699*1bc9de24SCraig Topper; 700*1bc9de24SCraig Topper; RV64IZFINXZDINX-LABEL: sinh_f64: 701*1bc9de24SCraig Topper; RV64IZFINXZDINX: # %bb.0: 702*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 703*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 704*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: call sinh 705*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 706*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 707*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: ret 708*1bc9de24SCraig Topper; 709*1bc9de24SCraig Topper; RV32I-LABEL: sinh_f64: 710*1bc9de24SCraig Topper; RV32I: # %bb.0: 711*1bc9de24SCraig Topper; RV32I-NEXT: addi sp, sp, -16 712*1bc9de24SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 713*1bc9de24SCraig Topper; RV32I-NEXT: call sinh 714*1bc9de24SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 715*1bc9de24SCraig Topper; RV32I-NEXT: addi sp, sp, 16 716*1bc9de24SCraig Topper; RV32I-NEXT: ret 717*1bc9de24SCraig Topper; 718*1bc9de24SCraig Topper; RV64I-LABEL: sinh_f64: 719*1bc9de24SCraig Topper; RV64I: # %bb.0: 720*1bc9de24SCraig Topper; RV64I-NEXT: addi sp, sp, -16 721*1bc9de24SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 722*1bc9de24SCraig Topper; RV64I-NEXT: call sinh 723*1bc9de24SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 724*1bc9de24SCraig Topper; RV64I-NEXT: addi sp, sp, 16 725*1bc9de24SCraig Topper; RV64I-NEXT: ret 726*1bc9de24SCraig Topper %1 = call double @llvm.experimental.constrained.sinh.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 727*1bc9de24SCraig Topper ret double %1 728*1bc9de24SCraig Topper} 729*1bc9de24SCraig Topper 730*1bc9de24SCraig Topperdefine double @cosh_f64(double %a) nounwind strictfp { 731*1bc9de24SCraig Topper; RV32IFD-LABEL: cosh_f64: 732*1bc9de24SCraig Topper; RV32IFD: # %bb.0: 733*1bc9de24SCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 734*1bc9de24SCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 735*1bc9de24SCraig Topper; RV32IFD-NEXT: call cosh 736*1bc9de24SCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 737*1bc9de24SCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 738*1bc9de24SCraig Topper; RV32IFD-NEXT: ret 739*1bc9de24SCraig Topper; 740*1bc9de24SCraig Topper; RV64IFD-LABEL: cosh_f64: 741*1bc9de24SCraig Topper; RV64IFD: # %bb.0: 742*1bc9de24SCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 743*1bc9de24SCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 744*1bc9de24SCraig Topper; RV64IFD-NEXT: call cosh 745*1bc9de24SCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 746*1bc9de24SCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 747*1bc9de24SCraig Topper; RV64IFD-NEXT: ret 748*1bc9de24SCraig Topper; 749*1bc9de24SCraig Topper; RV32IZFINXZDINX-LABEL: cosh_f64: 750*1bc9de24SCraig Topper; RV32IZFINXZDINX: # %bb.0: 751*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 752*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 753*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: call cosh 754*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 755*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 756*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: ret 757*1bc9de24SCraig Topper; 758*1bc9de24SCraig Topper; RV64IZFINXZDINX-LABEL: cosh_f64: 759*1bc9de24SCraig Topper; RV64IZFINXZDINX: # %bb.0: 760*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 761*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 762*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: call cosh 763*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 764*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 765*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: ret 766*1bc9de24SCraig Topper; 767*1bc9de24SCraig Topper; RV32I-LABEL: cosh_f64: 768*1bc9de24SCraig Topper; RV32I: # %bb.0: 769*1bc9de24SCraig Topper; RV32I-NEXT: addi sp, sp, -16 770*1bc9de24SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 771*1bc9de24SCraig Topper; RV32I-NEXT: call cosh 772*1bc9de24SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 773*1bc9de24SCraig Topper; RV32I-NEXT: addi sp, sp, 16 774*1bc9de24SCraig Topper; RV32I-NEXT: ret 775*1bc9de24SCraig Topper; 776*1bc9de24SCraig Topper; RV64I-LABEL: cosh_f64: 777*1bc9de24SCraig Topper; RV64I: # %bb.0: 778*1bc9de24SCraig Topper; RV64I-NEXT: addi sp, sp, -16 779*1bc9de24SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 780*1bc9de24SCraig Topper; RV64I-NEXT: call cosh 781*1bc9de24SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 782*1bc9de24SCraig Topper; RV64I-NEXT: addi sp, sp, 16 783*1bc9de24SCraig Topper; RV64I-NEXT: ret 784*1bc9de24SCraig Topper %1 = call double @llvm.experimental.constrained.cosh.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 785*1bc9de24SCraig Topper ret double %1 786*1bc9de24SCraig Topper} 787*1bc9de24SCraig Topper 788*1bc9de24SCraig Topperdefine double @tanh_f64(double %a) nounwind strictfp { 789*1bc9de24SCraig Topper; RV32IFD-LABEL: tanh_f64: 790*1bc9de24SCraig Topper; RV32IFD: # %bb.0: 791*1bc9de24SCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 792*1bc9de24SCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 793*1bc9de24SCraig Topper; RV32IFD-NEXT: call tanh 794*1bc9de24SCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 795*1bc9de24SCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 796*1bc9de24SCraig Topper; RV32IFD-NEXT: ret 797*1bc9de24SCraig Topper; 798*1bc9de24SCraig Topper; RV64IFD-LABEL: tanh_f64: 799*1bc9de24SCraig Topper; RV64IFD: # %bb.0: 800*1bc9de24SCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 801*1bc9de24SCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 802*1bc9de24SCraig Topper; RV64IFD-NEXT: call tanh 803*1bc9de24SCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 804*1bc9de24SCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 805*1bc9de24SCraig Topper; RV64IFD-NEXT: ret 806*1bc9de24SCraig Topper; 807*1bc9de24SCraig Topper; RV32IZFINXZDINX-LABEL: tanh_f64: 808*1bc9de24SCraig Topper; RV32IZFINXZDINX: # %bb.0: 809*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 810*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 811*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: call tanh 812*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 813*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 814*1bc9de24SCraig Topper; RV32IZFINXZDINX-NEXT: ret 815*1bc9de24SCraig Topper; 816*1bc9de24SCraig Topper; RV64IZFINXZDINX-LABEL: tanh_f64: 817*1bc9de24SCraig Topper; RV64IZFINXZDINX: # %bb.0: 818*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 819*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 820*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: call tanh 821*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 822*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 823*1bc9de24SCraig Topper; RV64IZFINXZDINX-NEXT: ret 824*1bc9de24SCraig Topper; 825*1bc9de24SCraig Topper; RV32I-LABEL: tanh_f64: 826*1bc9de24SCraig Topper; RV32I: # %bb.0: 827*1bc9de24SCraig Topper; RV32I-NEXT: addi sp, sp, -16 828*1bc9de24SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 829*1bc9de24SCraig Topper; RV32I-NEXT: call tanh 830*1bc9de24SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 831*1bc9de24SCraig Topper; RV32I-NEXT: addi sp, sp, 16 832*1bc9de24SCraig Topper; RV32I-NEXT: ret 833*1bc9de24SCraig Topper; 834*1bc9de24SCraig Topper; RV64I-LABEL: tanh_f64: 835*1bc9de24SCraig Topper; RV64I: # %bb.0: 836*1bc9de24SCraig Topper; RV64I-NEXT: addi sp, sp, -16 837*1bc9de24SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 838*1bc9de24SCraig Topper; RV64I-NEXT: call tanh 839*1bc9de24SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 840*1bc9de24SCraig Topper; RV64I-NEXT: addi sp, sp, 16 841*1bc9de24SCraig Topper; RV64I-NEXT: ret 842*1bc9de24SCraig Topper %1 = call double @llvm.experimental.constrained.tanh.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 843*1bc9de24SCraig Topper ret double %1 844*1bc9de24SCraig Topper} 845*1bc9de24SCraig Topper 84615787ccdSCraig Topperdeclare double @llvm.experimental.constrained.pow.f64(double, double, metadata, metadata) 84715787ccdSCraig Topper 84815787ccdSCraig Topperdefine double @pow_f64(double %a, double %b) nounwind strictfp { 84915787ccdSCraig Topper; RV32IFD-LABEL: pow_f64: 85015787ccdSCraig Topper; RV32IFD: # %bb.0: 85115787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 85215787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 853eabaee0cSFangrui Song; RV32IFD-NEXT: call pow 85415787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 85515787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 85615787ccdSCraig Topper; RV32IFD-NEXT: ret 85715787ccdSCraig Topper; 85815787ccdSCraig Topper; RV64IFD-LABEL: pow_f64: 85915787ccdSCraig Topper; RV64IFD: # %bb.0: 86015787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 86115787ccdSCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 862eabaee0cSFangrui Song; RV64IFD-NEXT: call pow 86315787ccdSCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 86415787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 86515787ccdSCraig Topper; RV64IFD-NEXT: ret 86615787ccdSCraig Topper; 8678b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: pow_f64: 8688b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 8698b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 8708b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 871eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call pow 8728b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 8738b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 8748b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 8758b90f8e0SShao-Ce SUN; 8762dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: pow_f64: 8772dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 8782dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 8792dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 880eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT: call pow 8812dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 8822dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 8832dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 8842dc0fa05SShao-Ce SUN; 88515787ccdSCraig Topper; RV32I-LABEL: pow_f64: 88615787ccdSCraig Topper; RV32I: # %bb.0: 88715787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 88815787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 889eabaee0cSFangrui Song; RV32I-NEXT: call pow 89015787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 89115787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 89215787ccdSCraig Topper; RV32I-NEXT: ret 89315787ccdSCraig Topper; 89415787ccdSCraig Topper; RV64I-LABEL: pow_f64: 89515787ccdSCraig Topper; RV64I: # %bb.0: 89615787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 89715787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 898eabaee0cSFangrui Song; RV64I-NEXT: call pow 89915787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 90015787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 90115787ccdSCraig Topper; RV64I-NEXT: ret 90215787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.pow.f64(double %a, double %b, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 90315787ccdSCraig Topper ret double %1 90415787ccdSCraig Topper} 90515787ccdSCraig Topper 90615787ccdSCraig Topperdeclare double @llvm.experimental.constrained.exp.f64(double, metadata, metadata) 90715787ccdSCraig Topper 90815787ccdSCraig Topperdefine double @exp_f64(double %a) nounwind strictfp { 90915787ccdSCraig Topper; RV32IFD-LABEL: exp_f64: 91015787ccdSCraig Topper; RV32IFD: # %bb.0: 91115787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 91215787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 913eabaee0cSFangrui Song; RV32IFD-NEXT: call exp 91415787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 91515787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 91615787ccdSCraig Topper; RV32IFD-NEXT: ret 91715787ccdSCraig Topper; 91815787ccdSCraig Topper; RV64IFD-LABEL: exp_f64: 91915787ccdSCraig Topper; RV64IFD: # %bb.0: 92015787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 92115787ccdSCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 922eabaee0cSFangrui Song; RV64IFD-NEXT: call exp 92315787ccdSCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 92415787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 92515787ccdSCraig Topper; RV64IFD-NEXT: ret 92615787ccdSCraig Topper; 9278b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: exp_f64: 9288b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 9298b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 9308b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 931eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call exp 9328b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 9338b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 9348b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 9358b90f8e0SShao-Ce SUN; 9362dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: exp_f64: 9372dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 9382dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 9392dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 940eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT: call exp 9412dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 9422dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 9432dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 9442dc0fa05SShao-Ce SUN; 94515787ccdSCraig Topper; RV32I-LABEL: exp_f64: 94615787ccdSCraig Topper; RV32I: # %bb.0: 94715787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 94815787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 949eabaee0cSFangrui Song; RV32I-NEXT: call exp 95015787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 95115787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 95215787ccdSCraig Topper; RV32I-NEXT: ret 95315787ccdSCraig Topper; 95415787ccdSCraig Topper; RV64I-LABEL: exp_f64: 95515787ccdSCraig Topper; RV64I: # %bb.0: 95615787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 95715787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 958eabaee0cSFangrui Song; RV64I-NEXT: call exp 95915787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 96015787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 96115787ccdSCraig Topper; RV64I-NEXT: ret 96215787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.exp.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 96315787ccdSCraig Topper ret double %1 96415787ccdSCraig Topper} 96515787ccdSCraig Topper 96615787ccdSCraig Topperdeclare double @llvm.experimental.constrained.exp2.f64(double, metadata, metadata) 96715787ccdSCraig Topper 96815787ccdSCraig Topperdefine double @exp2_f64(double %a) nounwind strictfp { 96915787ccdSCraig Topper; RV32IFD-LABEL: exp2_f64: 97015787ccdSCraig Topper; RV32IFD: # %bb.0: 97115787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 97215787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 973eabaee0cSFangrui Song; RV32IFD-NEXT: call exp2 97415787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 97515787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 97615787ccdSCraig Topper; RV32IFD-NEXT: ret 97715787ccdSCraig Topper; 97815787ccdSCraig Topper; RV64IFD-LABEL: exp2_f64: 97915787ccdSCraig Topper; RV64IFD: # %bb.0: 98015787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 98115787ccdSCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 982eabaee0cSFangrui Song; RV64IFD-NEXT: call exp2 98315787ccdSCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 98415787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 98515787ccdSCraig Topper; RV64IFD-NEXT: ret 98615787ccdSCraig Topper; 9878b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: exp2_f64: 9888b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 9898b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 9908b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 991eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call exp2 9928b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 9938b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 9948b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 9958b90f8e0SShao-Ce SUN; 9962dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: exp2_f64: 9972dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 9982dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 9992dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1000eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT: call exp2 10012dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 10022dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 10032dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 10042dc0fa05SShao-Ce SUN; 100515787ccdSCraig Topper; RV32I-LABEL: exp2_f64: 100615787ccdSCraig Topper; RV32I: # %bb.0: 100715787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 100815787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1009eabaee0cSFangrui Song; RV32I-NEXT: call exp2 101015787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 101115787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 101215787ccdSCraig Topper; RV32I-NEXT: ret 101315787ccdSCraig Topper; 101415787ccdSCraig Topper; RV64I-LABEL: exp2_f64: 101515787ccdSCraig Topper; RV64I: # %bb.0: 101615787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 101715787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1018eabaee0cSFangrui Song; RV64I-NEXT: call exp2 101915787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 102015787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 102115787ccdSCraig Topper; RV64I-NEXT: ret 102215787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.exp2.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 102315787ccdSCraig Topper ret double %1 102415787ccdSCraig Topper} 102515787ccdSCraig Topper 102615787ccdSCraig Topperdeclare double @llvm.experimental.constrained.log.f64(double, metadata, metadata) 102715787ccdSCraig Topper 102815787ccdSCraig Topperdefine double @log_f64(double %a) nounwind strictfp { 102915787ccdSCraig Topper; RV32IFD-LABEL: log_f64: 103015787ccdSCraig Topper; RV32IFD: # %bb.0: 103115787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 103215787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1033eabaee0cSFangrui Song; RV32IFD-NEXT: call log 103415787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 103515787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 103615787ccdSCraig Topper; RV32IFD-NEXT: ret 103715787ccdSCraig Topper; 103815787ccdSCraig Topper; RV64IFD-LABEL: log_f64: 103915787ccdSCraig Topper; RV64IFD: # %bb.0: 104015787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 104115787ccdSCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1042eabaee0cSFangrui Song; RV64IFD-NEXT: call log 104315787ccdSCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 104415787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 104515787ccdSCraig Topper; RV64IFD-NEXT: ret 104615787ccdSCraig Topper; 10478b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: log_f64: 10488b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 10498b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 10508b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1051eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call log 10528b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 10538b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 10548b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 10558b90f8e0SShao-Ce SUN; 10562dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: log_f64: 10572dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 10582dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 10592dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1060eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT: call log 10612dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 10622dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 10632dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 10642dc0fa05SShao-Ce SUN; 106515787ccdSCraig Topper; RV32I-LABEL: log_f64: 106615787ccdSCraig Topper; RV32I: # %bb.0: 106715787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 106815787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1069eabaee0cSFangrui Song; RV32I-NEXT: call log 107015787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 107115787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 107215787ccdSCraig Topper; RV32I-NEXT: ret 107315787ccdSCraig Topper; 107415787ccdSCraig Topper; RV64I-LABEL: log_f64: 107515787ccdSCraig Topper; RV64I: # %bb.0: 107615787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 107715787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1078eabaee0cSFangrui Song; RV64I-NEXT: call log 107915787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 108015787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 108115787ccdSCraig Topper; RV64I-NEXT: ret 108215787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.log.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 108315787ccdSCraig Topper ret double %1 108415787ccdSCraig Topper} 108515787ccdSCraig Topper 108615787ccdSCraig Topperdeclare double @llvm.experimental.constrained.log10.f64(double, metadata, metadata) 108715787ccdSCraig Topper 108815787ccdSCraig Topperdefine double @log10_f64(double %a) nounwind strictfp { 108915787ccdSCraig Topper; RV32IFD-LABEL: log10_f64: 109015787ccdSCraig Topper; RV32IFD: # %bb.0: 109115787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 109215787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1093eabaee0cSFangrui Song; RV32IFD-NEXT: call log10 109415787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 109515787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 109615787ccdSCraig Topper; RV32IFD-NEXT: ret 109715787ccdSCraig Topper; 109815787ccdSCraig Topper; RV64IFD-LABEL: log10_f64: 109915787ccdSCraig Topper; RV64IFD: # %bb.0: 110015787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 110115787ccdSCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1102eabaee0cSFangrui Song; RV64IFD-NEXT: call log10 110315787ccdSCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 110415787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 110515787ccdSCraig Topper; RV64IFD-NEXT: ret 110615787ccdSCraig Topper; 11078b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: log10_f64: 11088b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 11098b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 11108b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1111eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call log10 11128b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 11138b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 11148b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 11158b90f8e0SShao-Ce SUN; 11162dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: log10_f64: 11172dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 11182dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 11192dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1120eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT: call log10 11212dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 11222dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 11232dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 11242dc0fa05SShao-Ce SUN; 112515787ccdSCraig Topper; RV32I-LABEL: log10_f64: 112615787ccdSCraig Topper; RV32I: # %bb.0: 112715787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 112815787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1129eabaee0cSFangrui Song; RV32I-NEXT: call log10 113015787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 113115787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 113215787ccdSCraig Topper; RV32I-NEXT: ret 113315787ccdSCraig Topper; 113415787ccdSCraig Topper; RV64I-LABEL: log10_f64: 113515787ccdSCraig Topper; RV64I: # %bb.0: 113615787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 113715787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1138eabaee0cSFangrui Song; RV64I-NEXT: call log10 113915787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 114015787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 114115787ccdSCraig Topper; RV64I-NEXT: ret 114215787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.log10.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 114315787ccdSCraig Topper ret double %1 114415787ccdSCraig Topper} 114515787ccdSCraig Topper 114615787ccdSCraig Topperdeclare double @llvm.experimental.constrained.log2.f64(double, metadata, metadata) 114715787ccdSCraig Topper 114815787ccdSCraig Topperdefine double @log2_f64(double %a) nounwind strictfp { 114915787ccdSCraig Topper; RV32IFD-LABEL: log2_f64: 115015787ccdSCraig Topper; RV32IFD: # %bb.0: 115115787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 115215787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1153eabaee0cSFangrui Song; RV32IFD-NEXT: call log2 115415787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 115515787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 115615787ccdSCraig Topper; RV32IFD-NEXT: ret 115715787ccdSCraig Topper; 115815787ccdSCraig Topper; RV64IFD-LABEL: log2_f64: 115915787ccdSCraig Topper; RV64IFD: # %bb.0: 116015787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 116115787ccdSCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1162eabaee0cSFangrui Song; RV64IFD-NEXT: call log2 116315787ccdSCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 116415787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 116515787ccdSCraig Topper; RV64IFD-NEXT: ret 116615787ccdSCraig Topper; 11678b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: log2_f64: 11688b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 11698b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 11708b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1171eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call log2 11728b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 11738b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 11748b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 11758b90f8e0SShao-Ce SUN; 11762dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: log2_f64: 11772dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 11782dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 11792dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1180eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT: call log2 11812dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 11822dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 11832dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 11842dc0fa05SShao-Ce SUN; 118515787ccdSCraig Topper; RV32I-LABEL: log2_f64: 118615787ccdSCraig Topper; RV32I: # %bb.0: 118715787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 118815787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1189eabaee0cSFangrui Song; RV32I-NEXT: call log2 119015787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 119115787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 119215787ccdSCraig Topper; RV32I-NEXT: ret 119315787ccdSCraig Topper; 119415787ccdSCraig Topper; RV64I-LABEL: log2_f64: 119515787ccdSCraig Topper; RV64I: # %bb.0: 119615787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 119715787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1198eabaee0cSFangrui Song; RV64I-NEXT: call log2 119915787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 120015787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 120115787ccdSCraig Topper; RV64I-NEXT: ret 120215787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.log2.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 120315787ccdSCraig Topper ret double %1 120415787ccdSCraig Topper} 120515787ccdSCraig Topper 120615787ccdSCraig Topperdeclare double @llvm.experimental.constrained.fma.f64(double, double, double, metadata, metadata) 120715787ccdSCraig Topper 120815787ccdSCraig Topperdefine double @fma_f64(double %a, double %b, double %c) nounwind strictfp { 120984bacb18SShao-Ce SUN; CHECKIFD-LABEL: fma_f64: 121084bacb18SShao-Ce SUN; CHECKIFD: # %bb.0: 121184bacb18SShao-Ce SUN; CHECKIFD-NEXT: fmadd.d fa0, fa0, fa1, fa2 121284bacb18SShao-Ce SUN; CHECKIFD-NEXT: ret 121315787ccdSCraig Topper; 12148b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fma_f64: 12158b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 12168b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: fmadd.d a0, a0, a2, a4 12178b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 12188b90f8e0SShao-Ce SUN; 12192dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fma_f64: 12202dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 12212dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: fmadd.d a0, a0, a1, a2 12222dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 12232dc0fa05SShao-Ce SUN; 122415787ccdSCraig Topper; RV32I-LABEL: fma_f64: 122515787ccdSCraig Topper; RV32I: # %bb.0: 122615787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 122715787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1228eabaee0cSFangrui Song; RV32I-NEXT: call fma 122915787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 123015787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 123115787ccdSCraig Topper; RV32I-NEXT: ret 123215787ccdSCraig Topper; 123315787ccdSCraig Topper; RV64I-LABEL: fma_f64: 123415787ccdSCraig Topper; RV64I: # %bb.0: 123515787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 123615787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1237eabaee0cSFangrui Song; RV64I-NEXT: call fma 123815787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 123915787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 124015787ccdSCraig Topper; RV64I-NEXT: ret 124115787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.fma.f64(double %a, double %b, double %c, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 124215787ccdSCraig Topper ret double %1 124315787ccdSCraig Topper} 124415787ccdSCraig Topper 124515787ccdSCraig Topperdeclare double @llvm.experimental.constrained.fmuladd.f64(double, double, double, metadata, metadata) 124615787ccdSCraig Topper 124715787ccdSCraig Topperdefine double @fmuladd_f64(double %a, double %b, double %c) nounwind strictfp { 124884bacb18SShao-Ce SUN; CHECKIFD-LABEL: fmuladd_f64: 124984bacb18SShao-Ce SUN; CHECKIFD: # %bb.0: 125084bacb18SShao-Ce SUN; CHECKIFD-NEXT: fmadd.d fa0, fa0, fa1, fa2 125184bacb18SShao-Ce SUN; CHECKIFD-NEXT: ret 125215787ccdSCraig Topper; 12538b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fmuladd_f64: 12548b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 12558b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: fmadd.d a0, a0, a2, a4 12568b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 12578b90f8e0SShao-Ce SUN; 12582dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fmuladd_f64: 12592dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 12602dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: fmadd.d a0, a0, a1, a2 12612dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 12622dc0fa05SShao-Ce SUN; 126315787ccdSCraig Topper; RV32I-LABEL: fmuladd_f64: 126415787ccdSCraig Topper; RV32I: # %bb.0: 126515787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 126615787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 126715787ccdSCraig Topper; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 126815787ccdSCraig Topper; RV32I-NEXT: sw s1, 4(sp) # 4-byte Folded Spill 126915787ccdSCraig Topper; RV32I-NEXT: mv s0, a5 127015787ccdSCraig Topper; RV32I-NEXT: mv s1, a4 1271eabaee0cSFangrui Song; RV32I-NEXT: call __muldf3 127215787ccdSCraig Topper; RV32I-NEXT: mv a2, s1 127315787ccdSCraig Topper; RV32I-NEXT: mv a3, s0 1274eabaee0cSFangrui Song; RV32I-NEXT: call __adddf3 127515787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 127615787ccdSCraig Topper; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 127715787ccdSCraig Topper; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload 127815787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 127915787ccdSCraig Topper; RV32I-NEXT: ret 128015787ccdSCraig Topper; 128115787ccdSCraig Topper; RV64I-LABEL: fmuladd_f64: 128215787ccdSCraig Topper; RV64I: # %bb.0: 128315787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 128415787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 128515787ccdSCraig Topper; RV64I-NEXT: sd s0, 0(sp) # 8-byte Folded Spill 128615787ccdSCraig Topper; RV64I-NEXT: mv s0, a2 1287eabaee0cSFangrui Song; RV64I-NEXT: call __muldf3 128815787ccdSCraig Topper; RV64I-NEXT: mv a1, s0 1289eabaee0cSFangrui Song; RV64I-NEXT: call __adddf3 129015787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 129115787ccdSCraig Topper; RV64I-NEXT: ld s0, 0(sp) # 8-byte Folded Reload 129215787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 129315787ccdSCraig Topper; RV64I-NEXT: ret 129415787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.fmuladd.f64(double %a, double %b, double %c, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 129515787ccdSCraig Topper ret double %1 129615787ccdSCraig Topper} 129715787ccdSCraig Topper 129815787ccdSCraig Topperdeclare double @llvm.experimental.constrained.minnum.f64(double, double, metadata) 129915787ccdSCraig Topper 130015787ccdSCraig Topperdefine double @minnum_f64(double %a, double %b) nounwind strictfp { 130115787ccdSCraig Topper; RV32IFD-LABEL: minnum_f64: 130215787ccdSCraig Topper; RV32IFD: # %bb.0: 130315787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 130415787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1305eabaee0cSFangrui Song; RV32IFD-NEXT: call fmin 130615787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 130715787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 130815787ccdSCraig Topper; RV32IFD-NEXT: ret 130915787ccdSCraig Topper; 131015787ccdSCraig Topper; RV64IFD-LABEL: minnum_f64: 131115787ccdSCraig Topper; RV64IFD: # %bb.0: 131215787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 131315787ccdSCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1314eabaee0cSFangrui Song; RV64IFD-NEXT: call fmin 131515787ccdSCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 131615787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 131715787ccdSCraig Topper; RV64IFD-NEXT: ret 131815787ccdSCraig Topper; 13198b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: minnum_f64: 13208b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 13218b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 13228b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1323eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call fmin 13248b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 13258b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 13268b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 13278b90f8e0SShao-Ce SUN; 13282dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: minnum_f64: 13292dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 13302dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 13312dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1332eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT: call fmin 13332dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 13342dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 13352dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 13362dc0fa05SShao-Ce SUN; 133715787ccdSCraig Topper; RV32I-LABEL: minnum_f64: 133815787ccdSCraig Topper; RV32I: # %bb.0: 133915787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 134015787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1341eabaee0cSFangrui Song; RV32I-NEXT: call fmin 134215787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 134315787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 134415787ccdSCraig Topper; RV32I-NEXT: ret 134515787ccdSCraig Topper; 134615787ccdSCraig Topper; RV64I-LABEL: minnum_f64: 134715787ccdSCraig Topper; RV64I: # %bb.0: 134815787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 134915787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1350eabaee0cSFangrui Song; RV64I-NEXT: call fmin 135115787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 135215787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 135315787ccdSCraig Topper; RV64I-NEXT: ret 135415787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.minnum.f64(double %a, double %b, metadata !"fpexcept.strict") strictfp 135515787ccdSCraig Topper ret double %1 135615787ccdSCraig Topper} 135715787ccdSCraig Topper 135815787ccdSCraig Topperdeclare double @llvm.experimental.constrained.maxnum.f64(double, double, metadata) 135915787ccdSCraig Topper 136015787ccdSCraig Topperdefine double @maxnum_f64(double %a, double %b) nounwind strictfp { 136115787ccdSCraig Topper; RV32IFD-LABEL: maxnum_f64: 136215787ccdSCraig Topper; RV32IFD: # %bb.0: 136315787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 136415787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1365eabaee0cSFangrui Song; RV32IFD-NEXT: call fmax 136615787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 136715787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 136815787ccdSCraig Topper; RV32IFD-NEXT: ret 136915787ccdSCraig Topper; 137015787ccdSCraig Topper; RV64IFD-LABEL: maxnum_f64: 137115787ccdSCraig Topper; RV64IFD: # %bb.0: 137215787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 137315787ccdSCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1374eabaee0cSFangrui Song; RV64IFD-NEXT: call fmax 137515787ccdSCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 137615787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 137715787ccdSCraig Topper; RV64IFD-NEXT: ret 137815787ccdSCraig Topper; 13798b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: maxnum_f64: 13808b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 13818b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 13828b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1383eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call fmax 13848b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 13858b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 13868b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 13878b90f8e0SShao-Ce SUN; 13882dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: maxnum_f64: 13892dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 13902dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 13912dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1392eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT: call fmax 13932dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 13942dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 13952dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 13962dc0fa05SShao-Ce SUN; 139715787ccdSCraig Topper; RV32I-LABEL: maxnum_f64: 139815787ccdSCraig Topper; RV32I: # %bb.0: 139915787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 140015787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1401eabaee0cSFangrui Song; RV32I-NEXT: call fmax 140215787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 140315787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 140415787ccdSCraig Topper; RV32I-NEXT: ret 140515787ccdSCraig Topper; 140615787ccdSCraig Topper; RV64I-LABEL: maxnum_f64: 140715787ccdSCraig Topper; RV64I: # %bb.0: 140815787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 140915787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1410eabaee0cSFangrui Song; RV64I-NEXT: call fmax 141115787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 141215787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 141315787ccdSCraig Topper; RV64I-NEXT: ret 141415787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.maxnum.f64(double %a, double %b, metadata !"fpexcept.strict") strictfp 141515787ccdSCraig Topper ret double %1 141615787ccdSCraig Topper} 141715787ccdSCraig Topper 141815787ccdSCraig Topper; TODO: FMINNAN and FMAXNAN aren't handled in 141915787ccdSCraig Topper; SelectionDAGLegalize::ExpandNode. 142015787ccdSCraig Topper 142115787ccdSCraig Topper; declare double @llvm.experimental.constrained.minimum.f64(double, double, metadata) 142215787ccdSCraig Topper 142315787ccdSCraig Topper; define double @fminimum_f64(double %a, double %b) nounwind strictfp { 142415787ccdSCraig Topper; %1 = call double @llvm.experimental.constrained.minimum.f64(double %a, double %b, metadata !"fpexcept.strict") strictfp 142515787ccdSCraig Topper; ret double %1 142615787ccdSCraig Topper; } 142715787ccdSCraig Topper 142815787ccdSCraig Topper; declare double @llvm.experimental.constrained.maximum.f64(double, double, metadata) 142915787ccdSCraig Topper 143015787ccdSCraig Topper; define double @fmaximum_f64(double %a, double %b) nounwind strictfp { 143115787ccdSCraig Topper; %1 = call double @llvm.experimental.constrained.maximum.f64(double %a, double %b, metadata !"fpexcept.strict") strictfp 143215787ccdSCraig Topper; ret double %1 143315787ccdSCraig Topper; } 143415787ccdSCraig Topper 143515787ccdSCraig Topperdeclare double @llvm.experimental.constrained.floor.f64(double, metadata) 143615787ccdSCraig Topper 143715787ccdSCraig Topperdefine double @floor_f64(double %a) nounwind strictfp { 143815787ccdSCraig Topper; RV32IFD-LABEL: floor_f64: 143915787ccdSCraig Topper; RV32IFD: # %bb.0: 144015787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 144115787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1442eabaee0cSFangrui Song; RV32IFD-NEXT: call floor 144315787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 144415787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 144515787ccdSCraig Topper; RV32IFD-NEXT: ret 144615787ccdSCraig Topper; 144715787ccdSCraig Topper; RV64IFD-LABEL: floor_f64: 144815787ccdSCraig Topper; RV64IFD: # %bb.0: 144915787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 145015787ccdSCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1451eabaee0cSFangrui Song; RV64IFD-NEXT: call floor 145215787ccdSCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 145315787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 145415787ccdSCraig Topper; RV64IFD-NEXT: ret 145515787ccdSCraig Topper; 14568b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: floor_f64: 14578b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 14588b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 14598b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1460eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call floor 14618b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 14628b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 14638b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 14648b90f8e0SShao-Ce SUN; 14652dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: floor_f64: 14662dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 14672dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 14682dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1469eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT: call floor 14702dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 14712dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 14722dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 14732dc0fa05SShao-Ce SUN; 147415787ccdSCraig Topper; RV32I-LABEL: floor_f64: 147515787ccdSCraig Topper; RV32I: # %bb.0: 147615787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 147715787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1478eabaee0cSFangrui Song; RV32I-NEXT: call floor 147915787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 148015787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 148115787ccdSCraig Topper; RV32I-NEXT: ret 148215787ccdSCraig Topper; 148315787ccdSCraig Topper; RV64I-LABEL: floor_f64: 148415787ccdSCraig Topper; RV64I: # %bb.0: 148515787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 148615787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1487eabaee0cSFangrui Song; RV64I-NEXT: call floor 148815787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 148915787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 149015787ccdSCraig Topper; RV64I-NEXT: ret 149115787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.floor.f64(double %a, metadata !"fpexcept.strict") strictfp 149215787ccdSCraig Topper ret double %1 149315787ccdSCraig Topper} 149415787ccdSCraig Topper 149515787ccdSCraig Topperdeclare double @llvm.experimental.constrained.ceil.f64(double, metadata) 149615787ccdSCraig Topper 149715787ccdSCraig Topperdefine double @ceil_f64(double %a) nounwind strictfp { 149815787ccdSCraig Topper; RV32IFD-LABEL: ceil_f64: 149915787ccdSCraig Topper; RV32IFD: # %bb.0: 150015787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 150115787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1502eabaee0cSFangrui Song; RV32IFD-NEXT: call ceil 150315787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 150415787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 150515787ccdSCraig Topper; RV32IFD-NEXT: ret 150615787ccdSCraig Topper; 150715787ccdSCraig Topper; RV64IFD-LABEL: ceil_f64: 150815787ccdSCraig Topper; RV64IFD: # %bb.0: 150915787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 151015787ccdSCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1511eabaee0cSFangrui Song; RV64IFD-NEXT: call ceil 151215787ccdSCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 151315787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 151415787ccdSCraig Topper; RV64IFD-NEXT: ret 151515787ccdSCraig Topper; 15168b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: ceil_f64: 15178b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 15188b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 15198b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1520eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call ceil 15218b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 15228b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 15238b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 15248b90f8e0SShao-Ce SUN; 15252dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: ceil_f64: 15262dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 15272dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 15282dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1529eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT: call ceil 15302dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 15312dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 15322dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 15332dc0fa05SShao-Ce SUN; 153415787ccdSCraig Topper; RV32I-LABEL: ceil_f64: 153515787ccdSCraig Topper; RV32I: # %bb.0: 153615787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 153715787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1538eabaee0cSFangrui Song; RV32I-NEXT: call ceil 153915787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 154015787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 154115787ccdSCraig Topper; RV32I-NEXT: ret 154215787ccdSCraig Topper; 154315787ccdSCraig Topper; RV64I-LABEL: ceil_f64: 154415787ccdSCraig Topper; RV64I: # %bb.0: 154515787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 154615787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1547eabaee0cSFangrui Song; RV64I-NEXT: call ceil 154815787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 154915787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 155015787ccdSCraig Topper; RV64I-NEXT: ret 155115787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.ceil.f64(double %a, metadata !"fpexcept.strict") strictfp 155215787ccdSCraig Topper ret double %1 155315787ccdSCraig Topper} 155415787ccdSCraig Topper 155515787ccdSCraig Topperdeclare double @llvm.experimental.constrained.trunc.f64(double, metadata) 155615787ccdSCraig Topper 155715787ccdSCraig Topperdefine double @trunc_f64(double %a) nounwind strictfp { 155815787ccdSCraig Topper; RV32IFD-LABEL: trunc_f64: 155915787ccdSCraig Topper; RV32IFD: # %bb.0: 156015787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 156115787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1562eabaee0cSFangrui Song; RV32IFD-NEXT: call trunc 156315787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 156415787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 156515787ccdSCraig Topper; RV32IFD-NEXT: ret 156615787ccdSCraig Topper; 156715787ccdSCraig Topper; RV64IFD-LABEL: trunc_f64: 156815787ccdSCraig Topper; RV64IFD: # %bb.0: 156915787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 157015787ccdSCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1571eabaee0cSFangrui Song; RV64IFD-NEXT: call trunc 157215787ccdSCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 157315787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 157415787ccdSCraig Topper; RV64IFD-NEXT: ret 157515787ccdSCraig Topper; 15768b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: trunc_f64: 15778b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 15788b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 15798b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1580eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call trunc 15818b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 15828b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 15838b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 15848b90f8e0SShao-Ce SUN; 15852dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: trunc_f64: 15862dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 15872dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 15882dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1589eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT: call trunc 15902dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 15912dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 15922dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 15932dc0fa05SShao-Ce SUN; 159415787ccdSCraig Topper; RV32I-LABEL: trunc_f64: 159515787ccdSCraig Topper; RV32I: # %bb.0: 159615787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 159715787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1598eabaee0cSFangrui Song; RV32I-NEXT: call trunc 159915787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 160015787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 160115787ccdSCraig Topper; RV32I-NEXT: ret 160215787ccdSCraig Topper; 160315787ccdSCraig Topper; RV64I-LABEL: trunc_f64: 160415787ccdSCraig Topper; RV64I: # %bb.0: 160515787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 160615787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1607eabaee0cSFangrui Song; RV64I-NEXT: call trunc 160815787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 160915787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 161015787ccdSCraig Topper; RV64I-NEXT: ret 161115787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.trunc.f64(double %a, metadata !"fpexcept.strict") strictfp 161215787ccdSCraig Topper ret double %1 161315787ccdSCraig Topper} 161415787ccdSCraig Topper 161515787ccdSCraig Topperdeclare double @llvm.experimental.constrained.rint.f64(double, metadata, metadata) 161615787ccdSCraig Topper 161715787ccdSCraig Topperdefine double @rint_f64(double %a) nounwind strictfp { 161815787ccdSCraig Topper; RV32IFD-LABEL: rint_f64: 161915787ccdSCraig Topper; RV32IFD: # %bb.0: 162015787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 162115787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1622eabaee0cSFangrui Song; RV32IFD-NEXT: call rint 162315787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 162415787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 162515787ccdSCraig Topper; RV32IFD-NEXT: ret 162615787ccdSCraig Topper; 162715787ccdSCraig Topper; RV64IFD-LABEL: rint_f64: 162815787ccdSCraig Topper; RV64IFD: # %bb.0: 162915787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 163015787ccdSCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1631eabaee0cSFangrui Song; RV64IFD-NEXT: call rint 163215787ccdSCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 163315787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 163415787ccdSCraig Topper; RV64IFD-NEXT: ret 163515787ccdSCraig Topper; 16368b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: rint_f64: 16378b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 16388b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 16398b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1640eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call rint 16418b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 16428b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 16438b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 16448b90f8e0SShao-Ce SUN; 16452dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: rint_f64: 16462dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 16472dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 16482dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1649eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT: call rint 16502dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 16512dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 16522dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 16532dc0fa05SShao-Ce SUN; 165415787ccdSCraig Topper; RV32I-LABEL: rint_f64: 165515787ccdSCraig Topper; RV32I: # %bb.0: 165615787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 165715787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1658eabaee0cSFangrui Song; RV32I-NEXT: call rint 165915787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 166015787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 166115787ccdSCraig Topper; RV32I-NEXT: ret 166215787ccdSCraig Topper; 166315787ccdSCraig Topper; RV64I-LABEL: rint_f64: 166415787ccdSCraig Topper; RV64I: # %bb.0: 166515787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 166615787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1667eabaee0cSFangrui Song; RV64I-NEXT: call rint 166815787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 166915787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 167015787ccdSCraig Topper; RV64I-NEXT: ret 167115787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.rint.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 167215787ccdSCraig Topper ret double %1 167315787ccdSCraig Topper} 167415787ccdSCraig Topper 167515787ccdSCraig Topperdeclare double @llvm.experimental.constrained.nearbyint.f64(double, metadata, metadata) 167615787ccdSCraig Topper 167715787ccdSCraig Topperdefine double @nearbyint_f64(double %a) nounwind strictfp { 167815787ccdSCraig Topper; RV32IFD-LABEL: nearbyint_f64: 167915787ccdSCraig Topper; RV32IFD: # %bb.0: 168015787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 168115787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1682eabaee0cSFangrui Song; RV32IFD-NEXT: call nearbyint 168315787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 168415787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 168515787ccdSCraig Topper; RV32IFD-NEXT: ret 168615787ccdSCraig Topper; 168715787ccdSCraig Topper; RV64IFD-LABEL: nearbyint_f64: 168815787ccdSCraig Topper; RV64IFD: # %bb.0: 168915787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 169015787ccdSCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1691eabaee0cSFangrui Song; RV64IFD-NEXT: call nearbyint 169215787ccdSCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 169315787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 169415787ccdSCraig Topper; RV64IFD-NEXT: ret 169515787ccdSCraig Topper; 16968b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: nearbyint_f64: 16978b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 16988b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 16998b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1700eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call nearbyint 17018b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 17028b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 17038b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 17048b90f8e0SShao-Ce SUN; 17052dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: nearbyint_f64: 17062dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 17072dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 17082dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1709eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT: call nearbyint 17102dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 17112dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 17122dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 17132dc0fa05SShao-Ce SUN; 171415787ccdSCraig Topper; RV32I-LABEL: nearbyint_f64: 171515787ccdSCraig Topper; RV32I: # %bb.0: 171615787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 171715787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1718eabaee0cSFangrui Song; RV32I-NEXT: call nearbyint 171915787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 172015787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 172115787ccdSCraig Topper; RV32I-NEXT: ret 172215787ccdSCraig Topper; 172315787ccdSCraig Topper; RV64I-LABEL: nearbyint_f64: 172415787ccdSCraig Topper; RV64I: # %bb.0: 172515787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 172615787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1727eabaee0cSFangrui Song; RV64I-NEXT: call nearbyint 172815787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 172915787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 173015787ccdSCraig Topper; RV64I-NEXT: ret 173115787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.nearbyint.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 173215787ccdSCraig Topper ret double %1 173315787ccdSCraig Topper} 173415787ccdSCraig Topper 173515787ccdSCraig Topperdeclare double @llvm.experimental.constrained.round.f64(double, metadata) 173615787ccdSCraig Topper 173715787ccdSCraig Topperdefine double @round_f64(double %a) nounwind strictfp { 173815787ccdSCraig Topper; RV32IFD-LABEL: round_f64: 173915787ccdSCraig Topper; RV32IFD: # %bb.0: 174015787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 174115787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1742eabaee0cSFangrui Song; RV32IFD-NEXT: call round 174315787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 174415787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 174515787ccdSCraig Topper; RV32IFD-NEXT: ret 174615787ccdSCraig Topper; 174715787ccdSCraig Topper; RV64IFD-LABEL: round_f64: 174815787ccdSCraig Topper; RV64IFD: # %bb.0: 174915787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 175015787ccdSCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1751eabaee0cSFangrui Song; RV64IFD-NEXT: call round 175215787ccdSCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 175315787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 175415787ccdSCraig Topper; RV64IFD-NEXT: ret 175515787ccdSCraig Topper; 17568b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: round_f64: 17578b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 17588b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 17598b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1760eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call round 17618b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 17628b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 17638b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 17648b90f8e0SShao-Ce SUN; 17652dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: round_f64: 17662dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 17672dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 17682dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1769eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT: call round 17702dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 17712dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 17722dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 17732dc0fa05SShao-Ce SUN; 177415787ccdSCraig Topper; RV32I-LABEL: round_f64: 177515787ccdSCraig Topper; RV32I: # %bb.0: 177615787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 177715787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1778eabaee0cSFangrui Song; RV32I-NEXT: call round 177915787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 178015787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 178115787ccdSCraig Topper; RV32I-NEXT: ret 178215787ccdSCraig Topper; 178315787ccdSCraig Topper; RV64I-LABEL: round_f64: 178415787ccdSCraig Topper; RV64I: # %bb.0: 178515787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 178615787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1787eabaee0cSFangrui Song; RV64I-NEXT: call round 178815787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 178915787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 179015787ccdSCraig Topper; RV64I-NEXT: ret 179115787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.round.f64(double %a, metadata !"fpexcept.strict") strictfp 179215787ccdSCraig Topper ret double %1 179315787ccdSCraig Topper} 179415787ccdSCraig Topper 179515787ccdSCraig Topperdeclare double @llvm.experimental.constrained.roundeven.f64(double, metadata) 179615787ccdSCraig Topper 179715787ccdSCraig Topperdefine double @roundeven_f64(double %a) nounwind strictfp { 179815787ccdSCraig Topper; RV32IFD-LABEL: roundeven_f64: 179915787ccdSCraig Topper; RV32IFD: # %bb.0: 180015787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 180115787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1802eabaee0cSFangrui Song; RV32IFD-NEXT: call roundeven 180315787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 180415787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 180515787ccdSCraig Topper; RV32IFD-NEXT: ret 180615787ccdSCraig Topper; 180715787ccdSCraig Topper; RV64IFD-LABEL: roundeven_f64: 180815787ccdSCraig Topper; RV64IFD: # %bb.0: 180915787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 181015787ccdSCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1811eabaee0cSFangrui Song; RV64IFD-NEXT: call roundeven 181215787ccdSCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 181315787ccdSCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 181415787ccdSCraig Topper; RV64IFD-NEXT: ret 181515787ccdSCraig Topper; 18168b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: roundeven_f64: 18178b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 18188b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 18198b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1820eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call roundeven 18218b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 18228b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 18238b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 18248b90f8e0SShao-Ce SUN; 18252dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: roundeven_f64: 18262dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 18272dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 18282dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1829eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT: call roundeven 18302dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 18312dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 18322dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 18332dc0fa05SShao-Ce SUN; 183415787ccdSCraig Topper; RV32I-LABEL: roundeven_f64: 183515787ccdSCraig Topper; RV32I: # %bb.0: 183615787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 183715787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1838eabaee0cSFangrui Song; RV32I-NEXT: call roundeven 183915787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 184015787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 184115787ccdSCraig Topper; RV32I-NEXT: ret 184215787ccdSCraig Topper; 184315787ccdSCraig Topper; RV64I-LABEL: roundeven_f64: 184415787ccdSCraig Topper; RV64I: # %bb.0: 184515787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 184615787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1847eabaee0cSFangrui Song; RV64I-NEXT: call roundeven 184815787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 184915787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 185015787ccdSCraig Topper; RV64I-NEXT: ret 185115787ccdSCraig Topper %1 = call double @llvm.experimental.constrained.roundeven.f64(double %a, metadata !"fpexcept.strict") strictfp 185215787ccdSCraig Topper ret double %1 185315787ccdSCraig Topper} 185415787ccdSCraig Topper 185515787ccdSCraig Topperdeclare iXLen @llvm.experimental.constrained.lrint.iXLen.f64(double, metadata, metadata) 185615787ccdSCraig Topper 185715787ccdSCraig Topperdefine iXLen @lrint_f64(double %a) nounwind strictfp { 185815787ccdSCraig Topper; RV32IFD-LABEL: lrint_f64: 185915787ccdSCraig Topper; RV32IFD: # %bb.0: 1860b271184fSCraig Topper; RV32IFD-NEXT: fcvt.w.d a0, fa0 186115787ccdSCraig Topper; RV32IFD-NEXT: ret 186215787ccdSCraig Topper; 186315787ccdSCraig Topper; RV64IFD-LABEL: lrint_f64: 186415787ccdSCraig Topper; RV64IFD: # %bb.0: 1865b271184fSCraig Topper; RV64IFD-NEXT: fcvt.l.d a0, fa0 186615787ccdSCraig Topper; RV64IFD-NEXT: ret 186715787ccdSCraig Topper; 18688b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: lrint_f64: 18698b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 18708b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: fcvt.w.d a0, a0 18718b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 18728b90f8e0SShao-Ce SUN; 18732dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: lrint_f64: 18742dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 18752dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: fcvt.l.d a0, a0 18762dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 18772dc0fa05SShao-Ce SUN; 187815787ccdSCraig Topper; RV32I-LABEL: lrint_f64: 187915787ccdSCraig Topper; RV32I: # %bb.0: 188015787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 188115787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1882eabaee0cSFangrui Song; RV32I-NEXT: call lrint 188315787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 188415787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 188515787ccdSCraig Topper; RV32I-NEXT: ret 188615787ccdSCraig Topper; 188715787ccdSCraig Topper; RV64I-LABEL: lrint_f64: 188815787ccdSCraig Topper; RV64I: # %bb.0: 188915787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 189015787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1891eabaee0cSFangrui Song; RV64I-NEXT: call lrint 189215787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 189315787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 189415787ccdSCraig Topper; RV64I-NEXT: ret 189515787ccdSCraig Topper %1 = call iXLen @llvm.experimental.constrained.lrint.iXLen.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 189615787ccdSCraig Topper ret iXLen %1 189715787ccdSCraig Topper} 189815787ccdSCraig Topper 189915787ccdSCraig Topperdeclare iXLen @llvm.experimental.constrained.lround.iXLen.f64(double, metadata) 190015787ccdSCraig Topper 190115787ccdSCraig Topperdefine iXLen @lround_f64(double %a) nounwind strictfp { 190215787ccdSCraig Topper; RV32IFD-LABEL: lround_f64: 190315787ccdSCraig Topper; RV32IFD: # %bb.0: 1904b271184fSCraig Topper; RV32IFD-NEXT: fcvt.w.d a0, fa0, rmm 190515787ccdSCraig Topper; RV32IFD-NEXT: ret 190615787ccdSCraig Topper; 190715787ccdSCraig Topper; RV64IFD-LABEL: lround_f64: 190815787ccdSCraig Topper; RV64IFD: # %bb.0: 1909b271184fSCraig Topper; RV64IFD-NEXT: fcvt.l.d a0, fa0, rmm 191015787ccdSCraig Topper; RV64IFD-NEXT: ret 191115787ccdSCraig Topper; 19128b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: lround_f64: 19138b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 19148b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: fcvt.w.d a0, a0, rmm 19158b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 19168b90f8e0SShao-Ce SUN; 19172dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: lround_f64: 19182dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 19192dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: fcvt.l.d a0, a0, rmm 19202dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 19212dc0fa05SShao-Ce SUN; 192215787ccdSCraig Topper; RV32I-LABEL: lround_f64: 192315787ccdSCraig Topper; RV32I: # %bb.0: 192415787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 192515787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1926eabaee0cSFangrui Song; RV32I-NEXT: call lround 192715787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 192815787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 192915787ccdSCraig Topper; RV32I-NEXT: ret 193015787ccdSCraig Topper; 193115787ccdSCraig Topper; RV64I-LABEL: lround_f64: 193215787ccdSCraig Topper; RV64I: # %bb.0: 193315787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 193415787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1935eabaee0cSFangrui Song; RV64I-NEXT: call lround 193615787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 193715787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 193815787ccdSCraig Topper; RV64I-NEXT: ret 193915787ccdSCraig Topper %1 = call iXLen @llvm.experimental.constrained.lround.iXLen.f64(double %a, metadata !"fpexcept.strict") strictfp 194015787ccdSCraig Topper ret iXLen %1 194115787ccdSCraig Topper} 194215787ccdSCraig Topper 194315787ccdSCraig Topperdeclare i64 @llvm.experimental.constrained.llrint.i64.f64(double, metadata, metadata) 194415787ccdSCraig Topper 194515787ccdSCraig Topperdefine i64 @llrint_f64(double %a) nounwind strictfp { 194615787ccdSCraig Topper; RV32IFD-LABEL: llrint_f64: 194715787ccdSCraig Topper; RV32IFD: # %bb.0: 194815787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 194915787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1950eabaee0cSFangrui Song; RV32IFD-NEXT: call llrint 195115787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 195215787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 195315787ccdSCraig Topper; RV32IFD-NEXT: ret 195415787ccdSCraig Topper; 195515787ccdSCraig Topper; RV64IFD-LABEL: llrint_f64: 195615787ccdSCraig Topper; RV64IFD: # %bb.0: 1957b271184fSCraig Topper; RV64IFD-NEXT: fcvt.l.d a0, fa0 195815787ccdSCraig Topper; RV64IFD-NEXT: ret 195915787ccdSCraig Topper; 19608b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: llrint_f64: 19618b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 19628b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 19638b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1964eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call llrint 19658b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 19668b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 19678b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 19688b90f8e0SShao-Ce SUN; 19692dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: llrint_f64: 19702dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 19712dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: fcvt.l.d a0, a0 19722dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 19732dc0fa05SShao-Ce SUN; 197415787ccdSCraig Topper; RV32I-LABEL: llrint_f64: 197515787ccdSCraig Topper; RV32I: # %bb.0: 197615787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 197715787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1978eabaee0cSFangrui Song; RV32I-NEXT: call llrint 197915787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 198015787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 198115787ccdSCraig Topper; RV32I-NEXT: ret 198215787ccdSCraig Topper; 198315787ccdSCraig Topper; RV64I-LABEL: llrint_f64: 198415787ccdSCraig Topper; RV64I: # %bb.0: 198515787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 198615787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1987eabaee0cSFangrui Song; RV64I-NEXT: call llrint 198815787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 198915787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 199015787ccdSCraig Topper; RV64I-NEXT: ret 199115787ccdSCraig Topper %1 = call i64 @llvm.experimental.constrained.llrint.i64.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 199215787ccdSCraig Topper ret i64 %1 199315787ccdSCraig Topper} 199415787ccdSCraig Topper 199515787ccdSCraig Topperdeclare i64 @llvm.experimental.constrained.llround.i64.f64(double, metadata) 199615787ccdSCraig Topper 199715787ccdSCraig Topperdefine i64 @llround_f64(double %a) nounwind strictfp { 199815787ccdSCraig Topper; RV32IFD-LABEL: llround_f64: 199915787ccdSCraig Topper; RV32IFD: # %bb.0: 200015787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 200115787ccdSCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2002eabaee0cSFangrui Song; RV32IFD-NEXT: call llround 200315787ccdSCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 200415787ccdSCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 200515787ccdSCraig Topper; RV32IFD-NEXT: ret 200615787ccdSCraig Topper; 200715787ccdSCraig Topper; RV64IFD-LABEL: llround_f64: 200815787ccdSCraig Topper; RV64IFD: # %bb.0: 2009b271184fSCraig Topper; RV64IFD-NEXT: fcvt.l.d a0, fa0, rmm 201015787ccdSCraig Topper; RV64IFD-NEXT: ret 201115787ccdSCraig Topper; 20128b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: llround_f64: 20138b90f8e0SShao-Ce SUN; RV32IZFINXZDINX: # %bb.0: 20148b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 20158b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2016eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT: call llround 20178b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 20188b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 20198b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT: ret 20208b90f8e0SShao-Ce SUN; 20212dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: llround_f64: 20222dc0fa05SShao-Ce SUN; RV64IZFINXZDINX: # %bb.0: 20232dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: fcvt.l.d a0, a0, rmm 20242dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT: ret 20252dc0fa05SShao-Ce SUN; 202615787ccdSCraig Topper; RV32I-LABEL: llround_f64: 202715787ccdSCraig Topper; RV32I: # %bb.0: 202815787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, -16 202915787ccdSCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2030eabaee0cSFangrui Song; RV32I-NEXT: call llround 203115787ccdSCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 203215787ccdSCraig Topper; RV32I-NEXT: addi sp, sp, 16 203315787ccdSCraig Topper; RV32I-NEXT: ret 203415787ccdSCraig Topper; 203515787ccdSCraig Topper; RV64I-LABEL: llround_f64: 203615787ccdSCraig Topper; RV64I: # %bb.0: 203715787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, -16 203815787ccdSCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2039eabaee0cSFangrui Song; RV64I-NEXT: call llround 204015787ccdSCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 204115787ccdSCraig Topper; RV64I-NEXT: addi sp, sp, 16 204215787ccdSCraig Topper; RV64I-NEXT: ret 204315787ccdSCraig Topper %1 = call i64 @llvm.experimental.constrained.llround.i64.f64(double %a, metadata !"fpexcept.strict") strictfp 204415787ccdSCraig Topper ret i64 %1 204515787ccdSCraig Topper} 20465c2a133bSTex Riddell 2047c2bb0564SCraig Topperdefine double @ldexp_f64(double %x, i32 signext %y) nounwind { 2048c2bb0564SCraig Topper; RV32IFD-LABEL: ldexp_f64: 2049c2bb0564SCraig Topper; RV32IFD: # %bb.0: 2050c2bb0564SCraig Topper; RV32IFD-NEXT: addi sp, sp, -16 2051c2bb0564SCraig Topper; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2052c2bb0564SCraig Topper; RV32IFD-NEXT: call ldexp 2053c2bb0564SCraig Topper; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2054c2bb0564SCraig Topper; RV32IFD-NEXT: addi sp, sp, 16 2055c2bb0564SCraig Topper; RV32IFD-NEXT: ret 2056c2bb0564SCraig Topper; 2057c2bb0564SCraig Topper; RV64IFD-LABEL: ldexp_f64: 2058c2bb0564SCraig Topper; RV64IFD: # %bb.0: 2059c2bb0564SCraig Topper; RV64IFD-NEXT: addi sp, sp, -16 2060c2bb0564SCraig Topper; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2061c2bb0564SCraig Topper; RV64IFD-NEXT: call ldexp 2062c2bb0564SCraig Topper; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2063c2bb0564SCraig Topper; RV64IFD-NEXT: addi sp, sp, 16 2064c2bb0564SCraig Topper; RV64IFD-NEXT: ret 2065c2bb0564SCraig Topper; 2066c2bb0564SCraig Topper; RV32IZFINXZDINX-LABEL: ldexp_f64: 2067c2bb0564SCraig Topper; RV32IZFINXZDINX: # %bb.0: 2068c2bb0564SCraig Topper; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 2069c2bb0564SCraig Topper; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2070c2bb0564SCraig Topper; RV32IZFINXZDINX-NEXT: call ldexp 2071c2bb0564SCraig Topper; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2072c2bb0564SCraig Topper; RV32IZFINXZDINX-NEXT: addi sp, sp, 16 2073c2bb0564SCraig Topper; RV32IZFINXZDINX-NEXT: ret 2074c2bb0564SCraig Topper; 2075c2bb0564SCraig Topper; RV64IZFINXZDINX-LABEL: ldexp_f64: 2076c2bb0564SCraig Topper; RV64IZFINXZDINX: # %bb.0: 2077c2bb0564SCraig Topper; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 2078c2bb0564SCraig Topper; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2079c2bb0564SCraig Topper; RV64IZFINXZDINX-NEXT: call ldexp 2080c2bb0564SCraig Topper; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2081c2bb0564SCraig Topper; RV64IZFINXZDINX-NEXT: addi sp, sp, 16 2082c2bb0564SCraig Topper; RV64IZFINXZDINX-NEXT: ret 2083c2bb0564SCraig Topper; 2084c2bb0564SCraig Topper; RV32I-LABEL: ldexp_f64: 2085c2bb0564SCraig Topper; RV32I: # %bb.0: 2086c2bb0564SCraig Topper; RV32I-NEXT: addi sp, sp, -16 2087c2bb0564SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2088c2bb0564SCraig Topper; RV32I-NEXT: call ldexp 2089c2bb0564SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2090c2bb0564SCraig Topper; RV32I-NEXT: addi sp, sp, 16 2091c2bb0564SCraig Topper; RV32I-NEXT: ret 2092c2bb0564SCraig Topper; 2093c2bb0564SCraig Topper; RV64I-LABEL: ldexp_f64: 2094c2bb0564SCraig Topper; RV64I: # %bb.0: 2095c2bb0564SCraig Topper; RV64I-NEXT: addi sp, sp, -16 2096c2bb0564SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2097c2bb0564SCraig Topper; RV64I-NEXT: call ldexp 2098c2bb0564SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2099c2bb0564SCraig Topper; RV64I-NEXT: addi sp, sp, 16 2100c2bb0564SCraig Topper; RV64I-NEXT: ret 2101c2bb0564SCraig Topper %z = call double @llvm.experimental.constrained.ldexp.f64.i32(double %x, i32 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp 2102c2bb0564SCraig Topper ret double %z 2103c2bb0564SCraig Topper} 2104