aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAnton Korobeynikov <asl@math.spbu.ru>2008-10-04 11:09:36 +0000
committerAnton Korobeynikov <asl@math.spbu.ru>2008-10-04 11:09:36 +0000
commitc4e8bec703fe0e7191a1e78557d7ab750e965e20 (patch)
tree7d4a22ec1e292f435b4df1877924be2db8772add /lib
parentc8a07733d3cb1ed13963e9da3e8958bed0e3018d (diff)
Revert r56675 - it breaks unwinding runtime everywhere.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@57048 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Target/X86/X86InstrInfo.cpp26
1 files changed, 8 insertions, 18 deletions
diff --git a/lib/Target/X86/X86InstrInfo.cpp b/lib/Target/X86/X86InstrInfo.cpp
index 6a1d1669e8..87c866a286 100644
--- a/lib/Target/X86/X86InstrInfo.cpp
+++ b/lib/Target/X86/X86InstrInfo.cpp
@@ -1833,49 +1833,39 @@ void X86InstrInfo::loadRegFromAddr(MachineFunction &MF, unsigned DestReg,
}
bool X86InstrInfo::spillCalleeSavedRegisters(MachineBasicBlock &MBB,
- MachineBasicBlock::iterator MI,
+ MachineBasicBlock::iterator MI,
const std::vector<CalleeSavedInfo> &CSI) const {
if (CSI.empty())
return false;
- MachineFunction &MF = *MBB.getParent();
bool is64Bit = TM.getSubtarget<X86Subtarget>().is64Bit();
- unsigned FrameReg = is64Bit ? X86::RBP : X86::EBP;
+ unsigned SlotSize = is64Bit ? 8 : 4;
+
+ MachineFunction &MF = *MBB.getParent();
+ X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>();
+ X86FI->setCalleeSavedFrameSize(CSI.size() * SlotSize);
+
unsigned Opc = is64Bit ? X86::PUSH64r : X86::PUSH32r;
- unsigned CSSize = 0;
for (unsigned i = CSI.size(); i != 0; --i) {
unsigned Reg = CSI[i-1].getReg();
- if (Reg == FrameReg && RI.hasFP(MF))
- // It will be saved as part of the prologue.
- continue;
// Add the callee-saved register as live-in. It's killed at the spill.
MBB.addLiveIn(Reg);
BuildMI(MBB, MI, get(Opc)).addReg(Reg);
- ++CSSize;
}
-
- X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>();
- unsigned SlotSize = is64Bit ? 8 : 4;
- X86FI->setCalleeSavedFrameSize(CSSize * SlotSize);
return true;
}
bool X86InstrInfo::restoreCalleeSavedRegisters(MachineBasicBlock &MBB,
- MachineBasicBlock::iterator MI,
+ MachineBasicBlock::iterator MI,
const std::vector<CalleeSavedInfo> &CSI) const {
if (CSI.empty())
return false;
- MachineFunction &MF = *MBB.getParent();
bool is64Bit = TM.getSubtarget<X86Subtarget>().is64Bit();
- unsigned FrameReg = is64Bit ? X86::RBP : X86::EBP;
unsigned Opc = is64Bit ? X86::POP64r : X86::POP32r;
for (unsigned i = 0, e = CSI.size(); i != e; ++i) {
unsigned Reg = CSI[i].getReg();
- if (Reg == FrameReg && RI.hasFP(MF))
- // It will be restored as part of the epilogue.
- continue;
BuildMI(MBB, MI, get(Opc), Reg);
}
return true;