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::AffineDialect>();
- mlir::registerDialect<mlir::LLVM::LLVMDialect>();
- mlir::registerDialect<mlir::omp::OpenMPDialect>();
- mlir::registerDialect<mlir::scf::SCFDialect>();
- mlir::registerDialect<mlir::StandardOpsDialect>();
- mlir::registerDialect<mlir::vector::VectorDialect>();
- mlir::registerDialect<FIROpsDialect>();
- return true;
- }();
+/// Register the dialect with the provided registry.
+inline void registerFIRDialects(mlir::DialectRegistry ®istry) {
+ // clang-format off
+ registry.insert<mlir::AffineDialect,
+ mlir::LLVM::LLVMDialect,
+ mlir::omp::OpenMPDialect,
+ mlir::scf::SCFDialect,
+ mlir::StandardOpsDialect,
+ mlir::vector::VectorDialect,
+ FIROpsDialect>();
+ // clang-format on
}
/// Register the standard passes we use. This comes from registerAllPasses(),
// load the file into a module
SourceMgr sourceMgr;
sourceMgr.AddNewSourceBuffer(std::move(*fileOrErr), SMLoc());
- auto context = std::make_unique<mlir::MLIRContext>();
- 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';
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
}
int main(int argc, char **argv) {
- fir::registerFIR();
fir::registerFIRPasses();
[[maybe_unused]] InitLLVM y(argc, argv);
mlir::registerPassManagerCLOptions();