xref: /llvm-project/llvm/test/CodeGen/RISCV/double-arith-strict.ll (revision 576d81baa5cf1801bae0fd05892be34acde33c6a)
139268934SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
239268934SCraig Topper; RUN: llc -mtriple=riscv32 -mattr=+d -verify-machineinstrs < %s \
3b271184fSCraig Topper; RUN:   -disable-strictnode-mutation -target-abi=ilp32d \
484bacb18SShao-Ce SUN; RUN:   | FileCheck -check-prefixes=CHECKIFD,RV32IFD %s
539268934SCraig Topper; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs < %s \
6b271184fSCraig Topper; RUN:   -disable-strictnode-mutation -target-abi=lp64d \
784bacb18SShao-Ce SUN; RUN:   | FileCheck -check-prefixes=CHECKIFD,RV64IFD %s
88b90f8e0SShao-Ce SUN; RUN: llc -mtriple=riscv32 -mattr=+zdinx -verify-machineinstrs < %s \
98b90f8e0SShao-Ce SUN; RUN:   -disable-strictnode-mutation -target-abi=ilp32 \
108b90f8e0SShao-Ce SUN; RUN:   | FileCheck -check-prefix=RV32IZFINXZDINX %s
112dc0fa05SShao-Ce SUN; RUN: llc -mtriple=riscv64 -mattr=+zdinx -verify-machineinstrs < %s \
122dc0fa05SShao-Ce SUN; RUN:   -disable-strictnode-mutation -target-abi=lp64 \
132dc0fa05SShao-Ce SUN; RUN:   | FileCheck -check-prefix=RV64IZFINXZDINX %s
1439268934SCraig Topper; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \
1539268934SCraig Topper; RUN:   -disable-strictnode-mutation | FileCheck -check-prefix=RV32I %s
1639268934SCraig Topper; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
1739268934SCraig Topper; RUN:   -disable-strictnode-mutation | FileCheck -check-prefix=RV64I %s
1839268934SCraig Topper
1939268934SCraig Topperdefine double @fadd_d(double %a, double %b) nounwind strictfp {
2084bacb18SShao-Ce SUN; CHECKIFD-LABEL: fadd_d:
2184bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
2284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fadd.d fa0, fa0, fa1
2384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
2439268934SCraig Topper;
258b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fadd_d:
268b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
278b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fadd.d a0, a0, a2
288b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
298b90f8e0SShao-Ce SUN;
302dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fadd_d:
312dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
322dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fadd.d a0, a0, a1
332dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
342dc0fa05SShao-Ce SUN;
3539268934SCraig Topper; RV32I-LABEL: fadd_d:
3639268934SCraig Topper; RV32I:       # %bb.0:
3739268934SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
3839268934SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
39*eabaee0cSFangrui Song; RV32I-NEXT:    call __adddf3
4039268934SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
4139268934SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
4239268934SCraig Topper; RV32I-NEXT:    ret
4339268934SCraig Topper;
4439268934SCraig Topper; RV64I-LABEL: fadd_d:
4539268934SCraig Topper; RV64I:       # %bb.0:
4639268934SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
4739268934SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
48*eabaee0cSFangrui Song; RV64I-NEXT:    call __adddf3
4939268934SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
5039268934SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
5139268934SCraig Topper; RV64I-NEXT:    ret
5239268934SCraig Topper  %1 = call double @llvm.experimental.constrained.fadd.f64(double %a, double %b, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp
5339268934SCraig Topper  ret double %1
5439268934SCraig Topper}
5539268934SCraig Topperdeclare double @llvm.experimental.constrained.fadd.f64(double, double, metadata, metadata)
5639268934SCraig Topper
5739268934SCraig Topperdefine double @fsub_d(double %a, double %b) nounwind strictfp {
5884bacb18SShao-Ce SUN; CHECKIFD-LABEL: fsub_d:
5984bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
6084bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fsub.d fa0, fa0, fa1
6184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
6239268934SCraig Topper;
638b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fsub_d:
648b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
658b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fsub.d a0, a0, a2
668b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
678b90f8e0SShao-Ce SUN;
682dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fsub_d:
692dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
702dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fsub.d a0, a0, a1
712dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
722dc0fa05SShao-Ce SUN;
7339268934SCraig Topper; RV32I-LABEL: fsub_d:
7439268934SCraig Topper; RV32I:       # %bb.0:
7539268934SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
7639268934SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
77*eabaee0cSFangrui Song; RV32I-NEXT:    call __subdf3
7839268934SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
7939268934SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
8039268934SCraig Topper; RV32I-NEXT:    ret
8139268934SCraig Topper;
8239268934SCraig Topper; RV64I-LABEL: fsub_d:
8339268934SCraig Topper; RV64I:       # %bb.0:
8439268934SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
8539268934SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
86*eabaee0cSFangrui Song; RV64I-NEXT:    call __subdf3
8739268934SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
8839268934SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
8939268934SCraig Topper; RV64I-NEXT:    ret
9039268934SCraig Topper  %1 = call double @llvm.experimental.constrained.fsub.f64(double %a, double %b, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp
9139268934SCraig Topper  ret double %1
9239268934SCraig Topper}
9339268934SCraig Topperdeclare double @llvm.experimental.constrained.fsub.f64(double, double, metadata, metadata)
9439268934SCraig Topper
9539268934SCraig Topperdefine double @fmul_d(double %a, double %b) nounwind strictfp {
9684bacb18SShao-Ce SUN; CHECKIFD-LABEL: fmul_d:
9784bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
9884bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fmul.d fa0, fa0, fa1
9984bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
10039268934SCraig Topper;
1018b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fmul_d:
1028b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
1038b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fmul.d a0, a0, a2
1048b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
1058b90f8e0SShao-Ce SUN;
1062dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fmul_d:
1072dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
1082dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fmul.d a0, a0, a1
1092dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
1102dc0fa05SShao-Ce SUN;
11139268934SCraig Topper; RV32I-LABEL: fmul_d:
11239268934SCraig Topper; RV32I:       # %bb.0:
11339268934SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
11439268934SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
115*eabaee0cSFangrui Song; RV32I-NEXT:    call __muldf3
11639268934SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
11739268934SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
11839268934SCraig Topper; RV32I-NEXT:    ret
11939268934SCraig Topper;
12039268934SCraig Topper; RV64I-LABEL: fmul_d:
12139268934SCraig Topper; RV64I:       # %bb.0:
12239268934SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
12339268934SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
124*eabaee0cSFangrui Song; RV64I-NEXT:    call __muldf3
12539268934SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
12639268934SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
12739268934SCraig Topper; RV64I-NEXT:    ret
12839268934SCraig Topper  %1 = call double @llvm.experimental.constrained.fmul.f64(double %a, double %b, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp
12939268934SCraig Topper  ret double %1
13039268934SCraig Topper}
13139268934SCraig Topperdeclare double @llvm.experimental.constrained.fmul.f64(double, double, metadata, metadata)
13239268934SCraig Topper
13339268934SCraig Topperdefine double @fdiv_d(double %a, double %b) nounwind strictfp {
13484bacb18SShao-Ce SUN; CHECKIFD-LABEL: fdiv_d:
13584bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
13684bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fdiv.d fa0, fa0, fa1
13784bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
13839268934SCraig Topper;
1398b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fdiv_d:
1408b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
1418b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fdiv.d a0, a0, a2
1428b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
1438b90f8e0SShao-Ce SUN;
1442dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fdiv_d:
1452dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
1462dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fdiv.d a0, a0, a1
1472dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
1482dc0fa05SShao-Ce SUN;
14939268934SCraig Topper; RV32I-LABEL: fdiv_d:
15039268934SCraig Topper; RV32I:       # %bb.0:
15139268934SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
15239268934SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
153*eabaee0cSFangrui Song; RV32I-NEXT:    call __divdf3
15439268934SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
15539268934SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
15639268934SCraig Topper; RV32I-NEXT:    ret
15739268934SCraig Topper;
15839268934SCraig Topper; RV64I-LABEL: fdiv_d:
15939268934SCraig Topper; RV64I:       # %bb.0:
16039268934SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
16139268934SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
162*eabaee0cSFangrui Song; RV64I-NEXT:    call __divdf3
16339268934SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
16439268934SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
16539268934SCraig Topper; RV64I-NEXT:    ret
16639268934SCraig Topper  %1 = call double @llvm.experimental.constrained.fdiv.f64(double %a, double %b, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp
16739268934SCraig Topper  ret double %1
16839268934SCraig Topper}
16939268934SCraig Topperdeclare double @llvm.experimental.constrained.fdiv.f64(double, double, metadata, metadata)
17039268934SCraig Topper
17139268934SCraig Topperdefine double @fsqrt_d(double %a) nounwind strictfp {
17284bacb18SShao-Ce SUN; CHECKIFD-LABEL: fsqrt_d:
17384bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
17484bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fsqrt.d fa0, fa0
17584bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
17639268934SCraig Topper;
1778b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fsqrt_d:
1788b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
1798b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fsqrt.d a0, a0
1808b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
1818b90f8e0SShao-Ce SUN;
1822dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fsqrt_d:
1832dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
1842dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fsqrt.d a0, a0
1852dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
1862dc0fa05SShao-Ce SUN;
18739268934SCraig Topper; RV32I-LABEL: fsqrt_d:
18839268934SCraig Topper; RV32I:       # %bb.0:
18939268934SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
19039268934SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
191*eabaee0cSFangrui Song; RV32I-NEXT:    call sqrt
19239268934SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
19339268934SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
19439268934SCraig Topper; RV32I-NEXT:    ret
19539268934SCraig Topper;
19639268934SCraig Topper; RV64I-LABEL: fsqrt_d:
19739268934SCraig Topper; RV64I:       # %bb.0:
19839268934SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
19939268934SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
200*eabaee0cSFangrui Song; RV64I-NEXT:    call sqrt
20139268934SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
20239268934SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
20339268934SCraig Topper; RV64I-NEXT:    ret
20439268934SCraig Topper  %1 = call double @llvm.experimental.constrained.sqrt.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp
20539268934SCraig Topper  ret double %1
20639268934SCraig Topper}
20739268934SCraig Topperdeclare double @llvm.experimental.constrained.sqrt.f64(double, metadata, metadata)
20839268934SCraig Topper
20939268934SCraig Topperdefine double @fmin_d(double %a, double %b) nounwind strictfp {
21039268934SCraig Topper; RV32IFD-LABEL: fmin_d:
21139268934SCraig Topper; RV32IFD:       # %bb.0:
21239268934SCraig Topper; RV32IFD-NEXT:    addi sp, sp, -16
21339268934SCraig Topper; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
214*eabaee0cSFangrui Song; RV32IFD-NEXT:    call fmin
21539268934SCraig Topper; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
21639268934SCraig Topper; RV32IFD-NEXT:    addi sp, sp, 16
21739268934SCraig Topper; RV32IFD-NEXT:    ret
21839268934SCraig Topper;
21939268934SCraig Topper; RV64IFD-LABEL: fmin_d:
22039268934SCraig Topper; RV64IFD:       # %bb.0:
22139268934SCraig Topper; RV64IFD-NEXT:    addi sp, sp, -16
22239268934SCraig Topper; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
223*eabaee0cSFangrui Song; RV64IFD-NEXT:    call fmin
22439268934SCraig Topper; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
22539268934SCraig Topper; RV64IFD-NEXT:    addi sp, sp, 16
22639268934SCraig Topper; RV64IFD-NEXT:    ret
22739268934SCraig Topper;
2288b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fmin_d:
2298b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
2308b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
2318b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
232*eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call fmin
2338b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
2348b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
2358b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
2368b90f8e0SShao-Ce SUN;
2372dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fmin_d:
2382dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
2392dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
2402dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
241*eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call fmin
2422dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
2432dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
2442dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
2452dc0fa05SShao-Ce SUN;
24639268934SCraig Topper; RV32I-LABEL: fmin_d:
24739268934SCraig Topper; RV32I:       # %bb.0:
24839268934SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
24939268934SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
250*eabaee0cSFangrui Song; RV32I-NEXT:    call fmin
25139268934SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
25239268934SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
25339268934SCraig Topper; RV32I-NEXT:    ret
25439268934SCraig Topper;
25539268934SCraig Topper; RV64I-LABEL: fmin_d:
25639268934SCraig Topper; RV64I:       # %bb.0:
25739268934SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
25839268934SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
259*eabaee0cSFangrui Song; RV64I-NEXT:    call fmin
26039268934SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
26139268934SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
26239268934SCraig Topper; RV64I-NEXT:    ret
26339268934SCraig Topper  %1 = call double @llvm.experimental.constrained.minnum.f64(double %a, double %b, metadata !"fpexcept.strict") strictfp
26439268934SCraig Topper  ret double %1
26539268934SCraig Topper}
26639268934SCraig Topperdeclare double @llvm.experimental.constrained.minnum.f64(double, double, metadata) strictfp
26739268934SCraig Topper
26839268934SCraig Topperdefine double @fmax_d(double %a, double %b) nounwind strictfp {
26939268934SCraig Topper; RV32IFD-LABEL: fmax_d:
27039268934SCraig Topper; RV32IFD:       # %bb.0:
27139268934SCraig Topper; RV32IFD-NEXT:    addi sp, sp, -16
27239268934SCraig Topper; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
273*eabaee0cSFangrui Song; RV32IFD-NEXT:    call fmax
27439268934SCraig Topper; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
27539268934SCraig Topper; RV32IFD-NEXT:    addi sp, sp, 16
27639268934SCraig Topper; RV32IFD-NEXT:    ret
27739268934SCraig Topper;
27839268934SCraig Topper; RV64IFD-LABEL: fmax_d:
27939268934SCraig Topper; RV64IFD:       # %bb.0:
28039268934SCraig Topper; RV64IFD-NEXT:    addi sp, sp, -16
28139268934SCraig Topper; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
282*eabaee0cSFangrui Song; RV64IFD-NEXT:    call fmax
28339268934SCraig Topper; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
28439268934SCraig Topper; RV64IFD-NEXT:    addi sp, sp, 16
28539268934SCraig Topper; RV64IFD-NEXT:    ret
28639268934SCraig Topper;
2878b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fmax_d:
2888b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
2898b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
2908b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
291*eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call fmax
2928b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
2938b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
2948b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
2958b90f8e0SShao-Ce SUN;
2962dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fmax_d:
2972dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
2982dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
2992dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
300*eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call fmax
3012dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
3022dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
3032dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
3042dc0fa05SShao-Ce SUN;
30539268934SCraig Topper; RV32I-LABEL: fmax_d:
30639268934SCraig Topper; RV32I:       # %bb.0:
30739268934SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
30839268934SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
309*eabaee0cSFangrui Song; RV32I-NEXT:    call fmax
31039268934SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
31139268934SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
31239268934SCraig Topper; RV32I-NEXT:    ret
31339268934SCraig Topper;
31439268934SCraig Topper; RV64I-LABEL: fmax_d:
31539268934SCraig Topper; RV64I:       # %bb.0:
31639268934SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
31739268934SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
318*eabaee0cSFangrui Song; RV64I-NEXT:    call fmax
31939268934SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
32039268934SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
32139268934SCraig Topper; RV64I-NEXT:    ret
32239268934SCraig Topper  %1 = call double @llvm.experimental.constrained.maxnum.f64(double %a, double %b, metadata !"fpexcept.strict") strictfp
32339268934SCraig Topper  ret double %1
32439268934SCraig Topper}
32539268934SCraig Topperdeclare double @llvm.experimental.constrained.maxnum.f64(double, double, metadata) strictfp
32639268934SCraig Topper
32739268934SCraig Topperdefine double @fmadd_d(double %a, double %b, double %c) nounwind strictfp {
32884bacb18SShao-Ce SUN; CHECKIFD-LABEL: fmadd_d:
32984bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
33084bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fmadd.d fa0, fa0, fa1, fa2
33184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
33239268934SCraig Topper;
3338b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fmadd_d:
3348b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
3358b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fmadd.d a0, a0, a2, a4
3368b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
3378b90f8e0SShao-Ce SUN;
3382dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fmadd_d:
3392dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
3402dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fmadd.d a0, a0, a1, a2
3412dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
3422dc0fa05SShao-Ce SUN;
34339268934SCraig Topper; RV32I-LABEL: fmadd_d:
34439268934SCraig Topper; RV32I:       # %bb.0:
34539268934SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
34639268934SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
347*eabaee0cSFangrui Song; RV32I-NEXT:    call fma
34839268934SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
34939268934SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
35039268934SCraig Topper; RV32I-NEXT:    ret
35139268934SCraig Topper;
35239268934SCraig Topper; RV64I-LABEL: fmadd_d:
35339268934SCraig Topper; RV64I:       # %bb.0:
35439268934SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
35539268934SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
356*eabaee0cSFangrui Song; RV64I-NEXT:    call fma
35739268934SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
35839268934SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
35939268934SCraig Topper; RV64I-NEXT:    ret
36039268934SCraig Topper  %1 = call double @llvm.experimental.constrained.fma.f64(double %a, double %b, double %c, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp
36139268934SCraig Topper  ret double %1
36239268934SCraig Topper}
36339268934SCraig Topperdeclare double @llvm.experimental.constrained.fma.f64(double, double, double, metadata, metadata) strictfp
36439268934SCraig Topper
36539268934SCraig Topperdefine double @fmsub_d(double %a, double %b, double %c) nounwind strictfp {
36639268934SCraig Topper; RV32IFD-LABEL: fmsub_d:
36739268934SCraig Topper; RV32IFD:       # %bb.0:
3687b0c4184SCraig Topper; RV32IFD-NEXT:    fcvt.d.w fa5, zero
3697b0c4184SCraig Topper; RV32IFD-NEXT:    fadd.d fa5, fa2, fa5
3707b0c4184SCraig Topper; RV32IFD-NEXT:    fmsub.d fa0, fa0, fa1, fa5
37139268934SCraig Topper; RV32IFD-NEXT:    ret
37239268934SCraig Topper;
37339268934SCraig Topper; RV64IFD-LABEL: fmsub_d:
37439268934SCraig Topper; RV64IFD:       # %bb.0:
3757b0c4184SCraig Topper; RV64IFD-NEXT:    fmv.d.x fa5, zero
3767b0c4184SCraig Topper; RV64IFD-NEXT:    fadd.d fa5, fa2, fa5
3777b0c4184SCraig Topper; RV64IFD-NEXT:    fmsub.d fa0, fa0, fa1, fa5
37839268934SCraig Topper; RV64IFD-NEXT:    ret
37939268934SCraig Topper;
3808b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fmsub_d:
3818b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
3828b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.d.w a6, zero
3838b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fadd.d a4, a4, a6
3848b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fmsub.d a0, a0, a2, a4
3858b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
3868b90f8e0SShao-Ce SUN;
3872dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fmsub_d:
3882dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
3892dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fadd.d a2, a2, zero
3902dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fmsub.d a0, a0, a1, a2
3912dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
3922dc0fa05SShao-Ce SUN;
39339268934SCraig Topper; RV32I-LABEL: fmsub_d:
39439268934SCraig Topper; RV32I:       # %bb.0:
39539268934SCraig Topper; RV32I-NEXT:    addi sp, sp, -32
39639268934SCraig Topper; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
39739268934SCraig Topper; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
39839268934SCraig Topper; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
39939268934SCraig Topper; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
40039268934SCraig Topper; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill
4018def89b5Swangpc; RV32I-NEXT:    mv s0, a3
4028def89b5Swangpc; RV32I-NEXT:    mv s1, a2
4038def89b5Swangpc; RV32I-NEXT:    mv s2, a1
4048def89b5Swangpc; RV32I-NEXT:    mv s3, a0
40539268934SCraig Topper; RV32I-NEXT:    mv a0, a4
40639268934SCraig Topper; RV32I-NEXT:    mv a1, a5
40739268934SCraig Topper; RV32I-NEXT:    li a2, 0
40839268934SCraig Topper; RV32I-NEXT:    li a3, 0
409*eabaee0cSFangrui Song; RV32I-NEXT:    call __adddf3
41039268934SCraig Topper; RV32I-NEXT:    mv a4, a0
411e00e20a0SCraig Topper; RV32I-NEXT:    lui a5, 524288
412e00e20a0SCraig Topper; RV32I-NEXT:    xor a5, a1, a5
4138def89b5Swangpc; RV32I-NEXT:    mv a0, s3
4148def89b5Swangpc; RV32I-NEXT:    mv a1, s2
4158def89b5Swangpc; RV32I-NEXT:    mv a2, s1
4168def89b5Swangpc; RV32I-NEXT:    mv a3, s0
417*eabaee0cSFangrui Song; RV32I-NEXT:    call fma
41839268934SCraig Topper; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
41939268934SCraig Topper; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
42039268934SCraig Topper; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
42139268934SCraig Topper; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
42239268934SCraig Topper; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload
42339268934SCraig Topper; RV32I-NEXT:    addi sp, sp, 32
42439268934SCraig Topper; RV32I-NEXT:    ret
42539268934SCraig Topper;
42639268934SCraig Topper; RV64I-LABEL: fmsub_d:
42739268934SCraig Topper; RV64I:       # %bb.0:
42839268934SCraig Topper; RV64I-NEXT:    addi sp, sp, -32
42939268934SCraig Topper; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
43039268934SCraig Topper; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
43139268934SCraig Topper; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
43239268934SCraig Topper; RV64I-NEXT:    mv s0, a1
43339268934SCraig Topper; RV64I-NEXT:    mv s1, a0
43439268934SCraig Topper; RV64I-NEXT:    mv a0, a2
43539268934SCraig Topper; RV64I-NEXT:    li a1, 0
436*eabaee0cSFangrui Song; RV64I-NEXT:    call __adddf3
43739268934SCraig Topper; RV64I-NEXT:    li a1, -1
43839268934SCraig Topper; RV64I-NEXT:    slli a1, a1, 63
43939268934SCraig Topper; RV64I-NEXT:    xor a2, a0, a1
44039268934SCraig Topper; RV64I-NEXT:    mv a0, s1
44139268934SCraig Topper; RV64I-NEXT:    mv a1, s0
442*eabaee0cSFangrui Song; RV64I-NEXT:    call fma
44339268934SCraig Topper; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
44439268934SCraig Topper; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
44539268934SCraig Topper; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
44639268934SCraig Topper; RV64I-NEXT:    addi sp, sp, 32
44739268934SCraig Topper; RV64I-NEXT:    ret
44839268934SCraig Topper  %c_ = fadd double 0.0, %c ; avoid negation using xor
44939268934SCraig Topper  %negc = fneg double %c_
45039268934SCraig Topper  %1 = call double @llvm.experimental.constrained.fma.f64(double %a, double %b, double %negc, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp
45139268934SCraig Topper  ret double %1
45239268934SCraig Topper}
45339268934SCraig Topper
45439268934SCraig Topperdefine double @fnmadd_d(double %a, double %b, double %c) nounwind strictfp {
45539268934SCraig Topper; RV32IFD-LABEL: fnmadd_d:
45639268934SCraig Topper; RV32IFD:       # %bb.0:
4577b0c4184SCraig Topper; RV32IFD-NEXT:    fcvt.d.w fa5, zero
4587b0c4184SCraig Topper; RV32IFD-NEXT:    fadd.d fa4, fa0, fa5
4597b0c4184SCraig Topper; RV32IFD-NEXT:    fadd.d fa5, fa2, fa5
4607b0c4184SCraig Topper; RV32IFD-NEXT:    fnmadd.d fa0, fa4, fa1, fa5
46139268934SCraig Topper; RV32IFD-NEXT:    ret
46239268934SCraig Topper;
46339268934SCraig Topper; RV64IFD-LABEL: fnmadd_d:
46439268934SCraig Topper; RV64IFD:       # %bb.0:
4657b0c4184SCraig Topper; RV64IFD-NEXT:    fmv.d.x fa5, zero
4667b0c4184SCraig Topper; RV64IFD-NEXT:    fadd.d fa4, fa0, fa5
4677b0c4184SCraig Topper; RV64IFD-NEXT:    fadd.d fa5, fa2, fa5
4687b0c4184SCraig Topper; RV64IFD-NEXT:    fnmadd.d fa0, fa4, fa1, fa5
46939268934SCraig Topper; RV64IFD-NEXT:    ret
47039268934SCraig Topper;
4718b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fnmadd_d:
4728b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
4738b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.d.w a6, zero
4748b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fadd.d a0, a0, a6
4758b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fadd.d a4, a4, a6
4768b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fnmadd.d a0, a0, a2, a4
4778b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
4788b90f8e0SShao-Ce SUN;
4792dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fnmadd_d:
4802dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
4812dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fadd.d a0, a0, zero
4822dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fadd.d a2, a2, zero
4832dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fnmadd.d a0, a0, a1, a2
4842dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
4852dc0fa05SShao-Ce SUN;
48639268934SCraig Topper; RV32I-LABEL: fnmadd_d:
48739268934SCraig Topper; RV32I:       # %bb.0:
48839268934SCraig Topper; RV32I-NEXT:    addi sp, sp, -32
48939268934SCraig Topper; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
49039268934SCraig Topper; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
49139268934SCraig Topper; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
49239268934SCraig Topper; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
49339268934SCraig Topper; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill
49439268934SCraig Topper; RV32I-NEXT:    sw s4, 8(sp) # 4-byte Folded Spill
49539268934SCraig Topper; RV32I-NEXT:    sw s5, 4(sp) # 4-byte Folded Spill
4968def89b5Swangpc; RV32I-NEXT:    mv s0, a5
4978def89b5Swangpc; RV32I-NEXT:    mv s1, a4
49839268934SCraig Topper; RV32I-NEXT:    mv s2, a3
49939268934SCraig Topper; RV32I-NEXT:    mv s3, a2
50039268934SCraig Topper; RV32I-NEXT:    li a2, 0
50139268934SCraig Topper; RV32I-NEXT:    li a3, 0
502*eabaee0cSFangrui Song; RV32I-NEXT:    call __adddf3
5038def89b5Swangpc; RV32I-NEXT:    mv s4, a0
5048def89b5Swangpc; RV32I-NEXT:    mv s5, a1
5058def89b5Swangpc; RV32I-NEXT:    mv a0, s1
5068def89b5Swangpc; RV32I-NEXT:    mv a1, s0
50739268934SCraig Topper; RV32I-NEXT:    li a2, 0
50839268934SCraig Topper; RV32I-NEXT:    li a3, 0
509*eabaee0cSFangrui Song; RV32I-NEXT:    call __adddf3
51039268934SCraig Topper; RV32I-NEXT:    mv a4, a0
511e00e20a0SCraig Topper; RV32I-NEXT:    lui a5, 524288
512e00e20a0SCraig Topper; RV32I-NEXT:    xor a2, s5, a5
513e00e20a0SCraig Topper; RV32I-NEXT:    xor a5, a1, a5
5148def89b5Swangpc; RV32I-NEXT:    mv a0, s4
51539268934SCraig Topper; RV32I-NEXT:    mv a1, a2
51639268934SCraig Topper; RV32I-NEXT:    mv a2, s3
51739268934SCraig Topper; RV32I-NEXT:    mv a3, s2
518*eabaee0cSFangrui Song; RV32I-NEXT:    call fma
51939268934SCraig Topper; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
52039268934SCraig Topper; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
52139268934SCraig Topper; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
52239268934SCraig Topper; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
52339268934SCraig Topper; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload
52439268934SCraig Topper; RV32I-NEXT:    lw s4, 8(sp) # 4-byte Folded Reload
52539268934SCraig Topper; RV32I-NEXT:    lw s5, 4(sp) # 4-byte Folded Reload
52639268934SCraig Topper; RV32I-NEXT:    addi sp, sp, 32
52739268934SCraig Topper; RV32I-NEXT:    ret
52839268934SCraig Topper;
52939268934SCraig Topper; RV64I-LABEL: fnmadd_d:
53039268934SCraig Topper; RV64I:       # %bb.0:
53139268934SCraig Topper; RV64I-NEXT:    addi sp, sp, -32
53239268934SCraig Topper; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
53339268934SCraig Topper; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
53439268934SCraig Topper; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
53539268934SCraig Topper; RV64I-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
53639268934SCraig Topper; RV64I-NEXT:    mv s0, a2
5378def89b5Swangpc; RV64I-NEXT:    mv s1, a1
53839268934SCraig Topper; RV64I-NEXT:    li a1, 0
539*eabaee0cSFangrui Song; RV64I-NEXT:    call __adddf3
5408def89b5Swangpc; RV64I-NEXT:    mv s2, a0
54139268934SCraig Topper; RV64I-NEXT:    mv a0, s0
54239268934SCraig Topper; RV64I-NEXT:    li a1, 0
543*eabaee0cSFangrui Song; RV64I-NEXT:    call __adddf3
54439268934SCraig Topper; RV64I-NEXT:    li a1, -1
54539268934SCraig Topper; RV64I-NEXT:    slli a2, a1, 63
5468def89b5Swangpc; RV64I-NEXT:    xor a1, s2, a2
54739268934SCraig Topper; RV64I-NEXT:    xor a2, a0, a2
54839268934SCraig Topper; RV64I-NEXT:    mv a0, a1
5498def89b5Swangpc; RV64I-NEXT:    mv a1, s1
550*eabaee0cSFangrui Song; RV64I-NEXT:    call fma
55139268934SCraig Topper; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
55239268934SCraig Topper; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
55339268934SCraig Topper; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
55439268934SCraig Topper; RV64I-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload
55539268934SCraig Topper; RV64I-NEXT:    addi sp, sp, 32
55639268934SCraig Topper; RV64I-NEXT:    ret
55739268934SCraig Topper  %a_ = fadd double 0.0, %a
55839268934SCraig Topper  %c_ = fadd double 0.0, %c
55939268934SCraig Topper  %nega = fneg double %a_
56039268934SCraig Topper  %negc = fneg double %c_
56139268934SCraig Topper  %1 = call double @llvm.experimental.constrained.fma.f64(double %nega, double %b, double %negc, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp
56239268934SCraig Topper  ret double %1
56339268934SCraig Topper}
56439268934SCraig Topper
56539268934SCraig Topperdefine double @fnmadd_d_2(double %a, double %b, double %c) nounwind strictfp {
56639268934SCraig Topper; RV32IFD-LABEL: fnmadd_d_2:
56739268934SCraig Topper; RV32IFD:       # %bb.0:
5687b0c4184SCraig Topper; RV32IFD-NEXT:    fcvt.d.w fa5, zero
5697b0c4184SCraig Topper; RV32IFD-NEXT:    fadd.d fa4, fa1, fa5
5707b0c4184SCraig Topper; RV32IFD-NEXT:    fadd.d fa5, fa2, fa5
5717b0c4184SCraig Topper; RV32IFD-NEXT:    fnmadd.d fa0, fa4, fa0, fa5
57239268934SCraig Topper; RV32IFD-NEXT:    ret
57339268934SCraig Topper;
57439268934SCraig Topper; RV64IFD-LABEL: fnmadd_d_2:
57539268934SCraig Topper; RV64IFD:       # %bb.0:
5767b0c4184SCraig Topper; RV64IFD-NEXT:    fmv.d.x fa5, zero
5777b0c4184SCraig Topper; RV64IFD-NEXT:    fadd.d fa4, fa1, fa5
5787b0c4184SCraig Topper; RV64IFD-NEXT:    fadd.d fa5, fa2, fa5
5797b0c4184SCraig Topper; RV64IFD-NEXT:    fnmadd.d fa0, fa4, fa0, fa5
58039268934SCraig Topper; RV64IFD-NEXT:    ret
58139268934SCraig Topper;
5828b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fnmadd_d_2:
5838b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
5848b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.d.w a6, zero
5858b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fadd.d a2, a2, a6
5868b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fadd.d a4, a4, a6
5878b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fnmadd.d a0, a2, a0, a4
5888b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
5898b90f8e0SShao-Ce SUN;
5902dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fnmadd_d_2:
5912dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
5922dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fadd.d a1, a1, zero
5932dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fadd.d a2, a2, zero
5942dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fnmadd.d a0, a1, a0, a2
5952dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
5962dc0fa05SShao-Ce SUN;
59739268934SCraig Topper; RV32I-LABEL: fnmadd_d_2:
59839268934SCraig Topper; RV32I:       # %bb.0:
59939268934SCraig Topper; RV32I-NEXT:    addi sp, sp, -32
60039268934SCraig Topper; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
60139268934SCraig Topper; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
60239268934SCraig Topper; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
60339268934SCraig Topper; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
60439268934SCraig Topper; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill
60539268934SCraig Topper; RV32I-NEXT:    sw s4, 8(sp) # 4-byte Folded Spill
60639268934SCraig Topper; RV32I-NEXT:    sw s5, 4(sp) # 4-byte Folded Spill
6078def89b5Swangpc; RV32I-NEXT:    mv s0, a5
60839268934SCraig Topper; RV32I-NEXT:    mv s1, a4
60939268934SCraig Topper; RV32I-NEXT:    mv s2, a1
61039268934SCraig Topper; RV32I-NEXT:    mv s3, a0
61139268934SCraig Topper; RV32I-NEXT:    mv a0, a2
61239268934SCraig Topper; RV32I-NEXT:    mv a1, a3
61339268934SCraig Topper; RV32I-NEXT:    li a2, 0
61439268934SCraig Topper; RV32I-NEXT:    li a3, 0
615*eabaee0cSFangrui Song; RV32I-NEXT:    call __adddf3
6168def89b5Swangpc; RV32I-NEXT:    mv s4, a0
6178def89b5Swangpc; RV32I-NEXT:    mv s5, a1
61839268934SCraig Topper; RV32I-NEXT:    mv a0, s1
6198def89b5Swangpc; RV32I-NEXT:    mv a1, s0
62039268934SCraig Topper; RV32I-NEXT:    li a2, 0
62139268934SCraig Topper; RV32I-NEXT:    li a3, 0
622*eabaee0cSFangrui Song; RV32I-NEXT:    call __adddf3
62339268934SCraig Topper; RV32I-NEXT:    mv a4, a0
624e00e20a0SCraig Topper; RV32I-NEXT:    lui a5, 524288
625e00e20a0SCraig Topper; RV32I-NEXT:    xor a3, s5, a5
626e00e20a0SCraig Topper; RV32I-NEXT:    xor a5, a1, a5
62739268934SCraig Topper; RV32I-NEXT:    mv a0, s3
62839268934SCraig Topper; RV32I-NEXT:    mv a1, s2
6298def89b5Swangpc; RV32I-NEXT:    mv a2, s4
630*eabaee0cSFangrui Song; RV32I-NEXT:    call fma
63139268934SCraig Topper; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
63239268934SCraig Topper; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
63339268934SCraig Topper; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
63439268934SCraig Topper; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
63539268934SCraig Topper; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload
63639268934SCraig Topper; RV32I-NEXT:    lw s4, 8(sp) # 4-byte Folded Reload
63739268934SCraig Topper; RV32I-NEXT:    lw s5, 4(sp) # 4-byte Folded Reload
63839268934SCraig Topper; RV32I-NEXT:    addi sp, sp, 32
63939268934SCraig Topper; RV32I-NEXT:    ret
64039268934SCraig Topper;
64139268934SCraig Topper; RV64I-LABEL: fnmadd_d_2:
64239268934SCraig Topper; RV64I:       # %bb.0:
64339268934SCraig Topper; RV64I-NEXT:    addi sp, sp, -32
64439268934SCraig Topper; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
64539268934SCraig Topper; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
64639268934SCraig Topper; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
64739268934SCraig Topper; RV64I-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
64839268934SCraig Topper; RV64I-NEXT:    mv s0, a2
6498def89b5Swangpc; RV64I-NEXT:    mv s1, a0
65039268934SCraig Topper; RV64I-NEXT:    mv a0, a1
65139268934SCraig Topper; RV64I-NEXT:    li a1, 0
652*eabaee0cSFangrui Song; RV64I-NEXT:    call __adddf3
6538def89b5Swangpc; RV64I-NEXT:    mv s2, a0
65439268934SCraig Topper; RV64I-NEXT:    mv a0, s0
65539268934SCraig Topper; RV64I-NEXT:    li a1, 0
656*eabaee0cSFangrui Song; RV64I-NEXT:    call __adddf3
65739268934SCraig Topper; RV64I-NEXT:    li a1, -1
65839268934SCraig Topper; RV64I-NEXT:    slli a2, a1, 63
6598def89b5Swangpc; RV64I-NEXT:    xor a1, s2, a2
66039268934SCraig Topper; RV64I-NEXT:    xor a2, a0, a2
6618def89b5Swangpc; RV64I-NEXT:    mv a0, s1
662*eabaee0cSFangrui Song; RV64I-NEXT:    call fma
66339268934SCraig Topper; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
66439268934SCraig Topper; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
66539268934SCraig Topper; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
66639268934SCraig Topper; RV64I-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload
66739268934SCraig Topper; RV64I-NEXT:    addi sp, sp, 32
66839268934SCraig Topper; RV64I-NEXT:    ret
66939268934SCraig Topper  %b_ = fadd double 0.0, %b
67039268934SCraig Topper  %c_ = fadd double 0.0, %c
67139268934SCraig Topper  %negb = fneg double %b_
67239268934SCraig Topper  %negc = fneg double %c_
67339268934SCraig Topper  %1 = call double @llvm.experimental.constrained.fma.f64(double %a, double %negb, double %negc, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp
67439268934SCraig Topper  ret double %1
67539268934SCraig Topper}
67639268934SCraig Topper
67739268934SCraig Topperdefine double @fnmsub_d(double %a, double %b, double %c) nounwind strictfp {
67839268934SCraig Topper; RV32IFD-LABEL: fnmsub_d:
67939268934SCraig Topper; RV32IFD:       # %bb.0:
6807b0c4184SCraig Topper; RV32IFD-NEXT:    fcvt.d.w fa5, zero
6817b0c4184SCraig Topper; RV32IFD-NEXT:    fadd.d fa5, fa0, fa5
6827b0c4184SCraig Topper; RV32IFD-NEXT:    fnmsub.d fa0, fa5, fa1, fa2
68339268934SCraig Topper; RV32IFD-NEXT:    ret
68439268934SCraig Topper;
68539268934SCraig Topper; RV64IFD-LABEL: fnmsub_d:
68639268934SCraig Topper; RV64IFD:       # %bb.0:
6877b0c4184SCraig Topper; RV64IFD-NEXT:    fmv.d.x fa5, zero
6887b0c4184SCraig Topper; RV64IFD-NEXT:    fadd.d fa5, fa0, fa5
6897b0c4184SCraig Topper; RV64IFD-NEXT:    fnmsub.d fa0, fa5, fa1, fa2
69039268934SCraig Topper; RV64IFD-NEXT:    ret
69139268934SCraig Topper;
6928b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fnmsub_d:
6938b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
6948b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.d.w a6, zero
6958b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fadd.d a0, a0, a6
6968b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fnmsub.d a0, a0, a2, a4
6978b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
6988b90f8e0SShao-Ce SUN;
6992dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fnmsub_d:
7002dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
7012dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fadd.d a0, a0, zero
7022dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fnmsub.d a0, a0, a1, a2
7032dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
7042dc0fa05SShao-Ce SUN;
70539268934SCraig Topper; RV32I-LABEL: fnmsub_d:
70639268934SCraig Topper; RV32I:       # %bb.0:
70739268934SCraig Topper; RV32I-NEXT:    addi sp, sp, -32
70839268934SCraig Topper; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
70939268934SCraig Topper; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
71039268934SCraig Topper; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
71139268934SCraig Topper; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
71239268934SCraig Topper; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill
7138def89b5Swangpc; RV32I-NEXT:    mv s0, a5
7148def89b5Swangpc; RV32I-NEXT:    mv s1, a4
7158def89b5Swangpc; RV32I-NEXT:    mv s2, a3
7168def89b5Swangpc; RV32I-NEXT:    mv s3, a2
71739268934SCraig Topper; RV32I-NEXT:    li a2, 0
71839268934SCraig Topper; RV32I-NEXT:    li a3, 0
719*eabaee0cSFangrui Song; RV32I-NEXT:    call __adddf3
72039268934SCraig Topper; RV32I-NEXT:    lui a2, 524288
72139268934SCraig Topper; RV32I-NEXT:    xor a1, a1, a2
7228def89b5Swangpc; RV32I-NEXT:    mv a2, s3
7238def89b5Swangpc; RV32I-NEXT:    mv a3, s2
7248def89b5Swangpc; RV32I-NEXT:    mv a4, s1
7258def89b5Swangpc; RV32I-NEXT:    mv a5, s0
726*eabaee0cSFangrui Song; RV32I-NEXT:    call fma
72739268934SCraig Topper; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
72839268934SCraig Topper; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
72939268934SCraig Topper; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
73039268934SCraig Topper; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
73139268934SCraig Topper; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload
73239268934SCraig Topper; RV32I-NEXT:    addi sp, sp, 32
73339268934SCraig Topper; RV32I-NEXT:    ret
73439268934SCraig Topper;
73539268934SCraig Topper; RV64I-LABEL: fnmsub_d:
73639268934SCraig Topper; RV64I:       # %bb.0:
73739268934SCraig Topper; RV64I-NEXT:    addi sp, sp, -32
73839268934SCraig Topper; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
73939268934SCraig Topper; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
74039268934SCraig Topper; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
74139268934SCraig Topper; RV64I-NEXT:    mv s0, a2
74239268934SCraig Topper; RV64I-NEXT:    mv s1, a1
74339268934SCraig Topper; RV64I-NEXT:    li a1, 0
744*eabaee0cSFangrui Song; RV64I-NEXT:    call __adddf3
74539268934SCraig Topper; RV64I-NEXT:    li a1, -1
74639268934SCraig Topper; RV64I-NEXT:    slli a1, a1, 63
74739268934SCraig Topper; RV64I-NEXT:    xor a0, a0, a1
74839268934SCraig Topper; RV64I-NEXT:    mv a1, s1
74939268934SCraig Topper; RV64I-NEXT:    mv a2, s0
750*eabaee0cSFangrui Song; RV64I-NEXT:    call fma
75139268934SCraig Topper; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
75239268934SCraig Topper; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
75339268934SCraig Topper; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
75439268934SCraig Topper; RV64I-NEXT:    addi sp, sp, 32
75539268934SCraig Topper; RV64I-NEXT:    ret
75639268934SCraig Topper  %a_ = fadd double 0.0, %a
75739268934SCraig Topper  %nega = fneg double %a_
75839268934SCraig Topper  %1 = call double @llvm.experimental.constrained.fma.f64(double %nega, double %b, double %c, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp
75939268934SCraig Topper  ret double %1
76039268934SCraig Topper}
76139268934SCraig Topper
76239268934SCraig Topperdefine double @fnmsub_d_2(double %a, double %b, double %c) nounwind strictfp {
76339268934SCraig Topper; RV32IFD-LABEL: fnmsub_d_2:
76439268934SCraig Topper; RV32IFD:       # %bb.0:
7657b0c4184SCraig Topper; RV32IFD-NEXT:    fcvt.d.w fa5, zero
7667b0c4184SCraig Topper; RV32IFD-NEXT:    fadd.d fa5, fa1, fa5
7677b0c4184SCraig Topper; RV32IFD-NEXT:    fnmsub.d fa0, fa5, fa0, fa2
76839268934SCraig Topper; RV32IFD-NEXT:    ret
76939268934SCraig Topper;
77039268934SCraig Topper; RV64IFD-LABEL: fnmsub_d_2:
77139268934SCraig Topper; RV64IFD:       # %bb.0:
7727b0c4184SCraig Topper; RV64IFD-NEXT:    fmv.d.x fa5, zero
7737b0c4184SCraig Topper; RV64IFD-NEXT:    fadd.d fa5, fa1, fa5
7747b0c4184SCraig Topper; RV64IFD-NEXT:    fnmsub.d fa0, fa5, fa0, fa2
77539268934SCraig Topper; RV64IFD-NEXT:    ret
77639268934SCraig Topper;
7778b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fnmsub_d_2:
7788b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
7798b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.d.w a6, zero
7808b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fadd.d a2, a2, a6
7818b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fnmsub.d a0, a2, a0, a4
7828b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
7838b90f8e0SShao-Ce SUN;
7842dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fnmsub_d_2:
7852dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
7862dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fadd.d a1, a1, zero
7872dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fnmsub.d a0, a1, a0, a2
7882dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
7892dc0fa05SShao-Ce SUN;
79039268934SCraig Topper; RV32I-LABEL: fnmsub_d_2:
79139268934SCraig Topper; RV32I:       # %bb.0:
79239268934SCraig Topper; RV32I-NEXT:    addi sp, sp, -32
79339268934SCraig Topper; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
79439268934SCraig Topper; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
79539268934SCraig Topper; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
79639268934SCraig Topper; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
79739268934SCraig Topper; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill
7988def89b5Swangpc; RV32I-NEXT:    mv s0, a5
7998def89b5Swangpc; RV32I-NEXT:    mv s1, a4
8008def89b5Swangpc; RV32I-NEXT:    mv s2, a1
8018def89b5Swangpc; RV32I-NEXT:    mv s3, a0
80239268934SCraig Topper; RV32I-NEXT:    mv a0, a2
80339268934SCraig Topper; RV32I-NEXT:    mv a1, a3
80439268934SCraig Topper; RV32I-NEXT:    li a2, 0
80539268934SCraig Topper; RV32I-NEXT:    li a3, 0
806*eabaee0cSFangrui Song; RV32I-NEXT:    call __adddf3
80739268934SCraig Topper; RV32I-NEXT:    mv a2, a0
808e00e20a0SCraig Topper; RV32I-NEXT:    lui a3, 524288
809e00e20a0SCraig Topper; RV32I-NEXT:    xor a3, a1, a3
8108def89b5Swangpc; RV32I-NEXT:    mv a0, s3
8118def89b5Swangpc; RV32I-NEXT:    mv a1, s2
8128def89b5Swangpc; RV32I-NEXT:    mv a4, s1
8138def89b5Swangpc; RV32I-NEXT:    mv a5, s0
814*eabaee0cSFangrui Song; RV32I-NEXT:    call fma
81539268934SCraig Topper; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
81639268934SCraig Topper; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
81739268934SCraig Topper; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
81839268934SCraig Topper; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
81939268934SCraig Topper; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload
82039268934SCraig Topper; RV32I-NEXT:    addi sp, sp, 32
82139268934SCraig Topper; RV32I-NEXT:    ret
82239268934SCraig Topper;
82339268934SCraig Topper; RV64I-LABEL: fnmsub_d_2:
82439268934SCraig Topper; RV64I:       # %bb.0:
82539268934SCraig Topper; RV64I-NEXT:    addi sp, sp, -32
82639268934SCraig Topper; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
82739268934SCraig Topper; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
82839268934SCraig Topper; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
82939268934SCraig Topper; RV64I-NEXT:    mv s0, a2
83039268934SCraig Topper; RV64I-NEXT:    mv s1, a0
83139268934SCraig Topper; RV64I-NEXT:    mv a0, a1
83239268934SCraig Topper; RV64I-NEXT:    li a1, 0
833*eabaee0cSFangrui Song; RV64I-NEXT:    call __adddf3
83439268934SCraig Topper; RV64I-NEXT:    li a1, -1
83539268934SCraig Topper; RV64I-NEXT:    slli a1, a1, 63
83639268934SCraig Topper; RV64I-NEXT:    xor a1, a0, a1
83739268934SCraig Topper; RV64I-NEXT:    mv a0, s1
83839268934SCraig Topper; RV64I-NEXT:    mv a2, s0
839*eabaee0cSFangrui Song; RV64I-NEXT:    call fma
84039268934SCraig Topper; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
84139268934SCraig Topper; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
84239268934SCraig Topper; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
84339268934SCraig Topper; RV64I-NEXT:    addi sp, sp, 32
84439268934SCraig Topper; RV64I-NEXT:    ret
84539268934SCraig Topper  %b_ = fadd double 0.0, %b
84639268934SCraig Topper  %negb = fneg double %b_
84739268934SCraig Topper  %1 = call double @llvm.experimental.constrained.fma.f64(double %a, double %negb, double %c, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp
84839268934SCraig Topper  ret double %1
84939268934SCraig Topper}
850