xref: /llvm-project/llvm/test/CodeGen/RISCV/double-round-conv.ll (revision 97982a8c605fac7c86d02e641a6cd7898b3ca343)
1be1cc64cSCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2be1cc64cSCraig Topper; RUN: llc -mtriple=riscv32 -mattr=+d -verify-machineinstrs < %s \
384bacb18SShao-Ce SUN; RUN:   -target-abi=ilp32d | FileCheck -check-prefixes=CHECKIFD,RV32IFD %s
4be1cc64cSCraig Topper; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs < %s \
584bacb18SShao-Ce SUN; RUN:   -target-abi=lp64d | FileCheck -check-prefixes=CHECKIFD,RV64IFD %s
68b90f8e0SShao-Ce SUN; RUN: llc -mtriple=riscv32 -mattr=+zdinx -verify-machineinstrs < %s \
78b90f8e0SShao-Ce SUN; RUN:   -target-abi=ilp32 | FileCheck -check-prefixes=RV32IZFINXZDINX %s
82dc0fa05SShao-Ce SUN; RUN: llc -mtriple=riscv64 -mattr=+zdinx -verify-machineinstrs < %s \
92dc0fa05SShao-Ce SUN; RUN:   -target-abi=lp64 | FileCheck -check-prefixes=RV64IZFINXZDINX %s
10be1cc64cSCraig Topper
11be1cc64cSCraig Topperdefine signext i8 @test_floor_si8(double %x) {
12be1cc64cSCraig Topper; RV32IFD-LABEL: test_floor_si8:
13be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
14be1cc64cSCraig Topper; RV32IFD-NEXT:    fcvt.w.d a0, fa0, rdn
15be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
16be1cc64cSCraig Topper;
17be1cc64cSCraig Topper; RV64IFD-LABEL: test_floor_si8:
18be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
19be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rdn
20be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
212dc0fa05SShao-Ce SUN;
228b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_floor_si8:
238b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
248b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rdn
258b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
268b90f8e0SShao-Ce SUN;
272dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_floor_si8:
282dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
292dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a0, a0, rdn
302dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
31be1cc64cSCraig Topper  %a = call double @llvm.floor.f64(double %x)
32be1cc64cSCraig Topper  %b = fptosi double %a to i8
33be1cc64cSCraig Topper  ret i8 %b
34be1cc64cSCraig Topper}
35be1cc64cSCraig Topper
36be1cc64cSCraig Topperdefine signext i16 @test_floor_si16(double %x) {
37be1cc64cSCraig Topper; RV32IFD-LABEL: test_floor_si16:
38be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
39be1cc64cSCraig Topper; RV32IFD-NEXT:    fcvt.w.d a0, fa0, rdn
40be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
41be1cc64cSCraig Topper;
42be1cc64cSCraig Topper; RV64IFD-LABEL: test_floor_si16:
43be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
44be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rdn
45be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
462dc0fa05SShao-Ce SUN;
478b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_floor_si16:
488b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
498b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rdn
508b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
518b90f8e0SShao-Ce SUN;
522dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_floor_si16:
532dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
542dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a0, a0, rdn
552dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
56be1cc64cSCraig Topper  %a = call double @llvm.floor.f64(double %x)
57be1cc64cSCraig Topper  %b = fptosi double %a to i16
58be1cc64cSCraig Topper  ret i16 %b
59be1cc64cSCraig Topper}
60be1cc64cSCraig Topper
61be1cc64cSCraig Topperdefine signext i32 @test_floor_si32(double %x) {
6284bacb18SShao-Ce SUN; CHECKIFD-LABEL: test_floor_si32:
6384bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
6484bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.w.d a0, fa0, rdn
6584bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
662dc0fa05SShao-Ce SUN;
678b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_floor_si32:
688b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
698b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rdn
708b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
718b90f8e0SShao-Ce SUN;
722dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_floor_si32:
732dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
742dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rdn
752dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
76be1cc64cSCraig Topper  %a = call double @llvm.floor.f64(double %x)
77be1cc64cSCraig Topper  %b = fptosi double %a to i32
78be1cc64cSCraig Topper  ret i32 %b
79be1cc64cSCraig Topper}
80be1cc64cSCraig Topper
81be1cc64cSCraig Topperdefine i64 @test_floor_si64(double %x) {
82be1cc64cSCraig Topper; RV32IFD-LABEL: test_floor_si64:
83be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
84be1cc64cSCraig Topper; RV32IFD-NEXT:    addi sp, sp, -16
85be1cc64cSCraig Topper; RV32IFD-NEXT:    .cfi_def_cfa_offset 16
86be1cc64cSCraig Topper; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
87be1cc64cSCraig Topper; RV32IFD-NEXT:    .cfi_offset ra, -4
88eabaee0cSFangrui Song; RV32IFD-NEXT:    call floor
89eabaee0cSFangrui Song; RV32IFD-NEXT:    call __fixdfdi
90be1cc64cSCraig Topper; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
91*97982a8cSdlav-sc; RV32IFD-NEXT:    .cfi_restore ra
92be1cc64cSCraig Topper; RV32IFD-NEXT:    addi sp, sp, 16
93*97982a8cSdlav-sc; RV32IFD-NEXT:    .cfi_def_cfa_offset 0
94be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
95be1cc64cSCraig Topper;
96be1cc64cSCraig Topper; RV64IFD-LABEL: test_floor_si64:
97be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
98be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rdn
99be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
1002dc0fa05SShao-Ce SUN;
1018b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_floor_si64:
1028b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
1038b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
1048b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 16
1058b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1068b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_offset ra, -4
107eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call floor
108eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call __fixdfdi
1098b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
110*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_restore ra
1118b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
112*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 0
1138b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
1148b90f8e0SShao-Ce SUN;
1152dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_floor_si64:
1162dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
1172dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a0, a0, rdn
1182dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
119be1cc64cSCraig Topper  %a = call double @llvm.floor.f64(double %x)
120be1cc64cSCraig Topper  %b = fptosi double %a to i64
121be1cc64cSCraig Topper  ret i64 %b
122be1cc64cSCraig Topper}
123be1cc64cSCraig Topper
124be1cc64cSCraig Topperdefine zeroext i8 @test_floor_ui8(double %x) {
125be1cc64cSCraig Topper; RV32IFD-LABEL: test_floor_ui8:
126be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
127be1cc64cSCraig Topper; RV32IFD-NEXT:    fcvt.wu.d a0, fa0, rdn
128be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
129be1cc64cSCraig Topper;
130be1cc64cSCraig Topper; RV64IFD-LABEL: test_floor_ui8:
131be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
132be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.lu.d a0, fa0, rdn
133be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
1342dc0fa05SShao-Ce SUN;
1358b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_floor_ui8:
1368b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
1378b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rdn
1388b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
1398b90f8e0SShao-Ce SUN;
1402dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_floor_ui8:
1412dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
1422dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.lu.d a0, a0, rdn
1432dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
144be1cc64cSCraig Topper  %a = call double @llvm.floor.f64(double %x)
145be1cc64cSCraig Topper  %b = fptoui double %a to i8
146be1cc64cSCraig Topper  ret i8 %b
147be1cc64cSCraig Topper}
148be1cc64cSCraig Topper
149be1cc64cSCraig Topperdefine zeroext i16 @test_floor_ui16(double %x) {
150be1cc64cSCraig Topper; RV32IFD-LABEL: test_floor_ui16:
151be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
152be1cc64cSCraig Topper; RV32IFD-NEXT:    fcvt.wu.d a0, fa0, rdn
153be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
154be1cc64cSCraig Topper;
155be1cc64cSCraig Topper; RV64IFD-LABEL: test_floor_ui16:
156be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
157be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.lu.d a0, fa0, rdn
158be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
1592dc0fa05SShao-Ce SUN;
1608b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_floor_ui16:
1618b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
1628b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rdn
1638b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
1648b90f8e0SShao-Ce SUN;
1652dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_floor_ui16:
1662dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
1672dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.lu.d a0, a0, rdn
1682dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
169be1cc64cSCraig Topper  %a = call double @llvm.floor.f64(double %x)
170be1cc64cSCraig Topper  %b = fptoui double %a to i16
171be1cc64cSCraig Topper  ret i16 %b
172be1cc64cSCraig Topper}
173be1cc64cSCraig Topper
174be1cc64cSCraig Topperdefine signext i32 @test_floor_ui32(double %x) {
17584bacb18SShao-Ce SUN; CHECKIFD-LABEL: test_floor_ui32:
17684bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
17784bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.wu.d a0, fa0, rdn
17884bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
1792dc0fa05SShao-Ce SUN;
1808b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_floor_ui32:
1818b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
1828b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rdn
1838b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
1848b90f8e0SShao-Ce SUN;
1852dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_floor_ui32:
1862dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
1872dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rdn
1882dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
189be1cc64cSCraig Topper  %a = call double @llvm.floor.f64(double %x)
190be1cc64cSCraig Topper  %b = fptoui double %a to i32
191be1cc64cSCraig Topper  ret i32 %b
192be1cc64cSCraig Topper}
193be1cc64cSCraig Topper
194be1cc64cSCraig Topperdefine i64 @test_floor_ui64(double %x) {
195be1cc64cSCraig Topper; RV32IFD-LABEL: test_floor_ui64:
196be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
197be1cc64cSCraig Topper; RV32IFD-NEXT:    addi sp, sp, -16
198be1cc64cSCraig Topper; RV32IFD-NEXT:    .cfi_def_cfa_offset 16
199be1cc64cSCraig Topper; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
200be1cc64cSCraig Topper; RV32IFD-NEXT:    .cfi_offset ra, -4
201eabaee0cSFangrui Song; RV32IFD-NEXT:    call floor
202eabaee0cSFangrui Song; RV32IFD-NEXT:    call __fixunsdfdi
203be1cc64cSCraig Topper; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
204*97982a8cSdlav-sc; RV32IFD-NEXT:    .cfi_restore ra
205be1cc64cSCraig Topper; RV32IFD-NEXT:    addi sp, sp, 16
206*97982a8cSdlav-sc; RV32IFD-NEXT:    .cfi_def_cfa_offset 0
207be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
208be1cc64cSCraig Topper;
209be1cc64cSCraig Topper; RV64IFD-LABEL: test_floor_ui64:
210be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
211be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.lu.d a0, fa0, rdn
212be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
2132dc0fa05SShao-Ce SUN;
2148b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_floor_ui64:
2158b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
2168b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
2178b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 16
2188b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
2198b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_offset ra, -4
220eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call floor
221eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call __fixunsdfdi
2228b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
223*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_restore ra
2248b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
225*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 0
2268b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
2278b90f8e0SShao-Ce SUN;
2282dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_floor_ui64:
2292dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
2302dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.lu.d a0, a0, rdn
2312dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
232be1cc64cSCraig Topper  %a = call double @llvm.floor.f64(double %x)
233be1cc64cSCraig Topper  %b = fptoui double %a to i64
234be1cc64cSCraig Topper  ret i64 %b
235be1cc64cSCraig Topper}
236be1cc64cSCraig Topper
237be1cc64cSCraig Topperdefine signext i8 @test_ceil_si8(double %x) {
238be1cc64cSCraig Topper; RV32IFD-LABEL: test_ceil_si8:
239be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
240be1cc64cSCraig Topper; RV32IFD-NEXT:    fcvt.w.d a0, fa0, rup
241be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
242be1cc64cSCraig Topper;
243be1cc64cSCraig Topper; RV64IFD-LABEL: test_ceil_si8:
244be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
245be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rup
246be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
2472dc0fa05SShao-Ce SUN;
2488b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_ceil_si8:
2498b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
2508b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rup
2518b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
2528b90f8e0SShao-Ce SUN;
2532dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_ceil_si8:
2542dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
2552dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a0, a0, rup
2562dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
257be1cc64cSCraig Topper  %a = call double @llvm.ceil.f64(double %x)
258be1cc64cSCraig Topper  %b = fptosi double %a to i8
259be1cc64cSCraig Topper  ret i8 %b
260be1cc64cSCraig Topper}
261be1cc64cSCraig Topper
262be1cc64cSCraig Topperdefine signext i16 @test_ceil_si16(double %x) {
263be1cc64cSCraig Topper; RV32IFD-LABEL: test_ceil_si16:
264be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
265be1cc64cSCraig Topper; RV32IFD-NEXT:    fcvt.w.d a0, fa0, rup
266be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
267be1cc64cSCraig Topper;
268be1cc64cSCraig Topper; RV64IFD-LABEL: test_ceil_si16:
269be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
270be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rup
271be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
2722dc0fa05SShao-Ce SUN;
2738b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_ceil_si16:
2748b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
2758b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rup
2768b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
2778b90f8e0SShao-Ce SUN;
2782dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_ceil_si16:
2792dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
2802dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a0, a0, rup
2812dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
282be1cc64cSCraig Topper  %a = call double @llvm.ceil.f64(double %x)
283be1cc64cSCraig Topper  %b = fptosi double %a to i16
284be1cc64cSCraig Topper  ret i16 %b
285be1cc64cSCraig Topper}
286be1cc64cSCraig Topper
287be1cc64cSCraig Topperdefine signext i32 @test_ceil_si32(double %x) {
28884bacb18SShao-Ce SUN; CHECKIFD-LABEL: test_ceil_si32:
28984bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
29084bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.w.d a0, fa0, rup
29184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
2922dc0fa05SShao-Ce SUN;
2938b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_ceil_si32:
2948b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
2958b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rup
2968b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
2978b90f8e0SShao-Ce SUN;
2982dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_ceil_si32:
2992dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
3002dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rup
3012dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
302be1cc64cSCraig Topper  %a = call double @llvm.ceil.f64(double %x)
303be1cc64cSCraig Topper  %b = fptosi double %a to i32
304be1cc64cSCraig Topper  ret i32 %b
305be1cc64cSCraig Topper}
306be1cc64cSCraig Topper
307be1cc64cSCraig Topperdefine i64 @test_ceil_si64(double %x) {
308be1cc64cSCraig Topper; RV32IFD-LABEL: test_ceil_si64:
309be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
310be1cc64cSCraig Topper; RV32IFD-NEXT:    addi sp, sp, -16
311be1cc64cSCraig Topper; RV32IFD-NEXT:    .cfi_def_cfa_offset 16
312be1cc64cSCraig Topper; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
313be1cc64cSCraig Topper; RV32IFD-NEXT:    .cfi_offset ra, -4
314eabaee0cSFangrui Song; RV32IFD-NEXT:    call ceil
315eabaee0cSFangrui Song; RV32IFD-NEXT:    call __fixdfdi
316be1cc64cSCraig Topper; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
317*97982a8cSdlav-sc; RV32IFD-NEXT:    .cfi_restore ra
318be1cc64cSCraig Topper; RV32IFD-NEXT:    addi sp, sp, 16
319*97982a8cSdlav-sc; RV32IFD-NEXT:    .cfi_def_cfa_offset 0
320be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
321be1cc64cSCraig Topper;
322be1cc64cSCraig Topper; RV64IFD-LABEL: test_ceil_si64:
323be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
324be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rup
325be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
3262dc0fa05SShao-Ce SUN;
3278b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_ceil_si64:
3288b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
3298b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
3308b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 16
3318b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
3328b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_offset ra, -4
333eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call ceil
334eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call __fixdfdi
3358b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
336*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_restore ra
3378b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
338*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 0
3398b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
3408b90f8e0SShao-Ce SUN;
3412dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_ceil_si64:
3422dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
3432dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a0, a0, rup
3442dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
345be1cc64cSCraig Topper  %a = call double @llvm.ceil.f64(double %x)
346be1cc64cSCraig Topper  %b = fptosi double %a to i64
347be1cc64cSCraig Topper  ret i64 %b
348be1cc64cSCraig Topper}
349be1cc64cSCraig Topper
350be1cc64cSCraig Topperdefine zeroext i8 @test_ceil_ui8(double %x) {
351be1cc64cSCraig Topper; RV32IFD-LABEL: test_ceil_ui8:
352be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
353be1cc64cSCraig Topper; RV32IFD-NEXT:    fcvt.wu.d a0, fa0, rup
354be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
355be1cc64cSCraig Topper;
356be1cc64cSCraig Topper; RV64IFD-LABEL: test_ceil_ui8:
357be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
358be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.lu.d a0, fa0, rup
359be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
3602dc0fa05SShao-Ce SUN;
3618b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_ceil_ui8:
3628b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
3638b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rup
3648b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
3658b90f8e0SShao-Ce SUN;
3662dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_ceil_ui8:
3672dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
3682dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.lu.d a0, a0, rup
3692dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
370be1cc64cSCraig Topper  %a = call double @llvm.ceil.f64(double %x)
371be1cc64cSCraig Topper  %b = fptoui double %a to i8
372be1cc64cSCraig Topper  ret i8 %b
373be1cc64cSCraig Topper}
374be1cc64cSCraig Topper
375be1cc64cSCraig Topperdefine zeroext i16 @test_ceil_ui16(double %x) {
376be1cc64cSCraig Topper; RV32IFD-LABEL: test_ceil_ui16:
377be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
378be1cc64cSCraig Topper; RV32IFD-NEXT:    fcvt.wu.d a0, fa0, rup
379be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
380be1cc64cSCraig Topper;
381be1cc64cSCraig Topper; RV64IFD-LABEL: test_ceil_ui16:
382be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
383be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.lu.d a0, fa0, rup
384be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
3852dc0fa05SShao-Ce SUN;
3868b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_ceil_ui16:
3878b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
3888b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rup
3898b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
3908b90f8e0SShao-Ce SUN;
3912dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_ceil_ui16:
3922dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
3932dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.lu.d a0, a0, rup
3942dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
395be1cc64cSCraig Topper  %a = call double @llvm.ceil.f64(double %x)
396be1cc64cSCraig Topper  %b = fptoui double %a to i16
397be1cc64cSCraig Topper  ret i16 %b
398be1cc64cSCraig Topper}
399be1cc64cSCraig Topper
400be1cc64cSCraig Topperdefine signext i32 @test_ceil_ui32(double %x) {
40184bacb18SShao-Ce SUN; CHECKIFD-LABEL: test_ceil_ui32:
40284bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
40384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.wu.d a0, fa0, rup
40484bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
4052dc0fa05SShao-Ce SUN;
4068b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_ceil_ui32:
4078b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
4088b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rup
4098b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
4108b90f8e0SShao-Ce SUN;
4112dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_ceil_ui32:
4122dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
4132dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rup
4142dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
415be1cc64cSCraig Topper  %a = call double @llvm.ceil.f64(double %x)
416be1cc64cSCraig Topper  %b = fptoui double %a to i32
417be1cc64cSCraig Topper  ret i32 %b
418be1cc64cSCraig Topper}
419be1cc64cSCraig Topper
420be1cc64cSCraig Topperdefine i64 @test_ceil_ui64(double %x) {
421be1cc64cSCraig Topper; RV32IFD-LABEL: test_ceil_ui64:
422be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
423be1cc64cSCraig Topper; RV32IFD-NEXT:    addi sp, sp, -16
424be1cc64cSCraig Topper; RV32IFD-NEXT:    .cfi_def_cfa_offset 16
425be1cc64cSCraig Topper; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
426be1cc64cSCraig Topper; RV32IFD-NEXT:    .cfi_offset ra, -4
427eabaee0cSFangrui Song; RV32IFD-NEXT:    call ceil
428eabaee0cSFangrui Song; RV32IFD-NEXT:    call __fixunsdfdi
429be1cc64cSCraig Topper; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
430*97982a8cSdlav-sc; RV32IFD-NEXT:    .cfi_restore ra
431be1cc64cSCraig Topper; RV32IFD-NEXT:    addi sp, sp, 16
432*97982a8cSdlav-sc; RV32IFD-NEXT:    .cfi_def_cfa_offset 0
433be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
434be1cc64cSCraig Topper;
435be1cc64cSCraig Topper; RV64IFD-LABEL: test_ceil_ui64:
436be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
437be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.lu.d a0, fa0, rup
438be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
4392dc0fa05SShao-Ce SUN;
4408b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_ceil_ui64:
4418b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
4428b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
4438b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 16
4448b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
4458b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_offset ra, -4
446eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call ceil
447eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call __fixunsdfdi
4488b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
449*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_restore ra
4508b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
451*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 0
4528b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
4538b90f8e0SShao-Ce SUN;
4542dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_ceil_ui64:
4552dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
4562dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.lu.d a0, a0, rup
4572dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
458be1cc64cSCraig Topper  %a = call double @llvm.ceil.f64(double %x)
459be1cc64cSCraig Topper  %b = fptoui double %a to i64
460be1cc64cSCraig Topper  ret i64 %b
461be1cc64cSCraig Topper}
462be1cc64cSCraig Topper
463be1cc64cSCraig Topperdefine signext i8 @test_trunc_si8(double %x) {
464be1cc64cSCraig Topper; RV32IFD-LABEL: test_trunc_si8:
465be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
466be1cc64cSCraig Topper; RV32IFD-NEXT:    fcvt.w.d a0, fa0, rtz
467be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
468be1cc64cSCraig Topper;
469be1cc64cSCraig Topper; RV64IFD-LABEL: test_trunc_si8:
470be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
471be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rtz
472be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
4732dc0fa05SShao-Ce SUN;
4748b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_trunc_si8:
4758b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
4768b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rtz
4778b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
4788b90f8e0SShao-Ce SUN;
4792dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_trunc_si8:
4802dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
4812dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a0, a0, rtz
4822dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
483be1cc64cSCraig Topper  %a = call double @llvm.trunc.f64(double %x)
484be1cc64cSCraig Topper  %b = fptosi double %a to i8
485be1cc64cSCraig Topper  ret i8 %b
486be1cc64cSCraig Topper}
487be1cc64cSCraig Topper
488be1cc64cSCraig Topperdefine signext i16 @test_trunc_si16(double %x) {
489be1cc64cSCraig Topper; RV32IFD-LABEL: test_trunc_si16:
490be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
491be1cc64cSCraig Topper; RV32IFD-NEXT:    fcvt.w.d a0, fa0, rtz
492be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
493be1cc64cSCraig Topper;
494be1cc64cSCraig Topper; RV64IFD-LABEL: test_trunc_si16:
495be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
496be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rtz
497be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
4982dc0fa05SShao-Ce SUN;
4998b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_trunc_si16:
5008b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
5018b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rtz
5028b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
5038b90f8e0SShao-Ce SUN;
5042dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_trunc_si16:
5052dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
5062dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a0, a0, rtz
5072dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
508be1cc64cSCraig Topper  %a = call double @llvm.trunc.f64(double %x)
509be1cc64cSCraig Topper  %b = fptosi double %a to i16
510be1cc64cSCraig Topper  ret i16 %b
511be1cc64cSCraig Topper}
512be1cc64cSCraig Topper
513be1cc64cSCraig Topperdefine signext i32 @test_trunc_si32(double %x) {
51484bacb18SShao-Ce SUN; CHECKIFD-LABEL: test_trunc_si32:
51584bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
51684bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.w.d a0, fa0, rtz
51784bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
5182dc0fa05SShao-Ce SUN;
5198b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_trunc_si32:
5208b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
5218b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rtz
5228b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
5238b90f8e0SShao-Ce SUN;
5242dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_trunc_si32:
5252dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
5262dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rtz
5272dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
528be1cc64cSCraig Topper  %a = call double @llvm.trunc.f64(double %x)
529be1cc64cSCraig Topper  %b = fptosi double %a to i32
530be1cc64cSCraig Topper  ret i32 %b
531be1cc64cSCraig Topper}
532be1cc64cSCraig Topper
533be1cc64cSCraig Topperdefine i64 @test_trunc_si64(double %x) {
534be1cc64cSCraig Topper; RV32IFD-LABEL: test_trunc_si64:
535be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
536be1cc64cSCraig Topper; RV32IFD-NEXT:    addi sp, sp, -16
537be1cc64cSCraig Topper; RV32IFD-NEXT:    .cfi_def_cfa_offset 16
538be1cc64cSCraig Topper; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
539be1cc64cSCraig Topper; RV32IFD-NEXT:    .cfi_offset ra, -4
540eabaee0cSFangrui Song; RV32IFD-NEXT:    call trunc
541eabaee0cSFangrui Song; RV32IFD-NEXT:    call __fixdfdi
542be1cc64cSCraig Topper; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
543*97982a8cSdlav-sc; RV32IFD-NEXT:    .cfi_restore ra
544be1cc64cSCraig Topper; RV32IFD-NEXT:    addi sp, sp, 16
545*97982a8cSdlav-sc; RV32IFD-NEXT:    .cfi_def_cfa_offset 0
546be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
547be1cc64cSCraig Topper;
548be1cc64cSCraig Topper; RV64IFD-LABEL: test_trunc_si64:
549be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
550be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rtz
551be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
5522dc0fa05SShao-Ce SUN;
5538b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_trunc_si64:
5548b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
5558b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
5568b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 16
5578b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
5588b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_offset ra, -4
559eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call trunc
560eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call __fixdfdi
5618b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
562*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_restore ra
5638b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
564*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 0
5658b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
5668b90f8e0SShao-Ce SUN;
5672dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_trunc_si64:
5682dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
5692dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a0, a0, rtz
5702dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
571be1cc64cSCraig Topper  %a = call double @llvm.trunc.f64(double %x)
572be1cc64cSCraig Topper  %b = fptosi double %a to i64
573be1cc64cSCraig Topper  ret i64 %b
574be1cc64cSCraig Topper}
575be1cc64cSCraig Topper
576be1cc64cSCraig Topperdefine zeroext i8 @test_trunc_ui8(double %x) {
577be1cc64cSCraig Topper; RV32IFD-LABEL: test_trunc_ui8:
578be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
579be1cc64cSCraig Topper; RV32IFD-NEXT:    fcvt.wu.d a0, fa0, rtz
580be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
581be1cc64cSCraig Topper;
582be1cc64cSCraig Topper; RV64IFD-LABEL: test_trunc_ui8:
583be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
584be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.lu.d a0, fa0, rtz
585be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
5862dc0fa05SShao-Ce SUN;
5878b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_trunc_ui8:
5888b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
5898b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rtz
5908b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
5918b90f8e0SShao-Ce SUN;
5922dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_trunc_ui8:
5932dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
5942dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.lu.d a0, a0, rtz
5952dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
596be1cc64cSCraig Topper  %a = call double @llvm.trunc.f64(double %x)
597be1cc64cSCraig Topper  %b = fptoui double %a to i8
598be1cc64cSCraig Topper  ret i8 %b
599be1cc64cSCraig Topper}
600be1cc64cSCraig Topper
601be1cc64cSCraig Topperdefine zeroext i16 @test_trunc_ui16(double %x) {
602be1cc64cSCraig Topper; RV32IFD-LABEL: test_trunc_ui16:
603be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
604be1cc64cSCraig Topper; RV32IFD-NEXT:    fcvt.wu.d a0, fa0, rtz
605be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
606be1cc64cSCraig Topper;
607be1cc64cSCraig Topper; RV64IFD-LABEL: test_trunc_ui16:
608be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
609be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.lu.d a0, fa0, rtz
610be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
6112dc0fa05SShao-Ce SUN;
6128b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_trunc_ui16:
6138b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
6148b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rtz
6158b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
6168b90f8e0SShao-Ce SUN;
6172dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_trunc_ui16:
6182dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
6192dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.lu.d a0, a0, rtz
6202dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
621be1cc64cSCraig Topper  %a = call double @llvm.trunc.f64(double %x)
622be1cc64cSCraig Topper  %b = fptoui double %a to i16
623be1cc64cSCraig Topper  ret i16 %b
624be1cc64cSCraig Topper}
625be1cc64cSCraig Topper
626be1cc64cSCraig Topperdefine signext i32 @test_trunc_ui32(double %x) {
62784bacb18SShao-Ce SUN; CHECKIFD-LABEL: test_trunc_ui32:
62884bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
62984bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.wu.d a0, fa0, rtz
63084bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
6312dc0fa05SShao-Ce SUN;
6328b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_trunc_ui32:
6338b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
6348b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rtz
6358b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
6368b90f8e0SShao-Ce SUN;
6372dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_trunc_ui32:
6382dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
6392dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rtz
6402dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
641be1cc64cSCraig Topper  %a = call double @llvm.trunc.f64(double %x)
642be1cc64cSCraig Topper  %b = fptoui double %a to i32
643be1cc64cSCraig Topper  ret i32 %b
644be1cc64cSCraig Topper}
645be1cc64cSCraig Topper
646be1cc64cSCraig Topperdefine i64 @test_trunc_ui64(double %x) {
647be1cc64cSCraig Topper; RV32IFD-LABEL: test_trunc_ui64:
648be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
649be1cc64cSCraig Topper; RV32IFD-NEXT:    addi sp, sp, -16
650be1cc64cSCraig Topper; RV32IFD-NEXT:    .cfi_def_cfa_offset 16
651be1cc64cSCraig Topper; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
652be1cc64cSCraig Topper; RV32IFD-NEXT:    .cfi_offset ra, -4
653eabaee0cSFangrui Song; RV32IFD-NEXT:    call trunc
654eabaee0cSFangrui Song; RV32IFD-NEXT:    call __fixunsdfdi
655be1cc64cSCraig Topper; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
656*97982a8cSdlav-sc; RV32IFD-NEXT:    .cfi_restore ra
657be1cc64cSCraig Topper; RV32IFD-NEXT:    addi sp, sp, 16
658*97982a8cSdlav-sc; RV32IFD-NEXT:    .cfi_def_cfa_offset 0
659be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
660be1cc64cSCraig Topper;
661be1cc64cSCraig Topper; RV64IFD-LABEL: test_trunc_ui64:
662be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
663be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.lu.d a0, fa0, rtz
664be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
6652dc0fa05SShao-Ce SUN;
6668b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_trunc_ui64:
6678b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
6688b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
6698b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 16
6708b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
6718b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_offset ra, -4
672eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call trunc
673eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call __fixunsdfdi
6748b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
675*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_restore ra
6768b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
677*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 0
6788b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
6798b90f8e0SShao-Ce SUN;
6802dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_trunc_ui64:
6812dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
6822dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.lu.d a0, a0, rtz
6832dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
684be1cc64cSCraig Topper  %a = call double @llvm.trunc.f64(double %x)
685be1cc64cSCraig Topper  %b = fptoui double %a to i64
686be1cc64cSCraig Topper  ret i64 %b
687be1cc64cSCraig Topper}
688be1cc64cSCraig Topper
689be1cc64cSCraig Topperdefine signext i8 @test_round_si8(double %x) {
690be1cc64cSCraig Topper; RV32IFD-LABEL: test_round_si8:
691be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
692be1cc64cSCraig Topper; RV32IFD-NEXT:    fcvt.w.d a0, fa0, rmm
693be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
694be1cc64cSCraig Topper;
695be1cc64cSCraig Topper; RV64IFD-LABEL: test_round_si8:
696be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
697be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rmm
698be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
6992dc0fa05SShao-Ce SUN;
7008b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_round_si8:
7018b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
7028b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rmm
7038b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
7048b90f8e0SShao-Ce SUN;
7052dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_round_si8:
7062dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
7072dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a0, a0, rmm
7082dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
709be1cc64cSCraig Topper  %a = call double @llvm.round.f64(double %x)
710be1cc64cSCraig Topper  %b = fptosi double %a to i8
711be1cc64cSCraig Topper  ret i8 %b
712be1cc64cSCraig Topper}
713be1cc64cSCraig Topper
714be1cc64cSCraig Topperdefine signext i16 @test_round_si16(double %x) {
715be1cc64cSCraig Topper; RV32IFD-LABEL: test_round_si16:
716be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
717be1cc64cSCraig Topper; RV32IFD-NEXT:    fcvt.w.d a0, fa0, rmm
718be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
719be1cc64cSCraig Topper;
720be1cc64cSCraig Topper; RV64IFD-LABEL: test_round_si16:
721be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
722be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rmm
723be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
7242dc0fa05SShao-Ce SUN;
7258b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_round_si16:
7268b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
7278b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rmm
7288b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
7298b90f8e0SShao-Ce SUN;
7302dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_round_si16:
7312dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
7322dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a0, a0, rmm
7332dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
734be1cc64cSCraig Topper  %a = call double @llvm.round.f64(double %x)
735be1cc64cSCraig Topper  %b = fptosi double %a to i16
736be1cc64cSCraig Topper  ret i16 %b
737be1cc64cSCraig Topper}
738be1cc64cSCraig Topper
739be1cc64cSCraig Topperdefine signext i32 @test_round_si32(double %x) {
74084bacb18SShao-Ce SUN; CHECKIFD-LABEL: test_round_si32:
74184bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
74284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.w.d a0, fa0, rmm
74384bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
7442dc0fa05SShao-Ce SUN;
7458b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_round_si32:
7468b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
7478b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rmm
7488b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
7498b90f8e0SShao-Ce SUN;
7502dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_round_si32:
7512dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
7522dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rmm
7532dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
754be1cc64cSCraig Topper  %a = call double @llvm.round.f64(double %x)
755be1cc64cSCraig Topper  %b = fptosi double %a to i32
756be1cc64cSCraig Topper  ret i32 %b
757be1cc64cSCraig Topper}
758be1cc64cSCraig Topper
759be1cc64cSCraig Topperdefine i64 @test_round_si64(double %x) {
760be1cc64cSCraig Topper; RV32IFD-LABEL: test_round_si64:
761be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
762be1cc64cSCraig Topper; RV32IFD-NEXT:    addi sp, sp, -16
763be1cc64cSCraig Topper; RV32IFD-NEXT:    .cfi_def_cfa_offset 16
764be1cc64cSCraig Topper; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
765be1cc64cSCraig Topper; RV32IFD-NEXT:    .cfi_offset ra, -4
766eabaee0cSFangrui Song; RV32IFD-NEXT:    call round
767eabaee0cSFangrui Song; RV32IFD-NEXT:    call __fixdfdi
768be1cc64cSCraig Topper; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
769*97982a8cSdlav-sc; RV32IFD-NEXT:    .cfi_restore ra
770be1cc64cSCraig Topper; RV32IFD-NEXT:    addi sp, sp, 16
771*97982a8cSdlav-sc; RV32IFD-NEXT:    .cfi_def_cfa_offset 0
772be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
773be1cc64cSCraig Topper;
774be1cc64cSCraig Topper; RV64IFD-LABEL: test_round_si64:
775be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
776be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rmm
777be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
7782dc0fa05SShao-Ce SUN;
7798b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_round_si64:
7808b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
7818b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
7828b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 16
7838b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
7848b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_offset ra, -4
785eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call round
786eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call __fixdfdi
7878b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
788*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_restore ra
7898b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
790*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 0
7918b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
7928b90f8e0SShao-Ce SUN;
7932dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_round_si64:
7942dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
7952dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a0, a0, rmm
7962dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
797be1cc64cSCraig Topper  %a = call double @llvm.round.f64(double %x)
798be1cc64cSCraig Topper  %b = fptosi double %a to i64
799be1cc64cSCraig Topper  ret i64 %b
800be1cc64cSCraig Topper}
801be1cc64cSCraig Topper
802be1cc64cSCraig Topperdefine zeroext i8 @test_round_ui8(double %x) {
803be1cc64cSCraig Topper; RV32IFD-LABEL: test_round_ui8:
804be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
805be1cc64cSCraig Topper; RV32IFD-NEXT:    fcvt.wu.d a0, fa0, rmm
806be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
807be1cc64cSCraig Topper;
808be1cc64cSCraig Topper; RV64IFD-LABEL: test_round_ui8:
809be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
810be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.lu.d a0, fa0, rmm
811be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
8122dc0fa05SShao-Ce SUN;
8138b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_round_ui8:
8148b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
8158b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rmm
8168b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
8178b90f8e0SShao-Ce SUN;
8182dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_round_ui8:
8192dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
8202dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.lu.d a0, a0, rmm
8212dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
822be1cc64cSCraig Topper  %a = call double @llvm.round.f64(double %x)
823be1cc64cSCraig Topper  %b = fptoui double %a to i8
824be1cc64cSCraig Topper  ret i8 %b
825be1cc64cSCraig Topper}
826be1cc64cSCraig Topper
827be1cc64cSCraig Topperdefine zeroext i16 @test_round_ui16(double %x) {
828be1cc64cSCraig Topper; RV32IFD-LABEL: test_round_ui16:
829be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
830be1cc64cSCraig Topper; RV32IFD-NEXT:    fcvt.wu.d a0, fa0, rmm
831be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
832be1cc64cSCraig Topper;
833be1cc64cSCraig Topper; RV64IFD-LABEL: test_round_ui16:
834be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
835be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.lu.d a0, fa0, rmm
836be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
8372dc0fa05SShao-Ce SUN;
8388b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_round_ui16:
8398b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
8408b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rmm
8418b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
8428b90f8e0SShao-Ce SUN;
8432dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_round_ui16:
8442dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
8452dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.lu.d a0, a0, rmm
8462dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
847be1cc64cSCraig Topper  %a = call double @llvm.round.f64(double %x)
848be1cc64cSCraig Topper  %b = fptoui double %a to i16
849be1cc64cSCraig Topper  ret i16 %b
850be1cc64cSCraig Topper}
851be1cc64cSCraig Topper
852be1cc64cSCraig Topperdefine signext i32 @test_round_ui32(double %x) {
85384bacb18SShao-Ce SUN; CHECKIFD-LABEL: test_round_ui32:
85484bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
85584bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.wu.d a0, fa0, rmm
85684bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
8572dc0fa05SShao-Ce SUN;
8588b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_round_ui32:
8598b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
8608b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rmm
8618b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
8628b90f8e0SShao-Ce SUN;
8632dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_round_ui32:
8642dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
8652dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rmm
8662dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
867be1cc64cSCraig Topper  %a = call double @llvm.round.f64(double %x)
868be1cc64cSCraig Topper  %b = fptoui double %a to i32
869be1cc64cSCraig Topper  ret i32 %b
870be1cc64cSCraig Topper}
871be1cc64cSCraig Topper
872be1cc64cSCraig Topperdefine i64 @test_round_ui64(double %x) {
873be1cc64cSCraig Topper; RV32IFD-LABEL: test_round_ui64:
874be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
875be1cc64cSCraig Topper; RV32IFD-NEXT:    addi sp, sp, -16
876be1cc64cSCraig Topper; RV32IFD-NEXT:    .cfi_def_cfa_offset 16
877be1cc64cSCraig Topper; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
878be1cc64cSCraig Topper; RV32IFD-NEXT:    .cfi_offset ra, -4
879eabaee0cSFangrui Song; RV32IFD-NEXT:    call round
880eabaee0cSFangrui Song; RV32IFD-NEXT:    call __fixunsdfdi
881be1cc64cSCraig Topper; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
882*97982a8cSdlav-sc; RV32IFD-NEXT:    .cfi_restore ra
883be1cc64cSCraig Topper; RV32IFD-NEXT:    addi sp, sp, 16
884*97982a8cSdlav-sc; RV32IFD-NEXT:    .cfi_def_cfa_offset 0
885be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
886be1cc64cSCraig Topper;
887be1cc64cSCraig Topper; RV64IFD-LABEL: test_round_ui64:
888be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
889be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.lu.d a0, fa0, rmm
890be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
8912dc0fa05SShao-Ce SUN;
8928b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_round_ui64:
8938b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
8948b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
8958b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 16
8968b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
8978b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_offset ra, -4
898eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call round
899eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call __fixunsdfdi
9008b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
901*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_restore ra
9028b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
903*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 0
9048b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
9058b90f8e0SShao-Ce SUN;
9062dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_round_ui64:
9072dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
9082dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.lu.d a0, a0, rmm
9092dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
910be1cc64cSCraig Topper  %a = call double @llvm.round.f64(double %x)
911be1cc64cSCraig Topper  %b = fptoui double %a to i64
912be1cc64cSCraig Topper  ret i64 %b
913be1cc64cSCraig Topper}
914be1cc64cSCraig Topper
915be1cc64cSCraig Topperdefine signext i8 @test_roundeven_si8(double %x) {
916be1cc64cSCraig Topper; RV32IFD-LABEL: test_roundeven_si8:
917be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
918be1cc64cSCraig Topper; RV32IFD-NEXT:    fcvt.w.d a0, fa0, rne
919be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
920be1cc64cSCraig Topper;
921be1cc64cSCraig Topper; RV64IFD-LABEL: test_roundeven_si8:
922be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
923be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rne
924be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
9252dc0fa05SShao-Ce SUN;
9268b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_roundeven_si8:
9278b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
9288b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rne
9298b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
9308b90f8e0SShao-Ce SUN;
9312dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_roundeven_si8:
9322dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
9332dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a0, a0, rne
9342dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
935be1cc64cSCraig Topper  %a = call double @llvm.roundeven.f64(double %x)
936be1cc64cSCraig Topper  %b = fptosi double %a to i8
937be1cc64cSCraig Topper  ret i8 %b
938be1cc64cSCraig Topper}
939be1cc64cSCraig Topper
940be1cc64cSCraig Topperdefine signext i16 @test_roundeven_si16(double %x) {
941be1cc64cSCraig Topper; RV32IFD-LABEL: test_roundeven_si16:
942be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
943be1cc64cSCraig Topper; RV32IFD-NEXT:    fcvt.w.d a0, fa0, rne
944be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
945be1cc64cSCraig Topper;
946be1cc64cSCraig Topper; RV64IFD-LABEL: test_roundeven_si16:
947be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
948be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rne
949be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
9502dc0fa05SShao-Ce SUN;
9518b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_roundeven_si16:
9528b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
9538b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rne
9548b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
9558b90f8e0SShao-Ce SUN;
9562dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_roundeven_si16:
9572dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
9582dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a0, a0, rne
9592dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
960be1cc64cSCraig Topper  %a = call double @llvm.roundeven.f64(double %x)
961be1cc64cSCraig Topper  %b = fptosi double %a to i16
962be1cc64cSCraig Topper  ret i16 %b
963be1cc64cSCraig Topper}
964be1cc64cSCraig Topper
965be1cc64cSCraig Topperdefine signext i32 @test_roundeven_si32(double %x) {
96684bacb18SShao-Ce SUN; CHECKIFD-LABEL: test_roundeven_si32:
96784bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
96884bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.w.d a0, fa0, rne
96984bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
9702dc0fa05SShao-Ce SUN;
9718b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_roundeven_si32:
9728b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
9738b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rne
9748b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
9758b90f8e0SShao-Ce SUN;
9762dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_roundeven_si32:
9772dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
9782dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.w.d a0, a0, rne
9792dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
980be1cc64cSCraig Topper  %a = call double @llvm.roundeven.f64(double %x)
981be1cc64cSCraig Topper  %b = fptosi double %a to i32
982be1cc64cSCraig Topper  ret i32 %b
983be1cc64cSCraig Topper}
984be1cc64cSCraig Topper
985be1cc64cSCraig Topperdefine i64 @test_roundeven_si64(double %x) {
986be1cc64cSCraig Topper; RV32IFD-LABEL: test_roundeven_si64:
987be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
988be1cc64cSCraig Topper; RV32IFD-NEXT:    addi sp, sp, -16
989be1cc64cSCraig Topper; RV32IFD-NEXT:    .cfi_def_cfa_offset 16
990be1cc64cSCraig Topper; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
991be1cc64cSCraig Topper; RV32IFD-NEXT:    .cfi_offset ra, -4
992eabaee0cSFangrui Song; RV32IFD-NEXT:    call roundeven
993eabaee0cSFangrui Song; RV32IFD-NEXT:    call __fixdfdi
994be1cc64cSCraig Topper; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
995*97982a8cSdlav-sc; RV32IFD-NEXT:    .cfi_restore ra
996be1cc64cSCraig Topper; RV32IFD-NEXT:    addi sp, sp, 16
997*97982a8cSdlav-sc; RV32IFD-NEXT:    .cfi_def_cfa_offset 0
998be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
999be1cc64cSCraig Topper;
1000be1cc64cSCraig Topper; RV64IFD-LABEL: test_roundeven_si64:
1001be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
1002be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rne
1003be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
10042dc0fa05SShao-Ce SUN;
10058b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_roundeven_si64:
10068b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
10078b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
10088b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 16
10098b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
10108b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_offset ra, -4
1011eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call roundeven
1012eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call __fixdfdi
10138b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1014*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_restore ra
10158b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
1016*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 0
10178b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
10188b90f8e0SShao-Ce SUN;
10192dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_roundeven_si64:
10202dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
10212dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a0, a0, rne
10222dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
1023be1cc64cSCraig Topper  %a = call double @llvm.roundeven.f64(double %x)
1024be1cc64cSCraig Topper  %b = fptosi double %a to i64
1025be1cc64cSCraig Topper  ret i64 %b
1026be1cc64cSCraig Topper}
1027be1cc64cSCraig Topper
1028be1cc64cSCraig Topperdefine zeroext i8 @test_roundeven_ui8(double %x) {
1029be1cc64cSCraig Topper; RV32IFD-LABEL: test_roundeven_ui8:
1030be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
1031be1cc64cSCraig Topper; RV32IFD-NEXT:    fcvt.wu.d a0, fa0, rne
1032be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
1033be1cc64cSCraig Topper;
1034be1cc64cSCraig Topper; RV64IFD-LABEL: test_roundeven_ui8:
1035be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
1036be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.lu.d a0, fa0, rne
1037be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
10382dc0fa05SShao-Ce SUN;
10398b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_roundeven_ui8:
10408b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
10418b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rne
10428b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
10438b90f8e0SShao-Ce SUN;
10442dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_roundeven_ui8:
10452dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
10462dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.lu.d a0, a0, rne
10472dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
1048be1cc64cSCraig Topper  %a = call double @llvm.roundeven.f64(double %x)
1049be1cc64cSCraig Topper  %b = fptoui double %a to i8
1050be1cc64cSCraig Topper  ret i8 %b
1051be1cc64cSCraig Topper}
1052be1cc64cSCraig Topper
1053be1cc64cSCraig Topperdefine zeroext i16 @test_roundeven_ui16(double %x) {
1054be1cc64cSCraig Topper; RV32IFD-LABEL: test_roundeven_ui16:
1055be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
1056be1cc64cSCraig Topper; RV32IFD-NEXT:    fcvt.wu.d a0, fa0, rne
1057be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
1058be1cc64cSCraig Topper;
1059be1cc64cSCraig Topper; RV64IFD-LABEL: test_roundeven_ui16:
1060be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
1061be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.lu.d a0, fa0, rne
1062be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
10632dc0fa05SShao-Ce SUN;
10648b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_roundeven_ui16:
10658b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
10668b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rne
10678b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
10688b90f8e0SShao-Ce SUN;
10692dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_roundeven_ui16:
10702dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
10712dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.lu.d a0, a0, rne
10722dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
1073be1cc64cSCraig Topper  %a = call double @llvm.roundeven.f64(double %x)
1074be1cc64cSCraig Topper  %b = fptoui double %a to i16
1075be1cc64cSCraig Topper  ret i16 %b
1076be1cc64cSCraig Topper}
1077be1cc64cSCraig Topper
1078be1cc64cSCraig Topperdefine signext i32 @test_roundeven_ui32(double %x) {
107984bacb18SShao-Ce SUN; CHECKIFD-LABEL: test_roundeven_ui32:
108084bacb18SShao-Ce SUN; CHECKIFD:       # %bb.0:
108184bacb18SShao-Ce SUN; CHECKIFD-NEXT:    fcvt.wu.d a0, fa0, rne
108284bacb18SShao-Ce SUN; CHECKIFD-NEXT:    ret
10832dc0fa05SShao-Ce SUN;
10848b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_roundeven_ui32:
10858b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
10868b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rne
10878b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
10888b90f8e0SShao-Ce SUN;
10892dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_roundeven_ui32:
10902dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
10912dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.wu.d a0, a0, rne
10922dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
1093be1cc64cSCraig Topper  %a = call double @llvm.roundeven.f64(double %x)
1094be1cc64cSCraig Topper  %b = fptoui double %a to i32
1095be1cc64cSCraig Topper  ret i32 %b
1096be1cc64cSCraig Topper}
1097be1cc64cSCraig Topper
1098be1cc64cSCraig Topperdefine i64 @test_roundeven_ui64(double %x) {
1099be1cc64cSCraig Topper; RV32IFD-LABEL: test_roundeven_ui64:
1100be1cc64cSCraig Topper; RV32IFD:       # %bb.0:
1101be1cc64cSCraig Topper; RV32IFD-NEXT:    addi sp, sp, -16
1102be1cc64cSCraig Topper; RV32IFD-NEXT:    .cfi_def_cfa_offset 16
1103be1cc64cSCraig Topper; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1104be1cc64cSCraig Topper; RV32IFD-NEXT:    .cfi_offset ra, -4
1105eabaee0cSFangrui Song; RV32IFD-NEXT:    call roundeven
1106eabaee0cSFangrui Song; RV32IFD-NEXT:    call __fixunsdfdi
1107be1cc64cSCraig Topper; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1108*97982a8cSdlav-sc; RV32IFD-NEXT:    .cfi_restore ra
1109be1cc64cSCraig Topper; RV32IFD-NEXT:    addi sp, sp, 16
1110*97982a8cSdlav-sc; RV32IFD-NEXT:    .cfi_def_cfa_offset 0
1111be1cc64cSCraig Topper; RV32IFD-NEXT:    ret
1112be1cc64cSCraig Topper;
1113be1cc64cSCraig Topper; RV64IFD-LABEL: test_roundeven_ui64:
1114be1cc64cSCraig Topper; RV64IFD:       # %bb.0:
1115be1cc64cSCraig Topper; RV64IFD-NEXT:    fcvt.lu.d a0, fa0, rne
1116be1cc64cSCraig Topper; RV64IFD-NEXT:    ret
11172dc0fa05SShao-Ce SUN;
11188b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_roundeven_ui64:
11198b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
11208b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
11218b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 16
11228b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
11238b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_offset ra, -4
1124eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call roundeven
1125eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call __fixunsdfdi
11268b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1127*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_restore ra
11288b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
1129*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 0
11308b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
11318b90f8e0SShao-Ce SUN;
11322dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_roundeven_ui64:
11332dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
11342dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.lu.d a0, a0, rne
11352dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
1136be1cc64cSCraig Topper  %a = call double @llvm.roundeven.f64(double %x)
1137be1cc64cSCraig Topper  %b = fptoui double %a to i64
1138be1cc64cSCraig Topper  ret i64 %b
1139be1cc64cSCraig Topper}
1140be1cc64cSCraig Topper
114175b15a7eSPhilip Reamesdefine double @test_floor_double(double %x) {
1142e94dc58dSCraig Topper; RV32IFD-LABEL: test_floor_double:
1143e94dc58dSCraig Topper; RV32IFD:       # %bb.0:
1144eabaee0cSFangrui Song; RV32IFD-NEXT:    tail floor
1145e94dc58dSCraig Topper;
1146e94dc58dSCraig Topper; RV64IFD-LABEL: test_floor_double:
1147e94dc58dSCraig Topper; RV64IFD:       # %bb.0:
1148e94dc58dSCraig Topper; RV64IFD-NEXT:    lui a0, %hi(.LCPI40_0)
11497b0c4184SCraig Topper; RV64IFD-NEXT:    fld fa5, %lo(.LCPI40_0)(a0)
11507b0c4184SCraig Topper; RV64IFD-NEXT:    fabs.d fa4, fa0
11517b0c4184SCraig Topper; RV64IFD-NEXT:    flt.d a0, fa4, fa5
1152e94dc58dSCraig Topper; RV64IFD-NEXT:    beqz a0, .LBB40_2
1153e94dc58dSCraig Topper; RV64IFD-NEXT:  # %bb.1:
1154e94dc58dSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rdn
11557b0c4184SCraig Topper; RV64IFD-NEXT:    fcvt.d.l fa5, a0, rdn
11567b0c4184SCraig Topper; RV64IFD-NEXT:    fsgnj.d fa0, fa5, fa0
1157e94dc58dSCraig Topper; RV64IFD-NEXT:  .LBB40_2:
1158e94dc58dSCraig Topper; RV64IFD-NEXT:    ret
11592dc0fa05SShao-Ce SUN;
11608b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_floor_double:
11618b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
11628b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
11638b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 16
11648b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
11658b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_offset ra, -4
1166eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call floor
11678b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1168*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_restore ra
11698b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
1170*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 0
11718b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
11728b90f8e0SShao-Ce SUN;
11732dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_floor_double:
11742dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
117513013bdcSCraig Topper; RV64IZFINXZDINX-NEXT:    li a1, 1075
117613013bdcSCraig Topper; RV64IZFINXZDINX-NEXT:    slli a1, a1, 52
11772dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fabs.d a2, a0
11782dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a1, a2, a1
11792dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    beqz a1, .LBB40_2
11802dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:  # %bb.1:
11812dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a1, a0, rdn
11822dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.d.l a1, a1, rdn
11832dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fsgnj.d a0, a1, a0
11842dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:  .LBB40_2:
11852dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
118675b15a7eSPhilip Reames  %a = call double @llvm.floor.f64(double %x)
118775b15a7eSPhilip Reames  ret double %a
118875b15a7eSPhilip Reames}
118975b15a7eSPhilip Reames
119075b15a7eSPhilip Reamesdefine double @test_ceil_double(double %x) {
1191e94dc58dSCraig Topper; RV32IFD-LABEL: test_ceil_double:
1192e94dc58dSCraig Topper; RV32IFD:       # %bb.0:
1193eabaee0cSFangrui Song; RV32IFD-NEXT:    tail ceil
1194e94dc58dSCraig Topper;
1195e94dc58dSCraig Topper; RV64IFD-LABEL: test_ceil_double:
1196e94dc58dSCraig Topper; RV64IFD:       # %bb.0:
1197e94dc58dSCraig Topper; RV64IFD-NEXT:    lui a0, %hi(.LCPI41_0)
11987b0c4184SCraig Topper; RV64IFD-NEXT:    fld fa5, %lo(.LCPI41_0)(a0)
11997b0c4184SCraig Topper; RV64IFD-NEXT:    fabs.d fa4, fa0
12007b0c4184SCraig Topper; RV64IFD-NEXT:    flt.d a0, fa4, fa5
1201e94dc58dSCraig Topper; RV64IFD-NEXT:    beqz a0, .LBB41_2
1202e94dc58dSCraig Topper; RV64IFD-NEXT:  # %bb.1:
1203e94dc58dSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rup
12047b0c4184SCraig Topper; RV64IFD-NEXT:    fcvt.d.l fa5, a0, rup
12057b0c4184SCraig Topper; RV64IFD-NEXT:    fsgnj.d fa0, fa5, fa0
1206e94dc58dSCraig Topper; RV64IFD-NEXT:  .LBB41_2:
1207e94dc58dSCraig Topper; RV64IFD-NEXT:    ret
12082dc0fa05SShao-Ce SUN;
12098b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_ceil_double:
12108b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
12118b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
12128b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 16
12138b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
12148b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_offset ra, -4
1215eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call ceil
12168b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1217*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_restore ra
12188b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
1219*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 0
12208b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
12218b90f8e0SShao-Ce SUN;
12222dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_ceil_double:
12232dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
122413013bdcSCraig Topper; RV64IZFINXZDINX-NEXT:    li a1, 1075
122513013bdcSCraig Topper; RV64IZFINXZDINX-NEXT:    slli a1, a1, 52
12262dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fabs.d a2, a0
12272dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a1, a2, a1
12282dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    beqz a1, .LBB41_2
12292dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:  # %bb.1:
12302dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a1, a0, rup
12312dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.d.l a1, a1, rup
12322dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fsgnj.d a0, a1, a0
12332dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:  .LBB41_2:
12342dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
123575b15a7eSPhilip Reames  %a = call double @llvm.ceil.f64(double %x)
123675b15a7eSPhilip Reames  ret double %a
123775b15a7eSPhilip Reames}
123875b15a7eSPhilip Reames
123975b15a7eSPhilip Reamesdefine double @test_trunc_double(double %x) {
1240e94dc58dSCraig Topper; RV32IFD-LABEL: test_trunc_double:
1241e94dc58dSCraig Topper; RV32IFD:       # %bb.0:
1242eabaee0cSFangrui Song; RV32IFD-NEXT:    tail trunc
1243e94dc58dSCraig Topper;
1244e94dc58dSCraig Topper; RV64IFD-LABEL: test_trunc_double:
1245e94dc58dSCraig Topper; RV64IFD:       # %bb.0:
1246e94dc58dSCraig Topper; RV64IFD-NEXT:    lui a0, %hi(.LCPI42_0)
12477b0c4184SCraig Topper; RV64IFD-NEXT:    fld fa5, %lo(.LCPI42_0)(a0)
12487b0c4184SCraig Topper; RV64IFD-NEXT:    fabs.d fa4, fa0
12497b0c4184SCraig Topper; RV64IFD-NEXT:    flt.d a0, fa4, fa5
1250e94dc58dSCraig Topper; RV64IFD-NEXT:    beqz a0, .LBB42_2
1251e94dc58dSCraig Topper; RV64IFD-NEXT:  # %bb.1:
1252e94dc58dSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rtz
12537b0c4184SCraig Topper; RV64IFD-NEXT:    fcvt.d.l fa5, a0, rtz
12547b0c4184SCraig Topper; RV64IFD-NEXT:    fsgnj.d fa0, fa5, fa0
1255e94dc58dSCraig Topper; RV64IFD-NEXT:  .LBB42_2:
1256e94dc58dSCraig Topper; RV64IFD-NEXT:    ret
12572dc0fa05SShao-Ce SUN;
12588b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_trunc_double:
12598b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
12608b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
12618b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 16
12628b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
12638b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_offset ra, -4
1264eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call trunc
12658b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1266*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_restore ra
12678b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
1268*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 0
12698b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
12708b90f8e0SShao-Ce SUN;
12712dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_trunc_double:
12722dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
127313013bdcSCraig Topper; RV64IZFINXZDINX-NEXT:    li a1, 1075
127413013bdcSCraig Topper; RV64IZFINXZDINX-NEXT:    slli a1, a1, 52
12752dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fabs.d a2, a0
12762dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a1, a2, a1
12772dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    beqz a1, .LBB42_2
12782dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:  # %bb.1:
12792dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a1, a0, rtz
12802dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.d.l a1, a1, rtz
12812dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fsgnj.d a0, a1, a0
12822dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:  .LBB42_2:
12832dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
128475b15a7eSPhilip Reames  %a = call double @llvm.trunc.f64(double %x)
128575b15a7eSPhilip Reames  ret double %a
128675b15a7eSPhilip Reames}
128775b15a7eSPhilip Reames
128875b15a7eSPhilip Reamesdefine double @test_round_double(double %x) {
1289e94dc58dSCraig Topper; RV32IFD-LABEL: test_round_double:
1290e94dc58dSCraig Topper; RV32IFD:       # %bb.0:
1291eabaee0cSFangrui Song; RV32IFD-NEXT:    tail round
1292e94dc58dSCraig Topper;
1293e94dc58dSCraig Topper; RV64IFD-LABEL: test_round_double:
1294e94dc58dSCraig Topper; RV64IFD:       # %bb.0:
1295e94dc58dSCraig Topper; RV64IFD-NEXT:    lui a0, %hi(.LCPI43_0)
12967b0c4184SCraig Topper; RV64IFD-NEXT:    fld fa5, %lo(.LCPI43_0)(a0)
12977b0c4184SCraig Topper; RV64IFD-NEXT:    fabs.d fa4, fa0
12987b0c4184SCraig Topper; RV64IFD-NEXT:    flt.d a0, fa4, fa5
1299e94dc58dSCraig Topper; RV64IFD-NEXT:    beqz a0, .LBB43_2
1300e94dc58dSCraig Topper; RV64IFD-NEXT:  # %bb.1:
1301e94dc58dSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rmm
13027b0c4184SCraig Topper; RV64IFD-NEXT:    fcvt.d.l fa5, a0, rmm
13037b0c4184SCraig Topper; RV64IFD-NEXT:    fsgnj.d fa0, fa5, fa0
1304e94dc58dSCraig Topper; RV64IFD-NEXT:  .LBB43_2:
1305e94dc58dSCraig Topper; RV64IFD-NEXT:    ret
13062dc0fa05SShao-Ce SUN;
13078b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_round_double:
13088b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
13098b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
13108b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 16
13118b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
13128b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_offset ra, -4
1313eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call round
13148b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1315*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_restore ra
13168b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
1317*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 0
13188b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
13198b90f8e0SShao-Ce SUN;
13202dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_round_double:
13212dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
132213013bdcSCraig Topper; RV64IZFINXZDINX-NEXT:    li a1, 1075
132313013bdcSCraig Topper; RV64IZFINXZDINX-NEXT:    slli a1, a1, 52
13242dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fabs.d a2, a0
13252dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a1, a2, a1
13262dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    beqz a1, .LBB43_2
13272dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:  # %bb.1:
13282dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a1, a0, rmm
13292dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.d.l a1, a1, rmm
13302dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fsgnj.d a0, a1, a0
13312dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:  .LBB43_2:
13322dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
133375b15a7eSPhilip Reames  %a = call double @llvm.round.f64(double %x)
133475b15a7eSPhilip Reames  ret double %a
133575b15a7eSPhilip Reames}
133675b15a7eSPhilip Reames
133775b15a7eSPhilip Reamesdefine double @test_roundeven_double(double %x) {
1338e94dc58dSCraig Topper; RV32IFD-LABEL: test_roundeven_double:
1339e94dc58dSCraig Topper; RV32IFD:       # %bb.0:
1340eabaee0cSFangrui Song; RV32IFD-NEXT:    tail roundeven
1341e94dc58dSCraig Topper;
1342e94dc58dSCraig Topper; RV64IFD-LABEL: test_roundeven_double:
1343e94dc58dSCraig Topper; RV64IFD:       # %bb.0:
1344e94dc58dSCraig Topper; RV64IFD-NEXT:    lui a0, %hi(.LCPI44_0)
13457b0c4184SCraig Topper; RV64IFD-NEXT:    fld fa5, %lo(.LCPI44_0)(a0)
13467b0c4184SCraig Topper; RV64IFD-NEXT:    fabs.d fa4, fa0
13477b0c4184SCraig Topper; RV64IFD-NEXT:    flt.d a0, fa4, fa5
1348e94dc58dSCraig Topper; RV64IFD-NEXT:    beqz a0, .LBB44_2
1349e94dc58dSCraig Topper; RV64IFD-NEXT:  # %bb.1:
1350e94dc58dSCraig Topper; RV64IFD-NEXT:    fcvt.l.d a0, fa0, rne
13517b0c4184SCraig Topper; RV64IFD-NEXT:    fcvt.d.l fa5, a0, rne
13527b0c4184SCraig Topper; RV64IFD-NEXT:    fsgnj.d fa0, fa5, fa0
1353e94dc58dSCraig Topper; RV64IFD-NEXT:  .LBB44_2:
1354e94dc58dSCraig Topper; RV64IFD-NEXT:    ret
13552dc0fa05SShao-Ce SUN;
13568b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-LABEL: test_roundeven_double:
13578b90f8e0SShao-Ce SUN; RV32IZFINXZDINX:       # %bb.0:
13588b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
13598b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 16
13608b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
13618b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    .cfi_offset ra, -4
1362eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call roundeven
13638b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1364*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_restore ra
13658b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
1366*97982a8cSdlav-sc; RV32IZFINXZDINX-NEXT:    .cfi_def_cfa_offset 0
13678b90f8e0SShao-Ce SUN; RV32IZFINXZDINX-NEXT:    ret
13688b90f8e0SShao-Ce SUN;
13692dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-LABEL: test_roundeven_double:
13702dc0fa05SShao-Ce SUN; RV64IZFINXZDINX:       # %bb.0:
137113013bdcSCraig Topper; RV64IZFINXZDINX-NEXT:    li a1, 1075
137213013bdcSCraig Topper; RV64IZFINXZDINX-NEXT:    slli a1, a1, 52
13732dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fabs.d a2, a0
13742dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    flt.d a1, a2, a1
13752dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    beqz a1, .LBB44_2
13762dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:  # %bb.1:
13772dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.l.d a1, a0, rne
13782dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fcvt.d.l a1, a1, rne
13792dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    fsgnj.d a0, a1, a0
13802dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:  .LBB44_2:
13812dc0fa05SShao-Ce SUN; RV64IZFINXZDINX-NEXT:    ret
138275b15a7eSPhilip Reames  %a = call double @llvm.roundeven.f64(double %x)
138375b15a7eSPhilip Reames  ret double %a
138475b15a7eSPhilip Reames}
138575b15a7eSPhilip Reames
1386be1cc64cSCraig Topperdeclare double @llvm.floor.f64(double)
1387be1cc64cSCraig Topperdeclare double @llvm.ceil.f64(double)
1388be1cc64cSCraig Topperdeclare double @llvm.trunc.f64(double)
1389be1cc64cSCraig Topperdeclare double @llvm.round.f64(double)
1390be1cc64cSCraig Topperdeclare double @llvm.roundeven.f64(double)
1391