[llvm] [AMDGPU] Restore SP correctly in functions with dynamic allocas (PR #122743)

via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 16 23:36:07 PST 2025


================
@@ -1259,6 +1259,17 @@ void SIFrameLowering::emitEpilogue(MachineFunction &MF,
   Register FramePtrRegScratchCopy;
   Register SGPRForFPSaveRestoreCopy =
       FuncInfo->getScratchSGPRCopyDstReg(FramePtrReg);
+
+  if (MFI.hasVarSizedObjects()) {
----------------
easyonaadit wrote:

hasFP checks for variable-sized objects, stack realignment, disable-frame-pointer-elimination optimization, and these intrinsics: `@llvm.frameaddress`, `@llvm.experimental.stackmap`, `@llvm.experimental.patchpoint`. 
Of these, I think we only need SP restoration in case of variable-sized objects and stack realignment. 
If a function has only stack-realignment without variable-sized objects, then that is handled in the existing prolog/epilog.
So I think we only need to handle SP restoration for variable sized objects (unless there is something else which does a dynamic stack adjustment)

https://github.com/llvm/llvm-project/pull/122743


More information about the llvm-commits mailing list