diff options
author | Akira Hatanaka <ahatanaka@mips.com> | 2012-06-27 00:20:39 +0000 |
---|---|---|
committer | Akira Hatanaka <ahatanaka@mips.com> | 2012-06-27 00:20:39 +0000 |
commit | 4782a6e06ad4c6227831b70bb76165bc7b14bff3 (patch) | |
tree | ab3e3424205649e8d480d8dbd4bf685197323e4e /lib | |
parent | e877824eddaec07780ff104474447081fd470ecf (diff) | |
download | external_llvm-4782a6e06ad4c6227831b70bb76165bc7b14bff3.zip external_llvm-4782a6e06ad4c6227831b70bb76165bc7b14bff3.tar.gz external_llvm-4782a6e06ad4c6227831b70bb76165bc7b14bff3.tar.bz2 |
Fix bug in computation of stack size in MipsFrameLowering.cpp.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159240 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Target/Mips/MipsFrameLowering.cpp | 9 | ||||
-rw-r--r-- | lib/Target/Mips/MipsISelDAGToDAG.cpp | 4 |
2 files changed, 10 insertions, 3 deletions
diff --git a/lib/Target/Mips/MipsFrameLowering.cpp b/lib/Target/Mips/MipsFrameLowering.cpp index 15ab1c3..5afd2fc 100644 --- a/lib/Target/Mips/MipsFrameLowering.cpp +++ b/lib/Target/Mips/MipsFrameLowering.cpp @@ -112,9 +112,12 @@ void MipsFrameLowering::emitPrologue(MachineFunction &MF) const { // First, compute final stack size. unsigned StackAlign = getStackAlignment(); - uint64_t StackSize = STI.inMips16Mode()? 0: - MFI->getObjectOffset(MipsFI->getGlobalRegFI()) + - StackAlign + RoundUpToAlignment(MFI->getStackSize(), StackAlign); + uint64_t StackSize = RoundUpToAlignment(MFI->getStackSize(), StackAlign); + + if (MipsFI->globalBaseRegSet()) + StackSize += MFI->getObjectOffset(MipsFI->getGlobalRegFI()) + StackAlign; + else + StackSize += RoundUpToAlignment(MipsFI->getMaxCallFrameSize(), StackAlign); // Update stack size MFI->setStackSize(StackSize); diff --git a/lib/Target/Mips/MipsISelDAGToDAG.cpp b/lib/Target/Mips/MipsISelDAGToDAG.cpp index 15e745f..9f1c0f6 100644 --- a/lib/Target/Mips/MipsISelDAGToDAG.cpp +++ b/lib/Target/Mips/MipsISelDAGToDAG.cpp @@ -117,6 +117,10 @@ private: void MipsDAGToDAGISel::InitGlobalBaseReg(MachineFunction &MF) { MipsFunctionInfo *MipsFI = MF.getInfo<MipsFunctionInfo>(); + if (((MF.getTarget().getRelocationModel() == Reloc::Static) || + Subtarget.inMips16Mode()) && !MipsFI->globalBaseRegSet()) + return; + MachineBasicBlock &MBB = MF.front(); MachineBasicBlock::iterator I = MBB.begin(); MachineRegisterInfo &RegInfo = MF.getRegInfo(); |