diff options
author | Evan Cheng <evan.cheng@apple.com> | 2007-07-17 18:40:47 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2007-07-17 18:40:47 +0000 |
commit | 5b3332cc272589b3cba938663f6bd37fbda97566 (patch) | |
tree | 6b6200fb54220efb72f2ad5ff09bdfeca5a7d2af | |
parent | 698b63862c8fa3146ab914d01b6d52b81e9708ea (diff) | |
download | external_llvm-5b3332cc272589b3cba938663f6bd37fbda97566.tar.gz external_llvm-5b3332cc272589b3cba938663f6bd37fbda97566.tar.bz2 external_llvm-5b3332cc272589b3cba938663f6bd37fbda97566.zip |
Make sure not to break eh_return.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39978 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/X86/X86RegisterInfo.cpp | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/lib/Target/X86/X86RegisterInfo.cpp b/lib/Target/X86/X86RegisterInfo.cpp index fce7172ae3..9278516d05 100644 --- a/lib/Target/X86/X86RegisterInfo.cpp +++ b/lib/Target/X86/X86RegisterInfo.cpp @@ -1332,14 +1332,6 @@ void X86RegisterInfo::emitEpilogue(MachineFunction &MF, NumBytes -= SlotSize; } - // We're returning from function via eh_return. - if (RetOpcode == X86::EH_RETURN) { - MachineOperand &DestAddr = MBBI->getOperand(0); - assert(DestAddr.isReg() && "Offset should be in register!"); - BuildMI(MBB, MBBI, TII.get(Is64Bit ? X86::MOV64rr : X86::MOV32rr),StackPtr). - addReg(DestAddr.getReg()); - } - // Skip the callee-saved pop instructions. while (MBBI != MBB.begin()) { MachineBasicBlock::iterator PI = prior(MBBI); @@ -1355,7 +1347,7 @@ void X86RegisterInfo::emitEpilogue(MachineFunction &MF, MachineInstr *MI = addRegOffset(BuildMI(TII.get(Opc), StackPtr), FramePtr, -CSSize); MBB.insert(MBBI, MI); - return; + NumBytes = 0; } if (NumBytes) { // adjust stack pointer back: ESP += numbytes @@ -1380,6 +1372,15 @@ void X86RegisterInfo::emitEpilogue(MachineFunction &MF, if (NumBytes) emitSPUpdate(MBB, MBBI, StackPtr, NumBytes, Is64Bit, TII); } + + // We're returning from function via eh_return. + if (RetOpcode == X86::EH_RETURN) { + MBBI = prior(MBB.end()); + MachineOperand &DestAddr = MBBI->getOperand(0); + assert(DestAddr.isReg() && "Offset should be in register!"); + BuildMI(MBB, MBBI, TII.get(Is64Bit ? X86::MOV64rr : X86::MOV32rr),StackPtr). + addReg(DestAddr.getReg()); + } } unsigned X86RegisterInfo::getRARegister() const { |