Skip to content

Commit

Permalink
[DWARFLinker] Only extract unit DIEs when cloning clang modules (llvm…
Browse files Browse the repository at this point in the history
…#69495)

Reduce memory usage by only extract unit DIEs when cloning clang
modules. We don't need the full debug info yet at this stage. This
reduces peak memory usage of dsymutil when linking the swift driver by
multiple gigabytes.

rdar://117156180
(cherry picked from commit 077d89f)
  • Loading branch information
JDevlieghere committed Oct 18, 2023
1 parent 6b8f65a commit 791931a
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions llvm/lib/DWARFLinker/DWARFLinker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2658,12 +2658,12 @@ Error DWARFLinker::link() {
continue;
}

// In a first phase, just read in the debug info and load all clang modules.
// Clone all the clang modules with requires extracting the DIE units. We
// don't need the full debug info until the Analyze phase.
OptContext.CompileUnits.reserve(
OptContext.File.Dwarf->getNumCompileUnits());

for (const auto &CU : OptContext.File.Dwarf->compile_units()) {
auto CUDie = CU->getUnitDIE(false);
auto CUDie = CU->getUnitDIE(/*ExtractUnitDIEOnly=*/true);
if (Options.Verbose) {
outs() << "Input compilation unit:";
DIDumpOptions DumpOpts;
Expand Down Expand Up @@ -2704,9 +2704,9 @@ Error DWARFLinker::link() {
return;

for (const auto &CU : Context.File.Dwarf->compile_units()) {
// The !isClangModuleRef condition effectively skips over fully resolved
// skeleton units.
auto CUDie = CU->getUnitDIE();
// Previously we only extracted the unit DIEs. We need the full debug info
// now.
auto CUDie = CU->getUnitDIE(/*ExtractUnitDIEOnly=*/false);
std::string PCMFile = getPCMFile(CUDie, Options.ObjectPrefixMap);

if (!CUDie || LLVM_UNLIKELY(Options.Update) ||
Expand Down

0 comments on commit 791931a

Please sign in to comment.