[llvm] a9d5bb9 - [RISCV] Use __extendhfsf2/__truncsfhf2 for fp16 <-> fp32

Kito Cheng via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 28 08:01:08 PST 2022


Author: Kito Cheng
Date: 2022-01-29T00:01:00+08:00
New Revision: a9d5bb926d45e9464d539226e380ae6accc95952

URL: https://github.com/llvm/llvm-project/commit/a9d5bb926d45e9464d539226e380ae6accc95952
DIFF: https://github.com/llvm/llvm-project/commit/a9d5bb926d45e9464d539226e380ae6accc95952.diff

LOG: [RISCV] Use __extendhfsf2/__truncsfhf2 for fp16 <-> fp32

`__gnu_h2f_ieee` and `__gnu_f2h_ieee` are introduce by ARM and set that as
default name for fp16 and fp32 conversion in LLVM.

However RISC-V GCC using default naming scheme for that, which is
`__extendhfsf2` and `__truncsfhf2` for that, that cause runtime ABI
incompatible issue.

Although we didn't have formal runtime ABI spec to specify those naming
convention yet, but I think it would be great to fix the incompatible
issue first.

And I've plan to create a runtime ABI spec undere psABI spec this year.

Reviewed By: asb

Differential Revision: https://reviews.llvm.org/D118207

Added: 
    

Modified: 
    llvm/lib/Target/RISCV/RISCVISelLowering.cpp
    llvm/test/CodeGen/RISCV/calling-conv-half.ll
    llvm/test/CodeGen/RISCV/copysign-casts.ll
    llvm/test/CodeGen/RISCV/fp16-promote.ll
    llvm/test/CodeGen/RISCV/fpclamptosat.ll
    llvm/test/CodeGen/RISCV/fpclamptosat_vec.ll
    llvm/test/CodeGen/RISCV/half-arith.ll
    llvm/test/CodeGen/RISCV/half-convert.ll
    llvm/test/CodeGen/RISCV/half-intrinsics.ll
    llvm/test/CodeGen/RISCV/rv32i-rv64i-half.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
index bf8533d1fc36b..89dc4271d0a72 100644
--- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
+++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
@@ -1082,6 +1082,9 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
     setTargetDAGCombine(ISD::SHL);
     setTargetDAGCombine(ISD::STORE);
   }
+
+  setLibcallName(RTLIB::FPEXT_F16_F32, "__extendhfsf2");
+  setLibcallName(RTLIB::FPROUND_F32_F16, "__truncsfhf2");
 }
 
 EVT RISCVTargetLowering::getSetCCResultType(const DataLayout &DL,

diff  --git a/llvm/test/CodeGen/RISCV/calling-conv-half.ll b/llvm/test/CodeGen/RISCV/calling-conv-half.ll
index d0a60ca7a4695..d14877a8aa959 100644
--- a/llvm/test/CodeGen/RISCV/calling-conv-half.ll
+++ b/llvm/test/CodeGen/RISCV/calling-conv-half.ll
@@ -21,7 +21,7 @@ define i32 @callee_half_in_regs(i32 %a, half %b) nounwind {
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    slli a0, a1, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call __fixsfsi at plt
 ; RV32I-NEXT:    add a0, s0, a0
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
@@ -37,7 +37,7 @@ define i32 @callee_half_in_regs(i32 %a, half %b) nounwind {
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    slli a0, a1, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call __fixsfdi at plt
 ; RV64I-NEXT:    addw a0, s0, a0
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
@@ -52,7 +52,7 @@ define i32 @callee_half_in_regs(i32 %a, half %b) nounwind {
 ; RV32IF-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
 ; RV32IF-NEXT:    mv s0, a0
 ; RV32IF-NEXT:    mv a0, a1
-; RV32IF-NEXT:    call __gnu_h2f_ieee at plt
+; RV32IF-NEXT:    call __extendhfsf2 at plt
 ; RV32IF-NEXT:    fmv.w.x ft0, a0
 ; RV32IF-NEXT:    fcvt.w.s a0, ft0, rtz
 ; RV32IF-NEXT:    add a0, s0, a0
@@ -68,7 +68,7 @@ define i32 @callee_half_in_regs(i32 %a, half %b) nounwind {
 ; RV64IF-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill
 ; RV64IF-NEXT:    mv s0, a0
 ; RV64IF-NEXT:    mv a0, a1
-; RV64IF-NEXT:    call __gnu_h2f_ieee at plt
+; RV64IF-NEXT:    call __extendhfsf2 at plt
 ; RV64IF-NEXT:    fmv.w.x ft0, a0
 ; RV64IF-NEXT:    fcvt.l.s a0, ft0, rtz
 ; RV64IF-NEXT:    addw a0, s0, a0
@@ -84,7 +84,7 @@ define i32 @callee_half_in_regs(i32 %a, half %b) nounwind {
 ; RV32-ILP32F-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
 ; RV32-ILP32F-NEXT:    mv s0, a0
 ; RV32-ILP32F-NEXT:    fmv.x.w a0, fa0
-; RV32-ILP32F-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-ILP32F-NEXT:    call __extendhfsf2 at plt
 ; RV32-ILP32F-NEXT:    fcvt.w.s a0, fa0, rtz
 ; RV32-ILP32F-NEXT:    add a0, s0, a0
 ; RV32-ILP32F-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
@@ -99,7 +99,7 @@ define i32 @callee_half_in_regs(i32 %a, half %b) nounwind {
 ; RV64-LP64F-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill
 ; RV64-LP64F-NEXT:    mv s0, a0
 ; RV64-LP64F-NEXT:    fmv.x.w a0, fa0
-; RV64-LP64F-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-LP64F-NEXT:    call __extendhfsf2 at plt
 ; RV64-LP64F-NEXT:    fcvt.l.s a0, fa0, rtz
 ; RV64-LP64F-NEXT:    addw a0, s0, a0
 ; RV64-LP64F-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
@@ -114,7 +114,7 @@ define i32 @callee_half_in_regs(i32 %a, half %b) nounwind {
 ; RV32-ILP32ZFHMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
 ; RV32-ILP32ZFHMIN-NEXT:    mv s0, a0
 ; RV32-ILP32ZFHMIN-NEXT:    fmv.x.w a0, fa0
-; RV32-ILP32ZFHMIN-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-ILP32ZFHMIN-NEXT:    call __extendhfsf2 at plt
 ; RV32-ILP32ZFHMIN-NEXT:    fcvt.w.s a0, fa0, rtz
 ; RV32-ILP32ZFHMIN-NEXT:    add a0, s0, a0
 ; RV32-ILP32ZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
@@ -129,7 +129,7 @@ define i32 @callee_half_in_regs(i32 %a, half %b) nounwind {
 ; RV64-LP64ZFHMIN-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill
 ; RV64-LP64ZFHMIN-NEXT:    mv s0, a0
 ; RV64-LP64ZFHMIN-NEXT:    fmv.x.w a0, fa0
-; RV64-LP64ZFHMIN-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-LP64ZFHMIN-NEXT:    call __extendhfsf2 at plt
 ; RV64-LP64ZFHMIN-NEXT:    fcvt.l.s a0, fa0, rtz
 ; RV64-LP64ZFHMIN-NEXT:    addw a0, s0, a0
 ; RV64-LP64ZFHMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
@@ -247,7 +247,7 @@ define i32 @callee_half_on_stack(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f,
 ; RV32I-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    lhu a0, 16(sp)
 ; RV32I-NEXT:    mv s0, a7
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call __fixsfsi at plt
 ; RV32I-NEXT:    add a0, s0, a0
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
@@ -262,7 +262,7 @@ define i32 @callee_half_on_stack(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f,
 ; RV64I-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    lhu a0, 16(sp)
 ; RV64I-NEXT:    mv s0, a7
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call __fixsfdi at plt
 ; RV64I-NEXT:    addw a0, s0, a0
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
@@ -277,7 +277,7 @@ define i32 @callee_half_on_stack(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f,
 ; RV32IF-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
 ; RV32IF-NEXT:    lhu a0, 16(sp)
 ; RV32IF-NEXT:    mv s0, a7
-; RV32IF-NEXT:    call __gnu_h2f_ieee at plt
+; RV32IF-NEXT:    call __extendhfsf2 at plt
 ; RV32IF-NEXT:    fmv.w.x ft0, a0
 ; RV32IF-NEXT:    fcvt.w.s a0, ft0, rtz
 ; RV32IF-NEXT:    add a0, s0, a0
@@ -293,7 +293,7 @@ define i32 @callee_half_on_stack(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f,
 ; RV64IF-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill
 ; RV64IF-NEXT:    lhu a0, 16(sp)
 ; RV64IF-NEXT:    mv s0, a7
-; RV64IF-NEXT:    call __gnu_h2f_ieee at plt
+; RV64IF-NEXT:    call __extendhfsf2 at plt
 ; RV64IF-NEXT:    fmv.w.x ft0, a0
 ; RV64IF-NEXT:    fcvt.l.s a0, ft0, rtz
 ; RV64IF-NEXT:    addw a0, s0, a0
@@ -309,7 +309,7 @@ define i32 @callee_half_on_stack(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f,
 ; RV32-ILP32F-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
 ; RV32-ILP32F-NEXT:    mv s0, a7
 ; RV32-ILP32F-NEXT:    fmv.x.w a0, fa0
-; RV32-ILP32F-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-ILP32F-NEXT:    call __extendhfsf2 at plt
 ; RV32-ILP32F-NEXT:    fcvt.w.s a0, fa0, rtz
 ; RV32-ILP32F-NEXT:    add a0, s0, a0
 ; RV32-ILP32F-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
@@ -324,7 +324,7 @@ define i32 @callee_half_on_stack(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f,
 ; RV64-LP64F-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill
 ; RV64-LP64F-NEXT:    mv s0, a7
 ; RV64-LP64F-NEXT:    fmv.x.w a0, fa0
-; RV64-LP64F-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-LP64F-NEXT:    call __extendhfsf2 at plt
 ; RV64-LP64F-NEXT:    fcvt.l.s a0, fa0, rtz
 ; RV64-LP64F-NEXT:    addw a0, s0, a0
 ; RV64-LP64F-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
@@ -339,7 +339,7 @@ define i32 @callee_half_on_stack(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f,
 ; RV32-ILP32ZFHMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
 ; RV32-ILP32ZFHMIN-NEXT:    mv s0, a7
 ; RV32-ILP32ZFHMIN-NEXT:    fmv.x.w a0, fa0
-; RV32-ILP32ZFHMIN-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-ILP32ZFHMIN-NEXT:    call __extendhfsf2 at plt
 ; RV32-ILP32ZFHMIN-NEXT:    fcvt.w.s a0, fa0, rtz
 ; RV32-ILP32ZFHMIN-NEXT:    add a0, s0, a0
 ; RV32-ILP32ZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
@@ -354,7 +354,7 @@ define i32 @callee_half_on_stack(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f,
 ; RV64-LP64ZFHMIN-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill
 ; RV64-LP64ZFHMIN-NEXT:    mv s0, a7
 ; RV64-LP64ZFHMIN-NEXT:    fmv.x.w a0, fa0
-; RV64-LP64ZFHMIN-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-LP64ZFHMIN-NEXT:    call __extendhfsf2 at plt
 ; RV64-LP64ZFHMIN-NEXT:    fcvt.l.s a0, fa0, rtz
 ; RV64-LP64ZFHMIN-NEXT:    addw a0, s0, a0
 ; RV64-LP64ZFHMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
@@ -586,7 +586,7 @@ define i32 @caller_half_ret() nounwind {
 ; RV32I-NEXT:    call callee_half_ret at plt
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call __fixsfsi at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
@@ -599,7 +599,7 @@ define i32 @caller_half_ret() nounwind {
 ; RV64I-NEXT:    call callee_half_ret at plt
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call __fixsfdi at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
@@ -610,7 +610,7 @@ define i32 @caller_half_ret() nounwind {
 ; RV32IF-NEXT:    addi sp, sp, -16
 ; RV32IF-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32IF-NEXT:    call callee_half_ret at plt
-; RV32IF-NEXT:    call __gnu_h2f_ieee at plt
+; RV32IF-NEXT:    call __extendhfsf2 at plt
 ; RV32IF-NEXT:    fmv.w.x ft0, a0
 ; RV32IF-NEXT:    fcvt.w.s a0, ft0, rtz
 ; RV32IF-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
@@ -622,7 +622,7 @@ define i32 @caller_half_ret() nounwind {
 ; RV64IF-NEXT:    addi sp, sp, -16
 ; RV64IF-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64IF-NEXT:    call callee_half_ret at plt
-; RV64IF-NEXT:    call __gnu_h2f_ieee at plt
+; RV64IF-NEXT:    call __extendhfsf2 at plt
 ; RV64IF-NEXT:    fmv.w.x ft0, a0
 ; RV64IF-NEXT:    fcvt.l.s a0, ft0, rtz
 ; RV64IF-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
@@ -635,7 +635,7 @@ define i32 @caller_half_ret() nounwind {
 ; RV32-ILP32F-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32-ILP32F-NEXT:    call callee_half_ret at plt
 ; RV32-ILP32F-NEXT:    fmv.x.w a0, fa0
-; RV32-ILP32F-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-ILP32F-NEXT:    call __extendhfsf2 at plt
 ; RV32-ILP32F-NEXT:    fcvt.w.s a0, fa0, rtz
 ; RV32-ILP32F-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32-ILP32F-NEXT:    addi sp, sp, 16
@@ -647,7 +647,7 @@ define i32 @caller_half_ret() nounwind {
 ; RV64-LP64F-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64-LP64F-NEXT:    call callee_half_ret at plt
 ; RV64-LP64F-NEXT:    fmv.x.w a0, fa0
-; RV64-LP64F-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-LP64F-NEXT:    call __extendhfsf2 at plt
 ; RV64-LP64F-NEXT:    fcvt.l.s a0, fa0, rtz
 ; RV64-LP64F-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64-LP64F-NEXT:    addi sp, sp, 16
@@ -659,7 +659,7 @@ define i32 @caller_half_ret() nounwind {
 ; RV32-ILP32ZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32-ILP32ZFHMIN-NEXT:    call callee_half_ret at plt
 ; RV32-ILP32ZFHMIN-NEXT:    fmv.x.w a0, fa0
-; RV32-ILP32ZFHMIN-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-ILP32ZFHMIN-NEXT:    call __extendhfsf2 at plt
 ; RV32-ILP32ZFHMIN-NEXT:    fcvt.w.s a0, fa0, rtz
 ; RV32-ILP32ZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32-ILP32ZFHMIN-NEXT:    addi sp, sp, 16
@@ -671,7 +671,7 @@ define i32 @caller_half_ret() nounwind {
 ; RV64-LP64ZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64-LP64ZFHMIN-NEXT:    call callee_half_ret at plt
 ; RV64-LP64ZFHMIN-NEXT:    fmv.x.w a0, fa0
-; RV64-LP64ZFHMIN-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-LP64ZFHMIN-NEXT:    call __extendhfsf2 at plt
 ; RV64-LP64ZFHMIN-NEXT:    fcvt.l.s a0, fa0, rtz
 ; RV64-LP64ZFHMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64-LP64ZFHMIN-NEXT:    addi sp, sp, 16

diff  --git a/llvm/test/CodeGen/RISCV/copysign-casts.ll b/llvm/test/CodeGen/RISCV/copysign-casts.ll
index aecb40ec39429..01ddd45783038 100644
--- a/llvm/test/CodeGen/RISCV/copysign-casts.ll
+++ b/llvm/test/CodeGen/RISCV/copysign-casts.ll
@@ -133,7 +133,7 @@ define double @fold_promote_d_h(double %a, half %b) nounwind {
 ; RV32IFD-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill
 ; RV32IFD-NEXT:    fmv.d fs0, fa0
 ; RV32IFD-NEXT:    fmv.x.w a0, fa1
-; RV32IFD-NEXT:    call __gnu_h2f_ieee at plt
+; RV32IFD-NEXT:    call __extendhfsf2 at plt
 ; RV32IFD-NEXT:    fcvt.d.s ft0, fa0
 ; RV32IFD-NEXT:    fsgnj.d fa0, fs0, ft0
 ; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
@@ -148,7 +148,7 @@ define double @fold_promote_d_h(double %a, half %b) nounwind {
 ; RV64IFD-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill
 ; RV64IFD-NEXT:    fmv.d fs0, fa0
 ; RV64IFD-NEXT:    fmv.x.w a0, fa1
-; RV64IFD-NEXT:    call __gnu_h2f_ieee at plt
+; RV64IFD-NEXT:    call __extendhfsf2 at plt
 ; RV64IFD-NEXT:    fcvt.d.s ft0, fa0
 ; RV64IFD-NEXT:    fsgnj.d fa0, fs0, ft0
 ; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
@@ -211,7 +211,7 @@ define float @fold_promote_f_h(float %a, half %b) nounwind {
 ; RV32IF-NEXT:    fsw fs0, 8(sp) # 4-byte Folded Spill
 ; RV32IF-NEXT:    fmv.s fs0, fa0
 ; RV32IF-NEXT:    fmv.x.w a0, fa1
-; RV32IF-NEXT:    call __gnu_h2f_ieee at plt
+; RV32IF-NEXT:    call __extendhfsf2 at plt
 ; RV32IF-NEXT:    fsgnj.s fa0, fs0, fa0
 ; RV32IF-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32IF-NEXT:    flw fs0, 8(sp) # 4-byte Folded Reload
@@ -225,7 +225,7 @@ define float @fold_promote_f_h(float %a, half %b) nounwind {
 ; RV32IFD-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill
 ; RV32IFD-NEXT:    fmv.s fs0, fa0
 ; RV32IFD-NEXT:    fmv.x.w a0, fa1
-; RV32IFD-NEXT:    call __gnu_h2f_ieee at plt
+; RV32IFD-NEXT:    call __extendhfsf2 at plt
 ; RV32IFD-NEXT:    fsgnj.s fa0, fs0, fa0
 ; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32IFD-NEXT:    fld fs0, 0(sp) # 8-byte Folded Reload
@@ -239,7 +239,7 @@ define float @fold_promote_f_h(float %a, half %b) nounwind {
 ; RV64IFD-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill
 ; RV64IFD-NEXT:    fmv.s fs0, fa0
 ; RV64IFD-NEXT:    fmv.x.w a0, fa1
-; RV64IFD-NEXT:    call __gnu_h2f_ieee at plt
+; RV64IFD-NEXT:    call __extendhfsf2 at plt
 ; RV64IFD-NEXT:    fsgnj.s fa0, fs0, fa0
 ; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64IFD-NEXT:    fld fs0, 0(sp) # 8-byte Folded Reload

diff  --git a/llvm/test/CodeGen/RISCV/fp16-promote.ll b/llvm/test/CodeGen/RISCV/fp16-promote.ll
index 6bb39b27db820..08fa21fbf0dee 100644
--- a/llvm/test/CodeGen/RISCV/fp16-promote.ll
+++ b/llvm/test/CodeGen/RISCV/fp16-promote.ll
@@ -18,7 +18,7 @@ define float @test_fpextend_float(half* %p) nounwind {
 ; CHECK-NEXT:    addi sp, sp, -16
 ; CHECK-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; CHECK-NEXT:    lhu a0, 0(a0)
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; CHECK-NEXT:    addi sp, sp, 16
 ; CHECK-NEXT:    ret
@@ -33,7 +33,7 @@ define double @test_fpextend_double(half* %p) nounwind {
 ; CHECK-NEXT:    addi sp, sp, -16
 ; CHECK-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; CHECK-NEXT:    lhu a0, 0(a0)
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    fcvt.d.s fa0, fa0
 ; CHECK-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; CHECK-NEXT:    addi sp, sp, 16
@@ -50,7 +50,7 @@ define void @test_fptrunc_float(float %f, half* %p) nounwind {
 ; CHECK-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; CHECK-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
 ; CHECK-NEXT:    mv s0, a0
-; CHECK-NEXT:    call __gnu_f2h_ieee at plt
+; CHECK-NEXT:    call __truncsfhf2 at plt
 ; CHECK-NEXT:    sh a0, 0(s0)
 ; CHECK-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; CHECK-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
@@ -90,12 +90,12 @@ define void @test_fadd(half* %p, half* %q) nounwind {
 ; CHECK-NEXT:    mv s0, a0
 ; CHECK-NEXT:    lhu s1, 0(a0)
 ; CHECK-NEXT:    lhu a0, 0(a1)
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    fmv.s fs0, fa0
 ; CHECK-NEXT:    mv a0, s1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    fadd.s fa0, fa0, fs0
-; CHECK-NEXT:    call __gnu_f2h_ieee at plt
+; CHECK-NEXT:    call __truncsfhf2 at plt
 ; CHECK-NEXT:    sh a0, 0(s0)
 ; CHECK-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; CHECK-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
@@ -121,12 +121,12 @@ define void @test_fmul(half* %p, half* %q) nounwind {
 ; CHECK-NEXT:    mv s0, a0
 ; CHECK-NEXT:    lhu s1, 0(a0)
 ; CHECK-NEXT:    lhu a0, 0(a1)
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    fmv.s fs0, fa0
 ; CHECK-NEXT:    mv a0, s1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    fmul.s fa0, fa0, fs0
-; CHECK-NEXT:    call __gnu_f2h_ieee at plt
+; CHECK-NEXT:    call __truncsfhf2 at plt
 ; CHECK-NEXT:    sh a0, 0(s0)
 ; CHECK-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; CHECK-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload

diff  --git a/llvm/test/CodeGen/RISCV/fpclamptosat.ll b/llvm/test/CodeGen/RISCV/fpclamptosat.ll
index 4643048232d85..fdbec8d727d54 100644
--- a/llvm/test/CodeGen/RISCV/fpclamptosat.ll
+++ b/llvm/test/CodeGen/RISCV/fpclamptosat.ll
@@ -413,7 +413,7 @@ define i32 @stest_f16i32(half %x) {
 ; RV32-NEXT:    .cfi_def_cfa_offset 16
 ; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-NEXT:    call __extendhfsf2 at plt
 ; RV32-NEXT:    call __fixsfdi at plt
 ; RV32-NEXT:    lui a2, 524288
 ; RV32-NEXT:    addi a3, a2, -1
@@ -451,7 +451,7 @@ define i32 @stest_f16i32(half %x) {
 ; RV64-NEXT:    .cfi_def_cfa_offset 16
 ; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64-NEXT:    .cfi_offset ra, -8
-; RV64-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-NEXT:    call __extendhfsf2 at plt
 ; RV64-NEXT:    fmv.w.x ft0, a0
 ; RV64-NEXT:    fcvt.l.s a0, ft0, rtz
 ; RV64-NEXT:    lui a1, 524288
@@ -484,7 +484,7 @@ define i32 @utesth_f16i32(half %x) {
 ; RV32-NEXT:    .cfi_def_cfa_offset 16
 ; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-NEXT:    call __extendhfsf2 at plt
 ; RV32-NEXT:    call __fixunssfdi at plt
 ; RV32-NEXT:    beqz a1, .LBB7_2
 ; RV32-NEXT:  # %bb.1: # %entry
@@ -508,7 +508,7 @@ define i32 @utesth_f16i32(half %x) {
 ; RV64-NEXT:    .cfi_def_cfa_offset 16
 ; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64-NEXT:    .cfi_offset ra, -8
-; RV64-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-NEXT:    call __extendhfsf2 at plt
 ; RV64-NEXT:    fmv.w.x ft0, a0
 ; RV64-NEXT:    fcvt.lu.s a0, ft0, rtz
 ; RV64-NEXT:    li a1, -1
@@ -535,7 +535,7 @@ define i32 @ustest_f16i32(half %x) {
 ; RV32-NEXT:    .cfi_def_cfa_offset 16
 ; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-NEXT:    call __extendhfsf2 at plt
 ; RV32-NEXT:    call __fixsfdi at plt
 ; RV32-NEXT:    beqz a1, .LBB8_2
 ; RV32-NEXT:  # %bb.1: # %entry
@@ -571,7 +571,7 @@ define i32 @ustest_f16i32(half %x) {
 ; RV64-NEXT:    .cfi_def_cfa_offset 16
 ; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64-NEXT:    .cfi_offset ra, -8
-; RV64-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-NEXT:    call __extendhfsf2 at plt
 ; RV64-NEXT:    fmv.w.x ft0, a0
 ; RV64-NEXT:    fcvt.l.s a0, ft0, rtz
 ; RV64-NEXT:    li a1, -1
@@ -999,7 +999,7 @@ define i16 @stest_f16i16(half %x) {
 ; RV32-NEXT:    .cfi_def_cfa_offset 16
 ; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-NEXT:    call __extendhfsf2 at plt
 ; RV32-NEXT:    fmv.w.x ft0, a0
 ; RV32-NEXT:    fcvt.w.s a0, ft0, rtz
 ; RV32-NEXT:    lui a1, 8
@@ -1023,7 +1023,7 @@ define i16 @stest_f16i16(half %x) {
 ; RV64-NEXT:    .cfi_def_cfa_offset 16
 ; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64-NEXT:    .cfi_offset ra, -8
-; RV64-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-NEXT:    call __extendhfsf2 at plt
 ; RV64-NEXT:    fmv.w.x ft0, a0
 ; RV64-NEXT:    fcvt.l.s a0, ft0, rtz
 ; RV64-NEXT:    lui a1, 8
@@ -1057,7 +1057,7 @@ define i16 @utesth_f16i16(half %x) {
 ; RV32-NEXT:    .cfi_def_cfa_offset 16
 ; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-NEXT:    call __extendhfsf2 at plt
 ; RV32-NEXT:    fmv.w.x ft0, a0
 ; RV32-NEXT:    fcvt.wu.s a0, ft0, rtz
 ; RV32-NEXT:    lui a1, 16
@@ -1076,7 +1076,7 @@ define i16 @utesth_f16i16(half %x) {
 ; RV64-NEXT:    .cfi_def_cfa_offset 16
 ; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64-NEXT:    .cfi_offset ra, -8
-; RV64-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-NEXT:    call __extendhfsf2 at plt
 ; RV64-NEXT:    fmv.w.x ft0, a0
 ; RV64-NEXT:    fcvt.lu.s a0, ft0, rtz
 ; RV64-NEXT:    lui a1, 16
@@ -1103,7 +1103,7 @@ define i16 @ustest_f16i16(half %x) {
 ; RV32-NEXT:    .cfi_def_cfa_offset 16
 ; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-NEXT:    call __extendhfsf2 at plt
 ; RV32-NEXT:    fmv.w.x ft0, a0
 ; RV32-NEXT:    fcvt.w.s a0, ft0, rtz
 ; RV32-NEXT:    lui a1, 16
@@ -1126,7 +1126,7 @@ define i16 @ustest_f16i16(half %x) {
 ; RV64-NEXT:    .cfi_def_cfa_offset 16
 ; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64-NEXT:    .cfi_offset ra, -8
-; RV64-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-NEXT:    call __extendhfsf2 at plt
 ; RV64-NEXT:    fmv.w.x ft0, a0
 ; RV64-NEXT:    fcvt.l.s a0, ft0, rtz
 ; RV64-NEXT:    lui a1, 16
@@ -1687,7 +1687,7 @@ define i64 @stest_f16i64(half %x) {
 ; RV32-NEXT:    .cfi_def_cfa_offset 32
 ; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-NEXT:    call __extendhfsf2 at plt
 ; RV32-NEXT:    mv a1, a0
 ; RV32-NEXT:    addi a0, sp, 8
 ; RV32-NEXT:    call __fixsfti at plt
@@ -1748,7 +1748,7 @@ define i64 @stest_f16i64(half %x) {
 ; RV64-NEXT:    .cfi_def_cfa_offset 16
 ; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64-NEXT:    .cfi_offset ra, -8
-; RV64-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-NEXT:    call __extendhfsf2 at plt
 ; RV64-NEXT:    call __fixsfti at plt
 ; RV64-NEXT:    li a2, -1
 ; RV64-NEXT:    srli a3, a2, 1
@@ -1796,7 +1796,7 @@ define i64 @utesth_f16i64(half %x) {
 ; RV32-NEXT:    .cfi_def_cfa_offset 32
 ; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-NEXT:    call __extendhfsf2 at plt
 ; RV32-NEXT:    mv a1, a0
 ; RV32-NEXT:    addi a0, sp, 8
 ; RV32-NEXT:    call __fixunssfti at plt
@@ -1835,7 +1835,7 @@ define i64 @utesth_f16i64(half %x) {
 ; RV64-NEXT:    .cfi_def_cfa_offset 16
 ; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64-NEXT:    .cfi_offset ra, -8
-; RV64-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-NEXT:    call __extendhfsf2 at plt
 ; RV64-NEXT:    call __fixunssfti at plt
 ; RV64-NEXT:    beqz a1, .LBB25_2
 ; RV64-NEXT:  # %bb.1: # %entry
@@ -1859,7 +1859,7 @@ define i64 @ustest_f16i64(half %x) {
 ; RV32-NEXT:    .cfi_def_cfa_offset 32
 ; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-NEXT:    call __extendhfsf2 at plt
 ; RV32-NEXT:    mv a1, a0
 ; RV32-NEXT:    addi a0, sp, 8
 ; RV32-NEXT:    call __fixsfti at plt
@@ -1923,7 +1923,7 @@ define i64 @ustest_f16i64(half %x) {
 ; RV64-NEXT:    .cfi_def_cfa_offset 16
 ; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64-NEXT:    .cfi_offset ra, -8
-; RV64-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-NEXT:    call __extendhfsf2 at plt
 ; RV64-NEXT:    call __fixsfti at plt
 ; RV64-NEXT:    blez a1, .LBB26_2
 ; RV64-NEXT:  # %bb.1: # %entry
@@ -2364,7 +2364,7 @@ define i32 @stest_f16i32_mm(half %x) {
 ; RV32-NEXT:    .cfi_def_cfa_offset 16
 ; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-NEXT:    call __extendhfsf2 at plt
 ; RV32-NEXT:    call __fixsfdi at plt
 ; RV32-NEXT:    lui a2, 524288
 ; RV32-NEXT:    addi a4, a2, -1
@@ -2418,7 +2418,7 @@ define i32 @stest_f16i32_mm(half %x) {
 ; RV64-NEXT:    .cfi_def_cfa_offset 16
 ; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64-NEXT:    .cfi_offset ra, -8
-; RV64-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-NEXT:    call __extendhfsf2 at plt
 ; RV64-NEXT:    fmv.w.x ft0, a0
 ; RV64-NEXT:    fcvt.l.s a0, ft0, rtz
 ; RV64-NEXT:    lui a1, 524288
@@ -2449,7 +2449,7 @@ define i32 @utesth_f16i32_mm(half %x) {
 ; RV32-NEXT:    .cfi_def_cfa_offset 16
 ; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-NEXT:    call __extendhfsf2 at plt
 ; RV32-NEXT:    call __fixunssfdi at plt
 ; RV32-NEXT:    beqz a1, .LBB34_2
 ; RV32-NEXT:  # %bb.1: # %entry
@@ -2465,7 +2465,7 @@ define i32 @utesth_f16i32_mm(half %x) {
 ; RV64-NEXT:    .cfi_def_cfa_offset 16
 ; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64-NEXT:    .cfi_offset ra, -8
-; RV64-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-NEXT:    call __extendhfsf2 at plt
 ; RV64-NEXT:    fmv.w.x ft0, a0
 ; RV64-NEXT:    fcvt.lu.s a0, ft0, rtz
 ; RV64-NEXT:    li a1, -1
@@ -2491,7 +2491,7 @@ define i32 @ustest_f16i32_mm(half %x) {
 ; RV32-NEXT:    .cfi_def_cfa_offset 16
 ; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-NEXT:    call __extendhfsf2 at plt
 ; RV32-NEXT:    call __fixsfdi at plt
 ; RV32-NEXT:    mv a2, a0
 ; RV32-NEXT:    bgez a1, .LBB35_7
@@ -2531,7 +2531,7 @@ define i32 @ustest_f16i32_mm(half %x) {
 ; RV64-NEXT:    .cfi_def_cfa_offset 16
 ; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64-NEXT:    .cfi_offset ra, -8
-; RV64-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-NEXT:    call __extendhfsf2 at plt
 ; RV64-NEXT:    fmv.w.x ft0, a0
 ; RV64-NEXT:    fcvt.l.s a0, ft0, rtz
 ; RV64-NEXT:    li a1, -1
@@ -2947,7 +2947,7 @@ define i16 @stest_f16i16_mm(half %x) {
 ; RV32-NEXT:    .cfi_def_cfa_offset 16
 ; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-NEXT:    call __extendhfsf2 at plt
 ; RV32-NEXT:    fmv.w.x ft0, a0
 ; RV32-NEXT:    fcvt.w.s a0, ft0, rtz
 ; RV32-NEXT:    lui a1, 8
@@ -2971,7 +2971,7 @@ define i16 @stest_f16i16_mm(half %x) {
 ; RV64-NEXT:    .cfi_def_cfa_offset 16
 ; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64-NEXT:    .cfi_offset ra, -8
-; RV64-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-NEXT:    call __extendhfsf2 at plt
 ; RV64-NEXT:    fmv.w.x ft0, a0
 ; RV64-NEXT:    fcvt.l.s a0, ft0, rtz
 ; RV64-NEXT:    lui a1, 8
@@ -3003,7 +3003,7 @@ define i16 @utesth_f16i16_mm(half %x) {
 ; RV32-NEXT:    .cfi_def_cfa_offset 16
 ; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-NEXT:    call __extendhfsf2 at plt
 ; RV32-NEXT:    fmv.w.x ft0, a0
 ; RV32-NEXT:    fcvt.wu.s a0, ft0, rtz
 ; RV32-NEXT:    lui a1, 16
@@ -3022,7 +3022,7 @@ define i16 @utesth_f16i16_mm(half %x) {
 ; RV64-NEXT:    .cfi_def_cfa_offset 16
 ; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64-NEXT:    .cfi_offset ra, -8
-; RV64-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-NEXT:    call __extendhfsf2 at plt
 ; RV64-NEXT:    fmv.w.x ft0, a0
 ; RV64-NEXT:    fcvt.lu.s a0, ft0, rtz
 ; RV64-NEXT:    sext.w a0, a0
@@ -3049,7 +3049,7 @@ define i16 @ustest_f16i16_mm(half %x) {
 ; RV32-NEXT:    .cfi_def_cfa_offset 16
 ; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-NEXT:    call __extendhfsf2 at plt
 ; RV32-NEXT:    fmv.w.x ft0, a0
 ; RV32-NEXT:    fcvt.w.s a0, ft0, rtz
 ; RV32-NEXT:    lui a1, 16
@@ -3072,7 +3072,7 @@ define i16 @ustest_f16i16_mm(half %x) {
 ; RV64-NEXT:    .cfi_def_cfa_offset 16
 ; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64-NEXT:    .cfi_offset ra, -8
-; RV64-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-NEXT:    call __extendhfsf2 at plt
 ; RV64-NEXT:    fmv.w.x ft0, a0
 ; RV64-NEXT:    fcvt.l.s a0, ft0, rtz
 ; RV64-NEXT:    lui a1, 16
@@ -3901,7 +3901,7 @@ define i64 @stest_f16i64_mm(half %x) {
 ; RV32-NEXT:    .cfi_def_cfa_offset 32
 ; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-NEXT:    call __extendhfsf2 at plt
 ; RV32-NEXT:    mv a1, a0
 ; RV32-NEXT:    addi a0, sp, 8
 ; RV32-NEXT:    call __fixsfti at plt
@@ -4019,7 +4019,7 @@ define i64 @stest_f16i64_mm(half %x) {
 ; RV64-NEXT:    .cfi_def_cfa_offset 16
 ; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64-NEXT:    .cfi_offset ra, -8
-; RV64-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-NEXT:    call __extendhfsf2 at plt
 ; RV64-NEXT:    call __fixsfti at plt
 ; RV64-NEXT:    li a2, -1
 ; RV64-NEXT:    srli a4, a2, 1
@@ -4079,7 +4079,7 @@ define i64 @utesth_f16i64_mm(half %x) {
 ; RV32-NEXT:    .cfi_def_cfa_offset 32
 ; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-NEXT:    call __extendhfsf2 at plt
 ; RV32-NEXT:    mv a1, a0
 ; RV32-NEXT:    addi a0, sp, 8
 ; RV32-NEXT:    call __fixunssfti at plt
@@ -4127,7 +4127,7 @@ define i64 @utesth_f16i64_mm(half %x) {
 ; RV64-NEXT:    .cfi_def_cfa_offset 16
 ; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64-NEXT:    .cfi_offset ra, -8
-; RV64-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-NEXT:    call __extendhfsf2 at plt
 ; RV64-NEXT:    call __fixunssfti at plt
 ; RV64-NEXT:    mv a2, a0
 ; RV64-NEXT:    li a0, 0
@@ -4157,7 +4157,7 @@ define i64 @ustest_f16i64_mm(half %x) {
 ; RV32-NEXT:    .cfi_def_cfa_offset 32
 ; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    call __gnu_h2f_ieee at plt
+; RV32-NEXT:    call __extendhfsf2 at plt
 ; RV32-NEXT:    mv a1, a0
 ; RV32-NEXT:    addi a0, sp, 8
 ; RV32-NEXT:    call __fixsfti at plt
@@ -4269,7 +4269,7 @@ define i64 @ustest_f16i64_mm(half %x) {
 ; RV64-NEXT:    .cfi_def_cfa_offset 16
 ; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64-NEXT:    .cfi_offset ra, -8
-; RV64-NEXT:    call __gnu_h2f_ieee at plt
+; RV64-NEXT:    call __extendhfsf2 at plt
 ; RV64-NEXT:    call __fixsfti at plt
 ; RV64-NEXT:    mv a2, a0
 ; RV64-NEXT:    li a4, 1

diff  --git a/llvm/test/CodeGen/RISCV/fpclamptosat_vec.ll b/llvm/test/CodeGen/RISCV/fpclamptosat_vec.ll
index 33dd10ad52013..229e9e3106bbc 100644
--- a/llvm/test/CodeGen/RISCV/fpclamptosat_vec.ll
+++ b/llvm/test/CodeGen/RISCV/fpclamptosat_vec.ll
@@ -316,20 +316,20 @@ define <4 x i32> @stest_f16i32(<4 x half> %x) {
 ; CHECK-NEXT:    lhu a1, 16(a1)
 ; CHECK-NEXT:    mv s0, a0
 ; CHECK-NEXT:    mv a0, a1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s4, a0
 ; CHECK-NEXT:    mv a0, s3
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s3, a0
 ; CHECK-NEXT:    mv a0, s1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s1, a0
 ; CHECK-NEXT:    fmv.w.x ft0, s3
 ; CHECK-NEXT:    fsw ft0, 12(sp) # 4-byte Folded Spill
 ; CHECK-NEXT:    fmv.w.x ft0, s4
 ; CHECK-NEXT:    fcvt.l.s s3, ft0, rtz
 ; CHECK-NEXT:    mv a0, s2
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    fmv.w.x ft0, a0
 ; CHECK-NEXT:    fcvt.l.s a0, ft0, rtz
 ; CHECK-NEXT:    lui a1, 524288
@@ -423,20 +423,20 @@ define <4 x i32> @utesth_f16i32(<4 x half> %x) {
 ; CHECK-NEXT:    lhu a1, 8(a1)
 ; CHECK-NEXT:    mv s0, a0
 ; CHECK-NEXT:    mv a0, a1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s4, a0
 ; CHECK-NEXT:    mv a0, s3
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s3, a0
 ; CHECK-NEXT:    mv a0, s1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s1, a0
 ; CHECK-NEXT:    fmv.w.x ft0, s3
 ; CHECK-NEXT:    fsw ft0, 12(sp) # 4-byte Folded Spill
 ; CHECK-NEXT:    fmv.w.x ft0, s4
 ; CHECK-NEXT:    fcvt.lu.s s3, ft0, rtz
 ; CHECK-NEXT:    mv a0, s2
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    fmv.w.x ft0, a0
 ; CHECK-NEXT:    fcvt.lu.s a0, ft0, rtz
 ; CHECK-NEXT:    li a1, -1
@@ -508,20 +508,20 @@ define <4 x i32> @ustest_f16i32(<4 x half> %x) {
 ; CHECK-NEXT:    lhu a1, 16(a1)
 ; CHECK-NEXT:    mv s0, a0
 ; CHECK-NEXT:    mv a0, a1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s4, a0
 ; CHECK-NEXT:    mv a0, s3
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s3, a0
 ; CHECK-NEXT:    mv a0, s1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s1, a0
 ; CHECK-NEXT:    fmv.w.x ft0, s3
 ; CHECK-NEXT:    fsw ft0, 12(sp) # 4-byte Folded Spill
 ; CHECK-NEXT:    fmv.w.x ft0, s4
 ; CHECK-NEXT:    fcvt.l.s s3, ft0, rtz
 ; CHECK-NEXT:    mv a0, s2
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    fmv.w.x ft0, a0
 ; CHECK-NEXT:    fcvt.l.s a0, ft0, rtz
 ; CHECK-NEXT:    li a1, -1
@@ -923,32 +923,32 @@ define <8 x i16> @stest_f16i16(<8 x half> %x) {
 ; CHECK-NEXT:    lhu a1, 48(a1)
 ; CHECK-NEXT:    mv s0, a0
 ; CHECK-NEXT:    mv a0, a1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s8, a0
 ; CHECK-NEXT:    mv a0, s7
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s7, a0
 ; CHECK-NEXT:    mv a0, s5
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s5, a0
 ; CHECK-NEXT:    mv a0, s4
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s4, a0
 ; CHECK-NEXT:    mv a0, s3
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s3, a0
 ; CHECK-NEXT:    mv a0, s2
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s2, a0
 ; CHECK-NEXT:    mv a0, s1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s1, a0
 ; CHECK-NEXT:    fmv.w.x ft0, s7
 ; CHECK-NEXT:    fsw ft0, 12(sp) # 4-byte Folded Spill
 ; CHECK-NEXT:    fmv.w.x ft0, s8
 ; CHECK-NEXT:    fcvt.l.s s7, ft0, rtz
 ; CHECK-NEXT:    mv a0, s6
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    fmv.w.x ft0, a0
 ; CHECK-NEXT:    fcvt.l.s a0, ft0, rtz
 ; CHECK-NEXT:    lui a1, 8
@@ -1108,32 +1108,32 @@ define <8 x i16> @utesth_f16i16(<8 x half> %x) {
 ; CHECK-NEXT:    lhu a1, 8(a1)
 ; CHECK-NEXT:    mv s0, a0
 ; CHECK-NEXT:    mv a0, a1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s8, a0
 ; CHECK-NEXT:    mv a0, s7
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s7, a0
 ; CHECK-NEXT:    mv a0, s5
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s5, a0
 ; CHECK-NEXT:    mv a0, s4
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s4, a0
 ; CHECK-NEXT:    mv a0, s3
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s3, a0
 ; CHECK-NEXT:    mv a0, s2
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s2, a0
 ; CHECK-NEXT:    mv a0, s1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s1, a0
 ; CHECK-NEXT:    fmv.w.x ft0, s7
 ; CHECK-NEXT:    fsw ft0, 12(sp) # 4-byte Folded Spill
 ; CHECK-NEXT:    fmv.w.x ft0, s8
 ; CHECK-NEXT:    fcvt.lu.s s7, ft0, rtz
 ; CHECK-NEXT:    mv a0, s6
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    fmv.w.x ft0, a0
 ; CHECK-NEXT:    fcvt.lu.s a0, ft0, rtz
 ; CHECK-NEXT:    lui a1, 16
@@ -1249,32 +1249,32 @@ define <8 x i16> @ustest_f16i16(<8 x half> %x) {
 ; CHECK-NEXT:    lhu a1, 48(a1)
 ; CHECK-NEXT:    mv s0, a0
 ; CHECK-NEXT:    mv a0, a1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s8, a0
 ; CHECK-NEXT:    mv a0, s7
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s7, a0
 ; CHECK-NEXT:    mv a0, s5
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s5, a0
 ; CHECK-NEXT:    mv a0, s4
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s4, a0
 ; CHECK-NEXT:    mv a0, s3
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s3, a0
 ; CHECK-NEXT:    mv a0, s2
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s2, a0
 ; CHECK-NEXT:    mv a0, s1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s1, a0
 ; CHECK-NEXT:    fmv.w.x ft0, s7
 ; CHECK-NEXT:    fsw ft0, 12(sp) # 4-byte Folded Spill
 ; CHECK-NEXT:    fmv.w.x ft0, s8
 ; CHECK-NEXT:    fcvt.l.s s7, ft0, rtz
 ; CHECK-NEXT:    mv a0, s6
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    fmv.w.x ft0, a0
 ; CHECK-NEXT:    fcvt.l.s a0, ft0, rtz
 ; CHECK-NEXT:    lui a1, 16
@@ -1835,12 +1835,12 @@ define <2 x i64> @stest_f16i64(<2 x half> %x) {
 ; CHECK-NEXT:    .cfi_offset s1, -24
 ; CHECK-NEXT:    .cfi_offset s2, -32
 ; CHECK-NEXT:    mv s2, a1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    call __fixsfti at plt
 ; CHECK-NEXT:    mv s0, a0
 ; CHECK-NEXT:    mv s1, a1
 ; CHECK-NEXT:    mv a0, s2
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    call __fixsfti at plt
 ; CHECK-NEXT:    mv a2, a0
 ; CHECK-NEXT:    li a0, -1
@@ -1925,12 +1925,12 @@ define <2 x i64> @utesth_f16i64(<2 x half> %x) {
 ; CHECK-NEXT:    .cfi_offset s2, -32
 ; CHECK-NEXT:    mv s2, a0
 ; CHECK-NEXT:    mv a0, a1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    call __fixunssfti at plt
 ; CHECK-NEXT:    mv s0, a0
 ; CHECK-NEXT:    mv s1, a1
 ; CHECK-NEXT:    mv a0, s2
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    call __fixunssfti at plt
 ; CHECK-NEXT:    beqz a1, .LBB25_2
 ; CHECK-NEXT:  # %bb.1: # %entry
@@ -1970,12 +1970,12 @@ define <2 x i64> @ustest_f16i64(<2 x half> %x) {
 ; CHECK-NEXT:    .cfi_offset s2, -32
 ; CHECK-NEXT:    mv s2, a0
 ; CHECK-NEXT:    mv a0, a1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    call __fixsfti at plt
 ; CHECK-NEXT:    mv s0, a0
 ; CHECK-NEXT:    mv s1, a1
 ; CHECK-NEXT:    mv a0, s2
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    call __fixsfti at plt
 ; CHECK-NEXT:    mv a2, a1
 ; CHECK-NEXT:    bgtz a1, .LBB26_7
@@ -2345,20 +2345,20 @@ define <4 x i32> @stest_f16i32_mm(<4 x half> %x) {
 ; CHECK-NEXT:    lhu a1, 16(a1)
 ; CHECK-NEXT:    mv s0, a0
 ; CHECK-NEXT:    mv a0, a1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s4, a0
 ; CHECK-NEXT:    mv a0, s3
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s3, a0
 ; CHECK-NEXT:    mv a0, s1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s1, a0
 ; CHECK-NEXT:    fmv.w.x ft0, s3
 ; CHECK-NEXT:    fsw ft0, 12(sp) # 4-byte Folded Spill
 ; CHECK-NEXT:    fmv.w.x ft0, s4
 ; CHECK-NEXT:    fcvt.l.s s3, ft0, rtz
 ; CHECK-NEXT:    mv a0, s2
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    fmv.w.x ft0, a0
 ; CHECK-NEXT:    fcvt.l.s a0, ft0, rtz
 ; CHECK-NEXT:    lui a1, 524288
@@ -2450,20 +2450,20 @@ define <4 x i32> @utesth_f16i32_mm(<4 x half> %x) {
 ; CHECK-NEXT:    lhu a1, 8(a1)
 ; CHECK-NEXT:    mv s0, a0
 ; CHECK-NEXT:    mv a0, a1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s4, a0
 ; CHECK-NEXT:    mv a0, s3
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s3, a0
 ; CHECK-NEXT:    mv a0, s1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s1, a0
 ; CHECK-NEXT:    fmv.w.x ft0, s3
 ; CHECK-NEXT:    fsw ft0, 12(sp) # 4-byte Folded Spill
 ; CHECK-NEXT:    fmv.w.x ft0, s4
 ; CHECK-NEXT:    fcvt.lu.s s3, ft0, rtz
 ; CHECK-NEXT:    mv a0, s2
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    fmv.w.x ft0, a0
 ; CHECK-NEXT:    fcvt.lu.s a0, ft0, rtz
 ; CHECK-NEXT:    li a1, -1
@@ -2534,20 +2534,20 @@ define <4 x i32> @ustest_f16i32_mm(<4 x half> %x) {
 ; CHECK-NEXT:    lhu a1, 16(a1)
 ; CHECK-NEXT:    mv s0, a0
 ; CHECK-NEXT:    mv a0, a1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s4, a0
 ; CHECK-NEXT:    mv a0, s3
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s3, a0
 ; CHECK-NEXT:    mv a0, s1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s1, a0
 ; CHECK-NEXT:    fmv.w.x ft0, s3
 ; CHECK-NEXT:    fsw ft0, 12(sp) # 4-byte Folded Spill
 ; CHECK-NEXT:    fmv.w.x ft0, s4
 ; CHECK-NEXT:    fcvt.l.s s3, ft0, rtz
 ; CHECK-NEXT:    mv a0, s2
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    fmv.w.x ft0, a0
 ; CHECK-NEXT:    fcvt.l.s a0, ft0, rtz
 ; CHECK-NEXT:    li a1, -1
@@ -2937,32 +2937,32 @@ define <8 x i16> @stest_f16i16_mm(<8 x half> %x) {
 ; CHECK-NEXT:    lhu a1, 48(a1)
 ; CHECK-NEXT:    mv s0, a0
 ; CHECK-NEXT:    mv a0, a1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s8, a0
 ; CHECK-NEXT:    mv a0, s7
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s7, a0
 ; CHECK-NEXT:    mv a0, s5
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s5, a0
 ; CHECK-NEXT:    mv a0, s4
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s4, a0
 ; CHECK-NEXT:    mv a0, s3
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s3, a0
 ; CHECK-NEXT:    mv a0, s2
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s2, a0
 ; CHECK-NEXT:    mv a0, s1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s1, a0
 ; CHECK-NEXT:    fmv.w.x ft0, s7
 ; CHECK-NEXT:    fsw ft0, 12(sp) # 4-byte Folded Spill
 ; CHECK-NEXT:    fmv.w.x ft0, s8
 ; CHECK-NEXT:    fcvt.l.s s7, ft0, rtz
 ; CHECK-NEXT:    mv a0, s6
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    fmv.w.x ft0, a0
 ; CHECK-NEXT:    fcvt.l.s a0, ft0, rtz
 ; CHECK-NEXT:    lui a1, 8
@@ -3120,25 +3120,25 @@ define <8 x i16> @utesth_f16i16_mm(<8 x half> %x) {
 ; CHECK-NEXT:    lhu a1, 8(a1)
 ; CHECK-NEXT:    mv s0, a0
 ; CHECK-NEXT:    mv a0, a1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s8, a0
 ; CHECK-NEXT:    mv a0, s7
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s7, a0
 ; CHECK-NEXT:    mv a0, s6
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s6, a0
 ; CHECK-NEXT:    mv a0, s4
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s4, a0
 ; CHECK-NEXT:    mv a0, s3
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s3, a0
 ; CHECK-NEXT:    mv a0, s2
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s2, a0
 ; CHECK-NEXT:    mv a0, s1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s1, a0
 ; CHECK-NEXT:    fmv.w.x ft0, s6
 ; CHECK-NEXT:    fsw ft0, 12(sp) # 4-byte Folded Spill
@@ -3148,7 +3148,7 @@ define <8 x i16> @utesth_f16i16_mm(<8 x half> %x) {
 ; CHECK-NEXT:    fcvt.lu.s a0, ft0, rtz
 ; CHECK-NEXT:    sext.w s6, a0
 ; CHECK-NEXT:    mv a0, s5
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    fmv.w.x ft0, a0
 ; CHECK-NEXT:    fcvt.lu.s a0, ft0, rtz
 ; CHECK-NEXT:    sext.w a0, a0
@@ -3268,32 +3268,32 @@ define <8 x i16> @ustest_f16i16_mm(<8 x half> %x) {
 ; CHECK-NEXT:    lhu a1, 48(a1)
 ; CHECK-NEXT:    mv s0, a0
 ; CHECK-NEXT:    mv a0, a1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s8, a0
 ; CHECK-NEXT:    mv a0, s7
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s7, a0
 ; CHECK-NEXT:    mv a0, s5
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s5, a0
 ; CHECK-NEXT:    mv a0, s4
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s4, a0
 ; CHECK-NEXT:    mv a0, s3
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s3, a0
 ; CHECK-NEXT:    mv a0, s2
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s2, a0
 ; CHECK-NEXT:    mv a0, s1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    mv s1, a0
 ; CHECK-NEXT:    fmv.w.x ft0, s7
 ; CHECK-NEXT:    fsw ft0, 12(sp) # 4-byte Folded Spill
 ; CHECK-NEXT:    fmv.w.x ft0, s8
 ; CHECK-NEXT:    fcvt.l.s s7, ft0, rtz
 ; CHECK-NEXT:    mv a0, s6
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    fmv.w.x ft0, a0
 ; CHECK-NEXT:    fcvt.l.s a0, ft0, rtz
 ; CHECK-NEXT:    lui a1, 16
@@ -3966,12 +3966,12 @@ define <2 x i64> @stest_f16i64_mm(<2 x half> %x) {
 ; CHECK-NEXT:    .cfi_offset s1, -24
 ; CHECK-NEXT:    .cfi_offset s2, -32
 ; CHECK-NEXT:    mv s2, a1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    call __fixsfti at plt
 ; CHECK-NEXT:    mv s0, a0
 ; CHECK-NEXT:    mv s1, a1
 ; CHECK-NEXT:    mv a0, s2
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    call __fixsfti at plt
 ; CHECK-NEXT:    mv a2, a0
 ; CHECK-NEXT:    li a0, -1
@@ -4084,12 +4084,12 @@ define <2 x i64> @utesth_f16i64_mm(<2 x half> %x) {
 ; CHECK-NEXT:    .cfi_offset s2, -32
 ; CHECK-NEXT:    mv s2, a0
 ; CHECK-NEXT:    mv a0, a1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    call __fixunssfti at plt
 ; CHECK-NEXT:    mv s0, a0
 ; CHECK-NEXT:    mv s1, a1
 ; CHECK-NEXT:    mv a0, s2
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    call __fixunssfti at plt
 ; CHECK-NEXT:    mv a2, a0
 ; CHECK-NEXT:    mv a3, a1
@@ -4142,12 +4142,12 @@ define <2 x i64> @ustest_f16i64_mm(<2 x half> %x) {
 ; CHECK-NEXT:    .cfi_offset s1, -24
 ; CHECK-NEXT:    .cfi_offset s2, -32
 ; CHECK-NEXT:    mv s2, a1
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    call __fixsfti at plt
 ; CHECK-NEXT:    mv s0, a0
 ; CHECK-NEXT:    mv s1, a1
 ; CHECK-NEXT:    mv a0, s2
-; CHECK-NEXT:    call __gnu_h2f_ieee at plt
+; CHECK-NEXT:    call __extendhfsf2 at plt
 ; CHECK-NEXT:    call __fixsfti at plt
 ; CHECK-NEXT:    mv a2, a1
 ; CHECK-NEXT:    li a5, 1

diff  --git a/llvm/test/CodeGen/RISCV/half-arith.ll b/llvm/test/CodeGen/RISCV/half-arith.ll
index 02e87dc3883ed..6b80404d8d7c4 100644
--- a/llvm/test/CodeGen/RISCV/half-arith.ll
+++ b/llvm/test/CodeGen/RISCV/half-arith.ll
@@ -35,14 +35,14 @@ define half @fadd_s(half %a, half %b) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s2, a1, -1
 ; RV32I-NEXT:    and a0, a0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
@@ -61,14 +61,14 @@ define half @fadd_s(half %a, half %b) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s2, a1, -1
 ; RV64I-NEXT:    and a0, a0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
@@ -101,14 +101,14 @@ define half @fsub_s(half %a, half %b) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s2, a1, -1
 ; RV32I-NEXT:    and a0, a0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    call __subsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
@@ -127,14 +127,14 @@ define half @fsub_s(half %a, half %b) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s2, a1, -1
 ; RV64I-NEXT:    and a0, a0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    call __subsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
@@ -167,14 +167,14 @@ define half @fmul_s(half %a, half %b) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s2, a1, -1
 ; RV32I-NEXT:    and a0, a0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    call __mulsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
@@ -193,14 +193,14 @@ define half @fmul_s(half %a, half %b) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s2, a1, -1
 ; RV64I-NEXT:    and a0, a0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    call __mulsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
@@ -233,14 +233,14 @@ define half @fdiv_s(half %a, half %b) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s2, a1, -1
 ; RV32I-NEXT:    and a0, a0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    call __divsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
@@ -259,14 +259,14 @@ define half @fdiv_s(half %a, half %b) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s2, a1, -1
 ; RV64I-NEXT:    and a0, a0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    call __divsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
@@ -296,9 +296,9 @@ define half @fsqrt_s(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call sqrtf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -309,9 +309,9 @@ define half @fsqrt_s(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call sqrtf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -379,18 +379,18 @@ define i32 @fneg_s(half %a, half %b) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s1, a1, -1
 ; RV32I-NEXT:    and a0, a0, s1
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    and a0, a0, s1
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    lui a0, 524288
 ; RV32I-NEXT:    xor a0, s0, a0
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    and a0, a0, s1
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s0
 ; RV32I-NEXT:    call __eqsf2 at plt
@@ -410,18 +410,18 @@ define i32 @fneg_s(half %a, half %b) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s1, a1, -1
 ; RV64I-NEXT:    and a0, a0, s1
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    and a0, a0, s1
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    lui a0, 524288
 ; RV64I-NEXT:    xor a0, s0, a0
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    and a0, a0, s1
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s0
 ; RV64I-NEXT:    call __eqsf2 at plt
@@ -466,19 +466,19 @@ define half @fsgnjn_s(half %a, half %b) nounwind {
 ; RV32I-NEXT:    lui a0, 16
 ; RV32I-NEXT:    addi s3, a0, -1
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s2, a0
 ; RV32I-NEXT:    and a0, s0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s2
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    and a0, a0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    lui a1, 524288
 ; RV32I-NEXT:    xor a0, a0, a1
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lui a1, 1048568
 ; RV32I-NEXT:    and a0, a0, a1
 ; RV32I-NEXT:    slli a1, s1, 17
@@ -505,19 +505,19 @@ define half @fsgnjn_s(half %a, half %b) nounwind {
 ; RV64I-NEXT:    lui a0, 16
 ; RV64I-NEXT:    addiw s3, a0, -1
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s2, a0
 ; RV64I-NEXT:    and a0, s0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s2
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    and a0, a0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    lui a1, 524288
 ; RV64I-NEXT:    xor a0, a0, a1
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    lui a1, 1048568
 ; RV64I-NEXT:    and a0, a0, a1
 ; RV64I-NEXT:    slli a1, s1, 49
@@ -566,25 +566,25 @@ define half @fabs_s(half %a, half %b) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s2, a1, -1
 ; RV32I-NEXT:    and a0, a0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    and a0, a0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    slli a0, a0, 1
 ; RV32I-NEXT:    srli a0, a0, 1
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    and a0, a0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, s0
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
@@ -603,25 +603,25 @@ define half @fabs_s(half %a, half %b) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s2, a1, -1
 ; RV64I-NEXT:    and a0, a0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    and a0, a0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    slli a0, a0, 33
 ; RV64I-NEXT:    srli a0, a0, 33
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    and a0, a0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, s0
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
@@ -658,14 +658,14 @@ define half @fmin_s(half %a, half %b) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s2, a1, -1
 ; RV32I-NEXT:    and a0, a0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    call fminf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
@@ -684,14 +684,14 @@ define half @fmin_s(half %a, half %b) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s2, a1, -1
 ; RV64I-NEXT:    and a0, a0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    call fminf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
@@ -726,14 +726,14 @@ define half @fmax_s(half %a, half %b) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s2, a1, -1
 ; RV32I-NEXT:    and a0, a0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    call fmaxf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
@@ -752,14 +752,14 @@ define half @fmax_s(half %a, half %b) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s2, a1, -1
 ; RV64I-NEXT:    and a0, a0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    call fmaxf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
@@ -796,18 +796,18 @@ define half @fmadd_s(half %a, half %b, half %c) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s3, a1, -1
 ; RV32I-NEXT:    and a0, a0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s2, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a2, a0
 ; RV32I-NEXT:    mv a0, s2
 ; RV32I-NEXT:    mv a1, s1
 ; RV32I-NEXT:    call fmaf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
@@ -829,18 +829,18 @@ define half @fmadd_s(half %a, half %b, half %c) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s3, a1, -1
 ; RV64I-NEXT:    and a0, a0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s2, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a2, a0
 ; RV64I-NEXT:    mv a0, s2
 ; RV64I-NEXT:    mv a1, s1
 ; RV64I-NEXT:    call fmaf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
@@ -880,29 +880,29 @@ define half @fmsub_s(half %a, half %b, half %c) nounwind {
 ; RV32I-NEXT:    lui a0, 16
 ; RV32I-NEXT:    addi s3, a0, -1
 ; RV32I-NEXT:    and a0, a2, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    li a1, 0
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    and a0, a0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    lui a1, 524288
 ; RV32I-NEXT:    xor a0, a0, a1
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s2, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    and a0, s2, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a2, a0
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    mv a1, s0
 ; RV32I-NEXT:    call fmaf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
@@ -924,29 +924,29 @@ define half @fmsub_s(half %a, half %b, half %c) nounwind {
 ; RV64I-NEXT:    lui a0, 16
 ; RV64I-NEXT:    addiw s3, a0, -1
 ; RV64I-NEXT:    and a0, a2, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    li a1, 0
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    and a0, a0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    lui a1, 524288
 ; RV64I-NEXT:    xor a0, a0, a1
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s2, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    and a0, s2, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a2, a0
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    mv a1, s0
 ; RV64I-NEXT:    call fmaf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
@@ -991,41 +991,41 @@ define half @fnmadd_s(half %a, half %b, half %c) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s3, a1, -1
 ; RV32I-NEXT:    and a0, a0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    li a1, 0
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s2, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    li a1, 0
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s2, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    lui s4, 524288
 ; RV32I-NEXT:    xor a0, a0, s4
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s2, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    xor a0, a0, s4
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    and a0, s2, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s2, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a2, a0
 ; RV32I-NEXT:    mv a0, s2
 ; RV32I-NEXT:    mv a1, s0
 ; RV32I-NEXT:    call fmaf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
@@ -1049,41 +1049,41 @@ define half @fnmadd_s(half %a, half %b, half %c) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s3, a1, -1
 ; RV64I-NEXT:    and a0, a0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    li a1, 0
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s2, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    li a1, 0
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s2, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    lui s4, 524288
 ; RV64I-NEXT:    xor a0, a0, s4
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s2, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    xor a0, a0, s4
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    and a0, s2, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s2, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a2, a0
 ; RV64I-NEXT:    mv a0, s2
 ; RV64I-NEXT:    mv a1, s0
 ; RV64I-NEXT:    call fmaf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
@@ -1131,41 +1131,41 @@ define half @fnmadd_s_2(half %a, half %b, half %c) nounwind {
 ; RV32I-NEXT:    lui a0, 16
 ; RV32I-NEXT:    addi s3, a0, -1
 ; RV32I-NEXT:    and a0, a1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    li a1, 0
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s2, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    li a1, 0
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s2, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    lui s4, 524288
 ; RV32I-NEXT:    xor a0, a0, s4
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s2, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    xor a0, a0, s4
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    and a0, s2, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s2, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a2, a0
 ; RV32I-NEXT:    mv a0, s0
 ; RV32I-NEXT:    mv a1, s2
 ; RV32I-NEXT:    call fmaf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
@@ -1189,41 +1189,41 @@ define half @fnmadd_s_2(half %a, half %b, half %c) nounwind {
 ; RV64I-NEXT:    lui a0, 16
 ; RV64I-NEXT:    addiw s3, a0, -1
 ; RV64I-NEXT:    and a0, a1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    li a1, 0
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s2, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    li a1, 0
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s2, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    lui s4, 524288
 ; RV64I-NEXT:    xor a0, a0, s4
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s2, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    xor a0, a0, s4
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    and a0, s2, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s2, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a2, a0
 ; RV64I-NEXT:    mv a0, s0
 ; RV64I-NEXT:    mv a1, s2
 ; RV64I-NEXT:    call fmaf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
@@ -1268,28 +1268,28 @@ define half @fnmsub_s(half %a, half %b, half %c) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s3, a1, -1
 ; RV32I-NEXT:    and a0, a0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    li a1, 0
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    and a0, a0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    lui a1, 524288
 ; RV32I-NEXT:    xor a0, a0, a1
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s2, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    and a0, s2, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, s1
 ; RV32I-NEXT:    mv a2, s0
 ; RV32I-NEXT:    call fmaf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
@@ -1311,28 +1311,28 @@ define half @fnmsub_s(half %a, half %b, half %c) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s3, a1, -1
 ; RV64I-NEXT:    and a0, a0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    li a1, 0
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    and a0, a0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    lui a1, 524288
 ; RV64I-NEXT:    xor a0, a0, a1
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s2, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    and a0, s2, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, s1
 ; RV64I-NEXT:    mv a2, s0
 ; RV64I-NEXT:    call fmaf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
@@ -1374,29 +1374,29 @@ define half @fnmsub_s_2(half %a, half %b, half %c) nounwind {
 ; RV32I-NEXT:    lui a0, 16
 ; RV32I-NEXT:    addi s3, a0, -1
 ; RV32I-NEXT:    and a0, a1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    li a1, 0
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    and a0, a0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    lui a1, 524288
 ; RV32I-NEXT:    xor a0, a0, a1
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s2, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    and a0, s2, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    mv a2, s0
 ; RV32I-NEXT:    call fmaf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
@@ -1418,29 +1418,29 @@ define half @fnmsub_s_2(half %a, half %b, half %c) nounwind {
 ; RV64I-NEXT:    lui a0, 16
 ; RV64I-NEXT:    addiw s3, a0, -1
 ; RV64I-NEXT:    and a0, a1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    li a1, 0
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    and a0, a0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    lui a1, 524288
 ; RV64I-NEXT:    xor a0, a0, a1
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s2, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    and a0, s2, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    mv a2, s0
 ; RV64I-NEXT:    call fmaf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
@@ -1478,23 +1478,23 @@ define half @fmadd_s_contract(half %a, half %b, half %c) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s3, a1, -1
 ; RV32I-NEXT:    and a0, a0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s2, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s2
 ; RV32I-NEXT:    call __mulsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, s0
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
@@ -1516,23 +1516,23 @@ define half @fmadd_s_contract(half %a, half %b, half %c) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s3, a1, -1
 ; RV64I-NEXT:    and a0, a0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s2, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s2
 ; RV64I-NEXT:    call __mulsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, s0
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
@@ -1573,29 +1573,29 @@ define half @fmsub_s_contract(half %a, half %b, half %c) nounwind {
 ; RV32I-NEXT:    lui a0, 16
 ; RV32I-NEXT:    addi s3, a0, -1
 ; RV32I-NEXT:    and a0, a2, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    li a1, 0
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s2, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    call __mulsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    and a0, a0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    and a0, s2, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s0
 ; RV32I-NEXT:    call __subsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
@@ -1617,29 +1617,29 @@ define half @fmsub_s_contract(half %a, half %b, half %c) nounwind {
 ; RV64I-NEXT:    lui a0, 16
 ; RV64I-NEXT:    addiw s3, a0, -1
 ; RV64I-NEXT:    and a0, a2, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    li a1, 0
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s2, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    call __mulsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    and a0, a0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    and a0, s2, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s0
 ; RV64I-NEXT:    call __subsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
@@ -1685,46 +1685,46 @@ define half @fnmadd_s_contract(half %a, half %b, half %c) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s3, a1, -1
 ; RV32I-NEXT:    and a0, a0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    li a1, 0
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s2, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    li a1, 0
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    li a1, 0
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    and a0, s2, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s2, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s2
 ; RV32I-NEXT:    call __mulsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    and a0, a0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    lui a1, 524288
 ; RV32I-NEXT:    xor a0, a0, a1
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, s0
 ; RV32I-NEXT:    call __subsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
@@ -1746,46 +1746,46 @@ define half @fnmadd_s_contract(half %a, half %b, half %c) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s3, a1, -1
 ; RV64I-NEXT:    and a0, a0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    li a1, 0
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s2, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    li a1, 0
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    li a1, 0
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    and a0, s2, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s2, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s2
 ; RV64I-NEXT:    call __mulsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    and a0, a0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    lui a1, 524288
 ; RV64I-NEXT:    xor a0, a0, a1
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, s0
 ; RV64I-NEXT:    call __subsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
@@ -1832,36 +1832,36 @@ define half @fnmsub_s_contract(half %a, half %b, half %c) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s3, a1, -1
 ; RV32I-NEXT:    and a0, a0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    li a1, 0
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s2, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    li a1, 0
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s2, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s2, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s2
 ; RV32I-NEXT:    call __mulsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s0
 ; RV32I-NEXT:    call __subsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
@@ -1883,36 +1883,36 @@ define half @fnmsub_s_contract(half %a, half %b, half %c) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s3, a1, -1
 ; RV64I-NEXT:    and a0, a0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    li a1, 0
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s2, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    li a1, 0
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s2, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s2, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s2
 ; RV64I-NEXT:    call __mulsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s0
 ; RV64I-NEXT:    call __subsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload

diff  --git a/llvm/test/CodeGen/RISCV/half-convert.ll b/llvm/test/CodeGen/RISCV/half-convert.ll
index 6b9a2c6feb5a6..84ab7162cec31 100644
--- a/llvm/test/CodeGen/RISCV/half-convert.ll
+++ b/llvm/test/CodeGen/RISCV/half-convert.ll
@@ -39,7 +39,7 @@ define i16 @fcvt_si_h(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call __fixsfsi at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
@@ -51,7 +51,7 @@ define i16 @fcvt_si_h(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call __fixsfdi at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
@@ -143,7 +143,7 @@ define i16 @fcvt_si_h_sat(half %a) nounwind {
 ; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    lui a1, 815104
 ; RV32I-NEXT:    call __gesf2 at plt
@@ -191,7 +191,7 @@ define i16 @fcvt_si_h_sat(half %a) nounwind {
 ; RV64I-NEXT:    sd s3, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    lui a1, 815104
 ; RV64I-NEXT:    call __gesf2 at plt
@@ -261,7 +261,7 @@ define i16 @fcvt_ui_h(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call __fixunssfsi at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
@@ -273,7 +273,7 @@ define i16 @fcvt_ui_h(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call __fixunssfdi at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
@@ -338,7 +338,7 @@ define i16 @fcvt_ui_h_sat(half %a) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s0, a1, -1
 ; RV32I-NEXT:    and a0, a0, s0
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    li a1, 0
 ; RV32I-NEXT:    call __gesf2 at plt
@@ -378,7 +378,7 @@ define i16 @fcvt_ui_h_sat(half %a) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s0, a1, -1
 ; RV64I-NEXT:    and a0, a0, s0
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    li a1, 0
 ; RV64I-NEXT:    call __gesf2 at plt
@@ -439,7 +439,7 @@ define i32 @fcvt_w_h(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call __fixsfsi at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
@@ -451,7 +451,7 @@ define i32 @fcvt_w_h(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call __fixsfdi at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
@@ -516,7 +516,7 @@ define i32 @fcvt_w_h_sat(half %a) nounwind {
 ; RV32I-NEXT:    sw s4, 8(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    lui a1, 847872
 ; RV32I-NEXT:    call __gesf2 at plt
@@ -566,7 +566,7 @@ define i32 @fcvt_w_h_sat(half %a) nounwind {
 ; RV64I-NEXT:    sd s4, 0(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    lui a1, 847872
 ; RV64I-NEXT:    call __gesf2 at plt
@@ -637,7 +637,7 @@ define i32 @fcvt_wu_h(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call __fixunssfsi at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
@@ -649,7 +649,7 @@ define i32 @fcvt_wu_h(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call __fixunssfdi at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
@@ -707,7 +707,7 @@ define i32 @fcvt_wu_h_multiple_use(half %x, i32* %y) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call __fixunssfsi at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    li a0, 1
@@ -725,7 +725,7 @@ define i32 @fcvt_wu_h_multiple_use(half %x, i32* %y) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call __fixunssfdi at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    li a0, 1
@@ -796,7 +796,7 @@ define i32 @fcvt_wu_h_sat(half %a) nounwind {
 ; RV32I-NEXT:    sw s2, 0(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    li a1, 0
 ; RV32I-NEXT:    call __gesf2 at plt
@@ -834,7 +834,7 @@ define i32 @fcvt_wu_h_sat(half %a) nounwind {
 ; RV64I-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    li a1, 0
 ; RV64I-NEXT:    call __gesf2 at plt
@@ -903,7 +903,7 @@ define i64 @fcvt_l_h(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call __fixsfdi at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
@@ -915,7 +915,7 @@ define i64 @fcvt_l_h(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call __fixsfdi at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
@@ -1072,7 +1072,7 @@ define i64 @fcvt_l_h_sat(half %a) nounwind {
 ; RV32I-NEXT:    sw s6, 0(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    lui a1, 913408
 ; RV32I-NEXT:    call __gesf2 at plt
@@ -1151,7 +1151,7 @@ define i64 @fcvt_l_h_sat(half %a) nounwind {
 ; RV64I-NEXT:    sd s4, 0(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    lui a1, 913408
 ; RV64I-NEXT:    call __gesf2 at plt
@@ -1232,7 +1232,7 @@ define i64 @fcvt_lu_h(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call __fixunssfdi at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
@@ -1244,7 +1244,7 @@ define i64 @fcvt_lu_h(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call __fixunssfdi at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
@@ -1374,7 +1374,7 @@ define i64 @fcvt_lu_h_sat(half %a) nounwind {
 ; RV32I-NEXT:    sw s5, 4(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    li a1, 0
 ; RV32I-NEXT:    call __gesf2 at plt
@@ -1434,7 +1434,7 @@ define i64 @fcvt_lu_h_sat(half %a) nounwind {
 ; RV64I-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    li a1, 0
 ; RV64I-NEXT:    call __gesf2 at plt
@@ -1504,7 +1504,7 @@ define half @fcvt_h_si(i16 %a) nounwind {
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srai a0, a0, 16
 ; RV32I-NEXT:    call __floatsisf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -1516,7 +1516,7 @@ define half @fcvt_h_si(i16 %a) nounwind {
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srai a0, a0, 48
 ; RV64I-NEXT:    call __floatsisf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -1550,7 +1550,7 @@ define half @fcvt_h_si_signext(i16 signext %a) nounwind {
 ; RV32I-NEXT:    addi sp, sp, -16
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    call __floatsisf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -1560,7 +1560,7 @@ define half @fcvt_h_si_signext(i16 signext %a) nounwind {
 ; RV64I-NEXT:    addi sp, sp, -16
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    call __floatsisf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -1604,7 +1604,7 @@ define half @fcvt_h_ui(i16 %a) nounwind {
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
 ; RV32I-NEXT:    call __floatunsisf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -1616,7 +1616,7 @@ define half @fcvt_h_ui(i16 %a) nounwind {
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
 ; RV64I-NEXT:    call __floatunsisf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -1650,7 +1650,7 @@ define half @fcvt_h_ui_zeroext(i16 zeroext %a) nounwind {
 ; RV32I-NEXT:    addi sp, sp, -16
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    call __floatunsisf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -1660,7 +1660,7 @@ define half @fcvt_h_ui_zeroext(i16 zeroext %a) nounwind {
 ; RV64I-NEXT:    addi sp, sp, -16
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    call __floatunsisf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -1694,7 +1694,7 @@ define half @fcvt_h_w(i32 %a) nounwind {
 ; RV32I-NEXT:    addi sp, sp, -16
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    call __floatsisf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -1705,7 +1705,7 @@ define half @fcvt_h_w(i32 %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    sext.w a0, a0
 ; RV64I-NEXT:    call __floatsisf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -1744,7 +1744,7 @@ define half @fcvt_h_w_load(i32* %p) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    lw a0, 0(a0)
 ; RV32I-NEXT:    call __floatsisf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -1755,7 +1755,7 @@ define half @fcvt_h_w_load(i32* %p) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    lw a0, 0(a0)
 ; RV64I-NEXT:    call __floatsisf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -1790,7 +1790,7 @@ define half @fcvt_h_wu(i32 %a) nounwind {
 ; RV32I-NEXT:    addi sp, sp, -16
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    call __floatunsisf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -1801,7 +1801,7 @@ define half @fcvt_h_wu(i32 %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    sext.w a0, a0
 ; RV64I-NEXT:    call __floatunsisf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -1840,7 +1840,7 @@ define half @fcvt_h_wu_load(i32* %p) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    lw a0, 0(a0)
 ; RV32I-NEXT:    call __floatunsisf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -1851,7 +1851,7 @@ define half @fcvt_h_wu_load(i32* %p) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    lw a0, 0(a0)
 ; RV64I-NEXT:    call __floatunsisf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -1894,7 +1894,7 @@ define half @fcvt_h_l(i64 %a) nounwind {
 ; RV32I-NEXT:    addi sp, sp, -16
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    call __floatdisf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -1904,7 +1904,7 @@ define half @fcvt_h_l(i64 %a) nounwind {
 ; RV64I-NEXT:    addi sp, sp, -16
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    call __floatdisf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -1946,7 +1946,7 @@ define half @fcvt_h_lu(i64 %a) nounwind {
 ; RV32I-NEXT:    addi sp, sp, -16
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    call __floatundisf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -1956,7 +1956,7 @@ define half @fcvt_h_lu(i64 %a) nounwind {
 ; RV64I-NEXT:    addi sp, sp, -16
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    call __floatundisf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -1989,7 +1989,7 @@ define half @fcvt_h_s(float %a) nounwind {
 ; RV32I:       # %bb.0:
 ; RV32I-NEXT:    addi sp, sp, -16
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -1998,7 +1998,7 @@ define half @fcvt_h_s(float %a) nounwind {
 ; RV64I:       # %bb.0:
 ; RV64I-NEXT:    addi sp, sp, -16
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -2033,7 +2033,7 @@ define float @fcvt_s_h(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -2044,7 +2044,7 @@ define float @fcvt_s_h(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -2139,7 +2139,7 @@ define double @fcvt_d_h(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call __extendsfdf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
@@ -2151,7 +2151,7 @@ define double @fcvt_d_h(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    slli a0, a0, 32
 ; RV64I-NEXT:    srli a0, a0, 32
 ; RV64I-NEXT:    call __extendsfdf2 at plt
@@ -2266,7 +2266,7 @@ define signext i32 @fcvt_h_w_demanded_bits(i32 signext %0, half* %1) nounwind {
 ; RV32I-NEXT:    addi s1, a0, 1
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    call __floatsisf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    sh a0, 0(s0)
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
@@ -2285,7 +2285,7 @@ define signext i32 @fcvt_h_w_demanded_bits(i32 signext %0, half* %1) nounwind {
 ; RV64I-NEXT:    addiw s1, a0, 1
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    call __floatsisf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    sh a0, 0(s0)
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
@@ -2339,7 +2339,7 @@ define signext i32 @fcvt_h_wu_demanded_bits(i32 signext %0, half* %1) nounwind {
 ; RV32I-NEXT:    addi s1, a0, 1
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    call __floatunsisf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    sh a0, 0(s0)
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
@@ -2358,7 +2358,7 @@ define signext i32 @fcvt_h_wu_demanded_bits(i32 signext %0, half* %1) nounwind {
 ; RV64I-NEXT:    addiw s1, a0, 1
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    call __floatunsisf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    sh a0, 0(s0)
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
@@ -2399,7 +2399,7 @@ define signext i16 @fcvt_w_s_i16(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call __fixsfsi at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
@@ -2411,7 +2411,7 @@ define signext i16 @fcvt_w_s_i16(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call __fixsfdi at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
@@ -2503,7 +2503,7 @@ define signext i16 @fcvt_w_s_sat_i16(half %a) nounwind {
 ; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    lui a1, 815104
 ; RV32I-NEXT:    call __gesf2 at plt
@@ -2552,7 +2552,7 @@ define signext i16 @fcvt_w_s_sat_i16(half %a) nounwind {
 ; RV64I-NEXT:    sd s3, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    lui a1, 815104
 ; RV64I-NEXT:    call __gesf2 at plt
@@ -2622,7 +2622,7 @@ define zeroext i16 @fcvt_wu_s_i16(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call __fixunssfsi at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
@@ -2634,7 +2634,7 @@ define zeroext i16 @fcvt_wu_s_i16(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call __fixunssfdi at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
@@ -2699,7 +2699,7 @@ define zeroext i16 @fcvt_wu_s_sat_i16(half %a) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s2, a1, -1
 ; RV32I-NEXT:    and a0, a0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    li a1, 0
 ; RV32I-NEXT:    call __gesf2 at plt
@@ -2740,7 +2740,7 @@ define zeroext i16 @fcvt_wu_s_sat_i16(half %a) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s2, a1, -1
 ; RV64I-NEXT:    and a0, a0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    li a1, 0
 ; RV64I-NEXT:    call __gesf2 at plt
@@ -2801,7 +2801,7 @@ define signext i8 @fcvt_w_s_i8(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call __fixsfsi at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
@@ -2813,7 +2813,7 @@ define signext i8 @fcvt_w_s_i8(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call __fixsfdi at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
@@ -2905,7 +2905,7 @@ define signext i8 @fcvt_w_s_sat_i8(half %a) nounwind {
 ; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    lui a1, 798720
 ; RV32I-NEXT:    call __gesf2 at plt
@@ -2953,7 +2953,7 @@ define signext i8 @fcvt_w_s_sat_i8(half %a) nounwind {
 ; RV64I-NEXT:    sd s3, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    lui a1, 798720
 ; RV64I-NEXT:    call __gesf2 at plt
@@ -3023,7 +3023,7 @@ define zeroext i8 @fcvt_wu_s_i8(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call __fixunssfsi at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
@@ -3035,7 +3035,7 @@ define zeroext i8 @fcvt_wu_s_i8(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call __fixunssfdi at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
@@ -3098,7 +3098,7 @@ define zeroext i8 @fcvt_wu_s_sat_i8(half %a) nounwind {
 ; RV32I-NEXT:    sw s2, 0(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    li a1, 0
 ; RV32I-NEXT:    call __gesf2 at plt
@@ -3135,7 +3135,7 @@ define zeroext i8 @fcvt_wu_s_sat_i8(half %a) nounwind {
 ; RV64I-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    li a1, 0
 ; RV64I-NEXT:    call __gesf2 at plt

diff  --git a/llvm/test/CodeGen/RISCV/half-intrinsics.ll b/llvm/test/CodeGen/RISCV/half-intrinsics.ll
index 0d4e4ac322e1a..c8cafbbd5d2a7 100644
--- a/llvm/test/CodeGen/RISCV/half-intrinsics.ll
+++ b/llvm/test/CodeGen/RISCV/half-intrinsics.ll
@@ -47,9 +47,9 @@ define half @sqrt_f16(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call sqrtf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -60,9 +60,9 @@ define half @sqrt_f16(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call sqrtf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -127,10 +127,10 @@ define half @powi_f16(half %a, i32 %b) nounwind {
 ; RV32I-NEXT:    mv s0, a1
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, s0
 ; RV32I-NEXT:    call __powisf2 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
@@ -144,10 +144,10 @@ define half @powi_f16(half %a, i32 %b) nounwind {
 ; RV64I-NEXT:    mv s0, a1
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    sext.w a1, s0
 ; RV64I-NEXT:    call __powisf2 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
@@ -209,9 +209,9 @@ define half @sin_f16(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call sinf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -222,9 +222,9 @@ define half @sin_f16(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call sinf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -285,9 +285,9 @@ define half @cos_f16(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call cosf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -298,9 +298,9 @@ define half @cos_f16(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call cosf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -400,24 +400,24 @@ define half @sincos_f16(half %a) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s2, a1, -1
 ; RV32I-NEXT:    and a0, a0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    call sinf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    mv a0, s0
 ; RV32I-NEXT:    call cosf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    and a0, s1, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
@@ -435,24 +435,24 @@ define half @sincos_f16(half %a) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s2, a1, -1
 ; RV64I-NEXT:    and a0, a0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    call sinf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    mv a0, s0
 ; RV64I-NEXT:    call cosf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    and a0, s1, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
@@ -527,14 +527,14 @@ define half @pow_f16(half %a, half %b) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s2, a1, -1
 ; RV32I-NEXT:    and a0, a0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    call powf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
@@ -553,14 +553,14 @@ define half @pow_f16(half %a, half %b) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s2, a1, -1
 ; RV64I-NEXT:    and a0, a0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    call powf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
@@ -624,9 +624,9 @@ define half @exp_f16(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call expf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -637,9 +637,9 @@ define half @exp_f16(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call expf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -700,9 +700,9 @@ define half @exp2_f16(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call exp2f at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -713,9 +713,9 @@ define half @exp2_f16(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call exp2f at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -776,9 +776,9 @@ define half @log_f16(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call logf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -789,9 +789,9 @@ define half @log_f16(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call logf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -852,9 +852,9 @@ define half @log10_f16(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call log10f at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -865,9 +865,9 @@ define half @log10_f16(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call log10f at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -928,9 +928,9 @@ define half @log2_f16(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call log2f at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -941,9 +941,9 @@ define half @log2_f16(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call log2f at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -987,18 +987,18 @@ define half @fma_f16(half %a, half %b, half %c) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s3, a1, -1
 ; RV32I-NEXT:    and a0, a0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s2, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a2, a0
 ; RV32I-NEXT:    mv a0, s2
 ; RV32I-NEXT:    mv a1, s1
 ; RV32I-NEXT:    call fmaf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
@@ -1020,18 +1020,18 @@ define half @fma_f16(half %a, half %b, half %c) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s3, a1, -1
 ; RV64I-NEXT:    and a0, a0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s2, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a2, a0
 ; RV64I-NEXT:    mv a0, s2
 ; RV64I-NEXT:    mv a1, s1
 ; RV64I-NEXT:    call fmaf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
@@ -1079,23 +1079,23 @@ define half @fmuladd_f16(half %a, half %b, half %c) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s3, a1, -1
 ; RV32I-NEXT:    and a0, a0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s2, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s2
 ; RV32I-NEXT:    call __mulsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    and a0, s1, s3
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, s0
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
@@ -1117,23 +1117,23 @@ define half @fmuladd_f16(half %a, half %b, half %c) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s3, a1, -1
 ; RV64I-NEXT:    and a0, a0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s2, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s2
 ; RV64I-NEXT:    call __mulsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    and a0, s1, s3
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, s0
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
@@ -1217,14 +1217,14 @@ define half @minnum_f16(half %a, half %b) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s2, a1, -1
 ; RV32I-NEXT:    and a0, a0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    call fminf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
@@ -1243,14 +1243,14 @@ define half @minnum_f16(half %a, half %b) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s2, a1, -1
 ; RV64I-NEXT:    and a0, a0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    call fminf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
@@ -1295,14 +1295,14 @@ define half @maxnum_f16(half %a, half %b) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s2, a1, -1
 ; RV32I-NEXT:    and a0, a0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, a0
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    call fmaxf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
@@ -1321,14 +1321,14 @@ define half @maxnum_f16(half %a, half %b) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s2, a1, -1
 ; RV64I-NEXT:    and a0, a0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, a0
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    call fmaxf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
@@ -1453,9 +1453,9 @@ define half @floor_f16(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call floorf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -1466,9 +1466,9 @@ define half @floor_f16(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call floorf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -1529,9 +1529,9 @@ define half @ceil_f16(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call ceilf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -1542,9 +1542,9 @@ define half @ceil_f16(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call ceilf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -1605,9 +1605,9 @@ define half @trunc_f16(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call truncf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -1618,9 +1618,9 @@ define half @trunc_f16(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call truncf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -1681,9 +1681,9 @@ define half @rint_f16(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call rintf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -1694,9 +1694,9 @@ define half @rint_f16(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call rintf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -1757,9 +1757,9 @@ define half @nearbyint_f16(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call nearbyintf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -1770,9 +1770,9 @@ define half @nearbyint_f16(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call nearbyintf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -1833,9 +1833,9 @@ define half @round_f16(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call roundf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -1846,9 +1846,9 @@ define half @round_f16(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call roundf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret
@@ -1909,9 +1909,9 @@ define half @roundeven_f16(half %a) nounwind {
 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    slli a0, a0, 16
 ; RV32I-NEXT:    srli a0, a0, 16
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    call roundevenf at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
@@ -1922,9 +1922,9 @@ define half @roundeven_f16(half %a) nounwind {
 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    slli a0, a0, 48
 ; RV64I-NEXT:    srli a0, a0, 48
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    call roundevenf at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 16
 ; RV64I-NEXT:    ret

diff  --git a/llvm/test/CodeGen/RISCV/rv32i-rv64i-half.ll b/llvm/test/CodeGen/RISCV/rv32i-rv64i-half.ll
index 9659ba49bcbc6..0269bbe9ee330 100644
--- a/llvm/test/CodeGen/RISCV/rv32i-rv64i-half.ll
+++ b/llvm/test/CodeGen/RISCV/rv32i-rv64i-half.ll
@@ -21,20 +21,20 @@ define half @half_test(half %a, half %b) nounwind {
 ; RV32I-NEXT:    lui a1, 16
 ; RV32I-NEXT:    addi s2, a1, -1
 ; RV32I-NEXT:    and a0, a0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s1, a0
 ; RV32I-NEXT:    and a0, s0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv s0, a0
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    mv a1, s0
 ; RV32I-NEXT:    call __addsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    and a0, a0, s2
-; RV32I-NEXT:    call __gnu_h2f_ieee at plt
+; RV32I-NEXT:    call __extendhfsf2 at plt
 ; RV32I-NEXT:    mv a1, s0
 ; RV32I-NEXT:    call __divsf3 at plt
-; RV32I-NEXT:    call __gnu_f2h_ieee at plt
+; RV32I-NEXT:    call __truncsfhf2 at plt
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
@@ -53,20 +53,20 @@ define half @half_test(half %a, half %b) nounwind {
 ; RV64I-NEXT:    lui a1, 16
 ; RV64I-NEXT:    addiw s2, a1, -1
 ; RV64I-NEXT:    and a0, a0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s1, a0
 ; RV64I-NEXT:    and a0, s0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv s0, a0
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    mv a1, s0
 ; RV64I-NEXT:    call __addsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    and a0, a0, s2
-; RV64I-NEXT:    call __gnu_h2f_ieee at plt
+; RV64I-NEXT:    call __extendhfsf2 at plt
 ; RV64I-NEXT:    mv a1, s0
 ; RV64I-NEXT:    call __divsf3 at plt
-; RV64I-NEXT:    call __gnu_f2h_ieee at plt
+; RV64I-NEXT:    call __truncsfhf2 at plt
 ; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload


        


More information about the llvm-commits mailing list