`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
// 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() {