diff options
author | Reid Kleckner <rnk@google.com> | 2015-10-08 18:41:52 +0000 |
---|---|---|
committer | Reid Kleckner <rnk@google.com> | 2015-10-08 18:41:52 +0000 |
commit | b2244cb8f07d1cfe592d91532dfaf0804f662200 (patch) | |
tree | efaa967f36e8bb4e139e0b3c256c810bfe3ab5ea /llvm/lib/Target/X86/X86FrameLowering.cpp | |
parent | e5d3ac8240f817ed40948b7f41c0fc69efd47679 (diff) | |
download | bcm5719-llvm-b2244cb8f07d1cfe592d91532dfaf0804f662200.tar.gz bcm5719-llvm-b2244cb8f07d1cfe592d91532dfaf0804f662200.zip |
[WinEH] Relax assertion in the presence of stack realignment
The code is correct as is, but we should test it.
llvm-svn: 249715
Diffstat (limited to 'llvm/lib/Target/X86/X86FrameLowering.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86FrameLowering.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/llvm/lib/Target/X86/X86FrameLowering.cpp b/llvm/lib/Target/X86/X86FrameLowering.cpp index 7f05e5b3b13..f63be63efed 100644 --- a/llvm/lib/Target/X86/X86FrameLowering.cpp +++ b/llvm/lib/Target/X86/X86FrameLowering.cpp @@ -2178,12 +2178,9 @@ MachineBasicBlock::iterator X86FrameLowering::restoreWin32EHStackPointers( int EHRegOffset = getFrameIndexReference(MF, FI, UsedReg); int EndOffset = -EHRegOffset - EHRegSize; FuncInfo.EHRegNodeEndOffset = EndOffset; - assert(EndOffset >= 0 && - "end of registration object above normal EBP position!"); if (UsedReg == FramePtr) { // ADD $offset, %ebp - assert(UsedReg == FramePtr); unsigned ADDri = getADDriOpcode(false, EndOffset); BuildMI(MBB, MBBI, DL, TII.get(ADDri), FramePtr) .addReg(FramePtr) @@ -2191,8 +2188,9 @@ MachineBasicBlock::iterator X86FrameLowering::restoreWin32EHStackPointers( .setMIFlag(MachineInstr::FrameSetup) ->getOperand(3) .setIsDead(); - } else { - assert(UsedReg == BasePtr); + assert(EndOffset >= 0 && + "end of registration object above normal EBP position!"); + } else if (UsedReg == BasePtr) { // LEA offset(%ebp), %esi addRegOffset(BuildMI(MBB, MBBI, DL, TII.get(X86::LEA32r), BasePtr), FramePtr, false, EndOffset) @@ -2205,6 +2203,8 @@ MachineBasicBlock::iterator X86FrameLowering::restoreWin32EHStackPointers( addRegOffset(BuildMI(MBB, MBBI, DL, TII.get(X86::MOV32rm), FramePtr), UsedReg, true, Offset) .setMIFlag(MachineInstr::FrameSetup); + } else { + llvm_unreachable("32-bit frames with WinEH must use FramePtr or BasePtr"); } return MBBI; } |