From f6615b2ddb3d046cc7a99ec74ee032ea21a1d27a Mon Sep 17 00:00:00 2001 From: Mehdi Amini Date: Sun, 23 Aug 2020 21:20:49 +0000 Subject: [PATCH] Update FIR registration to not rely on the global MLIR dialect registry (NFC) MLIR is removing "soon" the global dialect registry, this patch is transitionning FIR to not rely on it anymore. --- flang/include/flang/Optimizer/Dialect/FIRDialect.h | 24 ++++++++++------------ flang/tools/tco/tco.cpp | 8 ++++---- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/flang/include/flang/Optimizer/Dialect/FIRDialect.h b/flang/include/flang/Optimizer/Dialect/FIRDialect.h index 1c06fe5..9702c54 100644 --- a/flang/include/flang/Optimizer/Dialect/FIRDialect.h +++ b/flang/include/flang/Optimizer/Dialect/FIRDialect.h @@ -32,19 +32,17 @@ public: mlir::DialectAsmPrinter &p) const override; }; -/// Register the dialect with MLIR -inline void registerFIR() { - // we want to register exactly once - [[maybe_unused]] static bool init_once = [] { - mlir::registerDialect(); - mlir::registerDialect(); - mlir::registerDialect(); - mlir::registerDialect(); - mlir::registerDialect(); - mlir::registerDialect(); - mlir::registerDialect(); - return true; - }(); +/// Register the dialect with the provided registry. +inline void registerFIRDialects(mlir::DialectRegistry ®istry) { + // clang-format off + registry.insert(); + // clang-format on } /// Register the standard passes we use. This comes from registerAllPasses(), diff --git a/flang/tools/tco/tco.cpp b/flang/tools/tco/tco.cpp index 0e085fa..63a6122 100644 --- a/flang/tools/tco/tco.cpp +++ b/flang/tools/tco/tco.cpp @@ -60,8 +60,9 @@ static int compileFIR() { // load the file into a module SourceMgr sourceMgr; sourceMgr.AddNewSourceBuffer(std::move(*fileOrErr), SMLoc()); - auto context = std::make_unique(); - auto owningRef = mlir::parseSourceFile(sourceMgr, context.get()); + mlir::MLIRContext context; + fir::registerFIRDialects(context.getDialectRegistry()); + auto owningRef = mlir::parseSourceFile(sourceMgr, &context); if (!owningRef) { errs() << "Error can't load file " << inputFilename << '\n'; @@ -76,7 +77,7 @@ static int compileFIR() { ToolOutputFile out(outputFilename, ec, sys::fs::OF_None); // run passes - mlir::PassManager pm{context.get()}; + mlir::PassManager pm{&context}; mlir::applyPassManagerCLOptions(pm); if (emitFir) { // parse the input and pretty-print it back out @@ -103,7 +104,6 @@ static int compileFIR() { } int main(int argc, char **argv) { - fir::registerFIR(); fir::registerFIRPasses(); [[maybe_unused]] InitLLVM y(argc, argv); mlir::registerPassManagerCLOptions(); -- 2.7.4