llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
28.75k stars 11.89k forks source link

Reverse the ownership between DICompileUnit and DISubprogram #27658

Closed adrian-prantl closed 8 years ago

adrian-prantl commented 8 years ago
Bugzilla Link 27284
Resolution FIXED
Resolved on Apr 15, 2016 11:00
Version trunk
OS All
Attachments a python script that updates LLVM IR testcases to the new format
CC @adrian-prantl,@dwblaikie,@dexonsmith,@echristo,@joker-eph

Extended Description

Currently each Function points to a DISubprogram and DISubprogram has a scope field. For member functions the scope is a DICompositeType. DIScopes never point to the DICompileUnit to facilitate type uniquing.

Distinct DISubprograms (with isDefinition: true) are not part of the type hierarchy and cannot be uniqued. I'm proposing to remove the subprograms list from DICompileUnit and instead add a pointer to the owning compile unit to distinct DISubprograms. This would make it easy for ThinLTO to strip unneeded DISubprograms and their transitively referenced debug info.

Motivation

Materializing DISubprograms is currently the most expensive operation when doing a ThinLTO build of clang.

We want the DISubprogram to be stored in a separate Bitcode block (or the same block as the function body) so we can avoid having to expensively deserialize all DISubprograms together with the global metadata. If a function has been inlined into another subprogram we need to store a reference the block containing the inlined subprogram.

Implementation

Attached is a python script that updates LLVM IR testcases to the new format.

adrian-prantl commented 8 years ago

r266445+r266446

adrian-prantl commented 8 years ago

assigned to @adrian-prantl