|  | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | 
|  | ; RUN: llc -mtriple=riscv32 -mattr=+f,+d -target-abi ilp32d -verify-machineinstrs < %s \ | 
|  | ; RUN:   | FileCheck -check-prefix=RV32IFD %s | 
|  | ; RUN: llc -mtriple=riscv64 -mattr=+f,+d -target-abi lp64d -verify-machineinstrs < %s \ | 
|  | ; RUN:   | FileCheck -check-prefix=RV64IFD %s | 
|  |  | 
|  | ; These test that we can use both the architectural names (x*) and the ABI names | 
|  | ; (a*, s*, t* etc) to refer to registers in inline asm constraint lists. In each | 
|  | ; case, the named register should be used for the source register of the `addi`. | 
|  | ; It is very likely that `a0` will be chosen as the designation register, but | 
|  | ; this is left to the compiler to choose. | 
|  | ; | 
|  | ; The inline assembly will, by default, contain the ABI names for the registers. | 
|  | ; | 
|  | ; Parenthesised registers in comments are the other aliases for this register. | 
|  |  | 
|  |  | 
|  | define i32 @explicit_register_f0(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f0: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft0, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft0 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f0: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft0, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft0 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f0}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_ft0(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_ft0: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft0, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft0 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_ft0: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft0, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft0 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{ft0}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_f1(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f1: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft1, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft1 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f1: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft1, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft1 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f1}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_ft1(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_ft1: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft1, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft1 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_ft1: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft1, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft1 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{ft1}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_f2(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f2: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft2, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft2 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f2: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft2, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft2 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f2}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_ft2(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_ft2: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft2, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft2 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_ft2: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft2, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft2 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{ft2}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_f3(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f3: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft3, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft3 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f3: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft3, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft3 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f3}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_ft3(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_ft3: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft3, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft3 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_ft3: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft3, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft3 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{ft3}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_f4(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f4: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft4, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft4 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f4: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft4, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft4 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f4}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_ft4(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_ft4: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft4, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft4 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_ft4: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft4, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft4 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{ft4}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_f5(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f5: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft5, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft5 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f5: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft5, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft5 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f5}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_ft5(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_ft5: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft5, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft5 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_ft5: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft5, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft5 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{ft5}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_f6(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f6: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft6, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft6 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f6: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft6, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft6 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f6}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_ft6(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_ft6: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft6, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft6 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_ft6: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft6, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft6 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{ft6}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_f7(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f7: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft7, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft7 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f7: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft7, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft7 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f7}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_ft7(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_ft7: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft7, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft7 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_ft7: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft7, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft7 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{ft7}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  |  | 
|  | ; NOTE: This test uses `f8` (`fs0`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_f8(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f8: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs0, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs0, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs0 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs0, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f8: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs0, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs0, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs0 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs0, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f8}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `fs0` (`f8`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_fs0(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_fs0: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs0, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs0, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs0 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs0, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_fs0: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs0, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs0, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs0 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs0, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{fs0}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `f9` (`fs1`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_f9(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f9: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs1, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs1 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f9: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs1, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs1 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f9}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `fs1` (`f9`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_fs1(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_fs1: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs1, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs1 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_fs1: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs1, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs1 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{fs1}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_f10(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f10: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fa0 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f10: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fa0 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f10}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_fa0(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_fa0: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fa0 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_fa0: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fa0 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{fa0}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_f11(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f11: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d fa1, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fa1 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f11: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d fa1, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fa1 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f11}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_fa1(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_fa1: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d fa1, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fa1 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_fa1: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d fa1, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fa1 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{fa1}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_f12(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f12: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d fa2, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fa2 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f12: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d fa2, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fa2 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f12}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_fa2(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_fa2: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d fa2, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fa2 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_fa2: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d fa2, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fa2 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{fa2}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_f13(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f13: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d fa3, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fa3 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f13: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d fa3, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fa3 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f13}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_fa3(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_fa3: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d fa3, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fa3 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_fa3: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d fa3, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fa3 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{fa3}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_f14(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f14: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d fa4, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fa4 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f14: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d fa4, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fa4 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f14}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_fa4(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_fa4: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d fa4, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fa4 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_fa4: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d fa4, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fa4 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{fa4}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_f15(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f15: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d fa5, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fa5 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f15: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d fa5, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fa5 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f15}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_fa5(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_fa5: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d fa5, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fa5 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_fa5: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d fa5, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fa5 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{fa5}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_f16(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f16: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d fa6, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fa6 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f16: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d fa6, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fa6 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f16}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_fa6(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_fa6: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d fa6, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fa6 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_fa6: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d fa6, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fa6 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{fa6}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_f17(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f17: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d fa7, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fa7 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f17: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d fa7, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fa7 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f17}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_fa7(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_fa7: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d fa7, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fa7 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_fa7: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d fa7, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fa7 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{fa7}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `f18` (`fs2`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_f18(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f18: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs2, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs2, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs2 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs2, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f18: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs2, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs2, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs2 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs2, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f18}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `fs2` (`f18`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_fs2(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_fs2: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs2, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs2, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs2 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs2, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_fs2: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs2, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs2, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs2 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs2, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{fs2}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `f19` (`fs3`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_f19(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f19: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs3, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs3, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs3 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs3, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f19: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs3, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs3, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs3 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs3, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f19}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `fs3` (`f19`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_fs3(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_fs3: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs3, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs3, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs3 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs3, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_fs3: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs3, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs3, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs3 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs3, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{fs3}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `f20` (`fs4`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_f20(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f20: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs4, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs4, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs4 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs4, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f20: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs4, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs4, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs4 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs4, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f20}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `fs4` (`f20`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_fs4(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_fs4: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs4, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs4, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs4 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs4, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_fs4: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs4, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs4, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs4 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs4, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{fs4}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `f21` (`fs5`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_f21(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f21: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs5, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs5, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs5 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs5, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f21: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs5, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs5, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs5 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs5, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f21}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `fs5` (`f21`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_fs5(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_fs5: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs5, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs5, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs5 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs5, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_fs5: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs5, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs5, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs5 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs5, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{fs5}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `f22` (`fs6`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_f22(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f22: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs6, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs6, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs6 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs6, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f22: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs6, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs6, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs6 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs6, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f22}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `fs6` (`f22`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_fs6(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_fs6: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs6, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs6, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs6 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs6, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_fs6: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs6, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs6, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs6 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs6, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{fs6}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `f23` (`fs7`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_f23(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f23: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs7, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs7, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs7 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs7, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f23: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs7, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs7, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs7 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs7, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f23}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `fs7` (`f23`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_fs7(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_fs7: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs7, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs7, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs7 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs7, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_fs7: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs7, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs7, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs7 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs7, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{fs7}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `f24` (`fs8`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_f24(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f24: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs8, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs8, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs8 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs8, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f24: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs8, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs8, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs8 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs8, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f24}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `fs8` (`f24`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_fs8(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_fs8: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs8, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs8, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs8 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs8, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_fs8: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs8, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs8, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs8 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs8, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{fs8}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `f25` (`fs9`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_f25(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f25: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs9, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs9, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs9 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs9, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f25: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs9, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs9, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs9 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs9, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f25}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `fs9` (`f25`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_fs9(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_fs9: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs9, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs9, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs9 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs9, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_fs9: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs9, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs9, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs9 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs9, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{fs9}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `f26` (`fs10`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_f26(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f26: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs10, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs10, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs10 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs10, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f26: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs10, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs10, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs10 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs10, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f26}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `fs10` (`f26`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_fs10(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_fs10: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs10, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs10, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs10 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs10, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_fs10: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs10, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs10, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs10 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs10, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{fs10}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `f27` (`fs11`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_f27(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f27: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs11, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs11, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs11 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs11, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f27: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs11, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs11, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs11 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs11, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f27}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | ; NOTE: This test uses `fs11` (`f27`) as an input, so it should be saved. | 
|  | define i32 @explicit_register_fs11(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_fs11: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV32IFD-NEXT:    fsd fs11, 8(sp) # 8-byte Folded Spill | 
|  | ; RV32IFD-NEXT:    fmv.d fs11, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, fs11 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    fld fs11, 8(sp) # 8-byte Folded Reload | 
|  | ; RV32IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_fs11: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    addi sp, sp, -16 | 
|  | ; RV64IFD-NEXT:    fsd fs11, 8(sp) # 8-byte Folded Spill | 
|  | ; RV64IFD-NEXT:    fmv.d fs11, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, fs11 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    fld fs11, 8(sp) # 8-byte Folded Reload | 
|  | ; RV64IFD-NEXT:    addi sp, sp, 16 | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{fs11}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_f28(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f28: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft8, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft8 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f28: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft8, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft8 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f28}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_ft8(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_ft8: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft8, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft8 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_ft8: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft8, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft8 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{ft8}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_f29(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f29: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft9, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft9 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f29: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft9, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft9 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f29}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_ft9(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_ft9: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft9, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft9 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_ft9: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft9, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft9 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{ft9}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_f30(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f30: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft10, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft10 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f30: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft10, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft10 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f30}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_ft10(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_ft10: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft10, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft10 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_ft10: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft10, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft10 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{ft10}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_f31(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_f31: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft11, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft11 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_f31: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft11, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft11 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{f31}"(double %a) | 
|  | ret i32 %1 | 
|  | } | 
|  |  | 
|  | define i32 @explicit_register_ft11(double %a) nounwind { | 
|  | ; RV32IFD-LABEL: explicit_register_ft11: | 
|  | ; RV32IFD:       # %bb.0: | 
|  | ; RV32IFD-NEXT:    fmv.d ft11, fa0 | 
|  | ; RV32IFD-NEXT:    #APP | 
|  | ; RV32IFD-NEXT:    fcvt.w.d a0, ft11 | 
|  | ; RV32IFD-NEXT:    #NO_APP | 
|  | ; RV32IFD-NEXT:    ret | 
|  | ; | 
|  | ; RV64IFD-LABEL: explicit_register_ft11: | 
|  | ; RV64IFD:       # %bb.0: | 
|  | ; RV64IFD-NEXT:    fmv.d ft11, fa0 | 
|  | ; RV64IFD-NEXT:    #APP | 
|  | ; RV64IFD-NEXT:    fcvt.w.d a0, ft11 | 
|  | ; RV64IFD-NEXT:    #NO_APP | 
|  | ; RV64IFD-NEXT:    ret | 
|  | %1 = tail call i32 asm "fcvt.w.d $0, $1", "=r,{ft11}"(double %a) | 
|  | ret i32 %1 | 
|  | } |