xref: /llvm-project/mlir/lib/CAPI/Dialect/GPU.cpp (revision 016e1eb9c86923bf6a9669697f6be8309d12b78c)
16e6da74cSMaksim Levental //===- GPU.cpp - C Interface for GPU dialect ------------------------------===//
2b87219f7SNicolas Vasilache //
3b87219f7SNicolas Vasilache // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4b87219f7SNicolas Vasilache // See https://llvm.org/LICENSE.txt for license information.
5b87219f7SNicolas Vasilache // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6b87219f7SNicolas Vasilache //
7b87219f7SNicolas Vasilache //===----------------------------------------------------------------------===//
8b87219f7SNicolas Vasilache 
9b87219f7SNicolas Vasilache #include "mlir-c/Dialect/GPU.h"
10b87219f7SNicolas Vasilache #include "mlir/CAPI/Registration.h"
11d7ef488bSMogball #include "mlir/Dialect/GPU/IR/GPUDialect.h"
126e6da74cSMaksim Levental #include "llvm/Support/Casting.h"
13b87219f7SNicolas Vasilache 
146e6da74cSMaksim Levental using namespace mlir;
156e6da74cSMaksim Levental 
166e6da74cSMaksim Levental MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(GPU, gpu, gpu::GPUDialect)
176e6da74cSMaksim Levental 
18f8ff9094SGuray Ozen //===-------------------------------------------------------------------===//
19f8ff9094SGuray Ozen // AsyncTokenType
20f8ff9094SGuray Ozen //===-------------------------------------------------------------------===//
21f8ff9094SGuray Ozen 
22f8ff9094SGuray Ozen bool mlirTypeIsAGPUAsyncTokenType(MlirType type) {
23f8ff9094SGuray Ozen   return isa<gpu::AsyncTokenType>(unwrap(type));
24f8ff9094SGuray Ozen }
25f8ff9094SGuray Ozen 
26f8ff9094SGuray Ozen MlirType mlirGPUAsyncTokenTypeGet(MlirContext ctx) {
27f8ff9094SGuray Ozen   return wrap(gpu::AsyncTokenType::get(unwrap(ctx)));
28f8ff9094SGuray Ozen }
29f8ff9094SGuray Ozen 
306e6da74cSMaksim Levental //===---------------------------------------------------------------------===//
316e6da74cSMaksim Levental // ObjectAttr
326e6da74cSMaksim Levental //===---------------------------------------------------------------------===//
336e6da74cSMaksim Levental 
346e6da74cSMaksim Levental bool mlirAttributeIsAGPUObjectAttr(MlirAttribute attr) {
356e6da74cSMaksim Levental   return llvm::isa<gpu::ObjectAttr>(unwrap(attr));
366e6da74cSMaksim Levental }
376e6da74cSMaksim Levental 
386e6da74cSMaksim Levental MlirAttribute mlirGPUObjectAttrGet(MlirContext mlirCtx, MlirAttribute target,
396e6da74cSMaksim Levental                                    uint32_t format, MlirStringRef objectStrRef,
406e6da74cSMaksim Levental                                    MlirAttribute mlirObjectProps) {
416e6da74cSMaksim Levental   MLIRContext *ctx = unwrap(mlirCtx);
426e6da74cSMaksim Levental   llvm::StringRef object = unwrap(objectStrRef);
436e6da74cSMaksim Levental   DictionaryAttr objectProps;
446e6da74cSMaksim Levental   if (mlirObjectProps.ptr != nullptr)
456e6da74cSMaksim Levental     objectProps = llvm::cast<DictionaryAttr>(unwrap(mlirObjectProps));
46*016e1eb9SFabian Mora   return wrap(gpu::ObjectAttr::get(
47*016e1eb9SFabian Mora       ctx, unwrap(target), static_cast<gpu::CompilationTarget>(format),
48*016e1eb9SFabian Mora       StringAttr::get(ctx, object), objectProps, nullptr));
49*016e1eb9SFabian Mora }
50*016e1eb9SFabian Mora 
51*016e1eb9SFabian Mora MlirAttribute mlirGPUObjectAttrGetWithKernels(MlirContext mlirCtx,
52*016e1eb9SFabian Mora                                               MlirAttribute target,
53*016e1eb9SFabian Mora                                               uint32_t format,
54*016e1eb9SFabian Mora                                               MlirStringRef objectStrRef,
55*016e1eb9SFabian Mora                                               MlirAttribute mlirObjectProps,
56*016e1eb9SFabian Mora                                               MlirAttribute mlirKernelsAttr) {
57*016e1eb9SFabian Mora   MLIRContext *ctx = unwrap(mlirCtx);
58*016e1eb9SFabian Mora   llvm::StringRef object = unwrap(objectStrRef);
59*016e1eb9SFabian Mora   DictionaryAttr objectProps;
60*016e1eb9SFabian Mora   if (mlirObjectProps.ptr != nullptr)
61*016e1eb9SFabian Mora     objectProps = llvm::cast<DictionaryAttr>(unwrap(mlirObjectProps));
62*016e1eb9SFabian Mora   gpu::KernelTableAttr kernels;
63*016e1eb9SFabian Mora   if (mlirKernelsAttr.ptr != nullptr)
64*016e1eb9SFabian Mora     kernels = llvm::cast<gpu::KernelTableAttr>(unwrap(mlirKernelsAttr));
65*016e1eb9SFabian Mora   return wrap(gpu::ObjectAttr::get(
66*016e1eb9SFabian Mora       ctx, unwrap(target), static_cast<gpu::CompilationTarget>(format),
67*016e1eb9SFabian Mora       StringAttr::get(ctx, object), objectProps, kernels));
686e6da74cSMaksim Levental }
696e6da74cSMaksim Levental 
706e6da74cSMaksim Levental MlirAttribute mlirGPUObjectAttrGetTarget(MlirAttribute mlirObjectAttr) {
716e6da74cSMaksim Levental   gpu::ObjectAttr objectAttr =
726e6da74cSMaksim Levental       llvm::cast<gpu::ObjectAttr>(unwrap(mlirObjectAttr));
736e6da74cSMaksim Levental   return wrap(objectAttr.getTarget());
746e6da74cSMaksim Levental }
756e6da74cSMaksim Levental 
766e6da74cSMaksim Levental uint32_t mlirGPUObjectAttrGetFormat(MlirAttribute mlirObjectAttr) {
776e6da74cSMaksim Levental   gpu::ObjectAttr objectAttr =
786e6da74cSMaksim Levental       llvm::cast<gpu::ObjectAttr>(unwrap(mlirObjectAttr));
796e6da74cSMaksim Levental   return static_cast<uint32_t>(objectAttr.getFormat());
806e6da74cSMaksim Levental }
816e6da74cSMaksim Levental 
826e6da74cSMaksim Levental MlirStringRef mlirGPUObjectAttrGetObject(MlirAttribute mlirObjectAttr) {
836e6da74cSMaksim Levental   gpu::ObjectAttr objectAttr =
846e6da74cSMaksim Levental       llvm::cast<gpu::ObjectAttr>(unwrap(mlirObjectAttr));
856e6da74cSMaksim Levental   llvm::StringRef object = objectAttr.getObject();
866e6da74cSMaksim Levental   return mlirStringRefCreate(object.data(), object.size());
876e6da74cSMaksim Levental }
886e6da74cSMaksim Levental 
896e6da74cSMaksim Levental bool mlirGPUObjectAttrHasProperties(MlirAttribute mlirObjectAttr) {
906e6da74cSMaksim Levental   gpu::ObjectAttr objectAttr =
916e6da74cSMaksim Levental       llvm::cast<gpu::ObjectAttr>(unwrap(mlirObjectAttr));
926e6da74cSMaksim Levental   return objectAttr.getProperties() != nullptr;
936e6da74cSMaksim Levental }
946e6da74cSMaksim Levental 
956e6da74cSMaksim Levental MlirAttribute mlirGPUObjectAttrGetProperties(MlirAttribute mlirObjectAttr) {
966e6da74cSMaksim Levental   gpu::ObjectAttr objectAttr =
976e6da74cSMaksim Levental       llvm::cast<gpu::ObjectAttr>(unwrap(mlirObjectAttr));
986e6da74cSMaksim Levental   return wrap(objectAttr.getProperties());
996e6da74cSMaksim Levental }
100*016e1eb9SFabian Mora 
101*016e1eb9SFabian Mora bool mlirGPUObjectAttrHasKernels(MlirAttribute mlirObjectAttr) {
102*016e1eb9SFabian Mora   gpu::ObjectAttr objectAttr =
103*016e1eb9SFabian Mora       llvm::cast<gpu::ObjectAttr>(unwrap(mlirObjectAttr));
104*016e1eb9SFabian Mora   return objectAttr.getKernels() != nullptr;
105*016e1eb9SFabian Mora }
106*016e1eb9SFabian Mora 
107*016e1eb9SFabian Mora MlirAttribute mlirGPUObjectAttrGetKernels(MlirAttribute mlirObjectAttr) {
108*016e1eb9SFabian Mora   gpu::ObjectAttr objectAttr =
109*016e1eb9SFabian Mora       llvm::cast<gpu::ObjectAttr>(unwrap(mlirObjectAttr));
110*016e1eb9SFabian Mora   return wrap(objectAttr.getKernels());
111*016e1eb9SFabian Mora }
112