@@ -723,31 +723,37 @@ void AArch64PrologueEmitter::emitPrologue() {
723723 StackOffset PPRLocalsSize = AFL.getPPRStackSize (MF) - PPRCalleeSavesSize;
724724 StackOffset ZPRLocalsSize = AFL.getZPRStackSize (MF) - ZPRCalleeSavesSize;
725725
726+ std::optional<MachineBasicBlock::iterator> ZPRCalleeSavesBegin,
727+ ZPRCalleeSavesEnd, PPRCalleeSavesBegin, PPRCalleeSavesEnd;
728+
726729 StackOffset CFAOffset =
727730 StackOffset::getFixed ((int64_t )MFI.getStackSize () - NumBytes);
728731 MachineBasicBlock::iterator AfterSVESavesI = AfterGPRSavesI;
729732 if (!FPAfterSVECalleeSaves) {
730733 // Process the SVE callee-saves to find the starts/ends of the ZPR and PPR
731734 // areas.
735+ PPRCalleeSavesBegin = AfterGPRSavesI;
732736 if (PPRCalleeSavesSize) {
733737 LLVM_DEBUG (dbgs () << " PPRCalleeSavedStackSize = "
734738 << PPRCalleeSavesSize.getScalable () << " \n " );
735739
736- assert (isPartOfPPRCalleeSaves (AfterSVESavesI ) &&
740+ assert (isPartOfPPRCalleeSaves (*PPRCalleeSavesBegin ) &&
737741 " Unexpected instruction" );
738742 while (isPartOfPPRCalleeSaves (AfterSVESavesI) &&
739743 AfterSVESavesI != MBB.getFirstTerminator ())
740744 ++AfterSVESavesI;
741745 }
746+ PPRCalleeSavesEnd = ZPRCalleeSavesBegin = AfterSVESavesI;
742747 if (ZPRCalleeSavesSize) {
743748 LLVM_DEBUG (dbgs () << " ZPRCalleeSavedStackSize = "
744749 << ZPRCalleeSavesSize.getScalable () << " \n " );
745- assert (isPartOfZPRCalleeSaves (AfterSVESavesI ) &&
750+ assert (isPartOfZPRCalleeSaves (*ZPRCalleeSavesBegin ) &&
746751 " Unexpected instruction" );
747752 while (isPartOfZPRCalleeSaves (AfterSVESavesI) &&
748753 AfterSVESavesI != MBB.getFirstTerminator ())
749754 ++AfterSVESavesI;
750755 }
756+ ZPRCalleeSavesEnd = AfterSVESavesI;
751757 }
752758
753759 if (EmitAsyncCFI)
0 commit comments