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