[lld] r350452 - [LLD][COFF] PDB: Parallel sort publics

Alexandre Ganea via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 4 17:16:24 PST 2019


Author: aganea
Date: Fri Jan  4 17:16:24 2019
New Revision: 350452

URL: http://llvm.org/viewvc/llvm-project?rev=350452&view=rev
Log:
[LLD][COFF] PDB: Parallel sort publics

Saves up to 1.3 sec on large PDBs.
Figures below are for the "Globals Stream Layout" pass:

                            Before	This patch
Large EXE (PDB is ~2 GB)	3330 ms	2022 ms
Large EXE (PDB is ~2 GB)	2680 ms	1608 ms
Large DLL (PDB is ~1 GB)	1455 ms	938 ms
Large DLL (PDB is ~800 MB)	1215 ms	800 ms
Small DLL (PDB is ~200 MB)	224 ms	146 ms

Differential Revision: https://reviews.llvm.org/D56334

Modified:
    lld/trunk/COFF/PDB.cpp

Modified: lld/trunk/COFF/PDB.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/PDB.cpp?rev=350452&r1=350451&r2=350452&view=diff
==============================================================================
--- lld/trunk/COFF/PDB.cpp (original)
+++ lld/trunk/COFF/PDB.cpp Fri Jan  4 17:16:24 2019
@@ -53,6 +53,7 @@
 #include "llvm/Support/Errc.h"
 #include "llvm/Support/FormatVariadic.h"
 #include "llvm/Support/JamCRC.h"
+#include "llvm/Support/Parallel.h"
 #include "llvm/Support/Path.h"
 #include "llvm/Support/ScopedPrinter.h"
 #include <memory>
@@ -1387,10 +1388,10 @@ void PDBLinker::addObjectsToPDB() {
 
   if (!Publics.empty()) {
     // Sort the public symbols and add them to the stream.
-    std::sort(Publics.begin(), Publics.end(),
-              [](const PublicSym32 &L, const PublicSym32 &R) {
-                return L.Name < R.Name;
-              });
+    sort(parallel::par, Publics.begin(), Publics.end(),
+         [](const PublicSym32 &L, const PublicSym32 &R) {
+           return L.Name < R.Name;
+         });
     for (const PublicSym32 &Pub : Publics)
       GsiBuilder.addPublicSymbol(Pub);
   }




More information about the llvm-commits mailing list