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