mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-09-07 16:54:48 +00:00
Remove hack now that Evan fixed it so that the frame pointer isn't saved twice.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75581 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
65d1e2b6e7
commit
7d43cd8f3e
@ -691,29 +691,6 @@ void X86RegisterInfo::emitCalleeSavedFrameMoves(MachineFunction &MF,
|
||||
unsigned Reg = I->getReg();
|
||||
Offset = MaxOffset - Offset + saveAreaOffset;
|
||||
|
||||
// Don't output a new machine move if we're re-saving the frame
|
||||
// pointer. This happens when the PrologEpilogInserter has inserted an extra
|
||||
// "PUSH" of the frame pointer -- the "emitPrologue" method automatically
|
||||
// generates one when frame pointers are used. If we generate a "machine
|
||||
// move" for this extra "PUSH", the linker will lose track of the fact that
|
||||
// the frame pointer should have the value of the first "PUSH" when it's
|
||||
// trying to unwind.
|
||||
//
|
||||
// FIXME: This looks inelegant. It's possibly correct, but it's covering up
|
||||
// another bug. I.e., one where we generate a prolog like this:
|
||||
//
|
||||
// pushl %ebp
|
||||
// movl %esp, %ebp
|
||||
// pushl %ebp
|
||||
// pushl %esi
|
||||
// ...
|
||||
//
|
||||
// The immediate re-push of EBP is unnecessary. At the least, it's an
|
||||
// optimization bug. EBP can be used as a scratch register in certain
|
||||
// cases, but probably not when we have a frame pointer.
|
||||
if (HasFP && FramePtr == Reg)
|
||||
continue;
|
||||
|
||||
MachineLocation CSDst(MachineLocation::VirtualFP, Offset);
|
||||
MachineLocation CSSrc(Reg);
|
||||
Moves.push_back(MachineMove(LabelId, CSDst, CSSrc));
|
||||
|
Loading…
Reference in New Issue
Block a user