[llvm] [AMDGPU] Restore SP correctly in functions with dynamic allocas (PR #122743)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 13 09:09:47 PST 2025
================
@@ -525,8 +525,11 @@ Register SIRegisterInfo::getFrameRegister(const MachineFunction &MF) const {
bool SIRegisterInfo::hasBasePointer(const MachineFunction &MF) const {
// When we need stack realignment, we can't reference off of the
// stack pointer, so we reserve a base pointer.
+ // For functions with dynamically sized stack objects, we need to reference
+ // off the base pointer in the epilog to restore the stack frame.
const MachineFrameInfo &MFI = MF.getFrameInfo();
- return MFI.getNumFixedObjects() && shouldRealignStack(MF);
+ return (MFI.getNumFixedObjects() && shouldRealignStack(MF)) ||
+ MFI.hasVarSizedObjects();
----------------
easyonaadit wrote:
If the function doesn't access any incoming parameters, BP will not be setup.
For a function with an over-aligned dynamic alloca, I couldn't find a way to reverse the calculations done in the prolog without using the base pointer (I have another idea but it would require heavy changes in PEI)
https://github.com/llvm/llvm-project/pull/122743
More information about the llvm-commits
mailing list