//===- GPU.cpp - C Interface for GPU dialect ------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "mlir-c/Dialect/GPU.h" #include "mlir/CAPI/Registration.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" #include "llvm/Support/Casting.h" using namespace mlir; MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(GPU, gpu, gpu::GPUDialect) //===-------------------------------------------------------------------===// // AsyncTokenType //===-------------------------------------------------------------------===// bool mlirTypeIsAGPUAsyncTokenType(MlirType type) { return isa(unwrap(type)); } MlirType mlirGPUAsyncTokenTypeGet(MlirContext ctx) { return wrap(gpu::AsyncTokenType::get(unwrap(ctx))); } //===---------------------------------------------------------------------===// // ObjectAttr //===---------------------------------------------------------------------===// bool mlirAttributeIsAGPUObjectAttr(MlirAttribute attr) { return llvm::isa(unwrap(attr)); } MlirAttribute mlirGPUObjectAttrGet(MlirContext mlirCtx, MlirAttribute target, uint32_t format, MlirStringRef objectStrRef, MlirAttribute mlirObjectProps) { MLIRContext *ctx = unwrap(mlirCtx); llvm::StringRef object = unwrap(objectStrRef); DictionaryAttr objectProps; if (mlirObjectProps.ptr != nullptr) objectProps = llvm::cast(unwrap(mlirObjectProps)); return wrap(gpu::ObjectAttr::get( ctx, unwrap(target), static_cast(format), StringAttr::get(ctx, object), objectProps, nullptr)); } MlirAttribute mlirGPUObjectAttrGetWithKernels(MlirContext mlirCtx, MlirAttribute target, uint32_t format, MlirStringRef objectStrRef, MlirAttribute mlirObjectProps, MlirAttribute mlirKernelsAttr) { MLIRContext *ctx = unwrap(mlirCtx); llvm::StringRef object = unwrap(objectStrRef); DictionaryAttr objectProps; if (mlirObjectProps.ptr != nullptr) objectProps = llvm::cast(unwrap(mlirObjectProps)); gpu::KernelTableAttr kernels; if (mlirKernelsAttr.ptr != nullptr) kernels = llvm::cast(unwrap(mlirKernelsAttr)); return wrap(gpu::ObjectAttr::get( ctx, unwrap(target), static_cast(format), StringAttr::get(ctx, object), objectProps, kernels)); } MlirAttribute mlirGPUObjectAttrGetTarget(MlirAttribute mlirObjectAttr) { gpu::ObjectAttr objectAttr = llvm::cast(unwrap(mlirObjectAttr)); return wrap(objectAttr.getTarget()); } uint32_t mlirGPUObjectAttrGetFormat(MlirAttribute mlirObjectAttr) { gpu::ObjectAttr objectAttr = llvm::cast(unwrap(mlirObjectAttr)); return static_cast(objectAttr.getFormat()); } MlirStringRef mlirGPUObjectAttrGetObject(MlirAttribute mlirObjectAttr) { gpu::ObjectAttr objectAttr = llvm::cast(unwrap(mlirObjectAttr)); llvm::StringRef object = objectAttr.getObject(); return mlirStringRefCreate(object.data(), object.size()); } bool mlirGPUObjectAttrHasProperties(MlirAttribute mlirObjectAttr) { gpu::ObjectAttr objectAttr = llvm::cast(unwrap(mlirObjectAttr)); return objectAttr.getProperties() != nullptr; } MlirAttribute mlirGPUObjectAttrGetProperties(MlirAttribute mlirObjectAttr) { gpu::ObjectAttr objectAttr = llvm::cast(unwrap(mlirObjectAttr)); return wrap(objectAttr.getProperties()); } bool mlirGPUObjectAttrHasKernels(MlirAttribute mlirObjectAttr) { gpu::ObjectAttr objectAttr = llvm::cast(unwrap(mlirObjectAttr)); return objectAttr.getKernels() != nullptr; } MlirAttribute mlirGPUObjectAttrGetKernels(MlirAttribute mlirObjectAttr) { gpu::ObjectAttr objectAttr = llvm::cast(unwrap(mlirObjectAttr)); return wrap(objectAttr.getKernels()); }