This CL changes the function prologue and epilogue emitted on X86 when stack needs...
authorAlexey Samsonov <samsonov@google.com>
Mon, 16 Jul 2012 06:54:09 +0000 (06:54 +0000)
committerAlexey Samsonov <samsonov@google.com>
Mon, 16 Jul 2012 06:54:09 +0000 (06:54 +0000)
commit99a92f269d4ea6f13a9858bb883e13382d021120
treeb158cfaac30e00e48d05b2fa0151950bd0df773b
parent38f488e46292e38c776dd6ec3e3a0b8c57952fcb
This CL changes the function prologue and epilogue emitted on X86 when stack needs realignment.
It is intended to fix PR11468.

Old prologue and epilogue looked like this:
push %rbp
mov %rsp, %rbp
and $alignment, %rsp
push %r14
push %r15
...
pop %r15
pop %r14
mov %rbp, %rsp
pop %rbp

The problem was to reference the locations of callee-saved registers in exception handling:
locations of callee-saved had to be re-calculated regarding the stack alignment operation. It would
take some effort to implement this in LLVM, as currently MachineLocation can only have the form
"Register + Offset". Funciton prologue and epilogue are now changed to:

push %rbp
mov %rsp, %rbp
push %14
push %15
and $alignment, %rsp
...
lea -$size_of_saved_registers(%rbp), %rsp
pop %r15
pop %r14
pop %rbp

Reviewed by Chad Rosier.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160248 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86FrameLowering.cpp
test/CodeGen/X86/dynamic-allocas-VLAs.ll
test/CodeGen/X86/force-align-stack-alloca.ll
test/CodeGen/X86/pr11468.ll [new file with mode: 0644]