[PATCH] D102655: [lld/mac] Inline a check

Nico Weber via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon May 17 15:26:36 PDT 2021


thakis created this revision.
thakis added a reviewer: lld-macho.
Herald added a reviewer: int3.
Herald added a reviewer: gkm.
Herald added a project: lld-macho.
thakis requested review of this revision.

`match()` can only return for non-empty vectors, but at least in
non-LTO builds that isn't clear to the compiler. Help it out.
This is a minor but measurable speedup on my machine (but less
than what we might've lost in https://reviews.llvm.org/D100818#2764272 --
bot note higher N on this measurement here, so higher confidence here):

  % ministat at_main at_branch
  x at_main
  + at_branch
      N           Min           Max        Median           Avg        Stddev
  x  30     3.9243979     4.0395119      3.987375     3.9826236   0.027567796
  +  30     3.8495831     4.0009291      3.931325     3.9347135   0.037832878
  Difference at 95.0% confidence
          -0.0479101 +/- 0.0171102
          -1.20298% +/- 0.429622%
          (Student's t, pooled s = 0.0331007)

No behavior change.

Eventually we should apply these lists at symbol parse time instead of
every time shouldExportSymbol() though :)


https://reviews.llvm.org/D102655

Files:
  lld/MachO/SyntheticSections.cpp


Index: lld/MachO/SyntheticSections.cpp
===================================================================
--- lld/MachO/SyntheticSections.cpp
+++ lld/MachO/SyntheticSections.cpp
@@ -587,9 +587,11 @@
   // Measurements show that symbol ordering (which again looks up
   // every symbol in a hashmap) is the biggest bottleneck when linking
   // chromium_framework, so this will likely be worth optimizing.
-  return config->exportedSymbols.empty()
-             ? !config->unexportedSymbols.match(defined->getName())
-             : config->exportedSymbols.match(defined->getName());
+  if (!config->exportedSymbols.empty())
+    return config->exportedSymbols.match(defined->getName());
+  if (!config->unexportedSymbols.empty())
+    return !config->unexportedSymbols.match(defined->getName());
+  return true;
 }
 
 void ExportSection::finalizeContents() {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D102655.346002.patch
Type: text/x-patch
Size: 860 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210517/0e0deb69/attachment.bin>


More information about the llvm-commits mailing list