[llvm] [RISCV] Add stack probring in eliminateCallFramePseudoInstr (PR #139731)
Sergei Barannikov via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 3 00:04:23 PDT 2025
================
@@ -1813,9 +1813,22 @@ MachineBasicBlock::iterator RISCVFrameLowering::eliminateCallFramePseudoInstr(
if (MI->getOpcode() == RISCV::ADJCALLSTACKDOWN)
Amount = -Amount;
- const RISCVRegisterInfo &RI = *STI.getRegisterInfo();
- RI.adjustReg(MBB, MI, DL, SPReg, SPReg, StackOffset::getFixed(Amount),
- MachineInstr::NoFlags, getStackAlign());
+ const RISCVTargetLowering *TLI =
+ MF.getSubtarget<RISCVSubtarget>().getTargetLowering();
+ int64_t ProbeSize = TLI->getStackProbeSize(MF, getStackAlign());
+ if (TLI->hasInlineStackProbe(MF) && -Amount >= ProbeSize) {
+ // When stack probing is enabled, the decrement of SP may need to be
+ // probed. We can handle both the decrement and the probing in
+ // allocateStack.
+ bool DynAllocation =
+ MF.getInfo<RISCVMachineFunctionInfo>()->hasDynamicAllocation();
+ allocateStack(MBB, MI, MF, -Amount, -Amount, !hasFP(MF),
----------------
s-barannikov wrote:
`allocateStack()` sets `FrameSetup` flag on the created instructions, which should not be set when expanding call frame pseudo instructions (since they are not in the prologue).
https://github.com/llvm/llvm-project/pull/139731
More information about the llvm-commits
mailing list