summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86FrameLowering.cpp
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2015-10-08 18:41:52 +0000
committerReid Kleckner <rnk@google.com>2015-10-08 18:41:52 +0000
commitb2244cb8f07d1cfe592d91532dfaf0804f662200 (patch)
treeefaa967f36e8bb4e139e0b3c256c810bfe3ab5ea /llvm/lib/Target/X86/X86FrameLowering.cpp
parente5d3ac8240f817ed40948b7f41c0fc69efd47679 (diff)
downloadbcm5719-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.cpp10
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;
}
OpenPOWER on IntegriCloud