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 | a65d33760bae63b11569117597cf0fbd64f5c0eb (patch) | |
tree | f95c7ea71895d8820cda774f8ef888e3b6f83a53 /lib/Target/Sparc/SparcFrameLowering.cpp | |
parent | a0de26ce34877fac86ef6d939d56bbebb3b4e14c (diff) | |
download | external_llvm-a65d33760bae63b11569117597cf0fbd64f5c0eb.zip external_llvm-a65d33760bae63b11569117597cf0fbd64f5c0eb.tar.gz external_llvm-a65d33760bae63b11569117597cf0fbd64f5c0eb.tar.bz2 |
[Sparc] Implements hasReservedCallFrame and hasFP.
This is to generate correct framesetup code when the function
has variable sized allocas.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@182108 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Sparc/SparcFrameLowering.cpp')
-rw-r--r-- | lib/Target/Sparc/SparcFrameLowering.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/Target/Sparc/SparcFrameLowering.cpp b/lib/Target/Sparc/SparcFrameLowering.cpp index 7874240..afa8411 100644 --- a/lib/Target/Sparc/SparcFrameLowering.cpp +++ b/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(); +} + |