diff options
author | Akira Hatanaka <ahatanaka@mips.com> | 2013-01-30 00:26:49 +0000 |
---|---|---|
committer | Akira Hatanaka <ahatanaka@mips.com> | 2013-01-30 00:26:49 +0000 |
commit | c0b020690bf04f5336bffafbcb1488763d1e4b70 (patch) | |
tree | 733364a6645f497ea13f13b005d25009809af16c /llvm/lib/Target/Mips/MipsSERegisterInfo.cpp | |
parent | 26afef3e8ddf7809e23b9072a7a320ebef1e878a (diff) | |
download | bcm5719-llvm-c0b020690bf04f5336bffafbcb1488763d1e4b70.tar.gz bcm5719-llvm-c0b020690bf04f5336bffafbcb1488763d1e4b70.zip |
[mips] Lower EH_RETURN.
Patch by Sasa Stankovic.
llvm-svn: 173862
Diffstat (limited to 'llvm/lib/Target/Mips/MipsSERegisterInfo.cpp')
-rw-r--r-- | llvm/lib/Target/Mips/MipsSERegisterInfo.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/Target/Mips/MipsSERegisterInfo.cpp b/llvm/lib/Target/Mips/MipsSERegisterInfo.cpp index abeab7b61b1..0c0a1a3d396 100644 --- a/llvm/lib/Target/Mips/MipsSERegisterInfo.cpp +++ b/llvm/lib/Target/Mips/MipsSERegisterInfo.cpp @@ -83,6 +83,7 @@ void MipsSERegisterInfo::eliminateFI(MachineBasicBlock::iterator II, MachineInstr &MI = *II; MachineFunction &MF = *MI.getParent()->getParent(); MachineFrameInfo *MFI = MF.getFrameInfo(); + MipsFunctionInfo *MipsFI = MF.getInfo<MipsFunctionInfo>(); const std::vector<CalleeSavedInfo> &CSI = MFI->getCalleeSavedInfo(); int MinCSFI = 0; @@ -93,15 +94,18 @@ void MipsSERegisterInfo::eliminateFI(MachineBasicBlock::iterator II, MaxCSFI = CSI[CSI.size() - 1].getFrameIdx(); } + bool EhDataRegFI = MipsFI->isEhDataRegFI(FrameIndex); + // The following stack frame objects are always referenced relative to $sp: // 1. Outgoing arguments. // 2. Pointer to dynamically allocated stack space. // 3. Locations for callee-saved registers. + // 4. Locations for eh data registers. // Everything else is referenced relative to whatever register // getFrameRegister() returns. unsigned FrameReg; - if (FrameIndex >= MinCSFI && FrameIndex <= MaxCSFI) + if ((FrameIndex >= MinCSFI && FrameIndex <= MaxCSFI) || EhDataRegFI) FrameReg = Subtarget.isABI_N64() ? Mips::SP_64 : Mips::SP; else FrameReg = getFrameRegister(MF); |