mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-15 05:24:01 +00:00
PPC: Support dynamic allocas with large alignment
Support for dynamic stack alignments in the PPC backend has been unfinished, in part because it depends on dynamic stack realignment (which I only just recently implemented fully). Now we can also support dynamic allocas with higher than the default target stack alignment (16 bytes). In order to round-up the requested size to the maximum requested alignment, we need an additional register to hold the rounded-up size. We're already using one scavenged register to hold the previous stack-pointer value (which needs to be stored with the signal-safe stdux update), and so when we have dynamic allocas and a large alignment, we allocate two emergency spill slots for the scavenger. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186562 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -1237,8 +1237,12 @@ PPCFrameLowering::addScavengingSpillSlot(MachineFunction &MF,
|
||||
RC->getAlignment(),
|
||||
false));
|
||||
|
||||
// Might we have over-aligned allocas?
|
||||
bool HasAlVars = MFI->hasVarSizedObjects() &&
|
||||
MFI->getMaxAlignment() > getStackAlignment();
|
||||
|
||||
// These kinds of spills might need two registers.
|
||||
if (spillsCR(MF) || spillsVRSAVE(MF))
|
||||
if (spillsCR(MF) || spillsVRSAVE(MF) || HasAlVars)
|
||||
RS->addScavengingFrameIndex(MFI->CreateStackObject(RC->getSize(),
|
||||
RC->getAlignment(),
|
||||
false));
|
||||
|
Reference in New Issue
Block a user