[PATCH] D70350: [DWARF] Allow cross-CU references of subprogram definitions

David Blaikie via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 3 11:19:58 PST 2019


dblaikie added a comment.

In D70350#1767483 <https://reviews.llvm.org/D70350#1767483>, @vsk wrote:

> In D70350#1766238 <https://reviews.llvm.org/D70350#1766238>, @dblaikie wrote:
>
> > Shooting from the hip/casual opinion/haven't looked at the details - cross-CU inlining should have the same problem/this should be solved in the same way. (in cross-CU inlining, do we create the source CU (if it has no non-inlined functions, etc) even if nothing's inlined from it (then it'd be an empty CU)? Is it made on-demand when an inlining is needed?)
>
>
> Yes, cross-CU inlining does solve the same problem. To answer your first question, the CU defining an inlined function is constructed lazily. My rough understanding is that:
>
> - In `DwarfDebug::endFunctionImpl(MachineFunction &MF)`, we gather all the inlined function scopes used in `MF`, then lazily create abstract definition subprograms for the inlined callees (lazily creating their CUs if needed, see `DwarfDebug::constructAbstractSubprogramScopeDIE`)
> - Once that's done we emit any necessary TAG_inlined_subroutines.
>
>   That sounds similar to suggestion (1) I described in my last comment, except that `DwarfDebug` is responsible for lazily creating the callee's CU.


Yep - I'd certainly suggest starting down that direction, at least. I don't know of any gotchas right off the bat, but there might be some complications lurking there.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D70350/new/

https://reviews.llvm.org/D70350





More information about the llvm-commits mailing list