[llvm] r185781 - Revert "Reuse %rax after calling __chkstk on win64"
Eric Christopher
echristo at gmail.com
Mon Jul 8 11:29:14 PDT 2013
On Sun, Jul 7, 2013 at 6:30 PM, Nico Rieck <nico.rieck at gmail.com> wrote:
> Author: nrieck
> Date: Sun Jul 7 20:30:57 2013
> New Revision: 185781
>
> URL: http://llvm.org/viewvc/llvm-project?rev=185781&view=rev
> Log:
> Revert "Reuse %rax after calling __chkstk on win64"
>
> This reverts commit 01f8d579f7672872324208ac5bc4ac311e81b22e.
>
Try to use svn revision numbers when you revert to keep the history clear.
Thanks!
-eric
> Modified:
> llvm/trunk/lib/Target/X86/X86FrameLowering.cpp
> llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
> llvm/trunk/test/CodeGen/X86/win64_alloca_dynalloca.ll
>
> Modified: llvm/trunk/lib/Target/X86/X86FrameLowering.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86FrameLowering.cpp?rev=185781&r1=185780&r2=185781&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86FrameLowering.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86FrameLowering.cpp Sun Jul 7 20:30:57 2013
> @@ -914,14 +914,11 @@ void X86FrameLowering::emitPrologue(Mach
> .addReg(X86::EFLAGS, RegState::Define | RegState::Implicit)
> .setMIFlag(MachineInstr::FrameSetup);
>
> - // MSVC x64's __chkstk does not adjust %rsp itself.
> - // It also does not clobber %rax so we can reuse it when adjusting %rsp.
> - if (isSPUpdateNeeded) {
> - BuildMI(MBB, MBBI, DL, TII.get(X86::SUB64rr), StackPtr)
> - .addReg(StackPtr)
> - .addReg(X86::RAX)
> - .setMIFlag(MachineInstr::FrameSetup);
> - }
> + // MSVC x64's __chkstk needs to adjust %rsp.
> + // FIXME: %rax preserves the offset and should be available.
> + if (isSPUpdateNeeded)
> + emitSPUpdate(MBB, MBBI, StackPtr, -(int64_t)NumBytes, Is64Bit, IsLP64,
> + UseLEA, TII, *RegInfo);
>
> if (isEAXAlive) {
> // Restore EAX
>
> Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=185781&r1=185780&r2=185781&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Sun Jul 7 20:30:57 2013
> @@ -14434,11 +14434,12 @@ X86TargetLowering::EmitLoweredWinAlloca(
> } else {
> // __chkstk(MSVCRT): does not update stack pointer.
> // Clobbers R10, R11 and EFLAGS.
> + // FIXME: RAX(allocated size) might be reused and not killed.
> BuildMI(*BB, MI, DL, TII->get(X86::W64ALLOCA))
> .addExternalSymbol("__chkstk")
> .addReg(X86::RAX, RegState::Implicit)
> .addReg(X86::EFLAGS, RegState::Define | RegState::Implicit);
> - // RAX has the offset to be subtracted from RSP.
> + // RAX has the offset to subtracted from RSP.
> BuildMI(*BB, MI, DL, TII->get(X86::SUB64rr), X86::RSP)
> .addReg(X86::RSP)
> .addReg(X86::RAX);
>
> Modified: llvm/trunk/test/CodeGen/X86/win64_alloca_dynalloca.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/win64_alloca_dynalloca.ll?rev=185781&r1=185780&r2=185781&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/win64_alloca_dynalloca.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/win64_alloca_dynalloca.ll Sun Jul 7 20:30:57 2013
> @@ -19,7 +19,7 @@ entry:
> ; W64: movq %rsp, %rbp
> ; W64: $4096, %rax
> ; W64: callq __chkstk
> -; W64: subq %rax, %rsp
> +; W64: subq $4096, %rsp
>
> ; Freestanding
> ; EFI: movq %rsp, %rbp
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list