diff options
author | Douglas Gregor <dgregor@apple.com> | 2013-01-26 00:55:12 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2013-01-26 00:55:12 +0000 |
commit | 713b7c011869f177dc76e6df4f7f44b1bd073bb0 (patch) | |
tree | 2a5a5a69b2900acb1fdf5c3a3a6e9b7743baacc1 /lib/Lex/HeaderSearch.cpp | |
parent | 25cf8abf30189323199b1424848b105940267c1b (diff) |
Since we're stuck with realpath for the header <-> module mapping,
factor the realpath calls into FileManager::getCanonicalName() so we
can cache the results of this epically slow operation. 5% speedup on
my modules test, and realpath drops out of the profile.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@173542 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Lex/HeaderSearch.cpp')
-rw-r--r-- | lib/Lex/HeaderSearch.cpp | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/lib/Lex/HeaderSearch.cpp b/lib/Lex/HeaderSearch.cpp index 14d44cc3da..6432925518 100644 --- a/lib/Lex/HeaderSearch.cpp +++ b/lib/Lex/HeaderSearch.cpp @@ -268,6 +268,10 @@ const FileEntry *DirectoryLookup::LookupFile( return Result; } +/// FIXME: HACK HACK HACK! +static llvm::DenseMap<const DirectoryEntry *, const DirectoryEntry *> + TopFrameworkDirs; + /// \brief Given a framework directory, find the top-most framework directory. /// /// \param FileMgr The file manager to use for directory lookups. @@ -280,7 +284,6 @@ getTopFrameworkDir(FileManager &FileMgr, StringRef DirName, assert(llvm::sys::path::extension(DirName) == ".framework" && "Not a framework directory"); -#ifdef LLVM_ON_UNIX // Note: as an egregious but useful hack we use the real path here, because // frameworks moving between top-level frameworks to embedded frameworks tend // to be symlinked, and we base the logical structure of modules on the @@ -295,12 +298,8 @@ getTopFrameworkDir(FileManager &FileMgr, StringRef DirName, // // Similar issues occur when a top-level framework has moved into an // embedded framework. - char RealDirName[PATH_MAX]; - if (realpath(DirName.str().c_str(), RealDirName)) - DirName = RealDirName; -#endif - const DirectoryEntry *TopFrameworkDir = FileMgr.getDirectory(DirName); + DirName = FileMgr.getCanonicalName(TopFrameworkDir); do { // Get the parent directory name. DirName = llvm::sys::path::parent_path(DirName); |