[llvm] [PassManager][Loop] Merge loop pass manager when add it (PR #135150)

via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 10 02:47:14 PDT 2025


https://github.com/paperchalice created https://github.com/llvm/llvm-project/pull/135150

Which aligns the behavior with generic pass manager.

>From 2867ba7cd413809ad6b1fdaead1fc9400744f680 Mon Sep 17 00:00:00 2001
From: PaperChalice <liujunchang97 at outlook.com>
Date: Sun, 6 Apr 2025 16:34:03 +0800
Subject: [PATCH] [PassManager][Loop] Merge two loop pass manager when possible

---
 .../llvm/Transforms/Scalar/LoopPassManager.h       | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/llvm/include/llvm/Transforms/Scalar/LoopPassManager.h b/llvm/include/llvm/Transforms/Scalar/LoopPassManager.h
index f55022fbff07c..02eb87cbda3db 100644
--- a/llvm/include/llvm/Transforms/Scalar/LoopPassManager.h
+++ b/llvm/include/llvm/Transforms/Scalar/LoopPassManager.h
@@ -130,6 +130,20 @@ class PassManager<Loop, LoopAnalysisManager, LoopStandardAnalysisResults &,
         new LoopNestPassModelT(std::forward<PassT>(Pass))));
   }
 
+  LLVM_ATTRIBUTE_MINSIZE
+  void addPass(PassManager &&PM) {
+    std::size_t VecSize = PM.IsLoopNestPass.size();
+    IsLoopNestPass.reserve(IsLoopNestPass.size() + VecSize);
+    for (std::size_t I = 0; I != VecSize; ++I)
+      IsLoopNestPass.push_back(PM.IsLoopNestPass[I]);
+    LoopPasses.insert(LoopPasses.end(),
+                      std::make_move_iterator(PM.LoopPasses.begin()),
+                      std::make_move_iterator(PM.LoopPasses.end()));
+    LoopNestPasses.insert(LoopNestPasses.end(),
+                          std::make_move_iterator(PM.LoopNestPasses.begin()),
+                          std::make_move_iterator(PM.LoopNestPasses.end()));
+  }
+
   bool isEmpty() const { return LoopPasses.empty() && LoopNestPasses.empty(); }
 
   static bool isRequired() { return true; }



More information about the llvm-commits mailing list