diff options
author | Reid Kleckner <reid@kleckner.net> | 2014-07-01 00:42:47 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2014-07-01 00:42:47 +0000 |
commit | b5dd9452b46b17f49c4afcc00c06c4bfcb4fdc87 (patch) | |
tree | 0244a204fdc104e4905e2d1a64e7b0fe76c0b236 /llvm/lib/Target/X86/X86FrameLowering.cpp | |
parent | 9890a0528716f9e3941eff3ab3a8fb52cc83574a (diff) | |
download | bcm5719-llvm-b5dd9452b46b17f49c4afcc00c06c4bfcb4fdc87.tar.gz bcm5719-llvm-b5dd9452b46b17f49c4afcc00c06c4bfcb4fdc87.zip |
Fix .seh_stackalloc 0
seh_stackalloc 0 is not representable in Win64 SEH info, so emitting it
is a bug.
Reviewers: rnk
Differential Revision: http://reviews.llvm.org/D4334
Patch by Vadim Chugunov!
llvm-svn: 212081
Diffstat (limited to 'llvm/lib/Target/X86/X86FrameLowering.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86FrameLowering.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/llvm/lib/Target/X86/X86FrameLowering.cpp b/llvm/lib/Target/X86/X86FrameLowering.cpp index 1544549e5e9..8c029a8c22d 100644 --- a/llvm/lib/Target/X86/X86FrameLowering.cpp +++ b/llvm/lib/Target/X86/X86FrameLowering.cpp @@ -751,10 +751,13 @@ void X86FrameLowering::emitPrologue(MachineFunction &MF) const { SEHFrameOffset += SEHFrameOffset % 16; // ensure alignmant // This only needs to account for XMM spill slots, GPR slots - // are covered by .seh_pushreg's emitted above. - BuildMI(MBB, MBBI, DL, TII.get(X86::SEH_StackAlloc)) - .addImm(SEHFrameOffset - X86FI->getCalleeSavedFrameSize()) - .setMIFlag(MachineInstr::FrameSetup); + // are covered by the .seh_pushreg's emitted above. + unsigned Size = SEHFrameOffset - X86FI->getCalleeSavedFrameSize(); + if (Size) { + BuildMI(MBB, MBBI, DL, TII.get(X86::SEH_StackAlloc)) + .addImm(Size) + .setMIFlag(MachineInstr::FrameSetup); + } BuildMI(MBB, MBBI, DL, TII.get(X86::SEH_SetFrame)) .addImm(FramePtr) |