[llvm-branch-commits] [llvm] [AArch64] Prepare for split ZPR and PPR area allocation (NFCI) (PR #142391)
Benjamin Maxwell via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Jul 11 09:06:12 PDT 2025
================
@@ -4308,26 +4398,33 @@ static int64_t determineSVEStackObjectOffsets(MachineFrameInfo &MFI,
"reference.");
#endif
- auto Assign = [&MFI](int FI, int64_t Offset) {
+ auto StackForObject = [&](int FI, uint64_t &ZPRStackTop,
+ uint64_t &PPRStackTop) -> uint64_t & {
+ return MFI.getStackID(FI) == TargetStackID::ScalableVector ? ZPRStackTop
+ : PPRStackTop;
+ };
+
+ auto Assign = [&MFI, AssignOffsets](int FI, int64_t Offset) {
+ if (AssignOffsets == AssignObjectOffsets::No)
+ return;
LLVM_DEBUG(dbgs() << "alloc FI(" << FI << ") at SP[" << Offset << "]\n");
MFI.setObjectOffset(FI, Offset);
};
- int64_t Offset = 0;
-
// Then process all callee saved slots.
+ int MinCSFrameIndex, MaxCSFrameIndex;
if (getSVECalleeSaveSlotRange(MFI, MinCSFrameIndex, MaxCSFrameIndex)) {
- // Assign offsets to the callee save slots.
- for (int I = MinCSFrameIndex; I <= MaxCSFrameIndex; ++I) {
- Offset += MFI.getObjectSize(I);
- Offset = alignTo(Offset, MFI.getObjectAlign(I));
- if (AssignOffsets)
- Assign(I, -Offset);
+ for (int FI = MinCSFrameIndex; FI <= MaxCSFrameIndex; ++FI) {
+ uint64_t &StackTop = StackForObject(FI, ZPRStackTop, PPRStackTop);
+ StackTop += MFI.getObjectSize(FI);
+ StackTop = alignTo(StackTop, MFI.getObjectAlign(FI));
+ Assign(FI, -int64_t(StackTop));
----------------
MacDue wrote:
I've added the assert and moved common logic into `AllocateObject` (what used to be `Assign`).
https://github.com/llvm/llvm-project/pull/142391
More information about the llvm-branch-commits
mailing list