Always cache resolved paths as it even saves on StringMap lookups.

Now that the resolved path cache stores the StringRef's, its
best to just always cache the results, even when realpath isn't
used.  This way we'll still avoid the StringMap hashing and lookup.

This also conveniently reorganises this code in a way I need for
a future patch.

llvm-svn: 263777
This commit is contained in:
Pete Cooper 2016-03-18 05:04:04 +00:00
parent 631ed04af0
commit 64d075ec07
1 changed files with 2 additions and 4 deletions

View File

@ -1640,22 +1640,20 @@ PointerIntPair<DeclContext *, 1> DeclContextTree::getChildDeclContext(
File)) {
Line = DIE->getAttributeValueAsUnsignedConstant(
&U.getOrigUnit(), dwarf::DW_AT_decl_line, 0);
#ifdef HAVE_REALPATH
// Cache the resolved paths, because calling realpath is expansive.
StringRef ResolvedPath = U.getResolvedPath(FileNum);
if (!ResolvedPath.empty()) {
FileRef = ResolvedPath;
} else {
#ifdef HAVE_REALPATH
char RealPath[PATH_MAX + 1];
RealPath[PATH_MAX] = 0;
if (::realpath(File.c_str(), RealPath))
File = RealPath;
#endif
FileRef = StringPool.internString(File);
U.setResolvedPath(FileNum, FileRef);
}
#else
FileRef = StringPool.internString(File);
#endif
}
}
}