diff --git a/mlir/tools/mlir-tblgen/PassGen.cpp b/mlir/tools/mlir-tblgen/PassGen.cpp --- a/mlir/tools/mlir-tblgen/PassGen.cpp +++ b/mlir/tools/mlir-tblgen/PassGen.cpp @@ -88,13 +88,31 @@ 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"; } //===----------------------------------------------------------------------===//