16e6da74cSMaksim Levental //===- DialectGPU.cpp - Pybind module for the GPU passes ------------------===// 26e6da74cSMaksim Levental // 36e6da74cSMaksim Levental // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 46e6da74cSMaksim Levental // See https://llvm.org/LICENSE.txt for license information. 56e6da74cSMaksim Levental // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 66e6da74cSMaksim Levental // 76e6da74cSMaksim Levental //===---------------------------------------------------------------------===// 86e6da74cSMaksim Levental 96e6da74cSMaksim Levental #include "mlir-c/Dialect/GPU.h" 106e6da74cSMaksim Levental #include "mlir-c/IR.h" 116e6da74cSMaksim Levental #include "mlir-c/Support.h" 12*5cd42747SPeter Hawkins #include "mlir/Bindings/Python/NanobindAdaptors.h" 13*5cd42747SPeter Hawkins #include "mlir/Bindings/Python/Nanobind.h" 146e6da74cSMaksim Levental 15*5cd42747SPeter Hawkins namespace nb = nanobind; 16*5cd42747SPeter Hawkins using namespace nanobind::literals; 176e6da74cSMaksim Levental 186e6da74cSMaksim Levental using namespace mlir; 196e6da74cSMaksim Levental using namespace mlir::python; 20*5cd42747SPeter Hawkins using namespace mlir::python::nanobind_adaptors; 216e6da74cSMaksim Levental 226e6da74cSMaksim Levental // ----------------------------------------------------------------------------- 236e6da74cSMaksim Levental // Module initialization. 246e6da74cSMaksim Levental // ----------------------------------------------------------------------------- 256e6da74cSMaksim Levental 26*5cd42747SPeter Hawkins NB_MODULE(_mlirDialectsGPU, m) { 276e6da74cSMaksim Levental m.doc() = "MLIR GPU Dialect"; 28f8ff9094SGuray Ozen //===-------------------------------------------------------------------===// 29f8ff9094SGuray Ozen // AsyncTokenType 30f8ff9094SGuray Ozen //===-------------------------------------------------------------------===// 31f8ff9094SGuray Ozen 32f8ff9094SGuray Ozen auto mlirGPUAsyncTokenType = 33f8ff9094SGuray Ozen mlir_type_subclass(m, "AsyncTokenType", mlirTypeIsAGPUAsyncTokenType); 34f8ff9094SGuray Ozen 35f8ff9094SGuray Ozen mlirGPUAsyncTokenType.def_classmethod( 36f8ff9094SGuray Ozen "get", 37*5cd42747SPeter Hawkins [](nb::object cls, MlirContext ctx) { 38f8ff9094SGuray Ozen return cls(mlirGPUAsyncTokenTypeGet(ctx)); 39f8ff9094SGuray Ozen }, 40*5cd42747SPeter Hawkins "Gets an instance of AsyncTokenType in the same context", nb::arg("cls"), 41*5cd42747SPeter Hawkins nb::arg("ctx").none() = nb::none()); 426e6da74cSMaksim Levental 436e6da74cSMaksim Levental //===-------------------------------------------------------------------===// 446e6da74cSMaksim Levental // ObjectAttr 456e6da74cSMaksim Levental //===-------------------------------------------------------------------===// 466e6da74cSMaksim Levental 476e6da74cSMaksim Levental mlir_attribute_subclass(m, "ObjectAttr", mlirAttributeIsAGPUObjectAttr) 486e6da74cSMaksim Levental .def_classmethod( 496e6da74cSMaksim Levental "get", 50*5cd42747SPeter Hawkins [](nb::object cls, MlirAttribute target, uint32_t format, 51*5cd42747SPeter Hawkins nb::bytes object, std::optional<MlirAttribute> mlirObjectProps, 52016e1eb9SFabian Mora std::optional<MlirAttribute> mlirKernelsAttr) { 53*5cd42747SPeter Hawkins MlirStringRef objectStrRef = mlirStringRefCreate( 54*5cd42747SPeter Hawkins static_cast<char *>(const_cast<void *>(object.data())), 55*5cd42747SPeter Hawkins object.size()); 56016e1eb9SFabian Mora return cls(mlirGPUObjectAttrGetWithKernels( 576e6da74cSMaksim Levental mlirAttributeGetContext(target), target, format, objectStrRef, 586e6da74cSMaksim Levental mlirObjectProps.has_value() ? *mlirObjectProps 59016e1eb9SFabian Mora : MlirAttribute{nullptr}, 60016e1eb9SFabian Mora mlirKernelsAttr.has_value() ? *mlirKernelsAttr 616e6da74cSMaksim Levental : MlirAttribute{nullptr})); 626e6da74cSMaksim Levental }, 636e6da74cSMaksim Levental "cls"_a, "target"_a, "format"_a, "object"_a, 64*5cd42747SPeter Hawkins "properties"_a.none() = nb::none(), "kernels"_a.none() = nb::none(), 65016e1eb9SFabian Mora "Gets a gpu.object from parameters.") 666e6da74cSMaksim Levental .def_property_readonly( 676e6da74cSMaksim Levental "target", 686e6da74cSMaksim Levental [](MlirAttribute self) { return mlirGPUObjectAttrGetTarget(self); }) 696e6da74cSMaksim Levental .def_property_readonly( 706e6da74cSMaksim Levental "format", 716e6da74cSMaksim Levental [](MlirAttribute self) { return mlirGPUObjectAttrGetFormat(self); }) 726e6da74cSMaksim Levental .def_property_readonly( 736e6da74cSMaksim Levental "object", 746e6da74cSMaksim Levental [](MlirAttribute self) { 756e6da74cSMaksim Levental MlirStringRef stringRef = mlirGPUObjectAttrGetObject(self); 76*5cd42747SPeter Hawkins return nb::bytes(stringRef.data, stringRef.length); 776e6da74cSMaksim Levental }) 78016e1eb9SFabian Mora .def_property_readonly("properties", 79*5cd42747SPeter Hawkins [](MlirAttribute self) -> nb::object { 806e6da74cSMaksim Levental if (mlirGPUObjectAttrHasProperties(self)) 81*5cd42747SPeter Hawkins return nb::cast( 82016e1eb9SFabian Mora mlirGPUObjectAttrGetProperties(self)); 83*5cd42747SPeter Hawkins return nb::none(); 84016e1eb9SFabian Mora }) 85*5cd42747SPeter Hawkins .def_property_readonly("kernels", [](MlirAttribute self) -> nb::object { 86016e1eb9SFabian Mora if (mlirGPUObjectAttrHasKernels(self)) 87*5cd42747SPeter Hawkins return nb::cast(mlirGPUObjectAttrGetKernels(self)); 88*5cd42747SPeter Hawkins return nb::none(); 896e6da74cSMaksim Levental }); 906e6da74cSMaksim Levental } 91