xref: /llvm-project/llvm/test/CodeGen/RISCV/double-intrinsics-strict.ll (revision 1bc9de247477b58a14547a31047d1c9a365e2d5d)
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