Generate native unwind info on Win64
authorReid Kleckner <reid@kleckner.net>
Fri, 20 Jun 2014 20:35:47 +0000 (20:35 +0000)
committerReid Kleckner <reid@kleckner.net>
Fri, 20 Jun 2014 20:35:47 +0000 (20:35 +0000)
commit5b8e73ef81bdbc3ce4d020f66d875e22827b7626
tree81e26866c3184143e4adec8bd26d003dc644245b
parent20dead8d0ce64f70e1dcf558f69b6d725ba18d9d
Generate native unwind info on Win64

This patch enables LLVM to emit Win64-native unwind info rather than
DWARF CFI.  It handles all corner cases (I hope), including stack
realignment.

Because the unwind info is not flexible enough to describe stack frames
with a gap of unknown size in the middle, such as the one caused by
stack realignment, I modified register spilling code to place all spills
into the fixed frame slots, so that they can be accessed relative to the
frame pointer.

Patch by Vadim Chugunov!

Reviewed By: rnk

Differential Revision: http://reviews.llvm.org/D4081

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211399 91177308-0d34-0410-b5e6-96231b3b80d8
19 files changed:
include/llvm/CodeGen/MachineFrameInfo.h
include/llvm/MC/MCAsmInfo.h
include/llvm/Target/TargetFrameLowering.h
lib/CodeGen/AsmPrinter/Win64Exception.cpp
lib/CodeGen/MachineFunction.cpp
lib/CodeGen/PrologEpilogInserter.cpp
lib/MC/MCObjectFileInfo.cpp
lib/MC/MCStreamer.cpp
lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp
lib/Target/X86/X86FrameLowering.cpp
lib/Target/X86/X86FrameLowering.h
lib/Target/X86/X86ISelLowering.cpp
lib/Target/X86/X86InstrCompiler.td
lib/Target/X86/X86MCInstLower.cpp
test/CodeGen/X86/2007-05-05-Personality.ll
test/CodeGen/X86/2009-06-03-Win64SpillXMM.ll
test/CodeGen/X86/avx-intel-ocl.ll
test/CodeGen/X86/gcc_except_table.ll
test/CodeGen/X86/win64_eh.ll [new file with mode: 0644]