summaryrefslogtreecommitdiff
path: root/mlir/lib/CAPI/Dialect/Transform.cpp
diff options
context:
space:
mode:
authormartin-luecke <martin.luecke@ed.ac.uk>2023-12-15 13:04:43 +0100
committerGitHub <noreply@github.com>2023-12-15 13:04:43 +0100
commit681eacc1b670fd7137d8677fef6fc76c6e37dca9 (patch)
treea3f0351ced882ffd3be6dd3ecd9965972d373c2e /mlir/lib/CAPI/Dialect/Transform.cpp
parentf0b44ce28eaf3dbea557f36b6bd1d9fcd7c084b8 (diff)
[MLIR][transform][python] add sugared python abstractions for transform dialect (#75073)
This adds Python abstractions for the different handle types of the transform dialect The abstractions allow for straightforward chaining of transforms by calling their member functions. As an initial PR for this infrastructure, only a single transform is included: `transform.structured.match`. With a future `tile` transform abstraction an example of the usage is: ```Python def script(module: OpHandle): module.match_ops(MatchInterfaceEnum.TilingInterface).tile(tile_sizes=[32,32]) ``` to generate the following IR: ```mlir %0 = transform.structured.match interface{TilingInterface} in %arg0 %tiled_op, %loops = transform.structured.tile_using_for %0 [32, 32] ``` These abstractions are intended to enhance the usability and flexibility of the transform dialect by providing an accessible interface that allows for easy assembly of complex transformation chains.
Diffstat (limited to 'mlir/lib/CAPI/Dialect/Transform.cpp')
-rw-r--r--mlir/lib/CAPI/Dialect/Transform.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/mlir/lib/CAPI/Dialect/Transform.cpp b/mlir/lib/CAPI/Dialect/Transform.cpp
index 3f7f8b8e2113..5fd773572bd3 100644
--- a/mlir/lib/CAPI/Dialect/Transform.cpp
+++ b/mlir/lib/CAPI/Dialect/Transform.cpp
@@ -25,6 +25,10 @@ bool mlirTypeIsATransformAnyOpType(MlirType type) {
return isa<transform::AnyOpType>(unwrap(type));
}
+MlirTypeID mlirTransformAnyOpTypeGetTypeID(void) {
+ return wrap(transform::AnyOpType::getTypeID());
+}
+
MlirType mlirTransformAnyOpTypeGet(MlirContext ctx) {
return wrap(transform::AnyOpType::get(unwrap(ctx)));
}
@@ -37,6 +41,10 @@ bool mlirTypeIsATransformAnyParamType(MlirType type) {
return isa<transform::AnyParamType>(unwrap(type));
}
+MlirTypeID mlirTransformAnyParamTypeGetTypeID(void) {
+ return wrap(transform::AnyParamType::getTypeID());
+}
+
MlirType mlirTransformAnyParamTypeGet(MlirContext ctx) {
return wrap(transform::AnyParamType::get(unwrap(ctx)));
}
@@ -49,6 +57,10 @@ bool mlirTypeIsATransformAnyValueType(MlirType type) {
return isa<transform::AnyValueType>(unwrap(type));
}
+MlirTypeID mlirTransformAnyValueTypeGetTypeID(void) {
+ return wrap(transform::AnyValueType::getTypeID());
+}
+
MlirType mlirTransformAnyValueTypeGet(MlirContext ctx) {
return wrap(transform::AnyValueType::get(unwrap(ctx)));
}
@@ -76,13 +88,17 @@ MlirStringRef mlirTransformOperationTypeGetOperationName(MlirType type) {
}
//===---------------------------------------------------------------------===//
-// AnyOpType
+// ParamType
//===---------------------------------------------------------------------===//
bool mlirTypeIsATransformParamType(MlirType type) {
return isa<transform::ParamType>(unwrap(type));
}
+MlirTypeID mlirTransformParamTypeGetTypeID(void) {
+ return wrap(transform::ParamType::getTypeID());
+}
+
MlirType mlirTransformParamTypeGet(MlirContext ctx, MlirType type) {
return wrap(transform::ParamType::get(unwrap(ctx), unwrap(type)));
}