[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