xref: /llvm-project/llvm/test/CodeGen/RISCV/double-convert-strict.ll (revision 2967e5f8007d873a3e9d97870d2461d0827a3976)
1b7b260e1SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2b7b260e1SCraig 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
5b7b260e1SCraig 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
14b7b260e1SCraig Topper; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \
15b7b260e1SCraig Topper; RUN:   -disable-strictnode-mutation | FileCheck -check-prefix=RV32I %s
16b7b260e1SCraig Topper; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
17b7b260e1SCraig Topper; RUN:   -disable-strictnode-mutation | FileCheck -check-prefix=RV64I %s
18b7b260e1SCraig Topper
19b7b260e1SCraig Topper; NOTE: The rounding mode metadata does not effect which instruction is
20b7b260e1SCraig Topper; selected. Dynamic rounding mode is always used for operations that
21b7b260e1SCraig Topper; support rounding mode.
22b7b260e1SCraig Topper
23b7b260e1SCraig Topperdefine float @fcvt_s_d(double %a) nounwind strictfp {
2484bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcvt_s_d:
2584bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
2684bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.s.d fa0, fa0
2784bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
28b7b260e1SCraig Topper;
298b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcvt_s_d:
308b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
318b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.s.d a0, a0
328b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
338b90f8e0SShao-Ce SUN;
342dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcvt_s_d:
352dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
362dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.s.d a0, a0
372dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
382dc0fa05SShao-Ce SUN;
39b7b260e1SCraig Topper; RV32I-LABEL: fcvt_s_d:
40b7b260e1SCraig Topper; RV32I:       # %bb.0:
41b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
42b7b260e1SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
43eabaee0cSFangrui Song; RV32I-NEXT:    call __truncdfsf2
44b7b260e1SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
45b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
46b7b260e1SCraig Topper; RV32I-NEXT:    ret
47b7b260e1SCraig Topper;
48b7b260e1SCraig Topper; RV64I-LABEL: fcvt_s_d:
49b7b260e1SCraig Topper; RV64I:       # %bb.0:
50b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
51b7b260e1SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
52eabaee0cSFangrui Song; RV64I-NEXT:    call __truncdfsf2
53b7b260e1SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
54b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
55b7b260e1SCraig Topper; RV64I-NEXT:    ret
56b7b260e1SCraig Topper  %1 = call float @llvm.experimental.constrained.fptrunc.f32.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict")
57b7b260e1SCraig Topper  ret float %1
58b7b260e1SCraig Topper}
59b7b260e1SCraig Topperdeclare float @llvm.experimental.constrained.fptrunc.f32.f64(double, metadata, metadata)
60b7b260e1SCraig Topper
61b7b260e1SCraig Topperdefine double @fcvt_d_s(float %a) nounwind strictfp {
6284bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcvt_d_s:
6384bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
6484bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.d.s fa0, fa0
6584bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
66b7b260e1SCraig Topper;
678b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcvt_d_s:
688b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
698b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.d.s a0, a0
708b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
718b90f8e0SShao-Ce SUN;
722dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcvt_d_s:
732dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
742dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.d.s a0, a0
752dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
762dc0fa05SShao-Ce SUN;
77b7b260e1SCraig Topper; RV32I-LABEL: fcvt_d_s:
78b7b260e1SCraig Topper; RV32I:       # %bb.0:
79b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
80b7b260e1SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
81eabaee0cSFangrui Song; RV32I-NEXT:    call __extendsfdf2
82b7b260e1SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
83b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
84b7b260e1SCraig Topper; RV32I-NEXT:    ret
85b7b260e1SCraig Topper;
86b7b260e1SCraig Topper; RV64I-LABEL: fcvt_d_s:
87b7b260e1SCraig Topper; RV64I:       # %bb.0:
88b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
89b7b260e1SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
90eabaee0cSFangrui Song; RV64I-NEXT:    call __extendsfdf2
91b7b260e1SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
92b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
93b7b260e1SCraig Topper; RV64I-NEXT:    ret
94b7b260e1SCraig Topper  %1 = call double @llvm.experimental.constrained.fpext.f64.f32(float %a, metadata !"fpexcept.strict")
95b7b260e1SCraig Topper  ret double %1
96b7b260e1SCraig Topper}
97b7b260e1SCraig Topperdeclare double @llvm.experimental.constrained.fpext.f64.f32(float, metadata)
98b7b260e1SCraig Topper
99b7b260e1SCraig Topperdefine i32 @fcvt_w_d(double %a) nounwind strictfp {
10084bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcvt_w_d:
10184bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
10284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.w.d a0, fa0, rtz
10384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
104b7b260e1SCraig Topper;
1058b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcvt_w_d:
1068b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
1078b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rtz
1088b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
1098b90f8e0SShao-Ce SUN;
1102dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcvt_w_d:
1112dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
1122dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rtz
1132dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
1142dc0fa05SShao-Ce SUN;
115b7b260e1SCraig Topper; RV32I-LABEL: fcvt_w_d:
116b7b260e1SCraig Topper; RV32I:       # %bb.0:
117b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
118b7b260e1SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
119eabaee0cSFangrui Song; RV32I-NEXT:    call __fixdfsi
120b7b260e1SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
121b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
122b7b260e1SCraig Topper; RV32I-NEXT:    ret
123b7b260e1SCraig Topper;
124b7b260e1SCraig Topper; RV64I-LABEL: fcvt_w_d:
125b7b260e1SCraig Topper; RV64I:       # %bb.0:
126b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
127b7b260e1SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
128eabaee0cSFangrui Song; RV64I-NEXT:    call __fixdfsi
129b7b260e1SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
130b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
131b7b260e1SCraig Topper; RV64I-NEXT:    ret
13295c2d01dSKevin P. Neal  %1 = call i32 @llvm.experimental.constrained.fptosi.i32.f64(double %a, metadata !"fpexcept.strict")
133b7b260e1SCraig Topper  ret i32 %1
134b7b260e1SCraig Topper}
135b7b260e1SCraig Topperdeclare i32 @llvm.experimental.constrained.fptosi.i32.f64(double, metadata)
136b7b260e1SCraig Topper
137b7b260e1SCraig Topper; For RV64D, fcvt.lu.d is semantically equivalent to fcvt.wu.d in this case
138b7b260e1SCraig Topper; because fptosi will produce poison if the result doesn't fit into an i32.
139b7b260e1SCraig Topperdefine i32 @fcvt_wu_d(double %a) nounwind strictfp {
14084bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcvt_wu_d:
14184bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
14284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.wu.d a0, fa0, rtz
14384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
144b7b260e1SCraig Topper;
1458b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcvt_wu_d:
1468b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
1478b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rtz
1488b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
1498b90f8e0SShao-Ce SUN;
1502dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcvt_wu_d:
1512dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
1522dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rtz
1532dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
1542dc0fa05SShao-Ce SUN;
155b7b260e1SCraig Topper; RV32I-LABEL: fcvt_wu_d:
156b7b260e1SCraig Topper; RV32I:       # %bb.0:
157b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
158b7b260e1SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
159eabaee0cSFangrui Song; RV32I-NEXT:    call __fixunsdfsi
160b7b260e1SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
161b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
162b7b260e1SCraig Topper; RV32I-NEXT:    ret
163b7b260e1SCraig Topper;
164b7b260e1SCraig Topper; RV64I-LABEL: fcvt_wu_d:
165b7b260e1SCraig Topper; RV64I:       # %bb.0:
166b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
167b7b260e1SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
168eabaee0cSFangrui Song; RV64I-NEXT:    call __fixunsdfsi
169b7b260e1SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
170b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
171b7b260e1SCraig Topper; RV64I-NEXT:    ret
17295c2d01dSKevin P. Neal  %1 = call i32 @llvm.experimental.constrained.fptoui.i32.f64(double %a, metadata !"fpexcept.strict")
173b7b260e1SCraig Topper  ret i32 %1
174b7b260e1SCraig Topper}
175b7b260e1SCraig Topperdeclare i32 @llvm.experimental.constrained.fptoui.i32.f64(double, metadata)
176b7b260e1SCraig Topper
177b7b260e1SCraig Topper; Test where the fptoui has multiple uses, one of which causes a sext to be
178b7b260e1SCraig Topper; inserted on RV64.
17995c2d01dSKevin P. Nealdefine i32 @fcvt_wu_d_multiple_use(double %x, ptr %y) nounwind strictfp {
18084bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcvt_wu_d_multiple_use:
18184bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
1827b970290SLiaoChunyu; CHECKIFD-NEXT:    fcvt.wu.d a0, fa0, rtz
183fc973037SLiaoChunyu; CHECKIFD-NEXT:    seqz a1, a0
184fc973037SLiaoChunyu; CHECKIFD-NEXT:    add a0, a0, a1
18584bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
186b7b260e1SCraig Topper;
1878b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcvt_wu_d_multiple_use:
1888b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
1898b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rtz
1908b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    seqz a1, a0
1918b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    add a0, a0, a1
1928b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
1938b90f8e0SShao-Ce SUN;
1942dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcvt_wu_d_multiple_use:
1952dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
1962dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rtz
1972dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    seqz a1, a0
1982dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    add a0, a0, a1
1992dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
2002dc0fa05SShao-Ce SUN;
201b7b260e1SCraig Topper; RV32I-LABEL: fcvt_wu_d_multiple_use:
202b7b260e1SCraig Topper; RV32I:       # %bb.0:
203b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
204b7b260e1SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
205eabaee0cSFangrui Song; RV32I-NEXT:    call __fixunsdfsi
206fc973037SLiaoChunyu; RV32I-NEXT:    seqz a1, a0
207fc973037SLiaoChunyu; RV32I-NEXT:    add a0, a0, a1
208b7b260e1SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
209b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
210b7b260e1SCraig Topper; RV32I-NEXT:    ret
211b7b260e1SCraig Topper;
212b7b260e1SCraig Topper; RV64I-LABEL: fcvt_wu_d_multiple_use:
213b7b260e1SCraig Topper; RV64I:       # %bb.0:
214b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
215b7b260e1SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
216eabaee0cSFangrui Song; RV64I-NEXT:    call __fixunsdfsi
217fc973037SLiaoChunyu; RV64I-NEXT:    seqz a1, a0
218fc973037SLiaoChunyu; RV64I-NEXT:    add a0, a0, a1
219b7b260e1SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
220b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
221b7b260e1SCraig Topper; RV64I-NEXT:    ret
22295c2d01dSKevin P. Neal  %a = call i32 @llvm.experimental.constrained.fptoui.i32.f64(double %x, metadata !"fpexcept.strict")
223b7b260e1SCraig Topper  %b = icmp eq i32 %a, 0
224b7b260e1SCraig Topper  %c = select i1 %b, i32 1, i32 %a
225b7b260e1SCraig Topper  ret i32 %c
226b7b260e1SCraig Topper}
227b7b260e1SCraig Topper
228b7b260e1SCraig Topperdefine double @fcvt_d_w(i32 %a) nounwind strictfp {
22984bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcvt_d_w:
23084bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
23184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.d.w fa0, a0
23284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
233b7b260e1SCraig Topper;
2348b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcvt_d_w:
2358b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
2368b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.d.w a0, a0
2378b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
2388b90f8e0SShao-Ce SUN;
2392dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcvt_d_w:
2402dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
2412dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.d.w a0, a0
2422dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
2432dc0fa05SShao-Ce SUN;
244b7b260e1SCraig Topper; RV32I-LABEL: fcvt_d_w:
245b7b260e1SCraig Topper; RV32I:       # %bb.0:
246b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
247b7b260e1SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
248eabaee0cSFangrui Song; RV32I-NEXT:    call __floatsidf
249b7b260e1SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
250b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
251b7b260e1SCraig Topper; RV32I-NEXT:    ret
252b7b260e1SCraig Topper;
253b7b260e1SCraig Topper; RV64I-LABEL: fcvt_d_w:
254b7b260e1SCraig Topper; RV64I:       # %bb.0:
255b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
256b7b260e1SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
257b7b260e1SCraig Topper; RV64I-NEXT:    sext.w a0, a0
258eabaee0cSFangrui Song; RV64I-NEXT:    call __floatsidf
259b7b260e1SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
260b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
261b7b260e1SCraig Topper; RV64I-NEXT:    ret
26295c2d01dSKevin P. Neal  %1 = call double @llvm.experimental.constrained.sitofp.f64.i32(i32 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")
263b7b260e1SCraig Topper  ret double %1
264b7b260e1SCraig Topper}
265b7b260e1SCraig Topperdeclare double @llvm.experimental.constrained.sitofp.f64.i32(i32, metadata, metadata)
266b7b260e1SCraig Topper
2671456b686SNikita Popovdefine double @fcvt_d_w_load(ptr %p) nounwind strictfp {
26884bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcvt_d_w_load:
26984bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
27084bacb18SShao-Ce SUN; CHECKIFD-NEXT:    lw a0, 0(a0)
27184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.d.w fa0, a0
27284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
273b7b260e1SCraig Topper;
2748b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcvt_d_w_load:
2758b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
2768b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw a0, 0(a0)
2778b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.d.w a0, a0
2788b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
2798b90f8e0SShao-Ce SUN;
2802dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcvt_d_w_load:
2812dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
2822dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    lw a0, 0(a0)
2832dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.d.w a0, a0
2842dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
2852dc0fa05SShao-Ce SUN;
286b7b260e1SCraig Topper; RV32I-LABEL: fcvt_d_w_load:
287b7b260e1SCraig Topper; RV32I:       # %bb.0:
288b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
289b7b260e1SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
290b7b260e1SCraig Topper; RV32I-NEXT:    lw a0, 0(a0)
291eabaee0cSFangrui Song; RV32I-NEXT:    call __floatsidf
292b7b260e1SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
293b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
294b7b260e1SCraig Topper; RV32I-NEXT:    ret
295b7b260e1SCraig Topper;
296b7b260e1SCraig Topper; RV64I-LABEL: fcvt_d_w_load:
297b7b260e1SCraig Topper; RV64I:       # %bb.0:
298b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
299b7b260e1SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
300b7b260e1SCraig Topper; RV64I-NEXT:    lw a0, 0(a0)
301eabaee0cSFangrui Song; RV64I-NEXT:    call __floatsidf
302b7b260e1SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
303b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
304b7b260e1SCraig Topper; RV64I-NEXT:    ret
3051456b686SNikita Popov  %a = load i32, ptr %p
30695c2d01dSKevin P. Neal  %1 = call double @llvm.experimental.constrained.sitofp.f64.i32(i32 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")
307b7b260e1SCraig Topper  ret double %1
308b7b260e1SCraig Topper}
309b7b260e1SCraig Topper
310b7b260e1SCraig Topperdefine double @fcvt_d_wu(i32 %a) nounwind strictfp {
31184bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcvt_d_wu:
31284bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
31384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.d.wu fa0, a0
31484bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
315b7b260e1SCraig Topper;
3168b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcvt_d_wu:
3178b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
3188b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.d.wu a0, a0
3198b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
3208b90f8e0SShao-Ce SUN;
3212dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcvt_d_wu:
3222dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
3232dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.d.wu a0, a0
3242dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
3252dc0fa05SShao-Ce SUN;
326b7b260e1SCraig Topper; RV32I-LABEL: fcvt_d_wu:
327b7b260e1SCraig Topper; RV32I:       # %bb.0:
328b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
329b7b260e1SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
330eabaee0cSFangrui Song; RV32I-NEXT:    call __floatunsidf
331b7b260e1SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
332b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
333b7b260e1SCraig Topper; RV32I-NEXT:    ret
334b7b260e1SCraig Topper;
335b7b260e1SCraig Topper; RV64I-LABEL: fcvt_d_wu:
336b7b260e1SCraig Topper; RV64I:       # %bb.0:
337b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
338b7b260e1SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
339b7b260e1SCraig Topper; RV64I-NEXT:    sext.w a0, a0
340eabaee0cSFangrui Song; RV64I-NEXT:    call __floatunsidf
341b7b260e1SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
342b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
343b7b260e1SCraig Topper; RV64I-NEXT:    ret
34495c2d01dSKevin P. Neal  %1 = call double @llvm.experimental.constrained.uitofp.f64.i32(i32 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")
345b7b260e1SCraig Topper  ret double %1
346b7b260e1SCraig Topper}
347b7b260e1SCraig Topperdeclare double @llvm.experimental.constrained.uitofp.f64.i32(i32, metadata, metadata)
348b7b260e1SCraig Topper
3491456b686SNikita Popovdefine double @fcvt_d_wu_load(ptr %p) nounwind strictfp {
350b7b260e1SCraig Topper; RV32IFD-LABEL: fcvt_d_wu_load:
351b7b260e1SCraig Topper; RV32IFD:       # %bb.0:
352b7b260e1SCraig Topper; RV32IFD-NEXT:    lw a0, 0(a0)
353b271184fSCraig Topper; RV32IFD-NEXT:    fcvt.d.wu fa0, a0
354b7b260e1SCraig Topper; RV32IFD-NEXT:    ret
355b7b260e1SCraig Topper;
356b7b260e1SCraig Topper; RV64IFD-LABEL: fcvt_d_wu_load:
357b7b260e1SCraig Topper; RV64IFD:       # %bb.0:
358b7b260e1SCraig Topper; RV64IFD-NEXT:    lwu a0, 0(a0)
359b271184fSCraig Topper; RV64IFD-NEXT:    fcvt.d.wu fa0, a0
360b7b260e1SCraig Topper; RV64IFD-NEXT:    ret
361b7b260e1SCraig Topper;
3628b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcvt_d_wu_load:
3638b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
3648b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw a0, 0(a0)
3658b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.d.wu a0, a0
3668b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
3678b90f8e0SShao-Ce SUN;
3682dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcvt_d_wu_load:
3692dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
3702dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    lwu a0, 0(a0)
3712dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.d.wu a0, a0
3722dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
3732dc0fa05SShao-Ce SUN;
374b7b260e1SCraig Topper; RV32I-LABEL: fcvt_d_wu_load:
375b7b260e1SCraig Topper; RV32I:       # %bb.0:
376b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
377b7b260e1SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
378b7b260e1SCraig Topper; RV32I-NEXT:    lw a0, 0(a0)
379eabaee0cSFangrui Song; RV32I-NEXT:    call __floatunsidf
380b7b260e1SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
381b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
382b7b260e1SCraig Topper; RV32I-NEXT:    ret
383b7b260e1SCraig Topper;
384b7b260e1SCraig Topper; RV64I-LABEL: fcvt_d_wu_load:
385b7b260e1SCraig Topper; RV64I:       # %bb.0:
386b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
387b7b260e1SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
388b7b260e1SCraig Topper; RV64I-NEXT:    lw a0, 0(a0)
389eabaee0cSFangrui Song; RV64I-NEXT:    call __floatunsidf
390b7b260e1SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
391b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
392b7b260e1SCraig Topper; RV64I-NEXT:    ret
3931456b686SNikita Popov  %a = load i32, ptr %p
39495c2d01dSKevin P. Neal  %1 = call double @llvm.experimental.constrained.uitofp.f64.i32(i32 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")
395b7b260e1SCraig Topper  ret double %1
396b7b260e1SCraig Topper}
397b7b260e1SCraig Topper
398b7b260e1SCraig Topperdefine i64 @fcvt_l_d(double %a) nounwind strictfp {
399b7b260e1SCraig Topper; RV32IFD-LABEL: fcvt_l_d:
400b7b260e1SCraig Topper; RV32IFD:       # %bb.0:
401b7b260e1SCraig Topper; RV32IFD-NEXT:    addi sp, sp, -16
402b7b260e1SCraig Topper; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
403eabaee0cSFangrui Song; RV32IFD-NEXT:    call __fixdfdi
404b7b260e1SCraig Topper; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
405b7b260e1SCraig Topper; RV32IFD-NEXT:    addi sp, sp, 16
406b7b260e1SCraig Topper; RV32IFD-NEXT:    ret
407b7b260e1SCraig Topper;
408b7b260e1SCraig Topper; RV64IFD-LABEL: fcvt_l_d:
409b7b260e1SCraig Topper; RV64IFD:       # %bb.0:
410b271184fSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rtz
411b7b260e1SCraig Topper; RV64IFD-NEXT:    ret
412b7b260e1SCraig Topper;
4138b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcvt_l_d:
4148b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
4158b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
4168b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
417eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call __fixdfdi
4188b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
4198b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
4208b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
4218b90f8e0SShao-Ce SUN;
4222dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcvt_l_d:
4232dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
4242dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a0, a0, rtz
4252dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
4262dc0fa05SShao-Ce SUN;
427b7b260e1SCraig Topper; RV32I-LABEL: fcvt_l_d:
428b7b260e1SCraig Topper; RV32I:       # %bb.0:
429b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
430b7b260e1SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
431eabaee0cSFangrui Song; RV32I-NEXT:    call __fixdfdi
432b7b260e1SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
433b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
434b7b260e1SCraig Topper; RV32I-NEXT:    ret
435b7b260e1SCraig Topper;
436b7b260e1SCraig Topper; RV64I-LABEL: fcvt_l_d:
437b7b260e1SCraig Topper; RV64I:       # %bb.0:
438b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
439b7b260e1SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
440eabaee0cSFangrui Song; RV64I-NEXT:    call __fixdfdi
441b7b260e1SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
442b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
443b7b260e1SCraig Topper; RV64I-NEXT:    ret
44495c2d01dSKevin P. Neal  %1 = call i64 @llvm.experimental.constrained.fptosi.i64.f64(double %a, metadata !"fpexcept.strict")
445b7b260e1SCraig Topper  ret i64 %1
446b7b260e1SCraig Topper}
447b7b260e1SCraig Topperdeclare i64 @llvm.experimental.constrained.fptosi.i64.f64(double, metadata)
448b7b260e1SCraig Topper
449b7b260e1SCraig Topperdefine i64 @fcvt_lu_d(double %a) nounwind strictfp {
450b7b260e1SCraig Topper; RV32IFD-LABEL: fcvt_lu_d:
451b7b260e1SCraig Topper; RV32IFD:       # %bb.0:
452b7b260e1SCraig Topper; RV32IFD-NEXT:    addi sp, sp, -16
453b7b260e1SCraig Topper; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
454eabaee0cSFangrui Song; RV32IFD-NEXT:    call __fixunsdfdi
455b7b260e1SCraig Topper; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
456b7b260e1SCraig Topper; RV32IFD-NEXT:    addi sp, sp, 16
457b7b260e1SCraig Topper; RV32IFD-NEXT:    ret
458b7b260e1SCraig Topper;
459b7b260e1SCraig Topper; RV64IFD-LABEL: fcvt_lu_d:
460b7b260e1SCraig Topper; RV64IFD:       # %bb.0:
461b271184fSCraig Topper; RV64IFD-NEXT:    fcvt.lu.d a0, fa0, rtz
462b7b260e1SCraig Topper; RV64IFD-NEXT:    ret
463b7b260e1SCraig Topper;
4648b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcvt_lu_d:
4658b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
4668b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
4678b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
468eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call __fixunsdfdi
4698b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
4708b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
4718b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
4728b90f8e0SShao-Ce SUN;
4732dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcvt_lu_d:
4742dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
4752dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.lu.d a0, a0, rtz
4762dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
4772dc0fa05SShao-Ce SUN;
478b7b260e1SCraig Topper; RV32I-LABEL: fcvt_lu_d:
479b7b260e1SCraig Topper; RV32I:       # %bb.0:
480b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
481b7b260e1SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
482eabaee0cSFangrui Song; RV32I-NEXT:    call __fixunsdfdi
483b7b260e1SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
484b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
485b7b260e1SCraig Topper; RV32I-NEXT:    ret
486b7b260e1SCraig Topper;
487b7b260e1SCraig Topper; RV64I-LABEL: fcvt_lu_d:
488b7b260e1SCraig Topper; RV64I:       # %bb.0:
489b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
490b7b260e1SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
491eabaee0cSFangrui Song; RV64I-NEXT:    call __fixunsdfdi
492b7b260e1SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
493b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
494b7b260e1SCraig Topper; RV64I-NEXT:    ret
49595c2d01dSKevin P. Neal  %1 = call i64 @llvm.experimental.constrained.fptoui.i64.f64(double %a, metadata !"fpexcept.strict")
496b7b260e1SCraig Topper  ret i64 %1
497b7b260e1SCraig Topper}
498b7b260e1SCraig Topperdeclare i64 @llvm.experimental.constrained.fptoui.i64.f64(double, metadata)
499b7b260e1SCraig Topper
500b7b260e1SCraig Topperdefine double @fcvt_d_l(i64 %a) nounwind strictfp {
501b7b260e1SCraig Topper; RV32IFD-LABEL: fcvt_d_l:
502b7b260e1SCraig Topper; RV32IFD:       # %bb.0:
503b7b260e1SCraig Topper; RV32IFD-NEXT:    addi sp, sp, -16
504b7b260e1SCraig Topper; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
505eabaee0cSFangrui Song; RV32IFD-NEXT:    call __floatdidf
506b7b260e1SCraig Topper; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
507b7b260e1SCraig Topper; RV32IFD-NEXT:    addi sp, sp, 16
508b7b260e1SCraig Topper; RV32IFD-NEXT:    ret
509b7b260e1SCraig Topper;
510b7b260e1SCraig Topper; RV64IFD-LABEL: fcvt_d_l:
511b7b260e1SCraig Topper; RV64IFD:       # %bb.0:
512b271184fSCraig Topper; RV64IFD-NEXT:    fcvt.d.l fa0, a0
513b7b260e1SCraig Topper; RV64IFD-NEXT:    ret
514b7b260e1SCraig Topper;
5158b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcvt_d_l:
5168b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
5178b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
5188b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
519eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call __floatdidf
5208b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
5218b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
5228b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
5238b90f8e0SShao-Ce SUN;
5242dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcvt_d_l:
5252dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
5262dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.d.l a0, a0
5272dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
5282dc0fa05SShao-Ce SUN;
529b7b260e1SCraig Topper; RV32I-LABEL: fcvt_d_l:
530b7b260e1SCraig Topper; RV32I:       # %bb.0:
531b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
532b7b260e1SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
533eabaee0cSFangrui Song; RV32I-NEXT:    call __floatdidf
534b7b260e1SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
535b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
536b7b260e1SCraig Topper; RV32I-NEXT:    ret
537b7b260e1SCraig Topper;
538b7b260e1SCraig Topper; RV64I-LABEL: fcvt_d_l:
539b7b260e1SCraig Topper; RV64I:       # %bb.0:
540b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
541b7b260e1SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
542eabaee0cSFangrui Song; RV64I-NEXT:    call __floatdidf
543b7b260e1SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
544b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
545b7b260e1SCraig Topper; RV64I-NEXT:    ret
54695c2d01dSKevin P. Neal  %1 = call double @llvm.experimental.constrained.sitofp.f64.i64(i64 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")
547b7b260e1SCraig Topper  ret double %1
548b7b260e1SCraig Topper}
549b7b260e1SCraig Topperdeclare double @llvm.experimental.constrained.sitofp.f64.i64(i64, metadata, metadata)
550b7b260e1SCraig Topper
551b7b260e1SCraig Topperdefine double @fcvt_d_lu(i64 %a) nounwind strictfp {
552b7b260e1SCraig Topper; RV32IFD-LABEL: fcvt_d_lu:
553b7b260e1SCraig Topper; RV32IFD:       # %bb.0:
554b7b260e1SCraig Topper; RV32IFD-NEXT:    addi sp, sp, -16
555b7b260e1SCraig Topper; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
556eabaee0cSFangrui Song; RV32IFD-NEXT:    call __floatundidf
557b7b260e1SCraig Topper; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
558b7b260e1SCraig Topper; RV32IFD-NEXT:    addi sp, sp, 16
559b7b260e1SCraig Topper; RV32IFD-NEXT:    ret
560b7b260e1SCraig Topper;
561b7b260e1SCraig Topper; RV64IFD-LABEL: fcvt_d_lu:
562b7b260e1SCraig Topper; RV64IFD:       # %bb.0:
563b271184fSCraig Topper; RV64IFD-NEXT:    fcvt.d.lu fa0, a0
564b7b260e1SCraig Topper; RV64IFD-NEXT:    ret
565b7b260e1SCraig Topper;
5668b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcvt_d_lu:
5678b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
5688b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
5698b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
570eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call __floatundidf
5718b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
5728b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
5738b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
5748b90f8e0SShao-Ce SUN;
5752dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcvt_d_lu:
5762dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
5772dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.d.lu a0, a0
5782dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
5792dc0fa05SShao-Ce SUN;
580b7b260e1SCraig Topper; RV32I-LABEL: fcvt_d_lu:
581b7b260e1SCraig Topper; RV32I:       # %bb.0:
582b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
583b7b260e1SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
584eabaee0cSFangrui Song; RV32I-NEXT:    call __floatundidf
585b7b260e1SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
586b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
587b7b260e1SCraig Topper; RV32I-NEXT:    ret
588b7b260e1SCraig Topper;
589b7b260e1SCraig Topper; RV64I-LABEL: fcvt_d_lu:
590b7b260e1SCraig Topper; RV64I:       # %bb.0:
591b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
592b7b260e1SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
593eabaee0cSFangrui Song; RV64I-NEXT:    call __floatundidf
594b7b260e1SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
595b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
596b7b260e1SCraig Topper; RV64I-NEXT:    ret
59795c2d01dSKevin P. Neal  %1 = call double @llvm.experimental.constrained.uitofp.f64.i64(i64 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")
598b7b260e1SCraig Topper  ret double %1
599b7b260e1SCraig Topper}
600b7b260e1SCraig Topperdeclare double @llvm.experimental.constrained.uitofp.f64.i64(i64, metadata, metadata)
601b7b260e1SCraig Topper
602b7b260e1SCraig Topperdefine double @fcvt_d_w_i8(i8 signext %a) nounwind strictfp {
60384bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcvt_d_w_i8:
60484bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
60584bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.d.w fa0, a0
60684bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
607b7b260e1SCraig Topper;
6088b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcvt_d_w_i8:
6098b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
6108b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.d.w a0, a0
6118b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
6128b90f8e0SShao-Ce SUN;
6132dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcvt_d_w_i8:
6142dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
6152dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.d.w a0, a0
6162dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
6172dc0fa05SShao-Ce SUN;
618b7b260e1SCraig Topper; RV32I-LABEL: fcvt_d_w_i8:
619b7b260e1SCraig Topper; RV32I:       # %bb.0:
620b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
621b7b260e1SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
622eabaee0cSFangrui Song; RV32I-NEXT:    call __floatsidf
623b7b260e1SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
624b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
625b7b260e1SCraig Topper; RV32I-NEXT:    ret
626b7b260e1SCraig Topper;
627b7b260e1SCraig Topper; RV64I-LABEL: fcvt_d_w_i8:
628b7b260e1SCraig Topper; RV64I:       # %bb.0:
629b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
630b7b260e1SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
631eabaee0cSFangrui Song; RV64I-NEXT:    call __floatsidf
632b7b260e1SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
633b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
634b7b260e1SCraig Topper; RV64I-NEXT:    ret
63595c2d01dSKevin P. Neal  %1 = call double @llvm.experimental.constrained.sitofp.f64.i8(i8 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")
636b7b260e1SCraig Topper  ret double %1
637b7b260e1SCraig Topper}
638b7b260e1SCraig Topperdeclare double @llvm.experimental.constrained.sitofp.f64.i8(i8, metadata, metadata)
639b7b260e1SCraig Topper
640b7b260e1SCraig Topperdefine double @fcvt_d_wu_i8(i8 zeroext %a) nounwind strictfp {
64184bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcvt_d_wu_i8:
64284bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
64384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.d.wu fa0, a0
64484bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
645b7b260e1SCraig Topper;
6468b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcvt_d_wu_i8:
6478b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
6488b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.d.wu a0, a0
6498b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
6508b90f8e0SShao-Ce SUN;
6512dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcvt_d_wu_i8:
6522dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
6532dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.d.wu a0, a0
6542dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
6552dc0fa05SShao-Ce SUN;
656b7b260e1SCraig Topper; RV32I-LABEL: fcvt_d_wu_i8:
657b7b260e1SCraig Topper; RV32I:       # %bb.0:
658b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
659b7b260e1SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
660eabaee0cSFangrui Song; RV32I-NEXT:    call __floatunsidf
661b7b260e1SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
662b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
663b7b260e1SCraig Topper; RV32I-NEXT:    ret
664b7b260e1SCraig Topper;
665b7b260e1SCraig Topper; RV64I-LABEL: fcvt_d_wu_i8:
666b7b260e1SCraig Topper; RV64I:       # %bb.0:
667b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
668b7b260e1SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
669eabaee0cSFangrui Song; RV64I-NEXT:    call __floatunsidf
670b7b260e1SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
671b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
672b7b260e1SCraig Topper; RV64I-NEXT:    ret
67395c2d01dSKevin P. Neal  %1 = call double @llvm.experimental.constrained.uitofp.f64.i8(i8 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")
674b7b260e1SCraig Topper  ret double %1
675b7b260e1SCraig Topper}
676b7b260e1SCraig Topperdeclare double @llvm.experimental.constrained.uitofp.f64.i8(i8, metadata, metadata)
677b7b260e1SCraig Topper
678b7b260e1SCraig Topperdefine double @fcvt_d_w_i16(i16 signext %a) nounwind strictfp {
67984bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcvt_d_w_i16:
68084bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
68184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.d.w fa0, a0
68284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
683b7b260e1SCraig Topper;
6848b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcvt_d_w_i16:
6858b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
6868b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.d.w a0, a0
6878b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
6888b90f8e0SShao-Ce SUN;
6892dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcvt_d_w_i16:
6902dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
6912dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.d.w a0, a0
6922dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
6932dc0fa05SShao-Ce SUN;
694b7b260e1SCraig Topper; RV32I-LABEL: fcvt_d_w_i16:
695b7b260e1SCraig Topper; RV32I:       # %bb.0:
696b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
697b7b260e1SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
698eabaee0cSFangrui Song; RV32I-NEXT:    call __floatsidf
699b7b260e1SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
700b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
701b7b260e1SCraig Topper; RV32I-NEXT:    ret
702b7b260e1SCraig Topper;
703b7b260e1SCraig Topper; RV64I-LABEL: fcvt_d_w_i16:
704b7b260e1SCraig Topper; RV64I:       # %bb.0:
705b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
706b7b260e1SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
707eabaee0cSFangrui Song; RV64I-NEXT:    call __floatsidf
708b7b260e1SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
709b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
710b7b260e1SCraig Topper; RV64I-NEXT:    ret
71195c2d01dSKevin P. Neal  %1 = call double @llvm.experimental.constrained.sitofp.f64.i16(i16 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")
712b7b260e1SCraig Topper  ret double %1
713b7b260e1SCraig Topper}
714b7b260e1SCraig Topperdeclare double @llvm.experimental.constrained.sitofp.f64.i16(i16, metadata, metadata)
715b7b260e1SCraig Topper
716b7b260e1SCraig Topperdefine double @fcvt_d_wu_i16(i16 zeroext %a) nounwind strictfp {
71784bacb18SShao-Ce SUN; CHECKIFD-LABEL: fcvt_d_wu_i16:
71884bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
71984bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.d.wu fa0, a0
72084bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
721b7b260e1SCraig Topper;
7228b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcvt_d_wu_i16:
7238b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
7248b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.d.wu a0, a0
7258b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
7268b90f8e0SShao-Ce SUN;
7272dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcvt_d_wu_i16:
7282dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
7292dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.d.wu a0, a0
7302dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
7312dc0fa05SShao-Ce SUN;
732b7b260e1SCraig Topper; RV32I-LABEL: fcvt_d_wu_i16:
733b7b260e1SCraig Topper; RV32I:       # %bb.0:
734b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
735b7b260e1SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
736eabaee0cSFangrui Song; RV32I-NEXT:    call __floatunsidf
737b7b260e1SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
738b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
739b7b260e1SCraig Topper; RV32I-NEXT:    ret
740b7b260e1SCraig Topper;
741b7b260e1SCraig Topper; RV64I-LABEL: fcvt_d_wu_i16:
742b7b260e1SCraig Topper; RV64I:       # %bb.0:
743b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
744b7b260e1SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
745eabaee0cSFangrui Song; RV64I-NEXT:    call __floatunsidf
746b7b260e1SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
747b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
748b7b260e1SCraig Topper; RV64I-NEXT:    ret
74995c2d01dSKevin P. Neal  %1 = call double @llvm.experimental.constrained.uitofp.f64.i16(i16 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")
750b7b260e1SCraig Topper  ret double %1
751b7b260e1SCraig Topper}
752b7b260e1SCraig Topperdeclare double @llvm.experimental.constrained.uitofp.f64.i16(i16, metadata, metadata)
753b7b260e1SCraig Topper
754b7b260e1SCraig Topper; Make sure we select W version of addi on RV64.
75595c2d01dSKevin P. Nealdefine signext i32 @fcvt_d_w_demanded_bits(i32 signext %0, ptr %1) nounwind strictfp {
756b7b260e1SCraig Topper; RV32IFD-LABEL: fcvt_d_w_demanded_bits:
757b7b260e1SCraig Topper; RV32IFD:       # %bb.0:
758b7b260e1SCraig Topper; RV32IFD-NEXT:    addi a0, a0, 1
7597b0c4184SCraig Topper; RV32IFD-NEXT:    fcvt.d.w fa5, a0
7607b0c4184SCraig Topper; RV32IFD-NEXT:    fsd fa5, 0(a1)
761b7b260e1SCraig Topper; RV32IFD-NEXT:    ret
762b7b260e1SCraig Topper;
763b7b260e1SCraig Topper; RV64IFD-LABEL: fcvt_d_w_demanded_bits:
764b7b260e1SCraig Topper; RV64IFD:       # %bb.0:
765b7b260e1SCraig Topper; RV64IFD-NEXT:    addiw a0, a0, 1
7667b0c4184SCraig Topper; RV64IFD-NEXT:    fcvt.d.w fa5, a0
7677b0c4184SCraig Topper; RV64IFD-NEXT:    fsd fa5, 0(a1)
768b7b260e1SCraig Topper; RV64IFD-NEXT:    ret
769b7b260e1SCraig Topper;
7708b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcvt_d_w_demanded_bits:
7718b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
7728b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi a0, a0, 1
7738b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.d.w a2, a0
7748b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw a2, 0(a1)
7758b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw a3, 4(a1)
7768b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
7778b90f8e0SShao-Ce SUN;
7782dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcvt_d_w_demanded_bits:
7792dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
7800a4e1c51SCraig Topper; RV64IZFINXZDINX-NEXT:    addiw a0, a0, 1
7810a4e1c51SCraig Topper; RV64IZFINXZDINX-NEXT:    fcvt.d.w a2, a0
7820a4e1c51SCraig Topper; RV64IZFINXZDINX-NEXT:    sd a2, 0(a1)
7832dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
7842dc0fa05SShao-Ce SUN;
785b7b260e1SCraig Topper; RV32I-LABEL: fcvt_d_w_demanded_bits:
786b7b260e1SCraig Topper; RV32I:       # %bb.0:
787b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
788b7b260e1SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
789b7b260e1SCraig Topper; RV32I-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
790b7b260e1SCraig Topper; RV32I-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill
791b7b260e1SCraig Topper; RV32I-NEXT:    mv s0, a1
792b7b260e1SCraig Topper; RV32I-NEXT:    addi s1, a0, 1
793b7b260e1SCraig Topper; RV32I-NEXT:    mv a0, s1
794eabaee0cSFangrui Song; RV32I-NEXT:    call __floatsidf
795b7b260e1SCraig Topper; RV32I-NEXT:    sw a0, 0(s0)
796*2967e5f8SAlex Bradbury; RV32I-NEXT:    sw a1, 4(s0)
797b7b260e1SCraig Topper; RV32I-NEXT:    mv a0, s1
798b7b260e1SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
799b7b260e1SCraig Topper; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
800b7b260e1SCraig Topper; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
801b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
802b7b260e1SCraig Topper; RV32I-NEXT:    ret
803b7b260e1SCraig Topper;
804b7b260e1SCraig Topper; RV64I-LABEL: fcvt_d_w_demanded_bits:
805b7b260e1SCraig Topper; RV64I:       # %bb.0:
806b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, -32
807b7b260e1SCraig Topper; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
808b7b260e1SCraig Topper; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
809b7b260e1SCraig Topper; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
810b7b260e1SCraig Topper; RV64I-NEXT:    mv s0, a1
811b7b260e1SCraig Topper; RV64I-NEXT:    addiw s1, a0, 1
812b7b260e1SCraig Topper; RV64I-NEXT:    mv a0, s1
813eabaee0cSFangrui Song; RV64I-NEXT:    call __floatsidf
814b7b260e1SCraig Topper; RV64I-NEXT:    sd a0, 0(s0)
815b7b260e1SCraig Topper; RV64I-NEXT:    mv a0, s1
816b7b260e1SCraig Topper; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
817b7b260e1SCraig Topper; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
818b7b260e1SCraig Topper; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
819b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, 32
820b7b260e1SCraig Topper; RV64I-NEXT:    ret
821b7b260e1SCraig Topper  %3 = add i32 %0, 1
82295c2d01dSKevin P. Neal  %4 = call double @llvm.experimental.constrained.sitofp.f64.i32(i32 %3, metadata !"round.dynamic", metadata !"fpexcept.strict")
8231456b686SNikita Popov  store double %4, ptr %1, align 8
824b7b260e1SCraig Topper  ret i32 %3
825b7b260e1SCraig Topper}
826b7b260e1SCraig Topper
827b7b260e1SCraig Topper; Make sure we select W version of addi on RV64.
82895c2d01dSKevin P. Nealdefine signext i32 @fcvt_d_wu_demanded_bits(i32 signext %0, ptr %1) nounwind strictfp {
829b7b260e1SCraig Topper; RV32IFD-LABEL: fcvt_d_wu_demanded_bits:
830b7b260e1SCraig Topper; RV32IFD:       # %bb.0:
831b7b260e1SCraig Topper; RV32IFD-NEXT:    addi a0, a0, 1
8327b0c4184SCraig Topper; RV32IFD-NEXT:    fcvt.d.wu fa5, a0
8337b0c4184SCraig Topper; RV32IFD-NEXT:    fsd fa5, 0(a1)
834b7b260e1SCraig Topper; RV32IFD-NEXT:    ret
835b7b260e1SCraig Topper;
836b7b260e1SCraig Topper; RV64IFD-LABEL: fcvt_d_wu_demanded_bits:
837b7b260e1SCraig Topper; RV64IFD:       # %bb.0:
838b7b260e1SCraig Topper; RV64IFD-NEXT:    addiw a0, a0, 1
8397b0c4184SCraig Topper; RV64IFD-NEXT:    fcvt.d.wu fa5, a0
8407b0c4184SCraig Topper; RV64IFD-NEXT:    fsd fa5, 0(a1)
841b7b260e1SCraig Topper; RV64IFD-NEXT:    ret
842b7b260e1SCraig Topper;
8438b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: fcvt_d_wu_demanded_bits:
8448b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
8458b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi a0, a0, 1
8468b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.d.wu a2, a0
8478b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw a2, 0(a1)
8488b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw a3, 4(a1)
8498b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
8508b90f8e0SShao-Ce SUN;
8512dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: fcvt_d_wu_demanded_bits:
8522dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
8532dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    addiw a0, a0, 1
8542dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.d.wu a2, a0
8552dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    sd a2, 0(a1)
8562dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
8572dc0fa05SShao-Ce SUN;
858b7b260e1SCraig Topper; RV32I-LABEL: fcvt_d_wu_demanded_bits:
859b7b260e1SCraig Topper; RV32I:       # %bb.0:
860b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, -16
861b7b260e1SCraig Topper; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
862b7b260e1SCraig Topper; RV32I-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
863b7b260e1SCraig Topper; RV32I-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill
864b7b260e1SCraig Topper; RV32I-NEXT:    mv s0, a1
865b7b260e1SCraig Topper; RV32I-NEXT:    addi s1, a0, 1
866b7b260e1SCraig Topper; RV32I-NEXT:    mv a0, s1
867eabaee0cSFangrui Song; RV32I-NEXT:    call __floatunsidf
868b7b260e1SCraig Topper; RV32I-NEXT:    sw a0, 0(s0)
869*2967e5f8SAlex Bradbury; RV32I-NEXT:    sw a1, 4(s0)
870b7b260e1SCraig Topper; RV32I-NEXT:    mv a0, s1
871b7b260e1SCraig Topper; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
872b7b260e1SCraig Topper; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
873b7b260e1SCraig Topper; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
874b7b260e1SCraig Topper; RV32I-NEXT:    addi sp, sp, 16
875b7b260e1SCraig Topper; RV32I-NEXT:    ret
876b7b260e1SCraig Topper;
877b7b260e1SCraig Topper; RV64I-LABEL: fcvt_d_wu_demanded_bits:
878b7b260e1SCraig Topper; RV64I:       # %bb.0:
879b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, -32
880b7b260e1SCraig Topper; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
881b7b260e1SCraig Topper; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
882b7b260e1SCraig Topper; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
883b7b260e1SCraig Topper; RV64I-NEXT:    mv s0, a1
884b7b260e1SCraig Topper; RV64I-NEXT:    addiw s1, a0, 1
885b7b260e1SCraig Topper; RV64I-NEXT:    mv a0, s1
886eabaee0cSFangrui Song; RV64I-NEXT:    call __floatunsidf
887b7b260e1SCraig Topper; RV64I-NEXT:    sd a0, 0(s0)
888b7b260e1SCraig Topper; RV64I-NEXT:    mv a0, s1
889b7b260e1SCraig Topper; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
890b7b260e1SCraig Topper; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
891b7b260e1SCraig Topper; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
892b7b260e1SCraig Topper; RV64I-NEXT:    addi sp, sp, 32
893b7b260e1SCraig Topper; RV64I-NEXT:    ret
894b7b260e1SCraig Topper  %3 = add i32 %0, 1
89595c2d01dSKevin P. Neal  %4 = call double @llvm.experimental.constrained.uitofp.f64.i32(i32 %3, metadata !"round.dynamic", metadata !"fpexcept.strict")
8961456b686SNikita Popov  store double %4, ptr %1, align 8
897b7b260e1SCraig Topper  ret i32 %3
898b7b260e1SCraig Topper}
899