[llvm] [CodeGen] Support start/stop in CodeGenPassBuilder (PR #70912)

Arthur Eubanks via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 16 14:07:45 PST 2024


================
@@ -175,73 +183,82 @@ template <typename DerivedT> class CodeGenPassBuilder {
   // Function object to maintain state while adding codegen IR passes.
   class AddIRPass {
   public:
-    AddIRPass(ModulePassManager &MPM) : MPM(MPM) {}
+    AddIRPass(ModulePassManager &MPM, const DerivedT &PB) : MPM(MPM), PB(PB) {}
     ~AddIRPass() {
       if (!FPM.isEmpty())
         MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM)));
     }
 
-    template <typename PassT> void operator()(PassT &&Pass) {
+    template <typename PassT>
+    void operator()(PassT &&Pass, StringRef Name = PassT::name()) {
       static_assert((is_detected<is_function_pass_t, PassT>::value ||
                      is_detected<is_module_pass_t, PassT>::value) &&
                     "Only module pass and function pass are supported.");
 
       // Add Function Pass
       if constexpr (is_detected<is_function_pass_t, PassT>::value) {
+        if (!PB.runBeforeAdding(Name))
+          return;
----------------
aeubanks wrote:

can factor this out of if/else branches

https://github.com/llvm/llvm-project/pull/70912


More information about the llvm-commits mailing list