llvm-project/mlir/test/lib/Transforms/TestConvertGPUKernelToCubin.cpp
Alex Zinenko 19db802e7b [mlir] make implementations of translation to LLVM IR interfaces private
There is no need for the interface implementations to be exposed, opaque
registration functions are sufficient for all users, similarly to passes.

Reviewed By: mehdi_amini

Differential Revision: https://reviews.llvm.org/D97852
2021-03-04 09:16:32 +01:00

56 lines
2.0 KiB
C++

//===- 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<std::vector<char>>(data, data + sizeof(data) - 1);
}
static std::unique_ptr<llvm::Module>
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