diff --git a/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp b/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp index 22824b77c37dd..44d73c3ca57f1 100644 --- a/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp +++ b/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp @@ -168,7 +168,8 @@ static void emitSCSEpilogue(MachineFunction &MF, MachineBasicBlock &MBB, // restored by the libcall, except it is zero-indexed - ID 0 corresponds to a // single register. static int getLibCallID(const MachineFunction &MF, - const std::vector &CSI) { + const std::vector &CSI, + RISCVABI::ABI ABI) { const auto *RVFI = MF.getInfo(); if (CSI.empty() || !RVFI->useSaveRestoreLibCalls(MF)) @@ -184,6 +185,14 @@ static int getLibCallID(const MachineFunction &MF, if (MaxReg == RISCV::NoRegister) return -1; + // The libcall always save/restore ra/s0/s1 with the ABI ilp32e and lp64e. + if (ABI == RISCVABI::ABI_ILP32E || ABI == RISCVABI::ABI_LP64E) { + assert( + (MaxReg == RISCV::X1 || MaxReg == RISCV::X8 || MaxReg == RISCV::X9) && + "Invalid MaxReg for ABI ilp32e and lp64e"); + MaxReg = RISCV::X9; + } + switch (MaxReg) { default: llvm_unreachable("Something has gone wrong!"); @@ -205,9 +214,9 @@ static int getLibCallID(const MachineFunction &MF, // Get the name of the libcall used for spilling callee saved registers. // If this function will not use save/restore libcalls, then return a nullptr. -static const char * -getSpillLibCallName(const MachineFunction &MF, - const std::vector &CSI) { +static const char *getSpillLibCallName(const MachineFunction &MF, + const std::vector &CSI, + RISCVABI::ABI ABI) { static const char *const SpillLibCalls[] = { "__riscv_save_0", "__riscv_save_1", @@ -224,7 +233,7 @@ getSpillLibCallName(const MachineFunction &MF, "__riscv_save_12" }; - int LibCallID = getLibCallID(MF, CSI); + int LibCallID = getLibCallID(MF, CSI, ABI); if (LibCallID == -1) return nullptr; return SpillLibCalls[LibCallID]; @@ -234,7 +243,8 @@ getSpillLibCallName(const MachineFunction &MF, // If this function will not use save/restore libcalls, then return a nullptr. static const char * getRestoreLibCallName(const MachineFunction &MF, - const std::vector &CSI) { + const std::vector &CSI, + RISCVABI::ABI ABI) { static const char *const RestoreLibCalls[] = { "__riscv_restore_0", "__riscv_restore_1", @@ -251,7 +261,7 @@ getRestoreLibCallName(const MachineFunction &MF, "__riscv_restore_12" }; - int LibCallID = getLibCallID(MF, CSI); + int LibCallID = getLibCallID(MF, CSI, ABI); if (LibCallID == -1) return nullptr; return RestoreLibCalls[LibCallID]; @@ -573,8 +583,9 @@ void RISCVFrameLowering::emitPrologue(MachineFunction &MF, // For negative frame indices, the offset from the frame pointer will differ // depending on which of these groups the frame index applies to. // The following calculates the correct offset knowing the number of callee - // saved registers spilt by the two methods. - if (int LibCallRegs = getLibCallID(MF, MFI.getCalleeSavedInfo()) + 1) { + // saved registers spilt by the two methods.STI.getTargetABI() + if (int LibCallRegs = + getLibCallID(MF, MFI.getCalleeSavedInfo(), STI.getTargetABI()) + 1) { // Calculate the size of the frame managed by the libcall. The stack // alignment of these libcalls should be the same as how we set it in // getABIStackAlignment. @@ -1463,7 +1474,7 @@ bool RISCVFrameLowering::assignCalleeSavedSpillSlots( if (RVFI->isPushable(MF)) { if (int64_t PushSize = RVFI->getRVPushStackSize()) MFI.CreateFixedSpillStackObject(PushSize, -PushSize); - } else if (int LibCallRegs = getLibCallID(MF, CSI) + 1) { + } else if (int LibCallRegs = getLibCallID(MF, CSI, STI.getTargetABI()) + 1) { int64_t LibCallFrameSize = alignTo((STI.getXLen() / 8) * LibCallRegs, getStackAlign()); MFI.CreateFixedSpillStackObject(LibCallFrameSize, -LibCallFrameSize); @@ -1500,7 +1511,8 @@ bool RISCVFrameLowering::spillCalleeSavedRegisters( for (unsigned i = 0; i < PushedRegNum; i++) PushBuilder.addUse(FixedCSRFIMap[i].first, RegState::Implicit); } - } else if (const char *SpillLibCall = getSpillLibCallName(*MF, CSI)) { + } else if (const char *SpillLibCall = + getSpillLibCallName(*MF, CSI, STI.getTargetABI())) { // Add spill libcall via non-callee-saved register t0. BuildMI(MBB, MI, DL, TII.get(RISCV::PseudoCALLReg), RISCV::X5) .addExternalSymbol(SpillLibCall, RISCVII::MO_CALL) @@ -1625,7 +1637,8 @@ bool RISCVFrameLowering::restoreCalleeSavedRegisters( PopBuilder.addDef(FixedCSRFIMap[i].first, RegState::ImplicitDefine); } } else { - const char *RestoreLibCall = getRestoreLibCallName(*MF, CSI); + const char *RestoreLibCall = + getRestoreLibCallName(*MF, CSI, STI.getTargetABI()); if (RestoreLibCall) { // Add restore libcall via tail call. MachineBasicBlock::iterator NewMI = diff --git a/llvm/test/CodeGen/RISCV/calling-conv-ilp32e.ll b/llvm/test/CodeGen/RISCV/calling-conv-ilp32e.ll index d08cf577b1bdd..e7c3e91702491 100644 --- a/llvm/test/CodeGen/RISCV/calling-conv-ilp32e.ll +++ b/llvm/test/CodeGen/RISCV/calling-conv-ilp32e.ll @@ -54,15 +54,15 @@ define i32 @callee_float_in_regs(i32 %a, float %b) { ; ; ILP32E-FPELIM-SAVE-RESTORE-LABEL: callee_float_in_regs: ; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0: -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: mv s0, a0 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: mv a0, a1 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call __fixsfsi ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: add a0, s0, a0 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_float_in_regs: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: @@ -117,26 +117,26 @@ define i32 @caller_float_in_regs() { ; ; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_float_in_regs: ; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0: -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_0 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 4 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a0, 1 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: lui a1, 262144 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call callee_float_in_regs -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_0 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_float_in_regs: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a0, 1 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lui a1, 262144 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call callee_float_in_regs -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %1 = call i32 @callee_float_in_regs(i32 1, float 2.0) ret i32 %1 } @@ -176,16 +176,16 @@ define i32 @callee_float_on_stack(i64 %a, i64 %b, i64 %c, i64 %d, float %e) { ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_float_on_stack: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lw a0, 8(s0) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lw a1, 0(s0) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: add a0, a1, a0 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %1 = trunc i64 %d to i32 %2 = bitcast float %e to i32 %3 = add i32 %1, %2 @@ -244,9 +244,9 @@ define i32 @caller_float_on_stack() { ; ; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_float_on_stack: ; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0: -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_0 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -12 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 16 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 24 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: lui a0, 264704 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw a0, 8(sp) @@ -261,16 +261,16 @@ define i32 @caller_float_on_stack() { ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a5, 0 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call callee_float_on_stack ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, 12 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_0 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_float_on_stack: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -12 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 20 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 24 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 20 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 24 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lui a0, 264704 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a0, 8(sp) @@ -285,7 +285,7 @@ define i32 @caller_float_on_stack() { ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a5, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call callee_float_on_stack ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, 12 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %1 = call i32 @callee_float_on_stack(i64 1, i64 2, i64 3, i64 4, float 5.0) ret i32 %1 } @@ -319,14 +319,14 @@ define float @callee_tiny_scalar_ret() { ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_tiny_scalar_ret: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lui a0, 260096 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ret float 1.0 } @@ -360,22 +360,22 @@ define i32 @caller_tiny_scalar_ret() { ; ; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_tiny_scalar_ret: ; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0: -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_0 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 4 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call callee_tiny_scalar_ret -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_0 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_tiny_scalar_ret: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call callee_tiny_scalar_ret -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %1 = call float @callee_tiny_scalar_ret() %2 = bitcast float %1 to i32 ret i32 %2 @@ -428,8 +428,8 @@ define i32 @callee_double_in_regs(i32 %a, double %b) { ; ; ILP32E-FPELIM-SAVE-RESTORE-LABEL: callee_double_in_regs: ; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0: -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: mv s0, a0 @@ -437,7 +437,7 @@ define i32 @callee_double_in_regs(i32 %a, double %b) { ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: mv a1, a2 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call __fixdfsi ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: add a0, s0, a0 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_double_in_regs: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: @@ -495,28 +495,28 @@ define i32 @caller_double_in_regs() { ; ; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_double_in_regs: ; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0: -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_0 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 4 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a0, 1 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: lui a2, 262144 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a1, 0 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call callee_double_in_regs -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_0 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_double_in_regs: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a0, 1 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lui a2, 262144 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a1, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call callee_double_in_regs -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %1 = call i32 @callee_double_in_regs(i32 1, double 2.0) ret i32 %1 } @@ -584,11 +584,11 @@ define i32 @callee_aligned_stack(i32 %a, i32 %b, fp128 %c, i32 %d, i32 %e, i64 % ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_aligned_stack: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lw a0, 0(a2) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lw a1, 12(s0) @@ -601,7 +601,7 @@ define i32 @callee_aligned_stack(i32 %a, i32 %b, fp128 %c, i32 %d, i32 %e, i64 % ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: add a0, a0, a1 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: add a4, a5, a4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: add a0, a0, a4 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %1 = bitcast fp128 %c to i128 %2 = trunc i128 %1 to i32 %3 = add i32 %2, %g @@ -730,8 +730,8 @@ define void @caller_aligned_stack() { ; ; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_aligned_stack: ; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0: -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -56 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -52 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 64 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 @@ -777,13 +777,13 @@ define void @caller_aligned_stack() { ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw a6, 32(sp) ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call callee_aligned_stack ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, s0, -64 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, 56 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, 52 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_aligned_stack: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -56 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -52 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 64 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 @@ -829,8 +829,8 @@ define void @caller_aligned_stack() { ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a6, 32(sp) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call callee_aligned_stack ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, s0, -64 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, 56 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, 52 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %1 = call i32 @callee_aligned_stack(i32 1, i32 11, fp128 0xLEB851EB851EB851F400091EB851EB851, i32 12, i32 13, i64 20000000000, i32 14, i32 15, double 2.720000e+00, i32 16, @@ -870,15 +870,15 @@ define double @callee_small_scalar_ret() { ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_small_scalar_ret: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lui a1, 261888 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a0, 0 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ret double 1.0 } @@ -912,22 +912,22 @@ define i64 @caller_small_scalar_ret() { ; ; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_small_scalar_ret: ; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0: -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_0 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 4 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call callee_small_scalar_ret -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_0 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_small_scalar_ret: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call callee_small_scalar_ret -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %1 = call double @callee_small_scalar_ret() %2 = bitcast double %1 to i64 ret i64 %2 @@ -965,14 +965,14 @@ define i32 @callee_i64_in_regs(i32 %a, i64 %b) { ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_i64_in_regs: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: add a0, a0, a1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %b_trunc = trunc i64 %b to i32 %1 = add i32 %a, %b_trunc ret i32 %1 @@ -1014,28 +1014,28 @@ define i32 @caller_i64_in_regs() { ; ; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_i64_in_regs: ; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0: -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_0 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 4 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a0, 1 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a1, 2 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a2, 0 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call callee_i64_in_regs -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_0 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_i64_in_regs: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a0, 1 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a1, 2 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a2, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call callee_i64_in_regs -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %1 = call i32 @callee_i64_in_regs(i32 1, i64 2) ret i32 %1 } @@ -1119,11 +1119,11 @@ define i32 @callee_many_scalars(i8 %a, i16 %b, i32 %c, i64 %d, i32 %e, i32 %f, i ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_many_scalars: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lw a6, 12(s0) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lw a7, 0(s0) @@ -1142,7 +1142,7 @@ define i32 @callee_many_scalars(i8 %a, i16 %b, i32 %c, i64 %d, i32 %e, i32 %f, i ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: add a0, a0, a7 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: add a0, a0, a6 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: add a0, a1, a0 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %a_ext = zext i8 %a to i32 %b_ext = zext i16 %b to i32 %1 = add i32 %a_ext, %b_ext @@ -1212,9 +1212,9 @@ define i32 @caller_many_scalars() { ; ; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_many_scalars: ; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0: -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_0 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -16 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 20 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 28 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a0, 8 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw a0, 12(sp) @@ -1231,16 +1231,16 @@ define i32 @caller_many_scalars() { ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a4, 0 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call callee_many_scalars ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, 16 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_0 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_many_scalars: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -16 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 24 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 28 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 24 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 28 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a0, 8 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a0, 12(sp) @@ -1257,7 +1257,7 @@ define i32 @caller_many_scalars() { ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a4, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call callee_many_scalars ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, 16 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %1 = call i32 @callee_many_scalars(i8 1, i16 2, i32 3, i64 4, i32 5, i32 6, i64 7, i32 8) ret i32 %1 } @@ -1338,11 +1338,11 @@ define i32 @callee_large_scalars(i128 %a, fp128 %b) { ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_large_scalars: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lw a2, 0(a1) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lw a3, 0(a0) @@ -1360,7 +1360,7 @@ define i32 @callee_large_scalars(i128 %a, fp128 %b) { ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: or a0, a2, a0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: or a0, a0, a4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: seqz a0, a0 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %b_bitcast = bitcast fp128 %b to i128 %1 = icmp eq i128 %a, %b_bitcast %2 = zext i1 %1 to i32 @@ -1430,8 +1430,8 @@ define i32 @caller_large_scalars() { ; ; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_large_scalars: ; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0: -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -40 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -36 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 48 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 @@ -1443,22 +1443,22 @@ define i32 @caller_large_scalars() { ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw zero, 8(sp) ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw zero, 4(sp) ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw zero, 0(sp) -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw zero, 36(sp) -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw zero, 32(sp) ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw zero, 28(sp) +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw zero, 24(sp) +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw zero, 20(sp) ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a2, 1 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi a0, sp, 24 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi a0, sp, 16 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: mv a1, sp -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw a2, 24(sp) +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw a2, 16(sp) ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call callee_large_scalars ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, s0, -48 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, 40 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, 36 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_large_scalars: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -40 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -36 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 48 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 @@ -1470,17 +1470,17 @@ define i32 @caller_large_scalars() { ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw zero, 8(sp) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw zero, 4(sp) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw zero, 0(sp) -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw zero, 36(sp) -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw zero, 32(sp) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw zero, 28(sp) +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw zero, 24(sp) +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw zero, 20(sp) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a2, 1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi a0, sp, 24 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi a0, sp, 16 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: mv a1, sp -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a2, 24(sp) +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a2, 16(sp) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call callee_large_scalars ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, s0, -48 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, 40 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, 36 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %1 = call i32 @callee_large_scalars(i128 1, fp128 0xL00000000000000007FFF000000000000) ret i32 %1 } @@ -1569,11 +1569,11 @@ define i32 @callee_large_scalars_exhausted_regs(i32 %a, i32 %b, i32 %c, i32 %d, ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_large_scalars_exhausted_regs: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lw a0, 12(s0) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lw a1, 4(s0) @@ -1593,7 +1593,7 @@ define i32 @callee_large_scalars_exhausted_regs(i32 %a, i32 %b, i32 %c, i32 %d, ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: or a0, a2, a0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: or a0, a0, a4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: seqz a0, a0 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %j_bitcast = bitcast fp128 %j to i128 %1 = icmp eq i128 %h, %j_bitcast %2 = zext i1 %1 to i32 @@ -1687,8 +1687,8 @@ define i32 @caller_large_scalars_exhausted_regs() { ; ; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_large_scalars_exhausted_regs: ; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0: -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -56 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -52 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 64 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 @@ -1699,7 +1699,7 @@ define i32 @caller_large_scalars_exhausted_regs() { ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw a0, 12(sp) ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a0, 9 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw a0, 8(sp) -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi a0, sp, 40 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi a0, sp, 32 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw a0, 4(sp) ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a0, 7 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw a0, 0(sp) @@ -1708,26 +1708,26 @@ define i32 @caller_large_scalars_exhausted_regs() { ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw zero, 24(sp) ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw zero, 20(sp) ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw zero, 16(sp) -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw zero, 52(sp) -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw zero, 48(sp) +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw zero, 44(sp) +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw zero, 40(sp) ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a0, 8 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw a0, 40(sp) +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw a0, 32(sp) ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a0, 1 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a1, 2 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a2, 3 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a3, 4 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a4, 5 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a5, 6 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw zero, 44(sp) +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw zero, 36(sp) ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call callee_large_scalars_exhausted_regs ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, s0, -64 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, 56 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, 52 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_large_scalars_exhausted_regs: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -56 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -52 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 64 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 @@ -1738,7 +1738,7 @@ define i32 @caller_large_scalars_exhausted_regs() { ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a0, 12(sp) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a0, 9 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a0, 8(sp) -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi a0, sp, 40 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi a0, sp, 32 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a0, 4(sp) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a0, 7 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a0, 0(sp) @@ -1747,21 +1747,21 @@ define i32 @caller_large_scalars_exhausted_regs() { ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw zero, 24(sp) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw zero, 20(sp) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw zero, 16(sp) -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw zero, 52(sp) -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw zero, 48(sp) +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw zero, 44(sp) +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw zero, 40(sp) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a0, 8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a0, 40(sp) +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a0, 32(sp) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a0, 1 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a1, 2 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a2, 3 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a3, 4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a4, 5 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a5, 6 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw zero, 44(sp) +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw zero, 36(sp) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call callee_large_scalars_exhausted_regs ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, s0, -64 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, 56 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, 52 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %1 = call i32 @callee_large_scalars_exhausted_regs( i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i128 8, i32 9, fp128 0xL00000000000000007FFF000000000000) @@ -1817,12 +1817,12 @@ define i32 @caller_mixed_scalar_libcalls(i64 %a) { ; ; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_mixed_scalar_libcalls: ; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0: -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -16 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 24 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -20 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 32 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi s0, sp, 24 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi s0, sp, 32 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: andi sp, sp, -8 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: mv a2, a1 @@ -1830,18 +1830,18 @@ define i32 @caller_mixed_scalar_libcalls(i64 %a) { ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: mv a0, sp ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call __floatditf ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: lw a0, 0(sp) -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, s0, -24 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, 16 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, s0, -32 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, 20 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_mixed_scalar_libcalls: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -16 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 24 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -20 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 32 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 24 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 32 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: andi sp, sp, -8 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: mv a2, a1 @@ -1849,9 +1849,9 @@ define i32 @caller_mixed_scalar_libcalls(i64 %a) { ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: mv a0, sp ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call __floatditf ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lw a0, 0(sp) -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, s0, -24 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, 16 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, s0, -32 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, 20 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %1 = sitofp i64 %a to fp128 %2 = bitcast fp128 %1 to i128 %3 = trunc i128 %2 to i32 @@ -1895,15 +1895,15 @@ define i32 @callee_small_coerced_struct([2 x i32] %a.coerce) { ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_small_coerced_struct: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: xor a0, a0, a1 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: seqz a0, a0 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %1 = extractvalue [2 x i32] %a.coerce, 0 %2 = extractvalue [2 x i32] %a.coerce, 1 %3 = icmp eq i32 %1, %2 @@ -1945,26 +1945,26 @@ define i32 @caller_small_coerced_struct() { ; ; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_small_coerced_struct: ; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0: -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_0 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 4 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a0, 1 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a1, 2 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call callee_small_coerced_struct -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_0 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_small_coerced_struct: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a0, 1 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a1, 2 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call callee_small_coerced_struct -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %1 = call i32 @callee_small_coerced_struct([2 x i32] [i32 1, i32 2]) ret i32 %1 } @@ -2008,16 +2008,16 @@ define i32 @callee_large_struct(ptr byval(%struct.large) align 4 %a) { ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_large_struct: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lw a1, 0(a0) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lw a0, 12(a0) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: add a0, a1, a0 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %1 = getelementptr inbounds %struct.large, ptr %a, i32 0, i32 0 %2 = getelementptr inbounds %struct.large, ptr %a, i32 0, i32 3 %3 = load i32, ptr %1 @@ -2082,9 +2082,9 @@ define i32 @caller_large_struct() { ; ; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_large_struct: ; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0: -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_0 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -32 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 36 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 44 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a0, 1 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: sw a0, 16(sp) @@ -2101,33 +2101,33 @@ define i32 @caller_large_struct() { ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: mv a0, sp ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call callee_large_struct ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, 32 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_0 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_large_struct: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -32 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 40 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 44 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 40 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 44 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a0, 1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a0, -24(s0) +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a0, -28(s0) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a1, 2 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a1, -20(s0) +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a1, -24(s0) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a2, 3 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a2, -16(s0) +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a2, -20(s0) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a3, 4 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a3, -12(s0) -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a0, -40(s0) -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a1, -36(s0) -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a2, -32(s0) -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a3, -28(s0) -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi a0, s0, -40 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a3, -16(s0) +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a0, -44(s0) +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a1, -40(s0) +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a2, -36(s0) +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a3, -32(s0) +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi a0, s0, -44 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call callee_large_struct ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, 32 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %ls = alloca %struct.large, align 4 %1 = bitcast ptr %ls to ptr %a = getelementptr inbounds %struct.large, ptr %ls, i32 0, i32 0 @@ -2176,15 +2176,15 @@ define %struct.small @callee_small_struct_ret() { ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_small_struct_ret: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a0, 1 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a1, 0 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ret %struct.small { i32 1, ptr null } } @@ -2220,24 +2220,24 @@ define i32 @caller_small_struct_ret() { ; ; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_small_struct_ret: ; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0: -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_0 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 4 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call callee_small_struct_ret ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: add a0, a0, a1 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_0 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_small_struct_ret: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call callee_small_struct_ret ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: add a0, a0, a1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %1 = call %struct.small @callee_small_struct_ret() %2 = extractvalue %struct.small %1, 0 %3 = extractvalue %struct.small %1, 1 @@ -2289,18 +2289,18 @@ define fp128 @callee_large_scalar_ret() { ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_large_scalar_ret: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lui a1, 524272 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a1, 12(a0) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw zero, 8(a0) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw zero, 4(a0) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw zero, 0(a0) -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ret fp128 0xL00000000000000007FFF000000000000 } @@ -2345,8 +2345,8 @@ define void @caller_large_scalar_ret() { ; ; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_large_scalar_ret: ; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0: -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -24 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -20 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 32 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 @@ -2356,13 +2356,13 @@ define void @caller_large_scalar_ret() { ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: mv a0, sp ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call callee_large_scalar_ret ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, s0, -32 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, 24 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, 20 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_large_scalar_ret: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -24 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -20 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 32 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 @@ -2372,8 +2372,8 @@ define void @caller_large_scalar_ret() { ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: mv a0, sp ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call callee_large_scalar_ret ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, s0, -32 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, 24 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, 20 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %1 = call fp128 @callee_large_scalar_ret() ret void } @@ -2430,11 +2430,11 @@ define void @callee_large_struct_ret(ptr noalias sret(%struct.large) %agg.result ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_large_struct_ret: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 8 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 12 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a1, 1 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a1, 0(a0) @@ -2444,7 +2444,7 @@ define void @callee_large_struct_ret(ptr noalias sret(%struct.large) %agg.result ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a1, 8(a0) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a1, 4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: sw a1, 12(a0) -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %a = getelementptr inbounds %struct.large, ptr %agg.result, i32 0, i32 0 store i32 1, ptr %a, align 4 %b = getelementptr inbounds %struct.large, ptr %agg.result, i32 0, i32 1 @@ -2503,12 +2503,12 @@ define i32 @caller_large_struct_ret() { ; ; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_large_struct_ret: ; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0: -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -16 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 24 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -20 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 32 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi s0, sp, 24 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi s0, sp, 32 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: andi sp, sp, -8 ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: mv a0, sp @@ -2516,18 +2516,18 @@ define i32 @caller_large_struct_ret() { ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: lw a0, 0(sp) ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: lw a1, 12(sp) ; ILP32E-FPELIM-SAVE-RESTORE-NEXT: add a0, a0, a1 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, s0, -24 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, 16 -; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, s0, -32 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, 20 +; ILP32E-FPELIM-SAVE-RESTORE-NEXT: tail __riscv_restore_2 ; ; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_large_struct_ret: ; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0: -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -16 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 24 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_2 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -20 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 32 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 24 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 32 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: andi sp, sp, -8 ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: mv a0, sp @@ -2535,9 +2535,9 @@ define i32 @caller_large_struct_ret() { ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lw a0, 0(sp) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lw a1, 12(sp) ; ILP32E-WITHFP-SAVE-RESTORE-NEXT: add a0, a0, a1 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, s0, -24 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, 16 -; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_1 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, s0, -32 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, 20 +; ILP32E-WITHFP-SAVE-RESTORE-NEXT: tail __riscv_restore_2 %1 = alloca %struct.large call void @callee_large_struct_ret(ptr sret(%struct.large) %1) %2 = getelementptr inbounds %struct.large, ptr %1, i32 0, i32 0