1768b0b4eSCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2768b0b4eSCraig Topper; RUN: llc -mtriple=riscv64 -target-abi=lp64 -verify-machineinstrs < %s \ 3768b0b4eSCraig Topper; RUN: -disable-strictnode-mutation | FileCheck %s -check-prefixes=CHECK,RV64I 4768b0b4eSCraig Topper; RUN: llc -mtriple=riscv64 -mattr=+f -target-abi=lp64f -verify-machineinstrs < %s \ 5768b0b4eSCraig Topper; RUN: -disable-strictnode-mutation | FileCheck %s -check-prefixes=CHECK,RV64IF 6768b0b4eSCraig Topper; RUN: llc -mtriple=riscv64 -mattr=+zfinx -target-abi=lp64 -verify-machineinstrs < %s \ 7768b0b4eSCraig Topper; RUN: -disable-strictnode-mutation | FileCheck %s -check-prefixes=CHECK,RV64IFINX 8768b0b4eSCraig Topper 9768b0b4eSCraig Topperdefine i128 @fptosi_f32_to_i128(float %a) nounwind strictfp { 10*73186546SCraig Topper; CHECK-LABEL: fptosi_f32_to_i128: 11*73186546SCraig Topper; CHECK: # %bb.0: 12*73186546SCraig Topper; CHECK-NEXT: addi sp, sp, -16 13*73186546SCraig Topper; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 14*73186546SCraig Topper; CHECK-NEXT: call __fixsfti 15*73186546SCraig Topper; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 16*73186546SCraig Topper; CHECK-NEXT: addi sp, sp, 16 17*73186546SCraig Topper; CHECK-NEXT: ret 18768b0b4eSCraig Topper %1 = call i128 @llvm.experimental.constrained.fptosi.i128.f32(float %a, metadata !"fpexcept.strict") 19768b0b4eSCraig Topper ret i128 %1 20768b0b4eSCraig Topper} 21768b0b4eSCraig Topper 22768b0b4eSCraig Topperdefine i128 @fptoui_f32_to_i128(float %a) nounwind strictfp { 23*73186546SCraig Topper; CHECK-LABEL: fptoui_f32_to_i128: 24*73186546SCraig Topper; CHECK: # %bb.0: 25*73186546SCraig Topper; CHECK-NEXT: addi sp, sp, -16 26*73186546SCraig Topper; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 27*73186546SCraig Topper; CHECK-NEXT: call __fixunssfti 28*73186546SCraig Topper; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 29*73186546SCraig Topper; CHECK-NEXT: addi sp, sp, 16 30*73186546SCraig Topper; CHECK-NEXT: ret 31768b0b4eSCraig Topper %1 = call i128 @llvm.experimental.constrained.fptoui.i128.f32(float %a, metadata !"fpexcept.strict") 32768b0b4eSCraig Topper ret i128 %1 33768b0b4eSCraig Topper} 34768b0b4eSCraig Topper 35768b0b4eSCraig Topperdefine float @sitofp_i128_to_f32(i128 %a) nounwind strictfp { 36768b0b4eSCraig Topper; CHECK-LABEL: sitofp_i128_to_f32: 37768b0b4eSCraig Topper; CHECK: # %bb.0: 38768b0b4eSCraig Topper; CHECK-NEXT: addi sp, sp, -16 39768b0b4eSCraig Topper; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 40768b0b4eSCraig Topper; CHECK-NEXT: call __floattisf 41768b0b4eSCraig Topper; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 42768b0b4eSCraig Topper; CHECK-NEXT: addi sp, sp, 16 43768b0b4eSCraig Topper; CHECK-NEXT: ret 44768b0b4eSCraig Topper %1 = call float @llvm.experimental.constrained.sitofp.f32.i128(i128 %a, metadata !"round.dynamic", metadata !"fpexcept.strict") 45768b0b4eSCraig Topper ret float %1 46768b0b4eSCraig Topper} 47768b0b4eSCraig Topper 48768b0b4eSCraig Topperdefine float @uitofp_i128_to_f32(i128 %a) nounwind strictfp { 49768b0b4eSCraig Topper; CHECK-LABEL: uitofp_i128_to_f32: 50768b0b4eSCraig Topper; CHECK: # %bb.0: 51768b0b4eSCraig Topper; CHECK-NEXT: addi sp, sp, -16 52768b0b4eSCraig Topper; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 53768b0b4eSCraig Topper; CHECK-NEXT: call __floatuntisf 54768b0b4eSCraig Topper; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 55768b0b4eSCraig Topper; CHECK-NEXT: addi sp, sp, 16 56768b0b4eSCraig Topper; CHECK-NEXT: ret 57768b0b4eSCraig Topper %1 = call float @llvm.experimental.constrained.uitofp.f32.i128(i128 %a, metadata !"round.dynamic", metadata !"fpexcept.strict") 58768b0b4eSCraig Topper ret float %1 59768b0b4eSCraig Topper} 60*73186546SCraig Topper;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: 61*73186546SCraig Topper; RV64I: {{.*}} 62*73186546SCraig Topper; RV64IF: {{.*}} 63*73186546SCraig Topper; RV64IFINX: {{.*}} 64