[mlir][python] Add Operation.verify().

Reviewed By: mehdi_amini

Differential Revision: https://reviews.llvm.org/D93913
This commit is contained in:
Stella Laurenzo 2020-12-29 14:10:31 -08:00
parent 3c0d36f977
commit f5665a2486
2 changed files with 15 additions and 2 deletions

View File

@ -3025,7 +3025,14 @@ void mlir::python::populateIRSubmodule(py::module &m) {
py::arg("enable_debug_info") = false, py::arg("enable_debug_info") = false,
py::arg("pretty_debug_info") = false, py::arg("pretty_debug_info") = false,
py::arg("print_generic_op_form") = 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") py::class_<PyOperation, PyOperationBase>(m, "Operation")
.def_static("create", &PyOperation::create, py::arg("name"), .def_static("create", &PyOperation::create, py::arg("name"),

View File

@ -31,6 +31,10 @@ def testTraverseOpRegionBlockIterators():
# CHECK: MODULE REGIONS=1 BLOCKS=1 # CHECK: MODULE REGIONS=1 BLOCKS=1
print(f"MODULE REGIONS={len(regions)} BLOCKS={len(blocks)}") 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. # Get the regions and blocks from the default collections.
default_regions = list(op) default_regions = list(op)
default_blocks = list(default_regions[0]) 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. # This block does not have a terminator, it may crash the custom printer.
# Verify that we fallback to the generic printer for safety. # Verify that we fallback to the generic printer for safety.
block = module.regions[0].blocks.append() block = module.regions[0].blocks.append()
print(module)
# CHECK: // Verification failed, printing generic form # CHECK: // Verification failed, printing generic form
# CHECK: "module"() ( { # CHECK: "module"() ( {
# CHECK: }) : () -> () # CHECK: }) : () -> ()
print(module)
# CHECK: .verify = False
print(f".verify = {module.operation.verify()}")
run(testPrintInvalidOperation) run(testPrintInvalidOperation)