[llvm] r230268 - X86: Explain why we cannot use a 'mov' in a Win64 epilogue
David Majnemer
david.majnemer at gmail.com
Mon Feb 23 13:50:26 PST 2015
Author: majnemer
Date: Mon Feb 23 15:50:25 2015
New Revision: 230268
URL: http://llvm.org/viewvc/llvm-project?rev=230268&view=rev
Log:
X86: Explain why we cannot use a 'mov' in a Win64 epilogue
Modified:
llvm/trunk/lib/Target/X86/X86FrameLowering.cpp
Modified: llvm/trunk/lib/Target/X86/X86FrameLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86FrameLowering.cpp?rev=230268&r1=230267&r2=230268&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86FrameLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86FrameLowering.cpp Mon Feb 23 15:50:25 2015
@@ -1048,6 +1048,12 @@ void X86FrameLowering::emitEpilogue(Mach
if (RegInfo->needsStackRealignment(MF))
MBBI = FirstCSPop;
if (IsWinEH) {
+ // There are only two legal forms of epilogue:
+ // - add SEHAllocationSize, %rsp
+ // - lea SEHAllocationSize(%FramePtr), %rsp
+ //
+ // We are *not* permitted to use 'mov %FramePtr, %rsp' because the Win64
+ // unwinder will not recognize 'mov' as an epilogue instruction.
unsigned SEHFrameOffset = calculateSetFPREG(SEHStackAllocAmt);
addRegOffset(BuildMI(MBB, MBBI, DL, TII.get(X86::LEA64r), StackPtr),
FramePtr, false, SEHStackAllocAmt - SEHFrameOffset);
More information about the llvm-commits
mailing list