//===- Utils.h - MLIR ROCDL target utils ------------------------*- C++ -*-===// // // 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 // //===----------------------------------------------------------------------===// // // This files declares ROCDL target related utility classes and functions. // //===----------------------------------------------------------------------===// #ifndef MLIR_TARGET_LLVM_ROCDL_UTILS_H #define MLIR_TARGET_LLVM_ROCDL_UTILS_H #include "mlir/Dialect/GPU/IR/CompilationInterfaces.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" #include "mlir/Dialect/LLVMIR/ROCDLDialect.h" #include "mlir/Support/LLVM.h" #include "mlir/Target/LLVM/ModuleToObject.h" namespace mlir { namespace ROCDL { /// Searches & returns the path ROCM toolkit path, the search order is: /// 1. The `ROCM_PATH` environment variable. /// 2. The `ROCM_ROOT` environment variable. /// 3. The `ROCM_HOME` environment variable. /// 4. The ROCM path detected by CMake. /// 5. Returns an empty string. StringRef getROCMPath(); /// Helper enum for specifying the AMD GCN device libraries required for /// compilation. enum class AMDGCNLibraries : uint32_t { … }; /// Base class for all ROCDL serializations from GPU modules into binary /// strings. By default this class serializes into LLVM bitcode. class SerializeGPUModuleBase : public LLVM::ModuleToObject { … }; /// Returns a map containing the `amdhsa.kernels` ELF metadata for each of the /// kernels in the binary, or `std::nullopt` if the metadata couldn't be /// retrieved. The map associates the name of the kernel with the list of named /// attributes found in `amdhsa.kernels`. For more information on the ELF /// metadata see: https://llvm.org/docs/AMDGPUUsage.html#amdhsa std::optional<DenseMap<StringAttr, NamedAttrList>> getAMDHSAKernelsELFMetadata(Builder &builder, ArrayRef<char> elfData); /// Returns a `#gpu.kernel_table` containing kernel metadata for each of the /// kernels in `gpuModule`. If `elfData` is valid, then the `amdhsa.kernels` ELF /// metadata will be added to the `#gpu.kernel_table`. gpu::KernelTableAttr getKernelMetadata(Operation *gpuModule, ArrayRef<char> elfData = {}); } // namespace ROCDL } // namespace mlir #endif // MLIR_TARGET_LLVM_ROCDL_UTILS_H