From ee4d0342771a42b8485416bfdadc7da4ec4732dc Mon Sep 17 00:00:00 2001 From: Mehdi Amini Date: Thu, 2 Apr 2020 17:36:11 +0000 Subject: [PATCH] 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 --- mlir/tools/mlir-tblgen/PassGen.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/mlir/tools/mlir-tblgen/PassGen.cpp b/mlir/tools/mlir-tblgen/PassGen.cpp index 72ef5a6..4cda353 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 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 {{ 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"; } //===----------------------------------------------------------------------===// -- 2.7.4