Skip to content

Conversation

aganea
Copy link
Member

@aganea aganea commented Sep 6, 2025

When /summary is used, we now also display the cumulative size of all input OBJ files, including those pulled from archives. Lazy OBJ files that were not pulled in are not accounted for.

Also added separators between digit groups, to make the output more bearable.

Example output:

> lld-link ... /summary
                                    Summary
--------------------------------------------------------------------------------
               4,958 Input OBJ files (expanded from all cmd-line inputs)
      46,715,790,512 Size of all consumed OBJ files (non-lazy), in bytes
                  42 PDB type server dependencies
                   0 Precomp OBJ dependencies
         293,910,064 Input type records
      16,931,361,928 Size of all input type records, in bytes
          11,201,549 Merged TPI records
           2,765,494 Merged IPI records
              38,649 Output PDB strings
          21,512,230 Global symbol records
          82,380,837 Module symbol records
             715,313 Public symbol records

I've skipped over the exact amounts for "Size of all consumed inputs (non-lazy)" in the unit tests, since the sizes of OBJ files can fluctuate between compilers.

(this is a reopening of #157279 which wasa committed by mistake)

When `/summary` is used, we now also display the cumulative size of all
input OBJ files, including those pulled from archives. Lazy OBJ files
that were not pulled in are not accounted for.

Example output:
```
> lld-link ... /summary
```
@llvmbot
Copy link
Member

llvmbot commented Sep 6, 2025

@llvm/pr-subscribers-platform-windows

@llvm/pr-subscribers-lld

Author: Alexandre Ganea (aganea)

Changes

When /summary is used, we now also display the cumulative size of all input OBJ files, including those pulled from archives. Lazy OBJ files that were not pulled in are not accounted for.

Also added separators between digit groups, to make the output more bearable.

Example output:

> lld-link ... /summary
                                    Summary
--------------------------------------------------------------------------------
               4,958 Input OBJ files (expanded from all cmd-line inputs)
      46,715,790,512 Size of all consumed OBJ files (non-lazy), in bytes
                  42 PDB type server dependencies
                   0 Precomp OBJ dependencies
         293,910,064 Input type records
      16,931,361,928 Size of all input type records, in bytes
          11,201,549 Merged TPI records
           2,765,494 Merged IPI records
              38,649 Output PDB strings
          21,512,230 Global symbol records
          82,380,837 Module symbol records
             715,313 Public symbol records

I've skipped over the exact amounts for "Size of all consumed inputs (non-lazy)" in the unit tests, since the sizes of OBJ files can fluctuate between compilers.

(this is a reopening of #157279 which wasa committed by mistake)


Full diff: https://github.com/llvm/llvm-project/pull/157284.diff

7 Files Affected:

  • (modified) lld/COFF/COFFLinkerContext.h (+1)
  • (modified) lld/COFF/Driver.cpp (+1)
  • (modified) lld/COFF/PDB.cpp (+7-2)
  • (modified) lld/test/COFF/pdb-type-server-simple.test (+12-11)
  • (modified) lld/test/COFF/precomp-link-samename.test (+4-3)
  • (modified) lld/test/COFF/precomp-link.test (+12-11)
  • (modified) lld/test/COFF/precomp-summary-fail.test (+12-11)
diff --git a/lld/COFF/COFFLinkerContext.h b/lld/COFF/COFFLinkerContext.h
index f45b754384ef9..b44263b5a3390 100644
--- a/lld/COFF/COFFLinkerContext.h
+++ b/lld/COFF/COFFLinkerContext.h
@@ -61,6 +61,7 @@ class COFFLinkerContext : public CommonLinkerContext {
   std::vector<ObjFile *> objFileInstances;
   std::map<std::string, PDBInputFile *> pdbInputFileInstances;
   std::vector<ImportFile *> importFileInstances;
+  std::int64_t consumedInputsSize = 0;
 
   MergeChunk *mergeChunkInstances[Log2MaxSectionAlignment + 1] = {};
 
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
index 852c509a5c77d..ba208c212d67e 100644
--- a/lld/COFF/Driver.cpp
+++ b/lld/COFF/Driver.cpp
@@ -205,6 +205,7 @@ void LinkerDriver::addFile(InputFile *file) {
     else
       cast<ObjFile>(file)->parseLazy();
   } else {
+    ctx.consumedInputsSize += file->mb.getBufferSize();
     file->parse();
     if (auto *f = dyn_cast<ObjFile>(file)) {
       ctx.objFileInstances.push_back(f);
diff --git a/lld/COFF/PDB.cpp b/lld/COFF/PDB.cpp
index 94eeae2797971..e5c62af28fdd2 100644
--- a/lld/COFF/PDB.cpp
+++ b/lld/COFF/PDB.cpp
@@ -44,6 +44,7 @@
 #include "llvm/Object/CVDebugRecord.h"
 #include "llvm/Support/CRC.h"
 #include "llvm/Support/Endian.h"
+#include "llvm/Support/FormatAdapters.h"
 #include "llvm/Support/FormatVariadic.h"
 #include "llvm/Support/Path.h"
 #include "llvm/Support/ScopedPrinter.h"
@@ -1247,15 +1248,19 @@ void PDBLinker::printStats() {
          << std::string(80, '-') << '\n';
 
   auto print = [&](uint64_t v, StringRef s) {
-    stream << format_decimal(v, 15) << " " << s << '\n';
+    stream << formatv("{0}",
+                      fmt_align(formatv("{0:N}", v), AlignStyle::Right, 20))
+           << " " << s << '\n';
   };
 
   print(ctx.objFileInstances.size(),
         "Input OBJ files (expanded from all cmd-line inputs)");
+  print(ctx.consumedInputsSize,
+        "Size of all consumed OBJ files (non-lazy), in bytes");
   print(ctx.typeServerSourceMappings.size(), "PDB type server dependencies");
   print(ctx.precompSourceMappings.size(), "Precomp OBJ dependencies");
   print(nbTypeRecords, "Input type records");
-  print(nbTypeRecordsBytes, "Input type records bytes");
+  print(nbTypeRecordsBytes, "Size of all input type records, in bytes");
   print(builder.getTpiBuilder().getRecordCount(), "Merged TPI records");
   print(builder.getIpiBuilder().getRecordCount(), "Merged IPI records");
   print(pdbStrTab.size(), "Output PDB strings");
diff --git a/lld/test/COFF/pdb-type-server-simple.test b/lld/test/COFF/pdb-type-server-simple.test
index 93d66cde4f712..5323a078ac432 100644
--- a/lld/test/COFF/pdb-type-server-simple.test
+++ b/lld/test/COFF/pdb-type-server-simple.test
@@ -106,17 +106,18 @@ CHECK-LABEL:   Mod 0002 | `* Linker *`:
 
 SUMMARY:                                     Summary
 SUMMARY-NEXT: --------------------------------------------------------------------------------
-SUMMARY-NEXT:               2 Input OBJ files (expanded from all cmd-line inputs)
-SUMMARY-NEXT:               1 PDB type server dependencies
-SUMMARY-NEXT:               0 Precomp OBJ dependencies
-SUMMARY-NEXT:              25 Input type records
-SUMMARY-NEXT:             868 Input type records bytes
-SUMMARY-NEXT:               9 Merged TPI records
-SUMMARY-NEXT:              16 Merged IPI records
-SUMMARY-NEXT:               3 Output PDB strings
-SUMMARY-NEXT:               4 Global symbol records
-SUMMARY-NEXT:              14 Module symbol records
-SUMMARY-NEXT:               2 Public symbol records
+SUMMARY-NEXT:                    2 Input OBJ files (expanded from all cmd-line inputs)
+SUMMARY-NEXT: Size of all consumed OBJ files (non-lazy), in bytes
+SUMMARY-NEXT:                    1 PDB type server dependencies
+SUMMARY-NEXT:                    0 Precomp OBJ dependencies
+SUMMARY-NEXT:                   25 Input type records
+SUMMARY-NEXT:                  868 Size of all input type records, in bytes
+SUMMARY-NEXT:                    9 Merged TPI records
+SUMMARY-NEXT:                   16 Merged IPI records
+SUMMARY-NEXT:                    3 Output PDB strings
+SUMMARY-NEXT:                    4 Global symbol records
+SUMMARY-NEXT:                   14 Module symbol records
+SUMMARY-NEXT:                    2 Public symbol records
 
 SUMMARY:      Top 10 types responsible for the most TPI input:
 SUMMARY-NEXT:        index     total bytes   count     size
diff --git a/lld/test/COFF/precomp-link-samename.test b/lld/test/COFF/precomp-link-samename.test
index f44abf289d867..c80774c5d539b 100644
--- a/lld/test/COFF/precomp-link-samename.test
+++ b/lld/test/COFF/precomp-link-samename.test
@@ -12,9 +12,10 @@ CHECK-NOT: LF_ENDPRECOMP
 
 SUMMARY:                                     Summary
 SUMMARY-NEXT: --------------------------------------------------------------------------------
-SUMMARY-NEXT:               4 Input OBJ files (expanded from all cmd-line inputs)
-SUMMARY-NEXT:               0 PDB type server dependencies
-SUMMARY-NEXT:               2 Precomp OBJ dependencies
+SUMMARY-NEXT:                    4 Input OBJ files (expanded from all cmd-line inputs)
+SUMMARY-NEXT: Size of all consumed OBJ files (non-lazy), in bytes
+SUMMARY-NEXT:                    0 PDB type server dependencies
+SUMMARY-NEXT:                    2 Precomp OBJ dependencies
 
 // precompa/precomp.cpp
 #include "precomp.h"
diff --git a/lld/test/COFF/precomp-link.test b/lld/test/COFF/precomp-link.test
index ce90603d0bb87..1c26042a44c33 100644
--- a/lld/test/COFF/precomp-link.test
+++ b/lld/test/COFF/precomp-link.test
@@ -59,17 +59,18 @@ CHECK-NOT: LF_ENDPRECOMP
 
 SUMMARY:                                     Summary
 SUMMARY-NEXT: --------------------------------------------------------------------------------
-SUMMARY-NEXT:               3 Input OBJ files (expanded from all cmd-line inputs)
-SUMMARY-NEXT:               0 PDB type server dependencies
-SUMMARY-NEXT:               1 Precomp OBJ dependencies
-SUMMARY-NEXT:            1066 Input type records
-SUMMARY-NEXT:           55968 Input type records bytes
-SUMMARY-NEXT:             874 Merged TPI records
-SUMMARY-NEXT:             170 Merged IPI records
-SUMMARY-NEXT:               5 Output PDB strings
-SUMMARY-NEXT:             167 Global symbol records
-SUMMARY-NEXT:              20 Module symbol records
-SUMMARY-NEXT:               3 Public symbol records
+SUMMARY-NEXT:                    3 Input OBJ files (expanded from all cmd-line inputs)
+SUMMARY-NEXT: Size of all consumed OBJ files (non-lazy), in bytes
+SUMMARY-NEXT:                    0 PDB type server dependencies
+SUMMARY-NEXT:                    1 Precomp OBJ dependencies
+SUMMARY-NEXT:                1,066 Input type records
+SUMMARY-NEXT:               55,968 Size of all input type records, in bytes
+SUMMARY-NEXT:                  874 Merged TPI records
+SUMMARY-NEXT:                  170 Merged IPI records
+SUMMARY-NEXT:                    5 Output PDB strings
+SUMMARY-NEXT:                  167 Global symbol records
+SUMMARY-NEXT:                   20 Module symbol records
+SUMMARY-NEXT:                    3 Public symbol records
 
 // precomp.h
 #pragma once
diff --git a/lld/test/COFF/precomp-summary-fail.test b/lld/test/COFF/precomp-summary-fail.test
index 5ebba9a1d3c74..0d528c76c2180 100644
--- a/lld/test/COFF/precomp-summary-fail.test
+++ b/lld/test/COFF/precomp-summary-fail.test
@@ -11,14 +11,15 @@ RUN:    /dll /out:%t.dll /debug /summary | FileCheck %s -check-prefix SUMMARY
 
 SUMMARY:                                     Summary
 SUMMARY-NEXT: --------------------------------------------------------------------------------
-SUMMARY-NEXT:               2 Input OBJ files (expanded from all cmd-line inputs)
-SUMMARY-NEXT:               0 PDB type server dependencies
-SUMMARY-NEXT:               1 Precomp OBJ dependencies
-SUMMARY-NEXT:               8 Input type records
-SUMMARY-NEXT:             232 Input type records bytes
-SUMMARY-NEXT:               3 Merged TPI records
-SUMMARY-NEXT:               2 Merged IPI records
-SUMMARY-NEXT:               1 Output PDB strings
-SUMMARY-NEXT:               0 Global symbol records
-SUMMARY-NEXT:               4 Module symbol records
-SUMMARY-NEXT:               0 Public symbol records
+SUMMARY-NEXT:                    2 Input OBJ files (expanded from all cmd-line inputs)
+SUMMARY-NEXT: Size of all consumed OBJ files (non-lazy), in bytes
+SUMMARY-NEXT:                    0 PDB type server dependencies
+SUMMARY-NEXT:                    1 Precomp OBJ dependencies
+SUMMARY-NEXT:                    8 Input type records
+SUMMARY-NEXT:                  232 Size of all input type records, in bytes
+SUMMARY-NEXT:                    3 Merged TPI records
+SUMMARY-NEXT:                    2 Merged IPI records
+SUMMARY-NEXT:                    1 Output PDB strings
+SUMMARY-NEXT:                    0 Global symbol records
+SUMMARY-NEXT:                    4 Module symbol records
+SUMMARY-NEXT:                    0 Public symbol records

@llvmbot
Copy link
Member

llvmbot commented Sep 6, 2025

@llvm/pr-subscribers-lld-coff

Author: Alexandre Ganea (aganea)

Changes

When /summary is used, we now also display the cumulative size of all input OBJ files, including those pulled from archives. Lazy OBJ files that were not pulled in are not accounted for.

Also added separators between digit groups, to make the output more bearable.

Example output:

&gt; lld-link ... /summary
                                    Summary
--------------------------------------------------------------------------------
               4,958 Input OBJ files (expanded from all cmd-line inputs)
      46,715,790,512 Size of all consumed OBJ files (non-lazy), in bytes
                  42 PDB type server dependencies
                   0 Precomp OBJ dependencies
         293,910,064 Input type records
      16,931,361,928 Size of all input type records, in bytes
          11,201,549 Merged TPI records
           2,765,494 Merged IPI records
              38,649 Output PDB strings
          21,512,230 Global symbol records
          82,380,837 Module symbol records
             715,313 Public symbol records

I've skipped over the exact amounts for "Size of all consumed inputs (non-lazy)" in the unit tests, since the sizes of OBJ files can fluctuate between compilers.

(this is a reopening of #157279 which wasa committed by mistake)


Full diff: https://github.com/llvm/llvm-project/pull/157284.diff

7 Files Affected:

  • (modified) lld/COFF/COFFLinkerContext.h (+1)
  • (modified) lld/COFF/Driver.cpp (+1)
  • (modified) lld/COFF/PDB.cpp (+7-2)
  • (modified) lld/test/COFF/pdb-type-server-simple.test (+12-11)
  • (modified) lld/test/COFF/precomp-link-samename.test (+4-3)
  • (modified) lld/test/COFF/precomp-link.test (+12-11)
  • (modified) lld/test/COFF/precomp-summary-fail.test (+12-11)
diff --git a/lld/COFF/COFFLinkerContext.h b/lld/COFF/COFFLinkerContext.h
index f45b754384ef9..b44263b5a3390 100644
--- a/lld/COFF/COFFLinkerContext.h
+++ b/lld/COFF/COFFLinkerContext.h
@@ -61,6 +61,7 @@ class COFFLinkerContext : public CommonLinkerContext {
   std::vector<ObjFile *> objFileInstances;
   std::map<std::string, PDBInputFile *> pdbInputFileInstances;
   std::vector<ImportFile *> importFileInstances;
+  std::int64_t consumedInputsSize = 0;
 
   MergeChunk *mergeChunkInstances[Log2MaxSectionAlignment + 1] = {};
 
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
index 852c509a5c77d..ba208c212d67e 100644
--- a/lld/COFF/Driver.cpp
+++ b/lld/COFF/Driver.cpp
@@ -205,6 +205,7 @@ void LinkerDriver::addFile(InputFile *file) {
     else
       cast<ObjFile>(file)->parseLazy();
   } else {
+    ctx.consumedInputsSize += file->mb.getBufferSize();
     file->parse();
     if (auto *f = dyn_cast<ObjFile>(file)) {
       ctx.objFileInstances.push_back(f);
diff --git a/lld/COFF/PDB.cpp b/lld/COFF/PDB.cpp
index 94eeae2797971..e5c62af28fdd2 100644
--- a/lld/COFF/PDB.cpp
+++ b/lld/COFF/PDB.cpp
@@ -44,6 +44,7 @@
 #include "llvm/Object/CVDebugRecord.h"
 #include "llvm/Support/CRC.h"
 #include "llvm/Support/Endian.h"
+#include "llvm/Support/FormatAdapters.h"
 #include "llvm/Support/FormatVariadic.h"
 #include "llvm/Support/Path.h"
 #include "llvm/Support/ScopedPrinter.h"
@@ -1247,15 +1248,19 @@ void PDBLinker::printStats() {
          << std::string(80, '-') << '\n';
 
   auto print = [&](uint64_t v, StringRef s) {
-    stream << format_decimal(v, 15) << " " << s << '\n';
+    stream << formatv("{0}",
+                      fmt_align(formatv("{0:N}", v), AlignStyle::Right, 20))
+           << " " << s << '\n';
   };
 
   print(ctx.objFileInstances.size(),
         "Input OBJ files (expanded from all cmd-line inputs)");
+  print(ctx.consumedInputsSize,
+        "Size of all consumed OBJ files (non-lazy), in bytes");
   print(ctx.typeServerSourceMappings.size(), "PDB type server dependencies");
   print(ctx.precompSourceMappings.size(), "Precomp OBJ dependencies");
   print(nbTypeRecords, "Input type records");
-  print(nbTypeRecordsBytes, "Input type records bytes");
+  print(nbTypeRecordsBytes, "Size of all input type records, in bytes");
   print(builder.getTpiBuilder().getRecordCount(), "Merged TPI records");
   print(builder.getIpiBuilder().getRecordCount(), "Merged IPI records");
   print(pdbStrTab.size(), "Output PDB strings");
diff --git a/lld/test/COFF/pdb-type-server-simple.test b/lld/test/COFF/pdb-type-server-simple.test
index 93d66cde4f712..5323a078ac432 100644
--- a/lld/test/COFF/pdb-type-server-simple.test
+++ b/lld/test/COFF/pdb-type-server-simple.test
@@ -106,17 +106,18 @@ CHECK-LABEL:   Mod 0002 | `* Linker *`:
 
 SUMMARY:                                     Summary
 SUMMARY-NEXT: --------------------------------------------------------------------------------
-SUMMARY-NEXT:               2 Input OBJ files (expanded from all cmd-line inputs)
-SUMMARY-NEXT:               1 PDB type server dependencies
-SUMMARY-NEXT:               0 Precomp OBJ dependencies
-SUMMARY-NEXT:              25 Input type records
-SUMMARY-NEXT:             868 Input type records bytes
-SUMMARY-NEXT:               9 Merged TPI records
-SUMMARY-NEXT:              16 Merged IPI records
-SUMMARY-NEXT:               3 Output PDB strings
-SUMMARY-NEXT:               4 Global symbol records
-SUMMARY-NEXT:              14 Module symbol records
-SUMMARY-NEXT:               2 Public symbol records
+SUMMARY-NEXT:                    2 Input OBJ files (expanded from all cmd-line inputs)
+SUMMARY-NEXT: Size of all consumed OBJ files (non-lazy), in bytes
+SUMMARY-NEXT:                    1 PDB type server dependencies
+SUMMARY-NEXT:                    0 Precomp OBJ dependencies
+SUMMARY-NEXT:                   25 Input type records
+SUMMARY-NEXT:                  868 Size of all input type records, in bytes
+SUMMARY-NEXT:                    9 Merged TPI records
+SUMMARY-NEXT:                   16 Merged IPI records
+SUMMARY-NEXT:                    3 Output PDB strings
+SUMMARY-NEXT:                    4 Global symbol records
+SUMMARY-NEXT:                   14 Module symbol records
+SUMMARY-NEXT:                    2 Public symbol records
 
 SUMMARY:      Top 10 types responsible for the most TPI input:
 SUMMARY-NEXT:        index     total bytes   count     size
diff --git a/lld/test/COFF/precomp-link-samename.test b/lld/test/COFF/precomp-link-samename.test
index f44abf289d867..c80774c5d539b 100644
--- a/lld/test/COFF/precomp-link-samename.test
+++ b/lld/test/COFF/precomp-link-samename.test
@@ -12,9 +12,10 @@ CHECK-NOT: LF_ENDPRECOMP
 
 SUMMARY:                                     Summary
 SUMMARY-NEXT: --------------------------------------------------------------------------------
-SUMMARY-NEXT:               4 Input OBJ files (expanded from all cmd-line inputs)
-SUMMARY-NEXT:               0 PDB type server dependencies
-SUMMARY-NEXT:               2 Precomp OBJ dependencies
+SUMMARY-NEXT:                    4 Input OBJ files (expanded from all cmd-line inputs)
+SUMMARY-NEXT: Size of all consumed OBJ files (non-lazy), in bytes
+SUMMARY-NEXT:                    0 PDB type server dependencies
+SUMMARY-NEXT:                    2 Precomp OBJ dependencies
 
 // precompa/precomp.cpp
 #include "precomp.h"
diff --git a/lld/test/COFF/precomp-link.test b/lld/test/COFF/precomp-link.test
index ce90603d0bb87..1c26042a44c33 100644
--- a/lld/test/COFF/precomp-link.test
+++ b/lld/test/COFF/precomp-link.test
@@ -59,17 +59,18 @@ CHECK-NOT: LF_ENDPRECOMP
 
 SUMMARY:                                     Summary
 SUMMARY-NEXT: --------------------------------------------------------------------------------
-SUMMARY-NEXT:               3 Input OBJ files (expanded from all cmd-line inputs)
-SUMMARY-NEXT:               0 PDB type server dependencies
-SUMMARY-NEXT:               1 Precomp OBJ dependencies
-SUMMARY-NEXT:            1066 Input type records
-SUMMARY-NEXT:           55968 Input type records bytes
-SUMMARY-NEXT:             874 Merged TPI records
-SUMMARY-NEXT:             170 Merged IPI records
-SUMMARY-NEXT:               5 Output PDB strings
-SUMMARY-NEXT:             167 Global symbol records
-SUMMARY-NEXT:              20 Module symbol records
-SUMMARY-NEXT:               3 Public symbol records
+SUMMARY-NEXT:                    3 Input OBJ files (expanded from all cmd-line inputs)
+SUMMARY-NEXT: Size of all consumed OBJ files (non-lazy), in bytes
+SUMMARY-NEXT:                    0 PDB type server dependencies
+SUMMARY-NEXT:                    1 Precomp OBJ dependencies
+SUMMARY-NEXT:                1,066 Input type records
+SUMMARY-NEXT:               55,968 Size of all input type records, in bytes
+SUMMARY-NEXT:                  874 Merged TPI records
+SUMMARY-NEXT:                  170 Merged IPI records
+SUMMARY-NEXT:                    5 Output PDB strings
+SUMMARY-NEXT:                  167 Global symbol records
+SUMMARY-NEXT:                   20 Module symbol records
+SUMMARY-NEXT:                    3 Public symbol records
 
 // precomp.h
 #pragma once
diff --git a/lld/test/COFF/precomp-summary-fail.test b/lld/test/COFF/precomp-summary-fail.test
index 5ebba9a1d3c74..0d528c76c2180 100644
--- a/lld/test/COFF/precomp-summary-fail.test
+++ b/lld/test/COFF/precomp-summary-fail.test
@@ -11,14 +11,15 @@ RUN:    /dll /out:%t.dll /debug /summary | FileCheck %s -check-prefix SUMMARY
 
 SUMMARY:                                     Summary
 SUMMARY-NEXT: --------------------------------------------------------------------------------
-SUMMARY-NEXT:               2 Input OBJ files (expanded from all cmd-line inputs)
-SUMMARY-NEXT:               0 PDB type server dependencies
-SUMMARY-NEXT:               1 Precomp OBJ dependencies
-SUMMARY-NEXT:               8 Input type records
-SUMMARY-NEXT:             232 Input type records bytes
-SUMMARY-NEXT:               3 Merged TPI records
-SUMMARY-NEXT:               2 Merged IPI records
-SUMMARY-NEXT:               1 Output PDB strings
-SUMMARY-NEXT:               0 Global symbol records
-SUMMARY-NEXT:               4 Module symbol records
-SUMMARY-NEXT:               0 Public symbol records
+SUMMARY-NEXT:                    2 Input OBJ files (expanded from all cmd-line inputs)
+SUMMARY-NEXT: Size of all consumed OBJ files (non-lazy), in bytes
+SUMMARY-NEXT:                    0 PDB type server dependencies
+SUMMARY-NEXT:                    1 Precomp OBJ dependencies
+SUMMARY-NEXT:                    8 Input type records
+SUMMARY-NEXT:                  232 Size of all input type records, in bytes
+SUMMARY-NEXT:                    3 Merged TPI records
+SUMMARY-NEXT:                    2 Merged IPI records
+SUMMARY-NEXT:                    1 Output PDB strings
+SUMMARY-NEXT:                    0 Global symbol records
+SUMMARY-NEXT:                    4 Module symbol records
+SUMMARY-NEXT:                    0 Public symbol records

Copy link
Member

@mstorsjo mstorsjo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, this looks straightforward enough.

I'm somewhat surprised to see a seemingly general feature like /summary (even if many of the numbers may be related to debug info) be implemented in the PDB writer (which obviously is a preexisting design). What if the user doesn't do any PDB output at all (or e.g. links with -debug:dwarf) - does the /summary option still have an effect?

@aganea
Copy link
Member Author

aganea commented Sep 8, 2025

LGTM, this looks straightforward enough.

I'm somewhat surprised to see a seemingly general feature like /summary (even if many of the numbers may be related to debug info) be implemented in the PDB writer (which obviously is a preexisting design). What if the user doesn't do any PDB output at all (or e.g. links with -debug:dwarf) - does the /summary option still have an effect?

I initially meant it for some PDB stats, but indeed its scope already goes beyond that. I will move it to a more appropriate place and will send a PR.

@aganea aganea merged commit cb00c2d into llvm:main Sep 8, 2025
24 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants