[mlir-translate] Teach these tools about --allow-unregistered-dialect
authorChris Lattner <clattner@nondot.org>
Thu, 3 Feb 2022 05:40:41 +0000 (21:40 -0800)
committerChris Lattner <clattner@nondot.org>
Thu, 3 Feb 2022 17:00:38 +0000 (09:00 -0800)
Some translations do work with unregistered dialects, this allows one
to write testcases against them.  It works the same way as it does for
mlir-opt.

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

mlir/lib/Translation/Translation.cpp
mlir/test/mlir-translate/unregistered-dialects.mlir [new file with mode: 0644]

index 5a8812a..6da62f6 100644 (file)
@@ -140,6 +140,11 @@ LogicalResult mlir::mlirTranslateMain(int argc, char **argv,
       "o", llvm::cl::desc("Output filename"), llvm::cl::value_desc("filename"),
       llvm::cl::init("-"));
 
+  static llvm::cl::opt<bool> allowUnregisteredDialects(
+      "allow-unregistered-dialect",
+      llvm::cl::desc("Allow operation with no registered dialects"),
+      llvm::cl::init(false));
+
   static llvm::cl::opt<bool> splitInputFile(
       "split-input-file",
       llvm::cl::desc("Split the input file into pieces and "
@@ -179,6 +184,7 @@ LogicalResult mlir::mlirTranslateMain(int argc, char **argv,
   auto processBuffer = [&](std::unique_ptr<llvm::MemoryBuffer> ownedBuffer,
                            raw_ostream &os) {
     MLIRContext context;
+    context.allowUnregisteredDialects(allowUnregisteredDialects);
     context.printOpOnDiagnostic(!verifyDiagnostics);
     llvm::SourceMgr sourceMgr;
     sourceMgr.AddNewSourceBuffer(std::move(ownedBuffer), SMLoc());
diff --git a/mlir/test/mlir-translate/unregistered-dialects.mlir b/mlir/test/mlir-translate/unregistered-dialects.mlir
new file mode 100644 (file)
index 0000000..0a7330b
--- /dev/null
@@ -0,0 +1,13 @@
+// RUN: not mlir-translate %s --allow-unregistered-dialect --mlir-to-llvmir -verify-diagnostics 2>&1 | FileCheck --check-prefix=UNREGOK %s
+// RUN: not mlir-translate %s --mlir-to-llvmir -verify-diagnostics 2>&1 | FileCheck --check-prefix=REGONLY %s
+
+
+// If the parser allows unregistered operations, then the translation fails,
+// otherwise the parse fails.
+
+// UNREGOK: cannot be converted to LLVM IR
+// REGONLY: operation being parsed with an unregistered dialect
+
+func @trivial() {
+  "simple.terminator"() : () -> ()
+}