Skip to content

Commit

Permalink
[lld-macho] Parallelize scanning the symbol tables in export/unexport…
Browse files Browse the repository at this point in the history
…-ing.

(Split from D113167)
Benchmarking on one of our large apps which exports a few thousands symbols,
this showed an improvement of ~17%.

x ./LLD_no_parallel.txt
+ ./LLD_with_parallel.txt

    N           Min           Max        Median           Avg        Stddev
x  10         84.01         89.41         88.64        87.693     1.7424061
+  10          71.9         74.29         72.63        72.753    0.77734663
Difference at 95.0% confidence
	-14.94 +/- 1.26763
	-17.0367% +/- 1.44553%
	(Student's t, pooled s = 1.34912)

(wallclock)

Differential Revision: https://reviews.llvm.org/D113820
  • Loading branch information
oontvoo committed Nov 13, 2021
1 parent 4b768ee commit ad93232
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions lld/MachO/Driver.cpp
Expand Up @@ -1462,7 +1462,7 @@ bool macho::link(ArrayRef<const char *> argsArr, bool canExitEarly,
createSyntheticSymbols();

if (!config->exportedSymbols.empty()) {
for (Symbol *sym : symtab->getSymbols()) {
parallelForEach(symtab->getSymbols(), [](Symbol *sym) {
if (auto *defined = dyn_cast<Defined>(sym)) {
StringRef symbolName = defined->getName();
if (config->exportedSymbols.match(symbolName)) {
Expand All @@ -1474,12 +1474,13 @@ bool macho::link(ArrayRef<const char *> argsArr, bool canExitEarly,
defined->privateExtern = true;
}
}
}
});
} else if (!config->unexportedSymbols.empty()) {
for (Symbol *sym : symtab->getSymbols())
parallelForEach(symtab->getSymbols(), [](Symbol *sym) {
if (auto *defined = dyn_cast<Defined>(sym))
if (config->unexportedSymbols.match(defined->getName()))
defined->privateExtern = true;
});
}

for (const Arg *arg : args.filtered(OPT_sectcreate)) {
Expand Down

0 comments on commit ad93232

Please sign in to comment.