MLIR_CAPI_EXPORTED MlirDialect mlirContextGetOrLoadDialect(MlirContext context,
MlirStringRef name);
+/// Returns whether the given fully-qualified operation (i.e.
+/// 'dialect.operation') is registered with the context. This will return true
+/// if the dialect is loaded and the operation is registered within the
+/// dialect.
+MLIR_CAPI_EXPORTED bool mlirContextIsRegisteredOperation(MlirContext context,
+ MlirStringRef name);
+
//===----------------------------------------------------------------------===//
// Dialect API.
//===----------------------------------------------------------------------===//
},
[](PyMlirContext &self, bool value) {
mlirContextSetAllowUnregisteredDialects(self.get(), value);
- });
+ })
+ .def("is_registered_operation",
+ [](PyMlirContext &self, std::string &name) {
+ return mlirContextIsRegisteredOperation(
+ self.get(), MlirStringRef{name.data(), name.size()});
+ });
//----------------------------------------------------------------------------
// Mapping of PyDialectDescriptor
return wrap(unwrap(context)->getOrLoadDialect(unwrap(name)));
}
+bool mlirContextIsRegisteredOperation(MlirContext context, MlirStringRef name) {
+ return unwrap(context)->isOperationRegistered(unwrap(name));
+}
+
//===----------------------------------------------------------------------===//
// Dialect API.
//===----------------------------------------------------------------------===//
import gc
from mlir.ir import *
+
def run(f):
print("\nTEST:", f.__name__)
f()
gc.collect()
assert Context._get_live_count() == 0
+ return f
# CHECK-LABEL: TEST: testDialectDescriptor
+@run
def testDialectDescriptor():
ctx = Context()
d = ctx.get_dialect_descriptor("std")
else:
assert False, "Expected exception"
-run(testDialectDescriptor)
-
# CHECK-LABEL: TEST: testUserDialectClass
+@run
def testUserDialectClass():
ctx = Context()
# Access using attribute.
# CHECK: <Dialect (class mlir.dialects._std_ops_gen._Dialect)>
print(d)
-run(testUserDialectClass)
-
# CHECK-LABEL: TEST: testCustomOpView
# This test uses the standard dialect AddFOp as an example of a user op.
# TODO: Op creation and access is still quite verbose: simplify this test as
# additional capabilities come online.
+@run
def testCustomOpView():
+
def createInput():
op = Operation.create("pytest_dummy.intinput", results=[f32])
# TODO: Auto result cast from operation
m.operation.print()
-run(testCustomOpView)
+# CHECK-LABEL: TEST: testIsRegisteredOperation
+@run
+def testIsRegisteredOperation():
+ ctx = Context()
+
+ # CHECK: std.cond_br: True
+ print(f"std.cond_br: {ctx.is_registered_operation('std.cond_br')}")
+ # CHECK: std.not_existing: False
+ print(f"std.not_existing: {ctx.is_registered_operation('std.not_existing')}")
fprintf(stderr, "@registration\n");
// CHECK-LABEL: @registration
+ // CHECK: std.cond_br is_registered: 1
+ fprintf(stderr, "std.cond_br is_registered: %d\n",
+ mlirContextIsRegisteredOperation(
+ ctx, mlirStringRefCreateFromCString("std.cond_br")));
+
+ // CHECK: std.not_existing_op is_registered: 0
+ fprintf(stderr, "std.not_existing_op is_registered: %d\n",
+ mlirContextIsRegisteredOperation(
+ ctx, mlirStringRefCreateFromCString("std.not_existing_op")));
+
+ // CHECK: not_existing_dialect.not_existing_op is_registered: 0
+ fprintf(stderr, "not_existing_dialect.not_existing_op is_registered: %d\n",
+ mlirContextIsRegisteredOperation(
+ ctx, mlirStringRefCreateFromCString(
+ "not_existing_dialect.not_existing_op")));
+
return 0;
}