@@ -716,31 +716,37 @@ void AArch64PrologueEmitter::emitPrologue() {
716716 StackOffset PPRLocalsSize = AFL.getPPRStackSize (MF) - PPRCalleeSavesSize;
717717 StackOffset ZPRLocalsSize = AFL.getZPRStackSize (MF) - ZPRCalleeSavesSize;
718718
719+ std::optional<MachineBasicBlock::iterator> ZPRCalleeSavesBegin,
720+ ZPRCalleeSavesEnd, PPRCalleeSavesBegin, PPRCalleeSavesEnd;
721+
719722 StackOffset CFAOffset =
720723 StackOffset::getFixed ((int64_t )MFI.getStackSize () - NumBytes);
721724 MachineBasicBlock::iterator AfterSVESavesI = AfterGPRSavesI;
722725 if (!FPAfterSVECalleeSaves) {
723726 // Process the SVE callee-saves to find the starts/ends of the ZPR and PPR
724727 // areas.
728+ PPRCalleeSavesBegin = AfterGPRSavesI;
725729 if (PPRCalleeSavesSize) {
726730 LLVM_DEBUG (dbgs () << " PPRCalleeSavedStackSize = "
727731 << PPRCalleeSavesSize.getScalable () << " \n " );
728732
729- assert (isPartOfPPRCalleeSaves (AfterSVESavesI ) &&
733+ assert (isPartOfPPRCalleeSaves (*PPRCalleeSavesBegin ) &&
730734 " Unexpected instruction" );
731735 while (isPartOfPPRCalleeSaves (AfterSVESavesI) &&
732736 AfterSVESavesI != MBB.getFirstTerminator ())
733737 ++AfterSVESavesI;
734738 }
739+ PPRCalleeSavesEnd = ZPRCalleeSavesBegin = AfterSVESavesI;
735740 if (ZPRCalleeSavesSize) {
736741 LLVM_DEBUG (dbgs () << " ZPRCalleeSavedStackSize = "
737742 << ZPRCalleeSavesSize.getScalable () << " \n " );
738- assert (isPartOfZPRCalleeSaves (AfterSVESavesI ) &&
743+ assert (isPartOfZPRCalleeSaves (*ZPRCalleeSavesBegin ) &&
739744 " Unexpected instruction" );
740745 while (isPartOfZPRCalleeSaves (AfterSVESavesI) &&
741746 AfterSVESavesI != MBB.getFirstTerminator ())
742747 ++AfterSVESavesI;
743748 }
749+ ZPRCalleeSavesEnd = AfterSVESavesI;
744750 }
745751
746752 if (EmitAsyncCFI)
0 commit comments