================
@@ -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
_______________________________________________
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to