[lld] bc588f9 - [lld/mac] Inline a check

Nico Weber via llvm-commits llvm-commits at lists.llvm.org
Mon May 17 17:09:16 PDT 2021


Author: Nico Weber
Date: 2021-05-17T20:04:45-04:00
New Revision: bc588f9961117d5705e97eb2191e901e92fe9094

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

LOG: [lld/mac] Inline a check

`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 :)

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

Added: 
    

Modified: 
    lld/MachO/SyntheticSections.cpp

Removed: 
    


################################################################################
diff  --git a/lld/MachO/SyntheticSections.cpp b/lld/MachO/SyntheticSections.cpp
index 730145230cb0..f1afbc723bb5 100644
--- a/lld/MachO/SyntheticSections.cpp
+++ b/lld/MachO/SyntheticSections.cpp
@@ -587,9 +587,11 @@ static bool shouldExportSymbol(const Defined *defined) {
   // 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() {


        


More information about the llvm-commits mailing list