[llvm] [PATCH] [Xtensa] Implement FrameLowering methods and stack operation lowering. (PR #92960)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Tue May 28 02:38:54 PDT 2024
================
@@ -51,9 +195,34 @@ MachineBasicBlock::iterator XtensaFrameLowering::eliminateCallFramePseudoInstr(
if (I->getOpcode() == Xtensa::ADJCALLSTACKDOWN)
Amount = -Amount;
- unsigned SP = Xtensa::SP;
- TII.adjustStackPtr(SP, Amount, MBB, I);
+ TII.adjustStackPtr(Xtensa::SP, Amount, MBB, I);
}
return MBB.erase(I);
}
+
+void XtensaFrameLowering::determineCalleeSaves(MachineFunction &MF,
+ BitVector &SavedRegs,
+ RegScavenger *RS) const {
+ MachineFrameInfo &MFI = MF.getFrameInfo();
+ unsigned FP = TRI->getFrameRegister(MF);
+
+ TargetFrameLowering::determineCalleeSaves(MF, SavedRegs, RS);
+
+ // Mark $fp as used if function has dedicated frame pointer.
+ if (hasFP(MF))
+ SavedRegs.set(FP);
+
+ // Set scavenging frame index if necessary.
+ uint64_t MaxSPOffset = MFI.estimateStackSize(MF);
+
+ if (isInt<12>(MaxSPOffset))
+ return;
+
+ const TargetRegisterClass &RC = Xtensa::ARRegClass;
+ unsigned Size = TRI->getSpillSize(RC);
+ Align Alignment = TRI->getSpillAlign(RC);
+ int FI = MF.getFrameInfo().CreateStackObject(Size, Alignment, false);
+
+ RS->addScavengingFrameIndex(FI);
----------------
arsenm wrote:
I'm not sure it's safe to do this in determineCalleeSaves. Can you create the emergency scavenging index in processFunctionBeforeFrameFinalized instead?
https://github.com/llvm/llvm-project/pull/92960
More information about the llvm-commits
mailing list