[lld] f79e65e - [lld-macho] Cache library paths from findLibrary
Keith Smiley via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 3 10:07:33 PDT 2021
Author: Keith Smiley
Date: 2021-11-03T10:02:23-07:00
New Revision: f79e65e61fafedd439cbc120b2461fab831127f5
URL: https://github.com/llvm/llvm-project/commit/f79e65e61fafedd439cbc120b2461fab831127f5
DIFF: https://github.com/llvm/llvm-project/commit/f79e65e61fafedd439cbc120b2461fab831127f5.diff
LOG: [lld-macho] Cache library paths from findLibrary
On top of https://reviews.llvm.org/D113063 this took another 10 seconds
off our overall link time.
Reviewed By: #lld-macho, int3
Differential Revision: https://reviews.llvm.org/D113073
Added:
Modified:
lld/MachO/Driver.cpp
Removed:
################################################################################
diff --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp
index 826e5e816adc2..2bcea9ad505d7 100644
--- a/lld/MachO/Driver.cpp
+++ b/lld/MachO/Driver.cpp
@@ -80,16 +80,30 @@ static HeaderFileType getOutputType(const InputArgList &args) {
}
}
+static DenseMap<CachedHashStringRef, StringRef> resolvedLibraries;
static Optional<StringRef> findLibrary(StringRef name) {
- if (config->searchDylibsFirst) {
- if (Optional<StringRef> path = findPathCombination(
- "lib" + name, config->librarySearchPaths, {".tbd", ".dylib"}))
- return path;
+ CachedHashStringRef key(name);
+ auto entry = resolvedLibraries.find(key);
+ if (entry != resolvedLibraries.end())
+ return entry->second;
+
+ auto doFind = [&] {
+ if (config->searchDylibsFirst) {
+ if (Optional<StringRef> path = findPathCombination(
+ "lib" + name, config->librarySearchPaths, {".tbd", ".dylib"}))
+ return path;
+ return findPathCombination("lib" + name, config->librarySearchPaths,
+ {".a"});
+ }
return findPathCombination("lib" + name, config->librarySearchPaths,
- {".a"});
- }
- return findPathCombination("lib" + name, config->librarySearchPaths,
- {".tbd", ".dylib", ".a"});
+ {".tbd", ".dylib", ".a"});
+ };
+
+ Optional<StringRef> path = doFind();
+ if (path)
+ resolvedLibraries[key] = *path;
+
+ return path;
}
static Optional<StringRef> findFramework(StringRef name) {
@@ -1076,6 +1090,7 @@ bool macho::link(ArrayRef<const char *> argsArr, bool canExitEarly,
errorHandler().cleanupCallback = []() {
freeArena();
+ resolvedLibraries.clear();
concatOutputSections.clear();
inputFiles.clear();
inputSections.clear();
More information about the llvm-commits
mailing list