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