diff --git a/lib/Target/X86/X86FrameLowering.cpp b/lib/Target/X86/X86FrameLowering.cpp index ed3118af058..182af84f7ca 100644 --- a/lib/Target/X86/X86FrameLowering.cpp +++ b/lib/Target/X86/X86FrameLowering.cpp @@ -1394,9 +1394,6 @@ X86FrameLowering::adjustForSegmentedStacks(MachineFunction &MF) const { MF.getRegInfo().setPhysRegUsed(X86::R10); MF.getRegInfo().setPhysRegUsed(X86::R11); } else { - // Since we'll call __morestack, stack alignment needs to be preserved. - BuildMI(allocMBB, DL, TII.get(X86::SUB32ri), X86::ESP).addReg(X86::ESP) - .addImm(8); BuildMI(allocMBB, DL, TII.get(X86::PUSHi32)) .addImm(X86FI->getArgumentStackSize()); BuildMI(allocMBB, DL, TII.get(X86::PUSHi32)) @@ -1411,11 +1408,6 @@ X86FrameLowering::adjustForSegmentedStacks(MachineFunction &MF) const { BuildMI(allocMBB, DL, TII.get(X86::CALLpcrel32)) .addExternalSymbol("__morestack"); - // __morestack only seems to remove 8 bytes off the stack. Add back the - // additional 8 bytes we added before pushing the arguments. - if (!Is64Bit) - BuildMI(allocMBB, DL, TII.get(X86::ADD32ri), X86::ESP).addReg(X86::ESP) - .addImm(8); if (IsNested) BuildMI(allocMBB, DL, TII.get(X86::MORESTACK_RET_RESTORE_R10)); else diff --git a/test/CodeGen/X86/segmented-stacks.ll b/test/CodeGen/X86/segmented-stacks.ll index a92aca5abb2..c28c31911d2 100644 --- a/test/CodeGen/X86/segmented-stacks.ll +++ b/test/CodeGen/X86/segmented-stacks.ll @@ -23,11 +23,9 @@ false: ; X32: leal -12(%esp), %ecx ; X32-NEXT: cmpl %gs:48, %ecx -; X32: subl $8, %esp -; X32-NEXT: pushl $4 +; X32: pushl $4 ; X32-NEXT: pushl $12 ; X32-NEXT: calll __morestack -; X32-NEXT: addl $8, %esp ; X32-NEXT: ret ; X32: movl %esp, %eax @@ -72,11 +70,9 @@ define i32 @test_nested(i32 * nest %closure, i32 %other) { ; X32-NEXT: cmpl %gs:48, %edx -; X32: subl $8, %esp -; X32-NEXT: pushl $4 +; X32: pushl $4 ; X32-NEXT: pushl $0 ; X32-NEXT: calll __morestack -; X32-NEXT: addl $8, %esp ; X32-NEXT: ret ; X64: leaq (%rsp), %r11