diff options
author | Venkatraman Govindaraju <venkatra@cs.wisc.edu> | 2013-05-17 15:14:34 +0000 |
---|---|---|
committer | Venkatraman Govindaraju <venkatra@cs.wisc.edu> | 2013-05-17 15:14:34 +0000 |
commit | 641b0b5a21b7c5a8c7cc0bf90ff5bc53de02d68a (patch) | |
tree | 162eb2e2b3913e0c93bebd4a0e91ef9f195a8ba9 /llvm/lib/Target/Sparc/SparcFrameLowering.cpp | |
parent | dd3c583211ccddf18cde7f42d7c5b4159e51a41f (diff) | |
download | bcm5719-llvm-641b0b5a21b7c5a8c7cc0bf90ff5bc53de02d68a.tar.gz bcm5719-llvm-641b0b5a21b7c5a8c7cc0bf90ff5bc53de02d68a.zip |
[Sparc] Implements hasReservedCallFrame and hasFP.
This is to generate correct framesetup code when the function
has variable sized allocas.
llvm-svn: 182108
Diffstat (limited to 'llvm/lib/Target/Sparc/SparcFrameLowering.cpp')
-rw-r--r-- | llvm/lib/Target/Sparc/SparcFrameLowering.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/Target/Sparc/SparcFrameLowering.cpp b/llvm/lib/Target/Sparc/SparcFrameLowering.cpp index 7874240f598..afa8411802d 100644 --- a/llvm/lib/Target/Sparc/SparcFrameLowering.cpp +++ b/llvm/lib/Target/Sparc/SparcFrameLowering.cpp @@ -106,3 +106,18 @@ void SparcFrameLowering::emitEpilogue(MachineFunction &MF, BuildMI(MBB, MBBI, dl, TII.get(SP::RESTORErr), SP::G0).addReg(SP::G0) .addReg(SP::G0); } + +bool SparcFrameLowering::hasReservedCallFrame(const MachineFunction &MF) const { + //Reserve call frame if there are no variable sized objects on the stack + return !MF.getFrameInfo()->hasVarSizedObjects(); +} + +// hasFP - Return true if the specified function should have a dedicated frame +// pointer register. This is true if the function has variable sized allocas or +// if frame pointer elimination is disabled. +bool SparcFrameLowering::hasFP(const MachineFunction &MF) const { + const MachineFrameInfo *MFI = MF.getFrameInfo(); + return MF.getTarget().Options.DisableFramePointerElim(MF) || + MFI->hasVarSizedObjects() || MFI->isFrameAddressTaken(); +} + |