[mlir][python] Add Operation.verify().
authorStella Laurenzo <stellaraccident@gmail.com>
Tue, 29 Dec 2020 22:10:31 +0000 (14:10 -0800)
committerStella Laurenzo <stellaraccident@gmail.com>
Tue, 29 Dec 2020 22:10:31 +0000 (14:10 -0800)
Reviewed By: mehdi_amini

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

mlir/lib/Bindings/Python/IRModules.cpp
mlir/test/Bindings/Python/ir_operation.py

index 86d6f82..cd58f29 100644 (file)
@@ -3025,7 +3025,14 @@ void mlir::python::populateIRSubmodule(py::module &m) {
            py::arg("enable_debug_info") = false,
            py::arg("pretty_debug_info") = false,
            py::arg("print_generic_op_form") = false,
-           py::arg("use_local_scope") = false, kOperationGetAsmDocstring);
+           py::arg("use_local_scope") = false, kOperationGetAsmDocstring)
+      .def(
+          "verify",
+          [](PyOperationBase &self) {
+            return mlirOperationVerify(self.getOperation());
+          },
+          "Verify the operation and return true if it passes, false if it "
+          "fails.");
 
   py::class_<PyOperation, PyOperationBase>(m, "Operation")
       .def_static("create", &PyOperation::create, py::arg("name"),
index 1f6df86..1aa365a 100644 (file)
@@ -31,6 +31,10 @@ def testTraverseOpRegionBlockIterators():
   # CHECK: MODULE REGIONS=1 BLOCKS=1
   print(f"MODULE REGIONS={len(regions)} BLOCKS={len(blocks)}")
 
+  # Should verify.
+  # CHECK: .verify = True
+  print(f".verify = {module.operation.verify()}")
+
   # Get the regions and blocks from the default collections.
   default_regions = list(op)
   default_blocks = list(default_regions[0])
@@ -546,10 +550,12 @@ def testPrintInvalidOperation():
     # This block does not have a terminator, it may crash the custom printer.
     # Verify that we fallback to the generic printer for safety.
     block = module.regions[0].blocks.append()
-    print(module)
     # CHECK: // Verification failed, printing generic form
     # CHECK: "module"() ( {
     # CHECK: }) : () -> ()
+    print(module)
+    # CHECK: .verify = False
+    print(f".verify = {module.operation.verify()}")
 run(testPrintInvalidOperation)