Skip to content

Commit eb08324

Browse files
committed
More fixes.
Add more tests. Correctly spill p12-p15. Fix issue spilling an odd number of predicates.
1 parent 1814b32 commit eb08324

File tree

5 files changed

+1589
-553
lines changed

5 files changed

+1589
-553
lines changed

llvm/lib/Target/AArch64/AArch64CallingConvention.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -622,7 +622,7 @@ def CSR_Darwin_AArch64_SVE_AAPCS : CalleeSavedRegs<(add (sequence "Z%u", 8, 23),
622622
LR, FP, X19, X20, X21, X22,
623623
X23, X24, X25, X26, X27, X28)>;
624624

625-
def CSR_Win_AArch64_SVE_AAPCS : CalleeSavedRegs<(add (sequence "P%u", 4, 11),
625+
def CSR_Win_AArch64_SVE_AAPCS : CalleeSavedRegs<(add (sequence "P%u", 4, 15),
626626
(sequence "Z%u", 8, 23),
627627
X19, X20, X21, X22, X23, X24,
628628
X25, X26, X27, X28, FP, LR)>;

llvm/lib/Target/AArch64/AArch64FrameLowering.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3184,6 +3184,12 @@ static void computeCalleeSaveRegisterPairs(
31843184
RPI.isPaired()) // RPI.FrameIdx must be the lower index of the pair
31853185
RPI.FrameIdx = CSI[i + RegInc].getFrameIdx();
31863186

3187+
// Realign the scalable offset if necesary. This is relevant when
3188+
// spilling predicates on Windows.
3189+
if (RPI.isScalable() && ScalableByteOffset % Scale != 0) {
3190+
ScalableByteOffset = alignTo(ScalableByteOffset, Scale);
3191+
}
3192+
31873193
int OffsetPre = RPI.isScalable() ? ScalableByteOffset : ByteOffset;
31883194
assert(OffsetPre % Scale == 0);
31893195

0 commit comments

Comments
 (0)