Debug info: Infrastructure to support debug locations for fragmented
authorAdrian Prantl <aprantl@apple.com>
Fri, 1 Aug 2014 22:11:58 +0000 (22:11 +0000)
committerAdrian Prantl <aprantl@apple.com>
Fri, 1 Aug 2014 22:11:58 +0000 (22:11 +0000)
commit2a39c993ebe8f7221f7f8478c5c3712078d4aee6
treeba4581aab93e15e6cfdf7681d156664783d653a1
parent04395213ab46faceee69e127b698687cd33e984d
Debug info: Infrastructure to support debug locations for fragmented
variables (for example, by-value struct arguments passed in registers, or
large integer values split across several smaller registers).
On the IR level, this adds a new type of complex address operation OpPiece
to DIVariable that describes size and offset of a variable fragment.
On the DWARF emitter level, all pieces describing the same variable are
collected, sorted and emitted as DWARF expressions using the DW_OP_piece
and DW_OP_bit_piece operators.

http://reviews.llvm.org/D3373
rdar://problem/15928306

What this patch doesn't do / Future work:
- This patch only adds the backend machinery to make this work, patches
  that change SROA and SelectionDAG's type legalizer to actually create
  such debug info will follow. (http://reviews.llvm.org/D2680)
- Making the DIVariable complex expressions into an argument of dbg.value
  will reduce the memory footprint of the debug metadata.
- The sorting/uniquing of pieces should be moved into DebugLocEntry,
  to facilitate the merging of multi-piece entries.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214576 91177308-0d34-0410-b5e6-96231b3b80d8
18 files changed:
docs/SourceLevelDebugging.rst
include/llvm/CodeGen/AsmPrinter.h
include/llvm/IR/DIBuilder.h
include/llvm/IR/DebugInfo.h
lib/CodeGen/AsmPrinter/AsmPrinter.cpp
lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.cpp
lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.h
lib/CodeGen/AsmPrinter/DebugLocEntry.h
lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/CodeGen/AsmPrinter/DwarfDebug.h
lib/CodeGen/AsmPrinter/DwarfUnit.cpp
lib/CodeGen/AsmPrinter/DwarfUnit.h
lib/IR/DIBuilder.cpp
lib/IR/DebugInfo.cpp
test/DebugInfo/X86/pieces-1.ll [new file with mode: 0644]
test/DebugInfo/X86/pieces-2.ll [new file with mode: 0644]
test/DebugInfo/X86/pieces-3.ll [new file with mode: 0644]