@@ -324,7 +324,7 @@ AArch64FrameLowering::getArgumentStackToRestore(MachineFunction &MF,
324324static bool produceCompactUnwindFrame (const AArch64FrameLowering &,
325325 MachineFunction &MF);
326326
327- // Conservatively, returns true if the function is likely to have an SVE vectors
327+ // Conservatively, returns true if the function is likely to have SVE vectors
328328// on the stack. This function is safe to be called before callee-saves or
329329// object offsets have been determined.
330330static bool isLikelyToHaveSVEStack (const AArch64FrameLowering &AFL,
@@ -338,7 +338,7 @@ static bool isLikelyToHaveSVEStack(const AArch64FrameLowering &AFL,
338338
339339 const MachineFrameInfo &MFI = MF.getFrameInfo ();
340340 for (int FI = MFI.getObjectIndexBegin (); FI < MFI.getObjectIndexEnd (); FI++) {
341- if (MFI.getStackID (FI) == TargetStackID::ScalableVector )
341+ if (MFI.isScalableStackID (FI))
342342 return true ;
343343 }
344344
@@ -1228,7 +1228,7 @@ AArch64FrameLowering::getFrameIndexReferenceFromSP(const MachineFunction &MF,
12281228 const auto *AFI = MF.getInfo <AArch64FunctionInfo>();
12291229 bool FPAfterSVECalleeSaves =
12301230 isTargetWindows (MF) && AFI->getSVECalleeSavedStackSize ();
1231- if (MFI.getStackID (FI) == TargetStackID::ScalableVector ) {
1231+ if (MFI.isScalableStackID (FI)) {
12321232 if (FPAfterSVECalleeSaves &&
12331233 -ObjectOffset <= (int64_t )AFI->getSVECalleeSavedStackSize ())
12341234 return StackOffset::getScalable (ObjectOffset);
@@ -1294,7 +1294,7 @@ StackOffset AArch64FrameLowering::resolveFrameIndexReference(
12941294 const auto &MFI = MF.getFrameInfo ();
12951295 int64_t ObjectOffset = MFI.getObjectOffset (FI);
12961296 bool isFixed = MFI.isFixedObjectIndex (FI);
1297- bool isSVE = MFI.getStackID (FI) == TargetStackID::ScalableVector ;
1297+ bool isSVE = MFI.isScalableStackID (FI);
12981298 return resolveFrameOffsetReference (MF, ObjectOffset, isFixed, isSVE, FrameReg,
12991299 PreferFP, ForSimm);
13001300}
@@ -2021,10 +2021,14 @@ bool AArch64FrameLowering::spillCalleeSavedRegisters(
20212021 }
20222022 // Update the StackIDs of the SVE stack slots.
20232023 MachineFrameInfo &MFI = MF.getFrameInfo ();
2024- if (RPI.Type == RegPairInfo::ZPR || RPI. Type == RegPairInfo::PPR ) {
2024+ if (RPI.Type == RegPairInfo::ZPR) {
20252025 MFI.setStackID (FrameIdxReg1, TargetStackID::ScalableVector);
20262026 if (RPI.isPaired ())
20272027 MFI.setStackID (FrameIdxReg2, TargetStackID::ScalableVector);
2028+ } else if (RPI.Type == RegPairInfo::PPR) {
2029+ MFI.setStackID (FrameIdxReg1, TargetStackID::ScalablePredicateVector);
2030+ if (RPI.isPaired ())
2031+ MFI.setStackID (FrameIdxReg2, TargetStackID::ScalablePredicateVector);
20282032 }
20292033 }
20302034 return true ;
@@ -2232,8 +2236,7 @@ void AArch64FrameLowering::determineStackHazardSlot(
22322236 for (auto &MI : MBB) {
22332237 std::optional<int > FI = getLdStFrameID (MI, MFI);
22342238 if (FI && *FI >= 0 && *FI < (int )FrameObjects.size ()) {
2235- if (MFI.getStackID (*FI) == TargetStackID::ScalableVector ||
2236- AArch64InstrInfo::isFpOrNEON (MI))
2239+ if (MFI.isScalableStackID (*FI) || AArch64InstrInfo::isFpOrNEON (MI))
22372240 FrameObjects[*FI] |= 2 ;
22382241 else
22392242 FrameObjects[*FI] |= 1 ;
@@ -2678,7 +2681,7 @@ static int64_t determineSVEStackObjectOffsets(MachineFrameInfo &MFI,
26782681#ifndef NDEBUG
26792682 // First process all fixed stack objects.
26802683 for (int I = MFI.getObjectIndexBegin (); I != 0 ; ++I)
2681- assert (MFI.getStackID (I) != TargetStackID::ScalableVector &&
2684+ assert (! MFI.isScalableStackID (I) &&
26822685 " SVE vectors should never be passed on the stack by value, only by "
26832686 " reference." );
26842687#endif
@@ -2712,12 +2715,11 @@ static int64_t determineSVEStackObjectOffsets(MachineFrameInfo &MFI,
27122715 int StackProtectorFI = -1 ;
27132716 if (MFI.hasStackProtectorIndex ()) {
27142717 StackProtectorFI = MFI.getStackProtectorIndex ();
2715- if (MFI.getStackID (StackProtectorFI) == TargetStackID::ScalableVector )
2718+ if (MFI.isScalableStackID (StackProtectorFI))
27162719 ObjectsToAllocate.push_back (StackProtectorFI);
27172720 }
27182721 for (int I = 0 , E = MFI.getObjectIndexEnd (); I != E; ++I) {
2719- unsigned StackID = MFI.getStackID (I);
2720- if (StackID != TargetStackID::ScalableVector)
2722+ if (!MFI.isScalableStackID (I))
27212723 continue ;
27222724 if (I == StackProtectorFI)
27232725 continue ;
@@ -3721,8 +3723,7 @@ void AArch64FrameLowering::orderFrameObjects(
37213723 if (AFI.hasStackHazardSlotIndex ()) {
37223724 std::optional<int > FI = getLdStFrameID (MI, MFI);
37233725 if (FI && *FI >= 0 && *FI < (int )FrameObjects.size ()) {
3724- if (MFI.getStackID (*FI) == TargetStackID::ScalableVector ||
3725- AArch64InstrInfo::isFpOrNEON (MI))
3726+ if (MFI.isScalableStackID (*FI) || AArch64InstrInfo::isFpOrNEON (MI))
37263727 FrameObjects[*FI].Accesses |= FrameObject::AccessFPR;
37273728 else
37283729 FrameObjects[*FI].Accesses |= FrameObject::AccessGPR;
@@ -4080,7 +4081,7 @@ void AArch64FrameLowering::emitRemarks(
40804081 }
40814082
40824083 unsigned RegTy = StackAccess::AccessType::GPR;
4083- if (MFI.getStackID (FrameIdx) == TargetStackID::ScalableVector ) {
4084+ if (MFI.isScalableStackID (FrameIdx)) {
40844085 // SPILL_PPR_TO_ZPR_SLOT_PSEUDO and FILL_PPR_FROM_ZPR_SLOT_PSEUDO
40854086 // spill/fill the predicate as a data vector (so are an FPR access).
40864087 if (MI.getOpcode () != AArch64::SPILL_PPR_TO_ZPR_SLOT_PSEUDO &&
0 commit comments