llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Ayush Pareek (ayushpareek2003)

<details>
<summary>Changes</summary>

Optimized addModuleFiles functions for both CompilerInvocation and 
CowCompilerInvocation to reduce redundant function calls and improve efficiency

Introduced memory preallocation using reserve() when eager load is enabled to 
reduce reallocation overhead

Used try_emplace() instead of insert() for PrebuiltModuleFiles to avoid 
unnecessary overwrites

---
Full diff: https://github.com/llvm/llvm-project/pull/132287.diff


1 Files Affected:

- (modified) clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp 
(+43-21) 


``````````diff
diff --git a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp 
b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
index d715ef874e002..576b27c6a1132 100644
--- a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
+++ b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
@@ -394,40 +394,62 @@ void ModuleDepCollector::addModuleMapFiles(
   if (Service.shouldEagerLoadModules())
     return; // Only pcm is needed for eager load.
 
+  // Preallocate memory to avoid multiple allocations
+  CI.getFrontendOpts().ModuleMapFiles.reserve(
+      CI.getFrontendOpts().ModuleMapFiles.size() + ClangModuleDeps.size());
+  
   for (const ModuleID &MID : ClangModuleDeps) {
-    ModuleDeps *MD = ModuleDepsByID.lookup(MID);
-    assert(MD && "Inconsistent dependency info");
-    CI.getFrontendOpts().ModuleMapFiles.push_back(MD->ClangModuleMapFile);
+     
+    if (ModuleDeps *MD = ModuleDepsByID.lookup(MID)) { // Single lookup
+      assert(MD && "Inconsistent dependency info");
+      CI.getFrontendOpts().ModuleMapFiles.emplace_back(MD->ClangModuleMapFile);
+    }
   }
 }
 
 void ModuleDepCollector::addModuleFiles(
     CompilerInvocation &CI, ArrayRef<ModuleID> ClangModuleDeps) const {
+  
+  // Preallocate memory if eager load is enabled
+  if (Service.shouldEagerLoadModules()) {
+    CI.getFrontendOpts().ModuleFiles.reserve(
+        CI.getFrontendOpts().ModuleFiles.size() + ClangModuleDeps.size());
+  }
   for (const ModuleID &MID : ClangModuleDeps) {
-    ModuleDeps *MD = ModuleDepsByID.lookup(MID);
-    std::string PCMPath =
-        Controller.lookupModuleOutput(*MD, ModuleOutputKind::ModuleFile);
-
-    if (Service.shouldEagerLoadModules())
-      CI.getFrontendOpts().ModuleFiles.push_back(std::move(PCMPath));
-    else
-      CI.getHeaderSearchOpts().PrebuiltModuleFiles.insert(
-          {MID.ModuleName, std::move(PCMPath)});
+    if (ModuleDeps *MD = ModuleDepsByID.lookup(MID)) {  
+      std::string PCMPath =
+          Controller.lookupModuleOutput(*MD, ModuleOutputKind::ModuleFile);
+
+      if (Service.shouldEagerLoadModules()) {
+        CI.getFrontendOpts().ModuleFiles.emplace_back(std::move(PCMPath));
+      } else {
+        CI.getHeaderSearchOpts().PrebuiltModuleFiles.try_emplace(
+            MID.ModuleName, std::move(PCMPath));
+      }
+    }
   }
 }
 
 void ModuleDepCollector::addModuleFiles(
     CowCompilerInvocation &CI, ArrayRef<ModuleID> ClangModuleDeps) const {
-  for (const ModuleID &MID : ClangModuleDeps) {
-    ModuleDeps *MD = ModuleDepsByID.lookup(MID);
-    std::string PCMPath =
-        Controller.lookupModuleOutput(*MD, ModuleOutputKind::ModuleFile);
 
-    if (Service.shouldEagerLoadModules())
-      CI.getMutFrontendOpts().ModuleFiles.push_back(std::move(PCMPath));
-    else
-      CI.getMutHeaderSearchOpts().PrebuiltModuleFiles.insert(
-          {MID.ModuleName, std::move(PCMPath)});
+    // Preallocation
+  if (Service.shouldEagerLoadModules()) {
+    CI.getMutFrontendOpts().ModuleFiles.reserve(
+        CI.getMutFrontendOpts().ModuleFiles.size() + ClangModuleDeps.size());
+  }
+  for (const ModuleID &MID : ClangModuleDeps) {
+    if (ModuleDeps *MD = ModuleDepsByID.lookup(MID)) {  
+      std::string PCMPath =
+          Controller.lookupModuleOutput(*MD, ModuleOutputKind::ModuleFile);
+
+      if (EagerLoad) {
+        CI.getMutFrontendOpts().ModuleFiles.emplace_back(std::move(PCMPath));
+      } else {
+        CI.getMutHeaderSearchOpts().PrebuiltModuleFiles.try_emplace(
+            MID.ModuleName, std::move(PCMPath));
+      }
+    }
   }
 }
 

``````````

</details>


https://github.com/llvm/llvm-project/pull/132287
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to