[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
This commit is contained in:
Nico Weber 2021-05-17 18:17:18 -04:00
parent 6d3e3ae8a9
commit bc588f9961
1 changed files with 5 additions and 3 deletions

View File

@ -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() {