[llvm] [CodeGen] Expose the extensibility of PassConfig to plugins (PR #139059)

Stefan Gränitz via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 3 03:47:03 PDT 2025


================
@@ -531,6 +532,39 @@ class LLVM_ABI TargetMachine {
   }
 };
 
+using PassConfigCallback =
+    std::function<void(TargetMachine &, PassManagerBase &, TargetPassConfig *)>;
+
+class TargetPassConfigCallbackRegistry : public PassConfigCallback {
+protected:
+  static SmallVector<PassConfigCallback *, 1> Callbacks;
+
+  explicit TargetPassConfigCallbackRegistry(PassConfigCallback &&C)
+      : PassConfigCallback(std::move(C)) {}
+
+public:
+  static void invokeCallbacks(TargetMachine &TM, PassManagerBase &PM,
+                              TargetPassConfig *PassConfig) {
+    for (const PassConfigCallback *C : Callbacks)
+      (*C)(TM, PM, PassConfig);
+  }
+};
+
+class RegisterTargetPassConfigCallback
+    : public TargetPassConfigCallbackRegistry {
----------------
weliveindetail wrote:

This is just a RAII wrapper right? Let's make the callback a member and not inherit from std::function

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


More information about the llvm-commits mailing list