diff options
Diffstat (limited to 'llvm/lib/Target/SystemZ/SystemZFrameLowering.h')
| -rw-r--r-- | llvm/lib/Target/SystemZ/SystemZFrameLowering.h | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/llvm/lib/Target/SystemZ/SystemZFrameLowering.h b/llvm/lib/Target/SystemZ/SystemZFrameLowering.h index 6fddb4f81c41..af219da79c32 100644 --- a/llvm/lib/Target/SystemZ/SystemZFrameLowering.h +++ b/llvm/lib/Target/SystemZ/SystemZFrameLowering.h @@ -29,7 +29,18 @@ public: create(const SystemZSubtarget &STI); // Override TargetFrameLowering. - bool isFPCloseToIncomingSP() const override { return false; } + bool allocateScavengingFrameIndexesNearIncomingSP( + const MachineFunction &MF) const override { + // SystemZ wants normal register scavenging slots, as close to the stack or + // frame pointer as possible. + // The default implementation assumes an x86-like layout, where the frame + // pointer is at the opposite end of the frame from the stack pointer. + // This meant that when frame pointer elimination was disabled, + // the slots ended up being as close as possible to the incoming + // stack pointer, which is the opposite of what we want on SystemZ. + return false; + } + bool hasReservedCallFrame(const MachineFunction &MF) const override; MachineBasicBlock::iterator eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB, @@ -43,7 +54,6 @@ public: SystemZELFFrameLowering(); // Override TargetFrameLowering. - bool isFPCloseToIncomingSP() const override { return false; } bool assignCalleeSavedSpillSlots(MachineFunction &MF, const TargetRegisterInfo *TRI, |
