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)
commit4a01230db47e979146cf5784ca78bd7d6f802ac3
tree3ba71b8e6754800a4e71d7b653d483dc08ce0604
parent4a4b357c90dc459568d1003913bcb2c6e4238c19
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

llvm-svn: 211399
19 files changed:
llvm/include/llvm/CodeGen/MachineFrameInfo.h
llvm/include/llvm/MC/MCAsmInfo.h
llvm/include/llvm/Target/TargetFrameLowering.h
llvm/lib/CodeGen/AsmPrinter/Win64Exception.cpp
llvm/lib/CodeGen/MachineFunction.cpp
llvm/lib/CodeGen/PrologEpilogInserter.cpp
llvm/lib/MC/MCObjectFileInfo.cpp
llvm/lib/MC/MCStreamer.cpp
llvm/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp
llvm/lib/Target/X86/X86FrameLowering.cpp
llvm/lib/Target/X86/X86FrameLowering.h
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/lib/Target/X86/X86InstrCompiler.td
llvm/lib/Target/X86/X86MCInstLower.cpp
llvm/test/CodeGen/X86/2007-05-05-Personality.ll
llvm/test/CodeGen/X86/2009-06-03-Win64SpillXMM.ll
llvm/test/CodeGen/X86/avx-intel-ocl.ll
llvm/test/CodeGen/X86/gcc_except_table.ll
llvm/test/CodeGen/X86/win64_eh.ll [new file with mode: 0644]