[llvm] [NewPM][CodeGen] add TargetPassConfig like API (PR #70906)

via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 19 00:45:39 PST 2023


================
@@ -224,38 +268,55 @@ template <typename DerivedT> class CodeGenPassBuilder {
     AddMachinePass(MachineFunctionPassManager &PM) : PM(PM) {}
 
     template <typename PassT> void operator()(PassT &&Pass) {
-      static_assert(
-          is_detected<has_key_t, PassT>::value,
-          "Machine function pass must define a static member variable `Key`.");
       for (auto &C : BeforeCallbacks)
-        if (!C(&PassT::Key))
+        if (!C(PassT::ID()))
           return;
       PM.addPass(std::forward<PassT>(Pass));
       for (auto &C : AfterCallbacks)
-        C(&PassT::Key);
-    }
-
-    template <typename PassT> void insertPass(AnalysisKey *ID, PassT Pass) {
-      AfterCallbacks.emplace_back(
-          [this, ID, Pass = std::move(Pass)](AnalysisKey *PassID) {
-            if (PassID == ID)
-              this->PM.addPass(std::move(Pass));
-          });
+        C(PassT::ID(), PassT::name());
     }
 
-    void disablePass(AnalysisKey *ID) {
-      BeforeCallbacks.emplace_back(
-          [ID](AnalysisKey *PassID) { return PassID != ID; });
+    template <typename PassT> void insertPass(MachinePassKey *ID, PassT Pass) {
+      AfterCallbacks.emplace_back([this, ID, Pass = std::move(Pass)](
+                                      MachinePassKey *PassID, StringRef) {
+        if (PassID == ID)
+          this->PM.addPass(std::move(Pass));
+      });
     }
 
     MachineFunctionPassManager releasePM() { return std::move(PM); }
 
   private:
     MachineFunctionPassManager &PM;
-    SmallVector<llvm::unique_function<bool(AnalysisKey *)>, 4> BeforeCallbacks;
-    SmallVector<llvm::unique_function<void(AnalysisKey *)>, 4> AfterCallbacks;
+    SmallVector<llvm::unique_function<bool(MachinePassKey *)>, 4>
+        BeforeCallbacks;
+    SmallVector<llvm::unique_function<void(MachinePassKey *, StringRef)>, 4>
+        AfterCallbacks;
   };
 
+  // Find the FSProfile file name. The internal option takes the precedence
+  // before getting from TargetMachine.
+  std::string getFSProfileFile() const {
+    if (!Opt.FSProfileFile.empty())
----------------
paperchalice wrote:

This is copied from `TargetPassConfig.cpp`, and some tests need `fs-profile`. Will try to migrate to `PGOOptions` later.

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


More information about the llvm-commits mailing list