Debug Info: remove duplication of DIEs when a DIE can be shared across CUs.
authorManman Ren <manman.ren@gmail.com>
Thu, 31 Oct 2013 17:54:35 +0000 (17:54 +0000)
committerManman Ren <manman.ren@gmail.com>
Thu, 31 Oct 2013 17:54:35 +0000 (17:54 +0000)
commitb8b70e10a2b3f252314e0d176379778fe8f3b582
treebc8eda4c9cd5ed6c4cd419ba90c867160b6d3005
parent6d6e66a3eeb579794378dd528e73645ea54bc69b
Debug Info: remove duplication of DIEs when a DIE can be shared across CUs.

We add a map in DwarfDebug to map MDNodes that are shareable across CUs to the
corresponding DIEs: MDTypeNodeToDieMap. These DIEs can be shared across CUs,
that is why we keep the maps in DwarfDebug instead of CompileUnit.

We make the assumption that if a DIE is not added to an owner yet, we assume
it belongs to the current CU. Since DIEs for the type system are added to
their owners immediately after creation, and other DIEs belong to the current
CU, the assumption should be true.

A testing case is added to show that we only create a single DIE for a type
MDNode and we use ref_addr to refer to the type DIE.

We also add a testing case to show ref_addr relocations for non-darwin
platforms.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193779 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/AsmPrinter/DIE.cpp
lib/CodeGen/AsmPrinter/DIE.h
lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
lib/CodeGen/AsmPrinter/DwarfCompileUnit.h
lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/CodeGen/AsmPrinter/DwarfDebug.h
test/DebugInfo/X86/ref_addr_relocation.ll [new file with mode: 0644]
test/Linker/Inputs/type-unique-simple2-a.ll
test/Linker/type-unique-simple-a.ll
test/Linker/type-unique-simple2.ll