[llvm] 077d89f - [DWARFLinker] Only extract unit DIEs when cloning clang modules (#69495)

via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 18 14:52:53 PDT 2023


Author: Jonas Devlieghere
Date: 2023-10-18T14:52:49-07:00
New Revision: 077d89f0ee840d88a7d59a4f85d152d9c6f4758a

URL: https://github.com/llvm/llvm-project/commit/077d89f0ee840d88a7d59a4f85d152d9c6f4758a
DIFF: https://github.com/llvm/llvm-project/commit/077d89f0ee840d88a7d59a4f85d152d9c6f4758a.diff

LOG: [DWARFLinker] Only extract unit DIEs when cloning clang modules (#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

Added: 
    

Modified: 
    llvm/lib/DWARFLinker/DWARFLinker.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/DWARFLinker/DWARFLinker.cpp b/llvm/lib/DWARFLinker/DWARFLinker.cpp
index 5ed4923dc0125a6..2d8360f100c1172 100644
--- a/llvm/lib/DWARFLinker/DWARFLinker.cpp
+++ b/llvm/lib/DWARFLinker/DWARFLinker.cpp
@@ -2682,12 +2682,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;
@@ -2728,9 +2728,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) ||


        


More information about the llvm-commits mailing list