[llvm] da0755f - [RISCV][test] Test showing missed optimisation for spills/fills of GPR<->FPR moves
Alex Bradbury via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 17 00:11:49 PST 2024
Author: Alex Bradbury
Date: 2024-01-17T08:11:06Z
New Revision: da0755f7b7ccb08c8819125bc7b75e0129e4be42
URL: https://github.com/llvm/llvm-project/commit/da0755f7b7ccb08c8819125bc7b75e0129e4be42
DIFF: https://github.com/llvm/llvm-project/commit/da0755f7b7ccb08c8819125bc7b75e0129e4be42.diff
LOG: [RISCV][test] Test showing missed optimisation for spills/fills of GPR<->FPR moves
The fmv can be removed through appropriate logic in
RISCVInstrInfo::foldMemoryOperandImpl.
Added:
llvm/test/CodeGen/RISCV/spill-fill-fold.ll
Modified:
Removed:
################################################################################
diff --git a/llvm/test/CodeGen/RISCV/spill-fill-fold.ll b/llvm/test/CodeGen/RISCV/spill-fill-fold.ll
new file mode 100644
index 000000000000000..a9a0cc5cf94d85a
--- /dev/null
+++ b/llvm/test/CodeGen/RISCV/spill-fill-fold.ll
@@ -0,0 +1,1034 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
+; RUN: llc -mtriple=riscv32 -mattr=+d -verify-machineinstrs < %s \
+; RUN: -target-abi=ilp32d | FileCheck -check-prefix=RV32ID %s
+; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs < %s \
+; RUN: -target-abi=lp64d | FileCheck -check-prefix=RV64ID %s
+
+; A GPR<->FPR move (fmv.?.?) is unnecessary in all of the tests below, as in
+; the value can be loaded/stored directly from/to the stack.
+
+define float @spill_i32_to_float(i32 %a) nounwind {
+; RV32ID-LABEL: spill_i32_to_float:
+; RV32ID: # %bb.0:
+; RV32ID-NEXT: addi sp, sp, -160
+; RV32ID-NEXT: sw ra, 156(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s0, 152(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s1, 148(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s2, 144(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s3, 140(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s4, 136(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s5, 132(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s6, 128(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s7, 124(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s8, 120(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s9, 116(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s10, 112(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s11, 108(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: fsd fs0, 96(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs1, 88(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs2, 80(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs3, 72(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs4, 64(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs5, 56(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs6, 48(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs7, 40(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs8, 32(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs9, 24(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs10, 16(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs11, 8(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fmv.w.x fa5, a0
+; RV32ID-NEXT: fsw fa5, 4(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: #APP
+; RV32ID-NEXT: #NO_APP
+; RV32ID-NEXT: flw fa0, 4(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw ra, 156(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s0, 152(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s1, 148(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s2, 144(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s3, 140(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s4, 136(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s5, 132(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s6, 128(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s7, 124(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s8, 120(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s9, 116(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s10, 112(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s11, 108(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: fld fs0, 96(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs1, 88(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs2, 80(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs3, 72(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs4, 64(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs5, 56(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs6, 48(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs7, 40(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs8, 32(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs9, 24(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs10, 16(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs11, 8(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: addi sp, sp, 160
+; RV32ID-NEXT: ret
+;
+; RV64ID-LABEL: spill_i32_to_float:
+; RV64ID: # %bb.0:
+; RV64ID-NEXT: addi sp, sp, -208
+; RV64ID-NEXT: sd ra, 200(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s0, 192(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s1, 184(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s2, 176(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s3, 168(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s4, 160(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s5, 152(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s6, 144(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s7, 136(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s8, 128(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s9, 120(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s10, 112(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s11, 104(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs0, 96(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs1, 88(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs2, 80(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs3, 72(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs4, 64(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs5, 56(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs6, 48(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs7, 40(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs8, 32(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs9, 24(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs10, 16(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs11, 8(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fmv.w.x fa5, a0
+; RV64ID-NEXT: fsw fa5, 4(sp) # 4-byte Folded Spill
+; RV64ID-NEXT: #APP
+; RV64ID-NEXT: #NO_APP
+; RV64ID-NEXT: flw fa0, 4(sp) # 4-byte Folded Reload
+; RV64ID-NEXT: ld ra, 200(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s0, 192(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s1, 184(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s2, 176(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s3, 168(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s4, 160(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s5, 152(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s6, 144(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s7, 136(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s8, 128(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s9, 120(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s10, 112(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s11, 104(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs0, 96(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs1, 88(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs2, 80(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs3, 72(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs4, 64(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs5, 56(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs6, 48(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs7, 40(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs8, 32(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs9, 24(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs10, 16(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs11, 8(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: addi sp, sp, 208
+; RV64ID-NEXT: ret
+ %1 = bitcast i32 %a to float
+ call void asm sideeffect "", "~{x0},~{x1},~{x2},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31},~{f0_d},~{f1_d},~{f2_d},~{f3_d},~{f4_d},~{f5_d},~{f6_d},~{f7_d},~{f8_d},~{f9_d},~{f10_d},~{f11_d},~{f12_d},~{f13_d},~{f14_d},~{f15_d},~{f16_d},~{f17_d},~{f18_d},~{f19_d},~{f20_d},~{f21_d},~{f22_d},~{f23_d},~{f24_d},~{f25_d},~{f26_d},~{f27_d},~{f28_d},~{f29_d},~{f30_d},~{f31_d}"() nounwind
+ ret float %1
+}
+
+define i32 @spill_float_to_i32(float %a) nounwind {
+; RV32ID-LABEL: spill_float_to_i32:
+; RV32ID: # %bb.0:
+; RV32ID-NEXT: addi sp, sp, -160
+; RV32ID-NEXT: sw ra, 156(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s0, 152(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s1, 148(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s2, 144(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s3, 140(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s4, 136(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s5, 132(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s6, 128(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s7, 124(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s8, 120(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s9, 116(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s10, 112(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s11, 108(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: fsd fs0, 96(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs1, 88(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs2, 80(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs3, 72(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs4, 64(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs5, 56(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs6, 48(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs7, 40(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs8, 32(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs9, 24(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs10, 16(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs11, 8(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fmv.x.w a0, fa0
+; RV32ID-NEXT: sw a0, 4(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: #APP
+; RV32ID-NEXT: #NO_APP
+; RV32ID-NEXT: lw a0, 4(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw ra, 156(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s0, 152(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s1, 148(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s2, 144(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s3, 140(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s4, 136(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s5, 132(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s6, 128(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s7, 124(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s8, 120(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s9, 116(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s10, 112(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s11, 108(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: fld fs0, 96(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs1, 88(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs2, 80(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs3, 72(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs4, 64(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs5, 56(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs6, 48(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs7, 40(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs8, 32(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs9, 24(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs10, 16(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs11, 8(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: addi sp, sp, 160
+; RV32ID-NEXT: ret
+;
+; RV64ID-LABEL: spill_float_to_i32:
+; RV64ID: # %bb.0:
+; RV64ID-NEXT: addi sp, sp, -208
+; RV64ID-NEXT: sd ra, 200(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s0, 192(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s1, 184(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s2, 176(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s3, 168(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s4, 160(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s5, 152(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s6, 144(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s7, 136(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s8, 128(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s9, 120(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s10, 112(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s11, 104(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs0, 96(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs1, 88(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs2, 80(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs3, 72(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs4, 64(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs5, 56(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs6, 48(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs7, 40(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs8, 32(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs9, 24(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs10, 16(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs11, 8(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fmv.x.w a0, fa0
+; RV64ID-NEXT: sd a0, 0(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: #APP
+; RV64ID-NEXT: #NO_APP
+; RV64ID-NEXT: ld a0, 0(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld ra, 200(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s0, 192(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s1, 184(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s2, 176(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s3, 168(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s4, 160(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s5, 152(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s6, 144(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s7, 136(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s8, 128(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s9, 120(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s10, 112(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s11, 104(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs0, 96(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs1, 88(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs2, 80(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs3, 72(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs4, 64(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs5, 56(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs6, 48(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs7, 40(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs8, 32(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs9, 24(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs10, 16(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs11, 8(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: addi sp, sp, 208
+; RV64ID-NEXT: ret
+ %1 = bitcast float %a to i32
+ call void asm sideeffect "", "~{x0},~{x1},~{x2},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31},~{f0_d},~{f1_d},~{f2_d},~{f3_d},~{f4_d},~{f5_d},~{f6_d},~{f7_d},~{f8_d},~{f9_d},~{f10_d},~{f11_d},~{f12_d},~{f13_d},~{f14_d},~{f15_d},~{f16_d},~{f17_d},~{f18_d},~{f19_d},~{f20_d},~{f21_d},~{f22_d},~{f23_d},~{f24_d},~{f25_d},~{f26_d},~{f27_d},~{f28_d},~{f29_d},~{f30_d},~{f31_d}"() nounwind
+ ret i32 %1
+}
+
+define double @spill_i64_to_double(i64 %a) nounwind {
+; RV32ID-LABEL: spill_i64_to_double:
+; RV32ID: # %bb.0:
+; RV32ID-NEXT: addi sp, sp, -176
+; RV32ID-NEXT: sw ra, 172(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s0, 168(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s1, 164(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s2, 160(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s3, 156(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s4, 152(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s5, 148(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s6, 144(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s7, 140(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s8, 136(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s9, 132(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s10, 128(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s11, 124(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: fsd fs0, 112(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs1, 104(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs2, 96(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs3, 88(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs4, 80(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs5, 72(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs6, 64(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs7, 56(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs8, 48(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs9, 40(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs10, 32(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs11, 24(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: sw a1, 20(sp)
+; RV32ID-NEXT: sw a0, 16(sp)
+; RV32ID-NEXT: fld fa5, 16(sp)
+; RV32ID-NEXT: fsd fa5, 8(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: #APP
+; RV32ID-NEXT: #NO_APP
+; RV32ID-NEXT: fld fa0, 8(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: lw ra, 172(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s0, 168(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s1, 164(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s2, 160(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s3, 156(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s4, 152(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s5, 148(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s6, 144(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s7, 140(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s8, 136(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s9, 132(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s10, 128(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s11, 124(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: fld fs0, 112(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs1, 104(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs2, 96(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs3, 88(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs4, 80(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs5, 72(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs6, 64(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs7, 56(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs8, 48(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs9, 40(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs10, 32(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs11, 24(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: addi sp, sp, 176
+; RV32ID-NEXT: ret
+;
+; RV64ID-LABEL: spill_i64_to_double:
+; RV64ID: # %bb.0:
+; RV64ID-NEXT: addi sp, sp, -208
+; RV64ID-NEXT: sd ra, 200(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s0, 192(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s1, 184(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s2, 176(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s3, 168(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s4, 160(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s5, 152(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s6, 144(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s7, 136(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s8, 128(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s9, 120(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s10, 112(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s11, 104(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs0, 96(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs1, 88(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs2, 80(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs3, 72(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs4, 64(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs5, 56(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs6, 48(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs7, 40(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs8, 32(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs9, 24(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs10, 16(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs11, 8(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fmv.d.x fa5, a0
+; RV64ID-NEXT: fsd fa5, 0(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: #APP
+; RV64ID-NEXT: #NO_APP
+; RV64ID-NEXT: fld fa0, 0(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld ra, 200(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s0, 192(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s1, 184(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s2, 176(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s3, 168(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s4, 160(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s5, 152(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s6, 144(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s7, 136(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s8, 128(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s9, 120(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s10, 112(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s11, 104(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs0, 96(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs1, 88(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs2, 80(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs3, 72(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs4, 64(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs5, 56(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs6, 48(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs7, 40(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs8, 32(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs9, 24(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs10, 16(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs11, 8(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: addi sp, sp, 208
+; RV64ID-NEXT: ret
+ %1 = bitcast i64 %a to double
+ call void asm sideeffect "", "~{x0},~{x1},~{x2},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31},~{f0_d},~{f1_d},~{f2_d},~{f3_d},~{f4_d},~{f5_d},~{f6_d},~{f7_d},~{f8_d},~{f9_d},~{f10_d},~{f11_d},~{f12_d},~{f13_d},~{f14_d},~{f15_d},~{f16_d},~{f17_d},~{f18_d},~{f19_d},~{f20_d},~{f21_d},~{f22_d},~{f23_d},~{f24_d},~{f25_d},~{f26_d},~{f27_d},~{f28_d},~{f29_d},~{f30_d},~{f31_d}"() nounwind
+ ret double %1
+}
+
+define i64 @spill_double_to_i64(double %a) nounwind {
+; RV32ID-LABEL: spill_double_to_i64:
+; RV32ID: # %bb.0:
+; RV32ID-NEXT: addi sp, sp, -176
+; RV32ID-NEXT: sw ra, 172(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s0, 168(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s1, 164(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s2, 160(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s3, 156(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s4, 152(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s5, 148(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s6, 144(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s7, 140(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s8, 136(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s9, 132(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s10, 128(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s11, 124(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: fsd fs0, 112(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs1, 104(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs2, 96(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs3, 88(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs4, 80(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs5, 72(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs6, 64(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs7, 56(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs8, 48(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs9, 40(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs10, 32(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs11, 24(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fa0, 16(sp)
+; RV32ID-NEXT: lw a0, 16(sp)
+; RV32ID-NEXT: sw a0, 12(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: lw a0, 20(sp)
+; RV32ID-NEXT: sw a0, 8(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: #APP
+; RV32ID-NEXT: #NO_APP
+; RV32ID-NEXT: lw a0, 12(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw a1, 8(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw ra, 172(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s0, 168(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s1, 164(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s2, 160(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s3, 156(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s4, 152(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s5, 148(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s6, 144(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s7, 140(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s8, 136(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s9, 132(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s10, 128(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s11, 124(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: fld fs0, 112(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs1, 104(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs2, 96(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs3, 88(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs4, 80(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs5, 72(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs6, 64(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs7, 56(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs8, 48(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs9, 40(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs10, 32(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs11, 24(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: addi sp, sp, 176
+; RV32ID-NEXT: ret
+;
+; RV64ID-LABEL: spill_double_to_i64:
+; RV64ID: # %bb.0:
+; RV64ID-NEXT: addi sp, sp, -208
+; RV64ID-NEXT: sd ra, 200(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s0, 192(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s1, 184(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s2, 176(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s3, 168(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s4, 160(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s5, 152(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s6, 144(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s7, 136(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s8, 128(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s9, 120(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s10, 112(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s11, 104(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs0, 96(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs1, 88(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs2, 80(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs3, 72(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs4, 64(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs5, 56(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs6, 48(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs7, 40(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs8, 32(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs9, 24(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs10, 16(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs11, 8(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fmv.x.d a0, fa0
+; RV64ID-NEXT: sd a0, 0(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: #APP
+; RV64ID-NEXT: #NO_APP
+; RV64ID-NEXT: ld a0, 0(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld ra, 200(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s0, 192(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s1, 184(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s2, 176(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s3, 168(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s4, 160(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s5, 152(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s6, 144(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s7, 136(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s8, 128(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s9, 120(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s10, 112(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s11, 104(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs0, 96(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs1, 88(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs2, 80(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs3, 72(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs4, 64(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs5, 56(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs6, 48(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs7, 40(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs8, 32(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs9, 24(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs10, 16(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs11, 8(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: addi sp, sp, 208
+; RV64ID-NEXT: ret
+ %1 = bitcast double %a to i64
+ call void asm sideeffect "", "~{x0},~{x1},~{x2},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31},~{f0_d},~{f1_d},~{f2_d},~{f3_d},~{f4_d},~{f5_d},~{f6_d},~{f7_d},~{f8_d},~{f9_d},~{f10_d},~{f11_d},~{f12_d},~{f13_d},~{f14_d},~{f15_d},~{f16_d},~{f17_d},~{f18_d},~{f19_d},~{f20_d},~{f21_d},~{f22_d},~{f23_d},~{f24_d},~{f25_d},~{f26_d},~{f27_d},~{f28_d},~{f29_d},~{f30_d},~{f31_d}"() nounwind
+ ret i64 %1
+}
+
+define float @fill_i32_to_float(i32 %a) nounwind {
+; RV32ID-LABEL: fill_i32_to_float:
+; RV32ID: # %bb.0:
+; RV32ID-NEXT: addi sp, sp, -160
+; RV32ID-NEXT: sw ra, 156(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s0, 152(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s1, 148(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s2, 144(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s3, 140(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s4, 136(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s5, 132(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s6, 128(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s7, 124(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s8, 120(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s9, 116(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s10, 112(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s11, 108(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: fsd fs0, 96(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs1, 88(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs2, 80(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs3, 72(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs4, 64(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs5, 56(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs6, 48(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs7, 40(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs8, 32(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs9, 24(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs10, 16(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs11, 8(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: sw a0, 4(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: #APP
+; RV32ID-NEXT: #NO_APP
+; RV32ID-NEXT: lw a0, 4(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: fmv.w.x fa0, a0
+; RV32ID-NEXT: lw ra, 156(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s0, 152(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s1, 148(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s2, 144(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s3, 140(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s4, 136(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s5, 132(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s6, 128(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s7, 124(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s8, 120(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s9, 116(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s10, 112(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s11, 108(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: fld fs0, 96(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs1, 88(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs2, 80(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs3, 72(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs4, 64(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs5, 56(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs6, 48(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs7, 40(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs8, 32(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs9, 24(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs10, 16(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs11, 8(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: addi sp, sp, 160
+; RV32ID-NEXT: ret
+;
+; RV64ID-LABEL: fill_i32_to_float:
+; RV64ID: # %bb.0:
+; RV64ID-NEXT: addi sp, sp, -208
+; RV64ID-NEXT: sd ra, 200(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s0, 192(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s1, 184(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s2, 176(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s3, 168(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s4, 160(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s5, 152(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s6, 144(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s7, 136(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s8, 128(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s9, 120(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s10, 112(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s11, 104(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs0, 96(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs1, 88(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs2, 80(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs3, 72(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs4, 64(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs5, 56(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs6, 48(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs7, 40(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs8, 32(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs9, 24(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs10, 16(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs11, 8(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd a0, 0(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: #APP
+; RV64ID-NEXT: #NO_APP
+; RV64ID-NEXT: ld a0, 0(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fmv.w.x fa0, a0
+; RV64ID-NEXT: ld ra, 200(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s0, 192(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s1, 184(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s2, 176(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s3, 168(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s4, 160(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s5, 152(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s6, 144(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s7, 136(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s8, 128(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s9, 120(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s10, 112(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s11, 104(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs0, 96(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs1, 88(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs2, 80(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs3, 72(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs4, 64(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs5, 56(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs6, 48(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs7, 40(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs8, 32(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs9, 24(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs10, 16(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs11, 8(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: addi sp, sp, 208
+; RV64ID-NEXT: ret
+ call void asm sideeffect "", "~{x0},~{x1},~{x2},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31},~{f0_d},~{f1_d},~{f2_d},~{f3_d},~{f4_d},~{f5_d},~{f6_d},~{f7_d},~{f8_d},~{f9_d},~{f10_d},~{f11_d},~{f12_d},~{f13_d},~{f14_d},~{f15_d},~{f16_d},~{f17_d},~{f18_d},~{f19_d},~{f20_d},~{f21_d},~{f22_d},~{f23_d},~{f24_d},~{f25_d},~{f26_d},~{f27_d},~{f28_d},~{f29_d},~{f30_d},~{f31_d}"() nounwind
+ %1 = bitcast i32 %a to float
+ ret float %1
+}
+
+define i32 @fill_float_to_i32(float %a) nounwind {
+; RV32ID-LABEL: fill_float_to_i32:
+; RV32ID: # %bb.0:
+; RV32ID-NEXT: addi sp, sp, -160
+; RV32ID-NEXT: sw ra, 156(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s0, 152(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s1, 148(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s2, 144(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s3, 140(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s4, 136(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s5, 132(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s6, 128(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s7, 124(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s8, 120(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s9, 116(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s10, 112(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s11, 108(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: fsd fs0, 96(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs1, 88(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs2, 80(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs3, 72(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs4, 64(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs5, 56(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs6, 48(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs7, 40(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs8, 32(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs9, 24(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs10, 16(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs11, 8(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsw fa0, 4(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: #APP
+; RV32ID-NEXT: #NO_APP
+; RV32ID-NEXT: flw fa5, 4(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: fmv.x.w a0, fa5
+; RV32ID-NEXT: lw ra, 156(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s0, 152(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s1, 148(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s2, 144(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s3, 140(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s4, 136(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s5, 132(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s6, 128(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s7, 124(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s8, 120(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s9, 116(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s10, 112(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s11, 108(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: fld fs0, 96(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs1, 88(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs2, 80(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs3, 72(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs4, 64(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs5, 56(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs6, 48(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs7, 40(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs8, 32(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs9, 24(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs10, 16(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs11, 8(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: addi sp, sp, 160
+; RV32ID-NEXT: ret
+;
+; RV64ID-LABEL: fill_float_to_i32:
+; RV64ID: # %bb.0:
+; RV64ID-NEXT: addi sp, sp, -208
+; RV64ID-NEXT: sd ra, 200(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s0, 192(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s1, 184(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s2, 176(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s3, 168(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s4, 160(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s5, 152(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s6, 144(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s7, 136(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s8, 128(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s9, 120(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s10, 112(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s11, 104(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs0, 96(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs1, 88(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs2, 80(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs3, 72(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs4, 64(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs5, 56(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs6, 48(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs7, 40(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs8, 32(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs9, 24(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs10, 16(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs11, 8(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsw fa0, 4(sp) # 4-byte Folded Spill
+; RV64ID-NEXT: #APP
+; RV64ID-NEXT: #NO_APP
+; RV64ID-NEXT: flw fa5, 4(sp) # 4-byte Folded Reload
+; RV64ID-NEXT: fmv.x.w a0, fa5
+; RV64ID-NEXT: ld ra, 200(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s0, 192(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s1, 184(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s2, 176(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s3, 168(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s4, 160(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s5, 152(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s6, 144(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s7, 136(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s8, 128(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s9, 120(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s10, 112(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s11, 104(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs0, 96(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs1, 88(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs2, 80(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs3, 72(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs4, 64(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs5, 56(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs6, 48(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs7, 40(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs8, 32(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs9, 24(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs10, 16(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs11, 8(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: addi sp, sp, 208
+; RV64ID-NEXT: ret
+ call void asm sideeffect "", "~{x0},~{x1},~{x2},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31},~{f0_d},~{f1_d},~{f2_d},~{f3_d},~{f4_d},~{f5_d},~{f6_d},~{f7_d},~{f8_d},~{f9_d},~{f10_d},~{f11_d},~{f12_d},~{f13_d},~{f14_d},~{f15_d},~{f16_d},~{f17_d},~{f18_d},~{f19_d},~{f20_d},~{f21_d},~{f22_d},~{f23_d},~{f24_d},~{f25_d},~{f26_d},~{f27_d},~{f28_d},~{f29_d},~{f30_d},~{f31_d}"() nounwind
+ %1 = bitcast float %a to i32
+ ret i32 %1
+}
+
+define double @fill_i64_to_double(i64 %a) nounwind {
+; RV32ID-LABEL: fill_i64_to_double:
+; RV32ID: # %bb.0:
+; RV32ID-NEXT: addi sp, sp, -176
+; RV32ID-NEXT: sw ra, 172(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s0, 168(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s1, 164(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s2, 160(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s3, 156(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s4, 152(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s5, 148(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s6, 144(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s7, 140(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s8, 136(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s9, 132(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s10, 128(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s11, 124(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: fsd fs0, 112(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs1, 104(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs2, 96(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs3, 88(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs4, 80(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs5, 72(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs6, 64(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs7, 56(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs8, 48(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs9, 40(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs10, 32(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs11, 24(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: sw a1, 20(sp)
+; RV32ID-NEXT: sw a0, 16(sp)
+; RV32ID-NEXT: fld fa5, 16(sp)
+; RV32ID-NEXT: fsd fa5, 8(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: #APP
+; RV32ID-NEXT: #NO_APP
+; RV32ID-NEXT: fld fa0, 8(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: lw ra, 172(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s0, 168(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s1, 164(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s2, 160(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s3, 156(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s4, 152(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s5, 148(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s6, 144(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s7, 140(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s8, 136(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s9, 132(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s10, 128(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s11, 124(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: fld fs0, 112(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs1, 104(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs2, 96(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs3, 88(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs4, 80(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs5, 72(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs6, 64(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs7, 56(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs8, 48(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs9, 40(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs10, 32(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs11, 24(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: addi sp, sp, 176
+; RV32ID-NEXT: ret
+;
+; RV64ID-LABEL: fill_i64_to_double:
+; RV64ID: # %bb.0:
+; RV64ID-NEXT: addi sp, sp, -208
+; RV64ID-NEXT: sd ra, 200(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s0, 192(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s1, 184(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s2, 176(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s3, 168(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s4, 160(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s5, 152(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s6, 144(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s7, 136(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s8, 128(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s9, 120(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s10, 112(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s11, 104(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs0, 96(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs1, 88(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs2, 80(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs3, 72(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs4, 64(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs5, 56(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs6, 48(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs7, 40(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs8, 32(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs9, 24(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs10, 16(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs11, 8(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd a0, 0(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: #APP
+; RV64ID-NEXT: #NO_APP
+; RV64ID-NEXT: ld a0, 0(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fmv.d.x fa0, a0
+; RV64ID-NEXT: ld ra, 200(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s0, 192(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s1, 184(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s2, 176(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s3, 168(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s4, 160(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s5, 152(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s6, 144(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s7, 136(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s8, 128(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s9, 120(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s10, 112(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s11, 104(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs0, 96(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs1, 88(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs2, 80(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs3, 72(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs4, 64(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs5, 56(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs6, 48(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs7, 40(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs8, 32(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs9, 24(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs10, 16(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs11, 8(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: addi sp, sp, 208
+; RV64ID-NEXT: ret
+ call void asm sideeffect "", "~{x0},~{x1},~{x2},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31},~{f0_d},~{f1_d},~{f2_d},~{f3_d},~{f4_d},~{f5_d},~{f6_d},~{f7_d},~{f8_d},~{f9_d},~{f10_d},~{f11_d},~{f12_d},~{f13_d},~{f14_d},~{f15_d},~{f16_d},~{f17_d},~{f18_d},~{f19_d},~{f20_d},~{f21_d},~{f22_d},~{f23_d},~{f24_d},~{f25_d},~{f26_d},~{f27_d},~{f28_d},~{f29_d},~{f30_d},~{f31_d}"() nounwind
+ %1 = bitcast i64 %a to double
+ ret double %1
+}
+
+define i64 @fill_double_to_i64(double %a) nounwind {
+; RV32ID-LABEL: fill_double_to_i64:
+; RV32ID: # %bb.0:
+; RV32ID-NEXT: addi sp, sp, -176
+; RV32ID-NEXT: sw ra, 172(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s0, 168(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s1, 164(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s2, 160(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s3, 156(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s4, 152(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s5, 148(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s6, 144(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s7, 140(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s8, 136(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s9, 132(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s10, 128(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: sw s11, 124(sp) # 4-byte Folded Spill
+; RV32ID-NEXT: fsd fs0, 112(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs1, 104(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs2, 96(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs3, 88(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs4, 80(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs5, 72(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs6, 64(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs7, 56(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs8, 48(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs9, 40(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs10, 32(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fs11, 24(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: fsd fa0, 8(sp) # 8-byte Folded Spill
+; RV32ID-NEXT: #APP
+; RV32ID-NEXT: #NO_APP
+; RV32ID-NEXT: fld fa5, 8(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fsd fa5, 16(sp)
+; RV32ID-NEXT: lw a0, 16(sp)
+; RV32ID-NEXT: lw a1, 20(sp)
+; RV32ID-NEXT: lw ra, 172(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s0, 168(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s1, 164(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s2, 160(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s3, 156(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s4, 152(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s5, 148(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s6, 144(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s7, 140(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s8, 136(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s9, 132(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s10, 128(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: lw s11, 124(sp) # 4-byte Folded Reload
+; RV32ID-NEXT: fld fs0, 112(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs1, 104(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs2, 96(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs3, 88(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs4, 80(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs5, 72(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs6, 64(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs7, 56(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs8, 48(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs9, 40(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs10, 32(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: fld fs11, 24(sp) # 8-byte Folded Reload
+; RV32ID-NEXT: addi sp, sp, 176
+; RV32ID-NEXT: ret
+;
+; RV64ID-LABEL: fill_double_to_i64:
+; RV64ID: # %bb.0:
+; RV64ID-NEXT: addi sp, sp, -208
+; RV64ID-NEXT: sd ra, 200(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s0, 192(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s1, 184(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s2, 176(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s3, 168(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s4, 160(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s5, 152(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s6, 144(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s7, 136(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s8, 128(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s9, 120(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s10, 112(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: sd s11, 104(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs0, 96(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs1, 88(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs2, 80(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs3, 72(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs4, 64(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs5, 56(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs6, 48(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs7, 40(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs8, 32(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs9, 24(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs10, 16(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fs11, 8(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: fsd fa0, 0(sp) # 8-byte Folded Spill
+; RV64ID-NEXT: #APP
+; RV64ID-NEXT: #NO_APP
+; RV64ID-NEXT: fld fa5, 0(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fmv.x.d a0, fa5
+; RV64ID-NEXT: ld ra, 200(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s0, 192(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s1, 184(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s2, 176(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s3, 168(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s4, 160(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s5, 152(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s6, 144(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s7, 136(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s8, 128(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s9, 120(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s10, 112(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: ld s11, 104(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs0, 96(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs1, 88(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs2, 80(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs3, 72(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs4, 64(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs5, 56(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs6, 48(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs7, 40(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs8, 32(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs9, 24(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs10, 16(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: fld fs11, 8(sp) # 8-byte Folded Reload
+; RV64ID-NEXT: addi sp, sp, 208
+; RV64ID-NEXT: ret
+ call void asm sideeffect "", "~{x0},~{x1},~{x2},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31},~{f0_d},~{f1_d},~{f2_d},~{f3_d},~{f4_d},~{f5_d},~{f6_d},~{f7_d},~{f8_d},~{f9_d},~{f10_d},~{f11_d},~{f12_d},~{f13_d},~{f14_d},~{f15_d},~{f16_d},~{f17_d},~{f18_d},~{f19_d},~{f20_d},~{f21_d},~{f22_d},~{f23_d},~{f24_d},~{f25_d},~{f26_d},~{f27_d},~{f28_d},~{f29_d},~{f30_d},~{f31_d}"() nounwind
+ %1 = bitcast double %a to i64
+ ret i64 %1
+}
More information about the llvm-commits
mailing list