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