[Mlir-commits] [mlir] ee4d034 - Change pass registration generated code to allow users to selectively register passes

Mehdi Amini llvmlistbot at llvm.org
Thu Apr 2 11:59:08 PDT 2020


Author: Mehdi Amini
Date: 2020-04-02T18:58:47Z
New Revision: ee4d0342771a42b8485416bfdadc7da4ec4732dc

URL: https://github.com/llvm/llvm-project/commit/ee4d0342771a42b8485416bfdadc7da4ec4732dc
DIFF: https://github.com/llvm/llvm-project/commit/ee4d0342771a42b8485416bfdadc7da4ec4732dc.diff

LOG: Change pass registration generated code to allow users to selectively register passes

This slightly tweaks the generated code from:

  #ifdef GEN_PASS_REGISTRATION
  ::mlir::registerPass("flag1", ...
  ::mlir::registerPass("flag2", ...
  #endif // GEN_PASS_REGISTRATION

to:

  #ifdef GEN_PASS_REGISTRATION
  #define GEN_PASS_REGISTRATION_Pass1
  #define GEN_PASS_REGISTRATION_Pass2
  #endif // GEN_PASS_REGISTRATION

  #ifdef GEN_PASS_REGISTRATION_Pass1
  ::mlir::registerPass("flag1", ...
  #endif
  #ifdef GEN_PASS_REGISTRATION_Pass1
  ::mlir::registerPass("flag2", ...
  #endif

That way the generated code can be included by defining the
`GEN_PASS_REGISTRATION` macro as currenty and register all the passes,
but one can also define only `GEN_PASS_REGISTRATION_Pass1` to register a
subset of the passes.

Differential Revision: https://reviews.llvm.org/D77322

Added: 
    

Modified: 
    mlir/tools/mlir-tblgen/PassGen.cpp

Removed: 
    


################################################################################
diff  --git a/mlir/tools/mlir-tblgen/PassGen.cpp b/mlir/tools/mlir-tblgen/PassGen.cpp
index 72ef5a653369..4cda353953ad 100644
--- a/mlir/tools/mlir-tblgen/PassGen.cpp
+++ b/mlir/tools/mlir-tblgen/PassGen.cpp
@@ -88,13 +88,31 @@ static void emitPassDecl(const Pass &pass, raw_ostream &os) {
 static void emitRegistration(ArrayRef<Pass> passes, raw_ostream &os) {
   os << "#ifdef GEN_PASS_REGISTRATION\n";
   for (const Pass &pass : passes) {
+    os << llvm::formatv("#define GEN_PASS_REGISTRATION_{0}\n",
+                        pass.getDef()->getName());
+  }
+  os << "#endif // GEN_PASS_REGISTRATION\n";
+
+  for (const Pass &pass : passes) {
+    os << llvm::formatv("#ifdef GEN_PASS_REGISTRATION_{0}\n",
+                        pass.getDef()->getName());
     os << llvm::formatv("::mlir::registerPass(\"{0}\", \"{1}\", []() -> "
                         "std::unique_ptr<Pass> {{ return {2}; });\n",
                         pass.getArgument(), pass.getSummary(),
                         pass.getConstructor());
+    os << llvm::formatv("#endif // GEN_PASS_REGISTRATION_{0}\n",
+                        pass.getDef()->getName());
+    os << llvm::formatv("#undef GEN_PASS_REGISTRATION_{0}\n",
+                        pass.getDef()->getName());
+  }
+
+  os << "#ifdef GEN_PASS_REGISTRATION\n";
+  for (const Pass &pass : passes) {
+    os << llvm::formatv("#undef GEN_PASS_REGISTRATION_{0}\n",
+                        pass.getDef()->getName());
   }
-  os << "#undef GEN_PASS_REGISTRATION\n";
   os << "#endif // GEN_PASS_REGISTRATION\n";
+  os << "#undef GEN_PASS_REGISTRATION\n";
 }
 
 //===----------------------------------------------------------------------===//


        


More information about the Mlir-commits mailing list