//===- TestConvertGPUKernelToCubin.cpp - Test gpu kernel cubin lowering ---===// // // 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/Conversion/GPUCommon/GPUCommonPass.h" #include "mlir/Dialect/LLVMIR/NVVMDialect.h" #include "mlir/Pass/Pass.h" #include "mlir/Pass/PassManager.h" #include "mlir/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.h" #include "mlir/Target/LLVMIR/Dialect/NVVM/NVVMToLLVMIRTranslation.h" #include "mlir/Target/LLVMIR/Export.h" #include "llvm/Support/TargetSelect.h" using namespace mlir; #if MLIR_CUDA_CONVERSIONS_ENABLED static OwnedBlob compilePtxToCubinForTesting(const std::string &, Location, StringRef) { const char data[] = "CUBIN"; return std::make_unique>(data, data + sizeof(data) - 1); } static std::unique_ptr translateModuleToNVVMIR(Operation *m, llvm::LLVMContext &llvmContext, StringRef moduleName) { registerLLVMDialectTranslation(*m->getContext()); registerNVVMDialectTranslation(*m->getContext()); return translateModuleToLLVMIR(m, llvmContext, moduleName); } namespace mlir { namespace test { void registerTestConvertGPUKernelToCubinPass() { PassPipelineRegistration<>( "test-kernel-to-cubin", "Convert all kernel functions to CUDA cubin blobs", [](OpPassManager &pm) { // Initialize LLVM NVPTX backend. LLVMInitializeNVPTXTarget(); LLVMInitializeNVPTXTargetInfo(); LLVMInitializeNVPTXTargetMC(); LLVMInitializeNVPTXAsmPrinter(); pm.addPass(createConvertGPUKernelToBlobPass( translateModuleToNVVMIR, compilePtxToCubinForTesting, "nvptx64-nvidia-cuda", "sm_35", "+ptx60", "nvvm.cubin")); }); } } // namespace test } // namespace mlir #endif // MLIR_CUDA_CONVERSIONS_ENABLED