[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