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