Simplify computation of visible module set.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@193850 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Basic/Module.cpp b/lib/Basic/Module.cpp
index ccf7077..4818e8d 100644
--- a/lib/Basic/Module.cpp
+++ b/lib/Basic/Module.cpp
@@ -253,22 +253,13 @@
   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);
   }
 }