Simplify computation of visible module set.

llvm-svn: 193850
This commit is contained in:
Richard Smith
2013-11-01 02:19:14 +00:00
parent b9657033cc
commit dde17e74fa
2 changed files with 7 additions and 16 deletions

View File

@@ -253,22 +253,13 @@ void Module::buildVisibleModulesCache() const {
VisibleModulesCache.insert(this);
// Every imported module is visible.
// Every module exported by an imported module is visible.
llvm::SmallPtrSet<Module *, 4> Visited;
llvm::SmallVector<Module *, 4> Exports;
SmallVector<Module *, 4> Stack(Imports.begin(), Imports.end());
SmallVector<Module *, 16> Stack(Imports.begin(), Imports.end());
while (!Stack.empty()) {
Module *CurrModule = Stack.pop_back_val();
VisibleModulesCache.insert(CurrModule);
CurrModule->getExportedModules(Exports);
for (SmallVectorImpl<Module *>::iterator I = Exports.begin(),
E = Exports.end();
I != E; ++I) {
Module *Exported = *I;
if (Visited.insert(Exported))
Stack.push_back(Exported);
}
// Every module transitively exported by an imported module is visible.
if (VisibleModulesCache.insert(CurrModule).second)
CurrModule->getExportedModules(Stack);
}
}