1*768b0b4eSCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*768b0b4eSCraig Topper; RUN: llc -mtriple=riscv64 -verify-machineinstrs -target-abi=lp64 \ 3*768b0b4eSCraig Topper; RUN: -disable-strictnode-mutation < %s | FileCheck %s -check-prefixes=CHECK,RV64I 4*768b0b4eSCraig Topper; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs -target-abi=lp64d \ 5*768b0b4eSCraig Topper; RUN: -disable-strictnode-mutation < %s | FileCheck %s -check-prefixes=CHECK,RV64ID 6*768b0b4eSCraig Topper; RUN: llc -mtriple=riscv64 -mattr=+zdinx -verify-machineinstrs -target-abi=lp64 \ 7*768b0b4eSCraig Topper; RUN: -disable-strictnode-mutation < %s | FileCheck %s -check-prefixes=CHECK,RV64IDINX 8*768b0b4eSCraig Topper 9*768b0b4eSCraig Topperdefine i128 @fptosi_f64_to_i128(double %a) nounwind strictfp { 10*768b0b4eSCraig Topper; CHECK-LABEL: fptosi_f64_to_i128: 11*768b0b4eSCraig Topper; CHECK: # %bb.0: 12*768b0b4eSCraig Topper; CHECK-NEXT: addi sp, sp, -16 13*768b0b4eSCraig Topper; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 14*768b0b4eSCraig Topper; CHECK-NEXT: call __fixdfti 15*768b0b4eSCraig Topper; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 16*768b0b4eSCraig Topper; CHECK-NEXT: addi sp, sp, 16 17*768b0b4eSCraig Topper; CHECK-NEXT: ret 18*768b0b4eSCraig Topper %1 = call i128 @llvm.experimental.constrained.fptosi.i128.f64(double %a, metadata !"fpexcept.strict") 19*768b0b4eSCraig Topper ret i128 %1 20*768b0b4eSCraig Topper} 21*768b0b4eSCraig Topper 22*768b0b4eSCraig Topperdefine i128 @fptoui_f64_to_i128(double %a) nounwind strictfp { 23*768b0b4eSCraig Topper; CHECK-LABEL: fptoui_f64_to_i128: 24*768b0b4eSCraig Topper; CHECK: # %bb.0: 25*768b0b4eSCraig Topper; CHECK-NEXT: addi sp, sp, -16 26*768b0b4eSCraig Topper; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 27*768b0b4eSCraig Topper; CHECK-NEXT: call __fixunsdfti 28*768b0b4eSCraig Topper; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 29*768b0b4eSCraig Topper; CHECK-NEXT: addi sp, sp, 16 30*768b0b4eSCraig Topper; CHECK-NEXT: ret 31*768b0b4eSCraig Topper %1 = call i128 @llvm.experimental.constrained.fptoui.i128.f64(double %a, metadata !"fpexcept.strict") 32*768b0b4eSCraig Topper ret i128 %1 33*768b0b4eSCraig Topper} 34*768b0b4eSCraig Topper 35*768b0b4eSCraig Topperdefine double @sitofp_i128_to_f64(i128 %a) nounwind strictfp { 36*768b0b4eSCraig Topper; CHECK-LABEL: sitofp_i128_to_f64: 37*768b0b4eSCraig Topper; CHECK: # %bb.0: 38*768b0b4eSCraig Topper; CHECK-NEXT: addi sp, sp, -16 39*768b0b4eSCraig Topper; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 40*768b0b4eSCraig Topper; CHECK-NEXT: call __floattidf 41*768b0b4eSCraig Topper; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 42*768b0b4eSCraig Topper; CHECK-NEXT: addi sp, sp, 16 43*768b0b4eSCraig Topper; CHECK-NEXT: ret 44*768b0b4eSCraig Topper %1 = call double @llvm.experimental.constrained.sitofp.f64.i128(i128 %a, metadata !"round.dynamic", metadata !"fpexcept.strict") 45*768b0b4eSCraig Topper ret double %1 46*768b0b4eSCraig Topper} 47*768b0b4eSCraig Topper 48*768b0b4eSCraig Topperdefine double @uitofp_i128_to_f64(i128 %a) nounwind strictfp { 49*768b0b4eSCraig Topper; CHECK-LABEL: uitofp_i128_to_f64: 50*768b0b4eSCraig Topper; CHECK: # %bb.0: 51*768b0b4eSCraig Topper; CHECK-NEXT: addi sp, sp, -16 52*768b0b4eSCraig Topper; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 53*768b0b4eSCraig Topper; CHECK-NEXT: call __floatuntidf 54*768b0b4eSCraig Topper; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 55*768b0b4eSCraig Topper; CHECK-NEXT: addi sp, sp, 16 56*768b0b4eSCraig Topper; CHECK-NEXT: ret 57*768b0b4eSCraig Topper %1 = call double @llvm.experimental.constrained.uitofp.f64.i128(i128 %a, metadata !"round.dynamic", metadata !"fpexcept.strict") 58*768b0b4eSCraig Topper ret double %1 59*768b0b4eSCraig Topper} 60*768b0b4eSCraig Topper;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: 61*768b0b4eSCraig Topper; RV64I: {{.*}} 62*768b0b4eSCraig Topper; RV64ID: {{.*}} 63*768b0b4eSCraig Topper; RV64IDINX: {{.*}} 64