1b7b260e1SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2b7b260e1SCraig Topper; RUN: llc -mtriple=riscv32 -mattr=+f -verify-machineinstrs < %s \ 3b271184fSCraig Topper; RUN: -disable-strictnode-mutation -target-abi=ilp32f \ 484bacb18SShao-Ce SUN; RUN: | FileCheck -check-prefixes=CHECKIF,RV32IF %s 5b7b260e1SCraig Topper; RUN: llc -mtriple=riscv64 -mattr=+f -verify-machineinstrs < %s \ 6b271184fSCraig Topper; RUN: -disable-strictnode-mutation -target-abi=lp64f \ 784bacb18SShao-Ce SUN; RUN: | FileCheck -check-prefixes=CHECKIF,RV64IF %s 8fe558efeSShao-Ce SUN; RUN: llc -mtriple=riscv32 -mattr=+zfinx -verify-machineinstrs < %s \ 9fe558efeSShao-Ce SUN; RUN: -disable-strictnode-mutation -target-abi=ilp32 \ 10fe558efeSShao-Ce SUN; RUN: | FileCheck -check-prefixes=CHECKIZFINX,RV32IZFINX %s 11fe558efeSShao-Ce SUN; RUN: llc -mtriple=riscv64 -mattr=+zfinx -verify-machineinstrs < %s \ 12fe558efeSShao-Ce SUN; RUN: -disable-strictnode-mutation -target-abi=lp64 \ 13fe558efeSShao-Ce SUN; RUN: | FileCheck -check-prefixes=CHECKIZFINX,RV64IZFINX %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 i32 @fcvt_w_s(float %a) nounwind strictfp { 2484bacb18SShao-Ce SUN; CHECKIF-LABEL: fcvt_w_s: 2584bacb18SShao-Ce SUN; CHECKIF: # %bb.0: 2684bacb18SShao-Ce SUN; CHECKIF-NEXT: fcvt.w.s a0, fa0, rtz 2784bacb18SShao-Ce SUN; CHECKIF-NEXT: ret 28b7b260e1SCraig Topper; 29fe558efeSShao-Ce SUN; CHECKIZFINX-LABEL: fcvt_w_s: 30fe558efeSShao-Ce SUN; CHECKIZFINX: # %bb.0: 31fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: fcvt.w.s a0, a0, rtz 32fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: ret 33fe558efeSShao-Ce SUN; 34b7b260e1SCraig Topper; RV32I-LABEL: fcvt_w_s: 35b7b260e1SCraig Topper; RV32I: # %bb.0: 36b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, -16 37b7b260e1SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 38eabaee0cSFangrui Song; RV32I-NEXT: call __fixsfsi 39b7b260e1SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 40b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, 16 41b7b260e1SCraig Topper; RV32I-NEXT: ret 42b7b260e1SCraig Topper; 43b7b260e1SCraig Topper; RV64I-LABEL: fcvt_w_s: 44b7b260e1SCraig Topper; RV64I: # %bb.0: 45b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, -16 46b7b260e1SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 47eabaee0cSFangrui Song; RV64I-NEXT: call __fixsfsi 48b7b260e1SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 49b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, 16 50b7b260e1SCraig Topper; RV64I-NEXT: ret 5195c2d01dSKevin P. Neal %1 = call i32 @llvm.experimental.constrained.fptosi.i32.f32(float %a, metadata !"fpexcept.strict") 52b7b260e1SCraig Topper ret i32 %1 53b7b260e1SCraig Topper} 54b7b260e1SCraig Topperdeclare i32 @llvm.experimental.constrained.fptosi.i32.f32(float, metadata) 55b7b260e1SCraig Topper 56b7b260e1SCraig Topperdefine i32 @fcvt_wu_s(float %a) nounwind strictfp { 5784bacb18SShao-Ce SUN; CHECKIF-LABEL: fcvt_wu_s: 5884bacb18SShao-Ce SUN; CHECKIF: # %bb.0: 5984bacb18SShao-Ce SUN; CHECKIF-NEXT: fcvt.wu.s a0, fa0, rtz 6084bacb18SShao-Ce SUN; CHECKIF-NEXT: ret 61b7b260e1SCraig Topper; 62fe558efeSShao-Ce SUN; CHECKIZFINX-LABEL: fcvt_wu_s: 63fe558efeSShao-Ce SUN; CHECKIZFINX: # %bb.0: 64fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: fcvt.wu.s a0, a0, rtz 65fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: ret 66fe558efeSShao-Ce SUN; 67b7b260e1SCraig Topper; RV32I-LABEL: fcvt_wu_s: 68b7b260e1SCraig Topper; RV32I: # %bb.0: 69b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, -16 70b7b260e1SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 71eabaee0cSFangrui Song; RV32I-NEXT: call __fixunssfsi 72b7b260e1SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 73b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, 16 74b7b260e1SCraig Topper; RV32I-NEXT: ret 75b7b260e1SCraig Topper; 76b7b260e1SCraig Topper; RV64I-LABEL: fcvt_wu_s: 77b7b260e1SCraig Topper; RV64I: # %bb.0: 78b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, -16 79b7b260e1SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 80eabaee0cSFangrui Song; RV64I-NEXT: call __fixunssfsi 81b7b260e1SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 82b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, 16 83b7b260e1SCraig Topper; RV64I-NEXT: ret 8495c2d01dSKevin P. Neal %1 = call i32 @llvm.experimental.constrained.fptoui.i32.f32(float %a, metadata !"fpexcept.strict") 85b7b260e1SCraig Topper ret i32 %1 86b7b260e1SCraig Topper} 87b7b260e1SCraig Topperdeclare i32 @llvm.experimental.constrained.fptoui.i32.f32(float, metadata) 88b7b260e1SCraig Topper 89b7b260e1SCraig Topper; Test where the fptoui has multiple uses, one of which causes a sext to be 90b7b260e1SCraig Topper; inserted on RV64. 9195c2d01dSKevin P. Nealdefine i32 @fcvt_wu_s_multiple_use(float %x, ptr %y) nounwind strictfp { 9284bacb18SShao-Ce SUN; CHECKIF-LABEL: fcvt_wu_s_multiple_use: 9384bacb18SShao-Ce SUN; CHECKIF: # %bb.0: 947b970290SLiaoChunyu; CHECKIF-NEXT: fcvt.wu.s a0, fa0, rtz 95fc973037SLiaoChunyu; CHECKIF-NEXT: seqz a1, a0 96fc973037SLiaoChunyu; CHECKIF-NEXT: add a0, a0, a1 9784bacb18SShao-Ce SUN; CHECKIF-NEXT: ret 98b7b260e1SCraig Topper; 99fe558efeSShao-Ce SUN; CHECKIZFINX-LABEL: fcvt_wu_s_multiple_use: 100fe558efeSShao-Ce SUN; CHECKIZFINX: # %bb.0: 101fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: fcvt.wu.s a0, a0, rtz 102fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: seqz a1, a0 103fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: add a0, a0, a1 104fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: ret 105fe558efeSShao-Ce SUN; 106b7b260e1SCraig Topper; RV32I-LABEL: fcvt_wu_s_multiple_use: 107b7b260e1SCraig Topper; RV32I: # %bb.0: 108b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, -16 109b7b260e1SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 110eabaee0cSFangrui Song; RV32I-NEXT: call __fixunssfsi 111fc973037SLiaoChunyu; RV32I-NEXT: seqz a1, a0 112fc973037SLiaoChunyu; RV32I-NEXT: add a0, a0, a1 113b7b260e1SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 114b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, 16 115b7b260e1SCraig Topper; RV32I-NEXT: ret 116b7b260e1SCraig Topper; 117b7b260e1SCraig Topper; RV64I-LABEL: fcvt_wu_s_multiple_use: 118b7b260e1SCraig Topper; RV64I: # %bb.0: 119b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, -16 120b7b260e1SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 121eabaee0cSFangrui Song; RV64I-NEXT: call __fixunssfsi 122fc973037SLiaoChunyu; RV64I-NEXT: seqz a1, a0 123fc973037SLiaoChunyu; RV64I-NEXT: add a0, a0, a1 124b7b260e1SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 125b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, 16 126b7b260e1SCraig Topper; RV64I-NEXT: ret 12795c2d01dSKevin P. Neal %a = call i32 @llvm.experimental.constrained.fptoui.i32.f32(float %x, metadata !"fpexcept.strict") 128b7b260e1SCraig Topper %b = icmp eq i32 %a, 0 129b7b260e1SCraig Topper %c = select i1 %b, i32 1, i32 %a 130b7b260e1SCraig Topper ret i32 %c 131b7b260e1SCraig Topper} 132b7b260e1SCraig Topper 133b7b260e1SCraig Topperdefine float @fcvt_s_w(i32 %a) nounwind strictfp { 13484bacb18SShao-Ce SUN; CHECKIF-LABEL: fcvt_s_w: 13584bacb18SShao-Ce SUN; CHECKIF: # %bb.0: 13684bacb18SShao-Ce SUN; CHECKIF-NEXT: fcvt.s.w fa0, a0 13784bacb18SShao-Ce SUN; CHECKIF-NEXT: ret 138b7b260e1SCraig Topper; 139fe558efeSShao-Ce SUN; CHECKIZFINX-LABEL: fcvt_s_w: 140fe558efeSShao-Ce SUN; CHECKIZFINX: # %bb.0: 141fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: fcvt.s.w a0, a0 142fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: ret 143fe558efeSShao-Ce SUN; 144b7b260e1SCraig Topper; RV32I-LABEL: fcvt_s_w: 145b7b260e1SCraig Topper; RV32I: # %bb.0: 146b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, -16 147b7b260e1SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 148eabaee0cSFangrui Song; RV32I-NEXT: call __floatsisf 149b7b260e1SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 150b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, 16 151b7b260e1SCraig Topper; RV32I-NEXT: ret 152b7b260e1SCraig Topper; 153b7b260e1SCraig Topper; RV64I-LABEL: fcvt_s_w: 154b7b260e1SCraig Topper; RV64I: # %bb.0: 155b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, -16 156b7b260e1SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 157b7b260e1SCraig Topper; RV64I-NEXT: sext.w a0, a0 158eabaee0cSFangrui Song; RV64I-NEXT: call __floatsisf 159b7b260e1SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 160b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, 16 161b7b260e1SCraig Topper; RV64I-NEXT: ret 16295c2d01dSKevin P. Neal %1 = call float @llvm.experimental.constrained.sitofp.f32.i32(i32 %a, metadata !"round.dynamic", metadata !"fpexcept.strict") 163b7b260e1SCraig Topper ret float %1 164b7b260e1SCraig Topper} 165b7b260e1SCraig Topperdeclare float @llvm.experimental.constrained.sitofp.f32.i32(i32, metadata, metadata) 166b7b260e1SCraig Topper 1671456b686SNikita Popovdefine float @fcvt_s_w_load(ptr %p) nounwind strictfp { 16884bacb18SShao-Ce SUN; CHECKIF-LABEL: fcvt_s_w_load: 16984bacb18SShao-Ce SUN; CHECKIF: # %bb.0: 17084bacb18SShao-Ce SUN; CHECKIF-NEXT: lw a0, 0(a0) 17184bacb18SShao-Ce SUN; CHECKIF-NEXT: fcvt.s.w fa0, a0 17284bacb18SShao-Ce SUN; CHECKIF-NEXT: ret 173b7b260e1SCraig Topper; 174fe558efeSShao-Ce SUN; CHECKIZFINX-LABEL: fcvt_s_w_load: 175fe558efeSShao-Ce SUN; CHECKIZFINX: # %bb.0: 176fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: lw a0, 0(a0) 177fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: fcvt.s.w a0, a0 178fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: ret 179fe558efeSShao-Ce SUN; 180b7b260e1SCraig Topper; RV32I-LABEL: fcvt_s_w_load: 181b7b260e1SCraig Topper; RV32I: # %bb.0: 182b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, -16 183b7b260e1SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 184b7b260e1SCraig Topper; RV32I-NEXT: lw a0, 0(a0) 185eabaee0cSFangrui Song; RV32I-NEXT: call __floatsisf 186b7b260e1SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 187b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, 16 188b7b260e1SCraig Topper; RV32I-NEXT: ret 189b7b260e1SCraig Topper; 190b7b260e1SCraig Topper; RV64I-LABEL: fcvt_s_w_load: 191b7b260e1SCraig Topper; RV64I: # %bb.0: 192b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, -16 193b7b260e1SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 194b7b260e1SCraig Topper; RV64I-NEXT: lw a0, 0(a0) 195eabaee0cSFangrui Song; RV64I-NEXT: call __floatsisf 196b7b260e1SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 197b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, 16 198b7b260e1SCraig Topper; RV64I-NEXT: ret 1991456b686SNikita Popov %a = load i32, ptr %p 20095c2d01dSKevin P. Neal %1 = call float @llvm.experimental.constrained.sitofp.f32.i32(i32 %a, metadata !"round.dynamic", metadata !"fpexcept.strict") 201b7b260e1SCraig Topper ret float %1 202b7b260e1SCraig Topper} 203b7b260e1SCraig Topper 204b7b260e1SCraig Topperdefine float @fcvt_s_wu(i32 %a) nounwind strictfp { 20584bacb18SShao-Ce SUN; CHECKIF-LABEL: fcvt_s_wu: 20684bacb18SShao-Ce SUN; CHECKIF: # %bb.0: 20784bacb18SShao-Ce SUN; CHECKIF-NEXT: fcvt.s.wu fa0, a0 20884bacb18SShao-Ce SUN; CHECKIF-NEXT: ret 209b7b260e1SCraig Topper; 210fe558efeSShao-Ce SUN; CHECKIZFINX-LABEL: fcvt_s_wu: 211fe558efeSShao-Ce SUN; CHECKIZFINX: # %bb.0: 212fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: fcvt.s.wu a0, a0 213fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: ret 214fe558efeSShao-Ce SUN; 215b7b260e1SCraig Topper; RV32I-LABEL: fcvt_s_wu: 216b7b260e1SCraig Topper; RV32I: # %bb.0: 217b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, -16 218b7b260e1SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 219eabaee0cSFangrui Song; RV32I-NEXT: call __floatunsisf 220b7b260e1SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 221b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, 16 222b7b260e1SCraig Topper; RV32I-NEXT: ret 223b7b260e1SCraig Topper; 224b7b260e1SCraig Topper; RV64I-LABEL: fcvt_s_wu: 225b7b260e1SCraig Topper; RV64I: # %bb.0: 226b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, -16 227b7b260e1SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 228b7b260e1SCraig Topper; RV64I-NEXT: sext.w a0, a0 229eabaee0cSFangrui Song; RV64I-NEXT: call __floatunsisf 230b7b260e1SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 231b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, 16 232b7b260e1SCraig Topper; RV64I-NEXT: ret 23395c2d01dSKevin P. Neal %1 = call float @llvm.experimental.constrained.uitofp.f32.i32(i32 %a, metadata !"round.dynamic", metadata !"fpexcept.strict") 234b7b260e1SCraig Topper ret float %1 235b7b260e1SCraig Topper} 236b7b260e1SCraig Topperdeclare float @llvm.experimental.constrained.uitofp.f32.i32(i32 %a, metadata, metadata) 237b7b260e1SCraig Topper 2381456b686SNikita Popovdefine float @fcvt_s_wu_load(ptr %p) nounwind strictfp { 239b7b260e1SCraig Topper; RV32IF-LABEL: fcvt_s_wu_load: 240b7b260e1SCraig Topper; RV32IF: # %bb.0: 241b7b260e1SCraig Topper; RV32IF-NEXT: lw a0, 0(a0) 242b271184fSCraig Topper; RV32IF-NEXT: fcvt.s.wu fa0, a0 243b7b260e1SCraig Topper; RV32IF-NEXT: ret 244b7b260e1SCraig Topper; 245b7b260e1SCraig Topper; RV64IF-LABEL: fcvt_s_wu_load: 246b7b260e1SCraig Topper; RV64IF: # %bb.0: 247b7b260e1SCraig Topper; RV64IF-NEXT: lwu a0, 0(a0) 248b271184fSCraig Topper; RV64IF-NEXT: fcvt.s.wu fa0, a0 249b7b260e1SCraig Topper; RV64IF-NEXT: ret 250b7b260e1SCraig Topper; 251fe558efeSShao-Ce SUN; RV32IZFINX-LABEL: fcvt_s_wu_load: 252fe558efeSShao-Ce SUN; RV32IZFINX: # %bb.0: 253fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: lw a0, 0(a0) 254fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: fcvt.s.wu a0, a0 255fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: ret 256fe558efeSShao-Ce SUN; 257fe558efeSShao-Ce SUN; RV64IZFINX-LABEL: fcvt_s_wu_load: 258fe558efeSShao-Ce SUN; RV64IZFINX: # %bb.0: 259fe558efeSShao-Ce SUN; RV64IZFINX-NEXT: lwu a0, 0(a0) 260fe558efeSShao-Ce SUN; RV64IZFINX-NEXT: fcvt.s.wu a0, a0 261fe558efeSShao-Ce SUN; RV64IZFINX-NEXT: ret 262fe558efeSShao-Ce SUN; 263b7b260e1SCraig Topper; RV32I-LABEL: fcvt_s_wu_load: 264b7b260e1SCraig Topper; RV32I: # %bb.0: 265b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, -16 266b7b260e1SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 267b7b260e1SCraig Topper; RV32I-NEXT: lw a0, 0(a0) 268eabaee0cSFangrui Song; RV32I-NEXT: call __floatunsisf 269b7b260e1SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 270b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, 16 271b7b260e1SCraig Topper; RV32I-NEXT: ret 272b7b260e1SCraig Topper; 273b7b260e1SCraig Topper; RV64I-LABEL: fcvt_s_wu_load: 274b7b260e1SCraig Topper; RV64I: # %bb.0: 275b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, -16 276b7b260e1SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 277b7b260e1SCraig Topper; RV64I-NEXT: lw a0, 0(a0) 278eabaee0cSFangrui Song; RV64I-NEXT: call __floatunsisf 279b7b260e1SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 280b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, 16 281b7b260e1SCraig Topper; RV64I-NEXT: ret 2821456b686SNikita Popov %a = load i32, ptr %p 28395c2d01dSKevin P. Neal %1 = call float @llvm.experimental.constrained.uitofp.f32.i32(i32 %a, metadata !"round.dynamic", metadata !"fpexcept.strict") 284b7b260e1SCraig Topper ret float %1 285b7b260e1SCraig Topper} 286b7b260e1SCraig Topper 287b7b260e1SCraig Topperdefine i64 @fcvt_l_s(float %a) nounwind strictfp { 288b7b260e1SCraig Topper; RV32IF-LABEL: fcvt_l_s: 289b7b260e1SCraig Topper; RV32IF: # %bb.0: 290b7b260e1SCraig Topper; RV32IF-NEXT: addi sp, sp, -16 291b7b260e1SCraig Topper; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 292eabaee0cSFangrui Song; RV32IF-NEXT: call __fixsfdi 293b7b260e1SCraig Topper; RV32IF-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 294b7b260e1SCraig Topper; RV32IF-NEXT: addi sp, sp, 16 295b7b260e1SCraig Topper; RV32IF-NEXT: ret 296b7b260e1SCraig Topper; 297b7b260e1SCraig Topper; RV64IF-LABEL: fcvt_l_s: 298b7b260e1SCraig Topper; RV64IF: # %bb.0: 299b271184fSCraig Topper; RV64IF-NEXT: fcvt.l.s a0, fa0, rtz 300b7b260e1SCraig Topper; RV64IF-NEXT: ret 301b7b260e1SCraig Topper; 302fe558efeSShao-Ce SUN; RV32IZFINX-LABEL: fcvt_l_s: 303fe558efeSShao-Ce SUN; RV32IZFINX: # %bb.0: 304fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: addi sp, sp, -16 305fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 306eabaee0cSFangrui Song; RV32IZFINX-NEXT: call __fixsfdi 307fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 308fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: addi sp, sp, 16 309fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: ret 310fe558efeSShao-Ce SUN; 311fe558efeSShao-Ce SUN; RV64IZFINX-LABEL: fcvt_l_s: 312fe558efeSShao-Ce SUN; RV64IZFINX: # %bb.0: 313fe558efeSShao-Ce SUN; RV64IZFINX-NEXT: fcvt.l.s a0, a0, rtz 314fe558efeSShao-Ce SUN; RV64IZFINX-NEXT: ret 315fe558efeSShao-Ce SUN; 316b7b260e1SCraig Topper; RV32I-LABEL: fcvt_l_s: 317b7b260e1SCraig Topper; RV32I: # %bb.0: 318b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, -16 319b7b260e1SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 320eabaee0cSFangrui Song; RV32I-NEXT: call __fixsfdi 321b7b260e1SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 322b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, 16 323b7b260e1SCraig Topper; RV32I-NEXT: ret 324b7b260e1SCraig Topper; 325b7b260e1SCraig Topper; RV64I-LABEL: fcvt_l_s: 326b7b260e1SCraig Topper; RV64I: # %bb.0: 327b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, -16 328b7b260e1SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 329eabaee0cSFangrui Song; RV64I-NEXT: call __fixsfdi 330b7b260e1SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 331b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, 16 332b7b260e1SCraig Topper; RV64I-NEXT: ret 33395c2d01dSKevin P. Neal %1 = call i64 @llvm.experimental.constrained.fptosi.i64.f32(float %a, metadata !"fpexcept.strict") 334b7b260e1SCraig Topper ret i64 %1 335b7b260e1SCraig Topper} 336b7b260e1SCraig Topperdeclare i64 @llvm.experimental.constrained.fptosi.i64.f32(float, metadata) 337b7b260e1SCraig Topper 338b7b260e1SCraig Topperdefine i64 @fcvt_lu_s(float %a) nounwind strictfp { 339b7b260e1SCraig Topper; RV32IF-LABEL: fcvt_lu_s: 340b7b260e1SCraig Topper; RV32IF: # %bb.0: 341b7b260e1SCraig Topper; RV32IF-NEXT: addi sp, sp, -16 342b7b260e1SCraig Topper; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 343eabaee0cSFangrui Song; RV32IF-NEXT: call __fixunssfdi 344b7b260e1SCraig Topper; RV32IF-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 345b7b260e1SCraig Topper; RV32IF-NEXT: addi sp, sp, 16 346b7b260e1SCraig Topper; RV32IF-NEXT: ret 347b7b260e1SCraig Topper; 348b7b260e1SCraig Topper; RV64IF-LABEL: fcvt_lu_s: 349b7b260e1SCraig Topper; RV64IF: # %bb.0: 350b271184fSCraig Topper; RV64IF-NEXT: fcvt.lu.s a0, fa0, rtz 351b7b260e1SCraig Topper; RV64IF-NEXT: ret 352b7b260e1SCraig Topper; 353fe558efeSShao-Ce SUN; RV32IZFINX-LABEL: fcvt_lu_s: 354fe558efeSShao-Ce SUN; RV32IZFINX: # %bb.0: 355fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: addi sp, sp, -16 356fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 357eabaee0cSFangrui Song; RV32IZFINX-NEXT: call __fixunssfdi 358fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 359fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: addi sp, sp, 16 360fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: ret 361fe558efeSShao-Ce SUN; 362fe558efeSShao-Ce SUN; RV64IZFINX-LABEL: fcvt_lu_s: 363fe558efeSShao-Ce SUN; RV64IZFINX: # %bb.0: 364fe558efeSShao-Ce SUN; RV64IZFINX-NEXT: fcvt.lu.s a0, a0, rtz 365fe558efeSShao-Ce SUN; RV64IZFINX-NEXT: ret 366fe558efeSShao-Ce SUN; 367b7b260e1SCraig Topper; RV32I-LABEL: fcvt_lu_s: 368b7b260e1SCraig Topper; RV32I: # %bb.0: 369b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, -16 370b7b260e1SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 371eabaee0cSFangrui Song; RV32I-NEXT: call __fixunssfdi 372b7b260e1SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 373b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, 16 374b7b260e1SCraig Topper; RV32I-NEXT: ret 375b7b260e1SCraig Topper; 376b7b260e1SCraig Topper; RV64I-LABEL: fcvt_lu_s: 377b7b260e1SCraig Topper; RV64I: # %bb.0: 378b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, -16 379b7b260e1SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 380eabaee0cSFangrui Song; RV64I-NEXT: call __fixunssfdi 381b7b260e1SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 382b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, 16 383b7b260e1SCraig Topper; RV64I-NEXT: ret 38495c2d01dSKevin P. Neal %1 = call i64 @llvm.experimental.constrained.fptoui.i64.f32(float %a, metadata !"fpexcept.strict") 385b7b260e1SCraig Topper ret i64 %1 386b7b260e1SCraig Topper} 387b7b260e1SCraig Topperdeclare i64 @llvm.experimental.constrained.fptoui.i64.f32(float, metadata) 388b7b260e1SCraig Topper 389b7b260e1SCraig Topperdefine float @fcvt_s_l(i64 %a) nounwind strictfp { 390b7b260e1SCraig Topper; RV32IF-LABEL: fcvt_s_l: 391b7b260e1SCraig Topper; RV32IF: # %bb.0: 392b7b260e1SCraig Topper; RV32IF-NEXT: addi sp, sp, -16 393b7b260e1SCraig Topper; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 394eabaee0cSFangrui Song; RV32IF-NEXT: call __floatdisf 395b7b260e1SCraig Topper; RV32IF-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 396b7b260e1SCraig Topper; RV32IF-NEXT: addi sp, sp, 16 397b7b260e1SCraig Topper; RV32IF-NEXT: ret 398b7b260e1SCraig Topper; 399b7b260e1SCraig Topper; RV64IF-LABEL: fcvt_s_l: 400b7b260e1SCraig Topper; RV64IF: # %bb.0: 401b271184fSCraig Topper; RV64IF-NEXT: fcvt.s.l fa0, a0 402b7b260e1SCraig Topper; RV64IF-NEXT: ret 403b7b260e1SCraig Topper; 404fe558efeSShao-Ce SUN; RV32IZFINX-LABEL: fcvt_s_l: 405fe558efeSShao-Ce SUN; RV32IZFINX: # %bb.0: 406fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: addi sp, sp, -16 407fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 408eabaee0cSFangrui Song; RV32IZFINX-NEXT: call __floatdisf 409fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 410fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: addi sp, sp, 16 411fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: ret 412fe558efeSShao-Ce SUN; 413fe558efeSShao-Ce SUN; RV64IZFINX-LABEL: fcvt_s_l: 414fe558efeSShao-Ce SUN; RV64IZFINX: # %bb.0: 415fe558efeSShao-Ce SUN; RV64IZFINX-NEXT: fcvt.s.l a0, a0 416fe558efeSShao-Ce SUN; RV64IZFINX-NEXT: ret 417fe558efeSShao-Ce SUN; 418b7b260e1SCraig Topper; RV32I-LABEL: fcvt_s_l: 419b7b260e1SCraig Topper; RV32I: # %bb.0: 420b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, -16 421b7b260e1SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 422eabaee0cSFangrui Song; RV32I-NEXT: call __floatdisf 423b7b260e1SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 424b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, 16 425b7b260e1SCraig Topper; RV32I-NEXT: ret 426b7b260e1SCraig Topper; 427b7b260e1SCraig Topper; RV64I-LABEL: fcvt_s_l: 428b7b260e1SCraig Topper; RV64I: # %bb.0: 429b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, -16 430b7b260e1SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 431eabaee0cSFangrui Song; RV64I-NEXT: call __floatdisf 432b7b260e1SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 433b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, 16 434b7b260e1SCraig Topper; RV64I-NEXT: ret 43595c2d01dSKevin P. Neal %1 = call float @llvm.experimental.constrained.sitofp.f32.i64(i64 %a, metadata !"round.dynamic", metadata !"fpexcept.strict") 436b7b260e1SCraig Topper ret float %1 437b7b260e1SCraig Topper} 438b7b260e1SCraig Topperdeclare float @llvm.experimental.constrained.sitofp.f32.i64(i64, metadata, metadata) 439b7b260e1SCraig Topper 440b7b260e1SCraig Topperdefine float @fcvt_s_lu(i64 %a) nounwind strictfp { 441b7b260e1SCraig Topper; RV32IF-LABEL: fcvt_s_lu: 442b7b260e1SCraig Topper; RV32IF: # %bb.0: 443b7b260e1SCraig Topper; RV32IF-NEXT: addi sp, sp, -16 444b7b260e1SCraig Topper; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 445eabaee0cSFangrui Song; RV32IF-NEXT: call __floatundisf 446b7b260e1SCraig Topper; RV32IF-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 447b7b260e1SCraig Topper; RV32IF-NEXT: addi sp, sp, 16 448b7b260e1SCraig Topper; RV32IF-NEXT: ret 449b7b260e1SCraig Topper; 450b7b260e1SCraig Topper; RV64IF-LABEL: fcvt_s_lu: 451b7b260e1SCraig Topper; RV64IF: # %bb.0: 452b271184fSCraig Topper; RV64IF-NEXT: fcvt.s.lu fa0, a0 453b7b260e1SCraig Topper; RV64IF-NEXT: ret 454b7b260e1SCraig Topper; 455fe558efeSShao-Ce SUN; RV32IZFINX-LABEL: fcvt_s_lu: 456fe558efeSShao-Ce SUN; RV32IZFINX: # %bb.0: 457fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: addi sp, sp, -16 458fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 459eabaee0cSFangrui Song; RV32IZFINX-NEXT: call __floatundisf 460fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 461fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: addi sp, sp, 16 462fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: ret 463fe558efeSShao-Ce SUN; 464fe558efeSShao-Ce SUN; RV64IZFINX-LABEL: fcvt_s_lu: 465fe558efeSShao-Ce SUN; RV64IZFINX: # %bb.0: 466fe558efeSShao-Ce SUN; RV64IZFINX-NEXT: fcvt.s.lu a0, a0 467fe558efeSShao-Ce SUN; RV64IZFINX-NEXT: ret 468fe558efeSShao-Ce SUN; 469b7b260e1SCraig Topper; RV32I-LABEL: fcvt_s_lu: 470b7b260e1SCraig Topper; RV32I: # %bb.0: 471b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, -16 472b7b260e1SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 473eabaee0cSFangrui Song; RV32I-NEXT: call __floatundisf 474b7b260e1SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 475b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, 16 476b7b260e1SCraig Topper; RV32I-NEXT: ret 477b7b260e1SCraig Topper; 478b7b260e1SCraig Topper; RV64I-LABEL: fcvt_s_lu: 479b7b260e1SCraig Topper; RV64I: # %bb.0: 480b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, -16 481b7b260e1SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 482eabaee0cSFangrui Song; RV64I-NEXT: call __floatundisf 483b7b260e1SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 484b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, 16 485b7b260e1SCraig Topper; RV64I-NEXT: ret 48695c2d01dSKevin P. Neal %1 = call float @llvm.experimental.constrained.uitofp.f32.i64(i64 %a, metadata !"round.dynamic", metadata !"fpexcept.strict") 487b7b260e1SCraig Topper ret float %1 488b7b260e1SCraig Topper} 489b7b260e1SCraig Topperdeclare float @llvm.experimental.constrained.uitofp.f32.i64(i64, metadata, metadata) 490b7b260e1SCraig Topper 491b7b260e1SCraig Topperdefine float @fcvt_s_w_i8(i8 signext %a) nounwind strictfp { 49284bacb18SShao-Ce SUN; CHECKIF-LABEL: fcvt_s_w_i8: 49384bacb18SShao-Ce SUN; CHECKIF: # %bb.0: 49484bacb18SShao-Ce SUN; CHECKIF-NEXT: fcvt.s.w fa0, a0 49584bacb18SShao-Ce SUN; CHECKIF-NEXT: ret 496b7b260e1SCraig Topper; 497fe558efeSShao-Ce SUN; CHECKIZFINX-LABEL: fcvt_s_w_i8: 498fe558efeSShao-Ce SUN; CHECKIZFINX: # %bb.0: 499fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: fcvt.s.w a0, a0 500fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: ret 501fe558efeSShao-Ce SUN; 502b7b260e1SCraig Topper; RV32I-LABEL: fcvt_s_w_i8: 503b7b260e1SCraig Topper; RV32I: # %bb.0: 504b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, -16 505b7b260e1SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 506eabaee0cSFangrui Song; RV32I-NEXT: call __floatsisf 507b7b260e1SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 508b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, 16 509b7b260e1SCraig Topper; RV32I-NEXT: ret 510b7b260e1SCraig Topper; 511b7b260e1SCraig Topper; RV64I-LABEL: fcvt_s_w_i8: 512b7b260e1SCraig Topper; RV64I: # %bb.0: 513b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, -16 514b7b260e1SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 515eabaee0cSFangrui Song; RV64I-NEXT: call __floatsisf 516b7b260e1SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 517b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, 16 518b7b260e1SCraig Topper; RV64I-NEXT: ret 51995c2d01dSKevin P. Neal %1 = call float @llvm.experimental.constrained.sitofp.f32.i8(i8 %a, metadata !"round.dynamic", metadata !"fpexcept.strict") 520b7b260e1SCraig Topper ret float %1 521b7b260e1SCraig Topper} 522b7b260e1SCraig Topperdeclare float @llvm.experimental.constrained.sitofp.f32.i8(i8, metadata, metadata) 523b7b260e1SCraig Topper 524b7b260e1SCraig Topperdefine float @fcvt_s_wu_i8(i8 zeroext %a) nounwind strictfp { 52584bacb18SShao-Ce SUN; CHECKIF-LABEL: fcvt_s_wu_i8: 52684bacb18SShao-Ce SUN; CHECKIF: # %bb.0: 52784bacb18SShao-Ce SUN; CHECKIF-NEXT: fcvt.s.wu fa0, a0 52884bacb18SShao-Ce SUN; CHECKIF-NEXT: ret 529b7b260e1SCraig Topper; 530fe558efeSShao-Ce SUN; CHECKIZFINX-LABEL: fcvt_s_wu_i8: 531fe558efeSShao-Ce SUN; CHECKIZFINX: # %bb.0: 532fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: fcvt.s.wu a0, a0 533fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: ret 534fe558efeSShao-Ce SUN; 535b7b260e1SCraig Topper; RV32I-LABEL: fcvt_s_wu_i8: 536b7b260e1SCraig Topper; RV32I: # %bb.0: 537b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, -16 538b7b260e1SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 539eabaee0cSFangrui Song; RV32I-NEXT: call __floatunsisf 540b7b260e1SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 541b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, 16 542b7b260e1SCraig Topper; RV32I-NEXT: ret 543b7b260e1SCraig Topper; 544b7b260e1SCraig Topper; RV64I-LABEL: fcvt_s_wu_i8: 545b7b260e1SCraig Topper; RV64I: # %bb.0: 546b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, -16 547b7b260e1SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 548eabaee0cSFangrui Song; RV64I-NEXT: call __floatunsisf 549b7b260e1SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 550b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, 16 551b7b260e1SCraig Topper; RV64I-NEXT: ret 552b7b260e1SCraig Topper %1 = call float @llvm.experimental.constrained.uitofp.f32.i8(i8 %a, metadata !"round.dynamic", metadata !"fpexcept.strict") 553b7b260e1SCraig Topper ret float %1 554b7b260e1SCraig Topper} 555b7b260e1SCraig Topperdeclare float @llvm.experimental.constrained.uitofp.f32.i8(i8, metadata, metadata) 556b7b260e1SCraig Topper 557b7b260e1SCraig Topperdefine float @fcvt_s_w_i16(i16 signext %a) nounwind strictfp { 55884bacb18SShao-Ce SUN; CHECKIF-LABEL: fcvt_s_w_i16: 55984bacb18SShao-Ce SUN; CHECKIF: # %bb.0: 56084bacb18SShao-Ce SUN; CHECKIF-NEXT: fcvt.s.w fa0, a0 56184bacb18SShao-Ce SUN; CHECKIF-NEXT: ret 562b7b260e1SCraig Topper; 563fe558efeSShao-Ce SUN; CHECKIZFINX-LABEL: fcvt_s_w_i16: 564fe558efeSShao-Ce SUN; CHECKIZFINX: # %bb.0: 565fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: fcvt.s.w a0, a0 566fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: ret 567fe558efeSShao-Ce SUN; 568b7b260e1SCraig Topper; RV32I-LABEL: fcvt_s_w_i16: 569b7b260e1SCraig Topper; RV32I: # %bb.0: 570b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, -16 571b7b260e1SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 572eabaee0cSFangrui Song; RV32I-NEXT: call __floatsisf 573b7b260e1SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 574b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, 16 575b7b260e1SCraig Topper; RV32I-NEXT: ret 576b7b260e1SCraig Topper; 577b7b260e1SCraig Topper; RV64I-LABEL: fcvt_s_w_i16: 578b7b260e1SCraig Topper; RV64I: # %bb.0: 579b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, -16 580b7b260e1SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 581eabaee0cSFangrui Song; RV64I-NEXT: call __floatsisf 582b7b260e1SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 583b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, 16 584b7b260e1SCraig Topper; RV64I-NEXT: ret 58595c2d01dSKevin P. Neal %1 = call float @llvm.experimental.constrained.sitofp.f32.i16(i16 %a, metadata !"round.dynamic", metadata !"fpexcept.strict") 586b7b260e1SCraig Topper ret float %1 587b7b260e1SCraig Topper} 588b7b260e1SCraig Topperdeclare float @llvm.experimental.constrained.sitofp.f32.i16(i16, metadata, metadata) 589b7b260e1SCraig Topper 590b7b260e1SCraig Topperdefine float @fcvt_s_wu_i16(i16 zeroext %a) nounwind strictfp { 59184bacb18SShao-Ce SUN; CHECKIF-LABEL: fcvt_s_wu_i16: 59284bacb18SShao-Ce SUN; CHECKIF: # %bb.0: 59384bacb18SShao-Ce SUN; CHECKIF-NEXT: fcvt.s.wu fa0, a0 59484bacb18SShao-Ce SUN; CHECKIF-NEXT: ret 595b7b260e1SCraig Topper; 596fe558efeSShao-Ce SUN; CHECKIZFINX-LABEL: fcvt_s_wu_i16: 597fe558efeSShao-Ce SUN; CHECKIZFINX: # %bb.0: 598fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: fcvt.s.wu a0, a0 599fe558efeSShao-Ce SUN; CHECKIZFINX-NEXT: ret 600fe558efeSShao-Ce SUN; 601b7b260e1SCraig Topper; RV32I-LABEL: fcvt_s_wu_i16: 602b7b260e1SCraig Topper; RV32I: # %bb.0: 603b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, -16 604b7b260e1SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 605eabaee0cSFangrui Song; RV32I-NEXT: call __floatunsisf 606b7b260e1SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 607b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, 16 608b7b260e1SCraig Topper; RV32I-NEXT: ret 609b7b260e1SCraig Topper; 610b7b260e1SCraig Topper; RV64I-LABEL: fcvt_s_wu_i16: 611b7b260e1SCraig Topper; RV64I: # %bb.0: 612b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, -16 613b7b260e1SCraig Topper; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 614eabaee0cSFangrui Song; RV64I-NEXT: call __floatunsisf 615b7b260e1SCraig Topper; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 616b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, 16 617b7b260e1SCraig Topper; RV64I-NEXT: ret 61895c2d01dSKevin P. Neal %1 = call float @llvm.experimental.constrained.uitofp.f32.i16(i16 %a, metadata !"round.dynamic", metadata !"fpexcept.strict") 619b7b260e1SCraig Topper ret float %1 620b7b260e1SCraig Topper} 621b7b260e1SCraig Topperdeclare float @llvm.experimental.constrained.uitofp.f32.i16(i16, metadata, metadata) 622b7b260e1SCraig Topper 623b7b260e1SCraig Topper; Make sure we select W version of addi on RV64. 62495c2d01dSKevin P. Nealdefine signext i32 @fcvt_s_w_demanded_bits(i32 signext %0, ptr %1) nounwind strictfp { 625b7b260e1SCraig Topper; RV32IF-LABEL: fcvt_s_w_demanded_bits: 626b7b260e1SCraig Topper; RV32IF: # %bb.0: 627b7b260e1SCraig Topper; RV32IF-NEXT: addi a0, a0, 1 6287b0c4184SCraig Topper; RV32IF-NEXT: fcvt.s.w fa5, a0 6297b0c4184SCraig Topper; RV32IF-NEXT: fsw fa5, 0(a1) 630b7b260e1SCraig Topper; RV32IF-NEXT: ret 631b7b260e1SCraig Topper; 632b7b260e1SCraig Topper; RV64IF-LABEL: fcvt_s_w_demanded_bits: 633b7b260e1SCraig Topper; RV64IF: # %bb.0: 634b7b260e1SCraig Topper; RV64IF-NEXT: addiw a0, a0, 1 6357b0c4184SCraig Topper; RV64IF-NEXT: fcvt.s.w fa5, a0 6367b0c4184SCraig Topper; RV64IF-NEXT: fsw fa5, 0(a1) 637b7b260e1SCraig Topper; RV64IF-NEXT: ret 638b7b260e1SCraig Topper; 639fe558efeSShao-Ce SUN; RV32IZFINX-LABEL: fcvt_s_w_demanded_bits: 640fe558efeSShao-Ce SUN; RV32IZFINX: # %bb.0: 641fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: addi a0, a0, 1 642fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: fcvt.s.w a2, a0 643fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: sw a2, 0(a1) 644fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: ret 645fe558efeSShao-Ce SUN; 646fe558efeSShao-Ce SUN; RV64IZFINX-LABEL: fcvt_s_w_demanded_bits: 647fe558efeSShao-Ce SUN; RV64IZFINX: # %bb.0: 648*0a4e1c51SCraig Topper; RV64IZFINX-NEXT: addiw a0, a0, 1 649*0a4e1c51SCraig Topper; RV64IZFINX-NEXT: fcvt.s.w a2, a0 650*0a4e1c51SCraig Topper; RV64IZFINX-NEXT: sw a2, 0(a1) 651fe558efeSShao-Ce SUN; RV64IZFINX-NEXT: ret 652fe558efeSShao-Ce SUN; 653b7b260e1SCraig Topper; RV32I-LABEL: fcvt_s_w_demanded_bits: 654b7b260e1SCraig Topper; RV32I: # %bb.0: 655b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, -16 656b7b260e1SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 657b7b260e1SCraig Topper; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 658b7b260e1SCraig Topper; RV32I-NEXT: sw s1, 4(sp) # 4-byte Folded Spill 659b7b260e1SCraig Topper; RV32I-NEXT: mv s0, a1 660b7b260e1SCraig Topper; RV32I-NEXT: addi s1, a0, 1 661b7b260e1SCraig Topper; RV32I-NEXT: mv a0, s1 662eabaee0cSFangrui Song; RV32I-NEXT: call __floatsisf 663b7b260e1SCraig Topper; RV32I-NEXT: sw a0, 0(s0) 664b7b260e1SCraig Topper; RV32I-NEXT: mv a0, s1 665b7b260e1SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 666b7b260e1SCraig Topper; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 667b7b260e1SCraig Topper; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload 668b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, 16 669b7b260e1SCraig Topper; RV32I-NEXT: ret 670b7b260e1SCraig Topper; 671b7b260e1SCraig Topper; RV64I-LABEL: fcvt_s_w_demanded_bits: 672b7b260e1SCraig Topper; RV64I: # %bb.0: 673b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, -32 674b7b260e1SCraig Topper; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill 675b7b260e1SCraig Topper; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill 676b7b260e1SCraig Topper; RV64I-NEXT: sd s1, 8(sp) # 8-byte Folded Spill 677b7b260e1SCraig Topper; RV64I-NEXT: mv s0, a1 678b7b260e1SCraig Topper; RV64I-NEXT: addiw s1, a0, 1 679b7b260e1SCraig Topper; RV64I-NEXT: mv a0, s1 680eabaee0cSFangrui Song; RV64I-NEXT: call __floatsisf 681b7b260e1SCraig Topper; RV64I-NEXT: sw a0, 0(s0) 682b7b260e1SCraig Topper; RV64I-NEXT: mv a0, s1 683b7b260e1SCraig Topper; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload 684b7b260e1SCraig Topper; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload 685b7b260e1SCraig Topper; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload 686b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, 32 687b7b260e1SCraig Topper; RV64I-NEXT: ret 688b7b260e1SCraig Topper %3 = add i32 %0, 1 68995c2d01dSKevin P. Neal %4 = call float @llvm.experimental.constrained.sitofp.f32.i32(i32 %3, metadata !"round.dynamic", metadata !"fpexcept.strict") 6901456b686SNikita Popov store float %4, ptr %1, align 4 691b7b260e1SCraig Topper ret i32 %3 692b7b260e1SCraig Topper} 693b7b260e1SCraig Topper 694b7b260e1SCraig Topper; Make sure we select W version of addi on RV64. 69595c2d01dSKevin P. Nealdefine signext i32 @fcvt_s_wu_demanded_bits(i32 signext %0, ptr %1) nounwind strictfp { 696b7b260e1SCraig Topper; RV32IF-LABEL: fcvt_s_wu_demanded_bits: 697b7b260e1SCraig Topper; RV32IF: # %bb.0: 698b7b260e1SCraig Topper; RV32IF-NEXT: addi a0, a0, 1 6997b0c4184SCraig Topper; RV32IF-NEXT: fcvt.s.wu fa5, a0 7007b0c4184SCraig Topper; RV32IF-NEXT: fsw fa5, 0(a1) 701b7b260e1SCraig Topper; RV32IF-NEXT: ret 702b7b260e1SCraig Topper; 703b7b260e1SCraig Topper; RV64IF-LABEL: fcvt_s_wu_demanded_bits: 704b7b260e1SCraig Topper; RV64IF: # %bb.0: 705b7b260e1SCraig Topper; RV64IF-NEXT: addiw a0, a0, 1 7067b0c4184SCraig Topper; RV64IF-NEXT: fcvt.s.wu fa5, a0 7077b0c4184SCraig Topper; RV64IF-NEXT: fsw fa5, 0(a1) 708b7b260e1SCraig Topper; RV64IF-NEXT: ret 709b7b260e1SCraig Topper; 710fe558efeSShao-Ce SUN; RV32IZFINX-LABEL: fcvt_s_wu_demanded_bits: 711fe558efeSShao-Ce SUN; RV32IZFINX: # %bb.0: 712fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: addi a0, a0, 1 713fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: fcvt.s.wu a2, a0 714fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: sw a2, 0(a1) 715fe558efeSShao-Ce SUN; RV32IZFINX-NEXT: ret 716fe558efeSShao-Ce SUN; 717fe558efeSShao-Ce SUN; RV64IZFINX-LABEL: fcvt_s_wu_demanded_bits: 718fe558efeSShao-Ce SUN; RV64IZFINX: # %bb.0: 719fe558efeSShao-Ce SUN; RV64IZFINX-NEXT: addiw a0, a0, 1 720fe558efeSShao-Ce SUN; RV64IZFINX-NEXT: fcvt.s.wu a2, a0 721fe558efeSShao-Ce SUN; RV64IZFINX-NEXT: sw a2, 0(a1) 722fe558efeSShao-Ce SUN; RV64IZFINX-NEXT: ret 723fe558efeSShao-Ce SUN; 724b7b260e1SCraig Topper; RV32I-LABEL: fcvt_s_wu_demanded_bits: 725b7b260e1SCraig Topper; RV32I: # %bb.0: 726b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, -16 727b7b260e1SCraig Topper; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 728b7b260e1SCraig Topper; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 729b7b260e1SCraig Topper; RV32I-NEXT: sw s1, 4(sp) # 4-byte Folded Spill 730b7b260e1SCraig Topper; RV32I-NEXT: mv s0, a1 731b7b260e1SCraig Topper; RV32I-NEXT: addi s1, a0, 1 732b7b260e1SCraig Topper; RV32I-NEXT: mv a0, s1 733eabaee0cSFangrui Song; RV32I-NEXT: call __floatunsisf 734b7b260e1SCraig Topper; RV32I-NEXT: sw a0, 0(s0) 735b7b260e1SCraig Topper; RV32I-NEXT: mv a0, s1 736b7b260e1SCraig Topper; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 737b7b260e1SCraig Topper; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 738b7b260e1SCraig Topper; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload 739b7b260e1SCraig Topper; RV32I-NEXT: addi sp, sp, 16 740b7b260e1SCraig Topper; RV32I-NEXT: ret 741b7b260e1SCraig Topper; 742b7b260e1SCraig Topper; RV64I-LABEL: fcvt_s_wu_demanded_bits: 743b7b260e1SCraig Topper; RV64I: # %bb.0: 744b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, -32 745b7b260e1SCraig Topper; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill 746b7b260e1SCraig Topper; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill 747b7b260e1SCraig Topper; RV64I-NEXT: sd s1, 8(sp) # 8-byte Folded Spill 748b7b260e1SCraig Topper; RV64I-NEXT: mv s0, a1 749b7b260e1SCraig Topper; RV64I-NEXT: addiw s1, a0, 1 750b7b260e1SCraig Topper; RV64I-NEXT: mv a0, s1 751eabaee0cSFangrui Song; RV64I-NEXT: call __floatunsisf 752b7b260e1SCraig Topper; RV64I-NEXT: sw a0, 0(s0) 753b7b260e1SCraig Topper; RV64I-NEXT: mv a0, s1 754b7b260e1SCraig Topper; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload 755b7b260e1SCraig Topper; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload 756b7b260e1SCraig Topper; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload 757b7b260e1SCraig Topper; RV64I-NEXT: addi sp, sp, 32 758b7b260e1SCraig Topper; RV64I-NEXT: ret 759b7b260e1SCraig Topper %3 = add i32 %0, 1 76095c2d01dSKevin P. Neal %4 = call float @llvm.experimental.constrained.uitofp.f32.i32(i32 %3, metadata !"round.dynamic", metadata !"fpexcept.strict") 7611456b686SNikita Popov store float %4, ptr %1, align 4 762b7b260e1SCraig Topper ret i32 %3 763b7b260e1SCraig Topper} 764