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