xref: /llvm-project/mlir/lib/Bindings/Python/DialectPDL.cpp (revision 5cd427477218d8bdb659c6c53a7758f741c3990a)
1ed21c927SDenys Shabalin //===- DialectPDL.cpp - 'pdl' dialect submodule ---------------------------===//
2ed21c927SDenys Shabalin //
3ed21c927SDenys Shabalin // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4ed21c927SDenys Shabalin // See https://llvm.org/LICENSE.txt for license information.
5ed21c927SDenys Shabalin // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6ed21c927SDenys Shabalin //
7ed21c927SDenys Shabalin //===----------------------------------------------------------------------===//
8ed21c927SDenys Shabalin 
9ed21c927SDenys Shabalin #include "mlir-c/Dialect/PDL.h"
10ed21c927SDenys Shabalin #include "mlir-c/IR.h"
11*5cd42747SPeter Hawkins #include "mlir/Bindings/Python/NanobindAdaptors.h"
12*5cd42747SPeter Hawkins #include "mlir/Bindings/Python/Nanobind.h"
13ed21c927SDenys Shabalin 
14*5cd42747SPeter Hawkins namespace nb = nanobind;
15ed21c927SDenys Shabalin using namespace llvm;
16ed21c927SDenys Shabalin using namespace mlir;
17ed21c927SDenys Shabalin using namespace mlir::python;
18*5cd42747SPeter Hawkins using namespace mlir::python::nanobind_adaptors;
19ed21c927SDenys Shabalin 
20*5cd42747SPeter Hawkins void populateDialectPDLSubmodule(const nanobind::module_ &m) {
21ed21c927SDenys Shabalin   //===-------------------------------------------------------------------===//
22ed21c927SDenys Shabalin   // PDLType
23ed21c927SDenys Shabalin   //===-------------------------------------------------------------------===//
24ed21c927SDenys Shabalin 
25ed21c927SDenys Shabalin   auto pdlType = mlir_type_subclass(m, "PDLType", mlirTypeIsAPDLType);
26ed21c927SDenys Shabalin 
27ed21c927SDenys Shabalin   //===-------------------------------------------------------------------===//
28ed21c927SDenys Shabalin   // AttributeType
29ed21c927SDenys Shabalin   //===-------------------------------------------------------------------===//
30ed21c927SDenys Shabalin 
31ed21c927SDenys Shabalin   auto attributeType =
32ed21c927SDenys Shabalin       mlir_type_subclass(m, "AttributeType", mlirTypeIsAPDLAttributeType);
33ed21c927SDenys Shabalin   attributeType.def_classmethod(
34ed21c927SDenys Shabalin       "get",
35*5cd42747SPeter Hawkins       [](nb::object cls, MlirContext ctx) {
36ed21c927SDenys Shabalin         return cls(mlirPDLAttributeTypeGet(ctx));
37ed21c927SDenys Shabalin       },
38*5cd42747SPeter Hawkins       "Get an instance of AttributeType in given context.", nb::arg("cls"),
39*5cd42747SPeter Hawkins       nb::arg("context").none() = nb::none());
40ed21c927SDenys Shabalin 
41ed21c927SDenys Shabalin   //===-------------------------------------------------------------------===//
42ed21c927SDenys Shabalin   // OperationType
43ed21c927SDenys Shabalin   //===-------------------------------------------------------------------===//
44ed21c927SDenys Shabalin 
45ed21c927SDenys Shabalin   auto operationType =
46ed21c927SDenys Shabalin       mlir_type_subclass(m, "OperationType", mlirTypeIsAPDLOperationType);
47ed21c927SDenys Shabalin   operationType.def_classmethod(
48ed21c927SDenys Shabalin       "get",
49*5cd42747SPeter Hawkins       [](nb::object cls, MlirContext ctx) {
50ed21c927SDenys Shabalin         return cls(mlirPDLOperationTypeGet(ctx));
51ed21c927SDenys Shabalin       },
52*5cd42747SPeter Hawkins       "Get an instance of OperationType in given context.", nb::arg("cls"),
53*5cd42747SPeter Hawkins       nb::arg("context").none() = nb::none());
54ed21c927SDenys Shabalin 
55ed21c927SDenys Shabalin   //===-------------------------------------------------------------------===//
56ed21c927SDenys Shabalin   // RangeType
57ed21c927SDenys Shabalin   //===-------------------------------------------------------------------===//
58ed21c927SDenys Shabalin 
59ed21c927SDenys Shabalin   auto rangeType = mlir_type_subclass(m, "RangeType", mlirTypeIsAPDLRangeType);
60ed21c927SDenys Shabalin   rangeType.def_classmethod(
61ed21c927SDenys Shabalin       "get",
62*5cd42747SPeter Hawkins       [](nb::object cls, MlirType elementType) {
63ed21c927SDenys Shabalin         return cls(mlirPDLRangeTypeGet(elementType));
64ed21c927SDenys Shabalin       },
65ed21c927SDenys Shabalin       "Gets an instance of RangeType in the same context as the provided "
66ed21c927SDenys Shabalin       "element type.",
67*5cd42747SPeter Hawkins       nb::arg("cls"), nb::arg("element_type"));
68ed21c927SDenys Shabalin   rangeType.def_property_readonly(
69ed21c927SDenys Shabalin       "element_type",
70ed21c927SDenys Shabalin       [](MlirType type) { return mlirPDLRangeTypeGetElementType(type); },
71ed21c927SDenys Shabalin       "Get the element type.");
72ed21c927SDenys Shabalin 
73ed21c927SDenys Shabalin   //===-------------------------------------------------------------------===//
74ed21c927SDenys Shabalin   // TypeType
75ed21c927SDenys Shabalin   //===-------------------------------------------------------------------===//
76ed21c927SDenys Shabalin 
77ed21c927SDenys Shabalin   auto typeType = mlir_type_subclass(m, "TypeType", mlirTypeIsAPDLTypeType);
78ed21c927SDenys Shabalin   typeType.def_classmethod(
79ed21c927SDenys Shabalin       "get",
80*5cd42747SPeter Hawkins       [](nb::object cls, MlirContext ctx) {
81ed21c927SDenys Shabalin         return cls(mlirPDLTypeTypeGet(ctx));
82ed21c927SDenys Shabalin       },
83*5cd42747SPeter Hawkins       "Get an instance of TypeType in given context.", nb::arg("cls"),
84*5cd42747SPeter Hawkins       nb::arg("context").none() = nb::none());
85ed21c927SDenys Shabalin 
86ed21c927SDenys Shabalin   //===-------------------------------------------------------------------===//
87ed21c927SDenys Shabalin   // ValueType
88ed21c927SDenys Shabalin   //===-------------------------------------------------------------------===//
89ed21c927SDenys Shabalin 
90ed21c927SDenys Shabalin   auto valueType = mlir_type_subclass(m, "ValueType", mlirTypeIsAPDLValueType);
91ed21c927SDenys Shabalin   valueType.def_classmethod(
92ed21c927SDenys Shabalin       "get",
93*5cd42747SPeter Hawkins       [](nb::object cls, MlirContext ctx) {
94ed21c927SDenys Shabalin         return cls(mlirPDLValueTypeGet(ctx));
95ed21c927SDenys Shabalin       },
96*5cd42747SPeter Hawkins       "Get an instance of TypeType in given context.", nb::arg("cls"),
97*5cd42747SPeter Hawkins       nb::arg("context").none() = nb::none());
98ed21c927SDenys Shabalin }
99ed21c927SDenys Shabalin 
100*5cd42747SPeter Hawkins NB_MODULE(_mlirDialectsPDL, m) {
101ed21c927SDenys Shabalin   m.doc() = "MLIR PDL dialect.";
102ed21c927SDenys Shabalin   populateDialectPDLSubmodule(m);
103ed21c927SDenys Shabalin }
104