mirror of
https://github.com/intel/llvm.git
synced 2026-01-22 07:01:03 +08:00
Simplify computation of visible module set.
llvm-svn: 193850
This commit is contained in:
@@ -403,10 +403,10 @@ public:
|
||||
submodule_iterator submodule_end() { return SubModules.end(); }
|
||||
submodule_const_iterator submodule_end() const { return SubModules.end(); }
|
||||
|
||||
/// \brief Returns the exported modules based on the wildcard restrictions.
|
||||
/// \brief Appends this module's list of exported modules to \p Exported.
|
||||
///
|
||||
/// This returns a subset of immediately imported modules (the ones that are
|
||||
/// exported), not the complete set of exported modules.
|
||||
/// This provides a subset of immediately imported modules (the ones that are
|
||||
/// directly exported), not the complete set of exported modules.
|
||||
void getExportedModules(SmallVectorImpl<Module *> &Exported) const;
|
||||
|
||||
static StringRef getModuleInputBufferName() {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user