Optimize unqualified/global name lookup in modules by introducing a
generational scheme for identifiers that avoids searching the hash tables of a given module more than once for a given identifier. Previously, loading any new module invalidated all of the previous lookup results for all identifiers, causing us to perform the lookups repeatedly. llvm-svn: 148412
This commit is contained in:
@@ -35,7 +35,8 @@ llvm::MemoryBuffer *ModuleManager::lookupBuffer(StringRef Name) {
|
||||
|
||||
std::pair<ModuleFile *, bool>
|
||||
ModuleManager::addModule(StringRef FileName, ModuleKind Type,
|
||||
ModuleFile *ImportedBy, std::string &ErrorStr) {
|
||||
ModuleFile *ImportedBy, unsigned Generation,
|
||||
std::string &ErrorStr) {
|
||||
const FileEntry *Entry = FileMgr.getFile(FileName);
|
||||
if (!Entry && FileName != "-") {
|
||||
ErrorStr = "file not found";
|
||||
@@ -47,7 +48,7 @@ ModuleManager::addModule(StringRef FileName, ModuleKind Type,
|
||||
bool NewModule = false;
|
||||
if (!ModuleEntry) {
|
||||
// Allocate a new module.
|
||||
ModuleFile *New = new ModuleFile(Type);
|
||||
ModuleFile *New = new ModuleFile(Type, Generation);
|
||||
New->FileName = FileName.str();
|
||||
Chain.push_back(New);
|
||||
NewModule = true;
|
||||
|
||||
Reference in New Issue
Block a user