diff --git a/mlir/include/mlir/Conversion/GPUCommon/GPUCommonPass.h b/mlir/include/mlir/Conversion/GPUCommon/GPUCommonPass.h --- a/mlir/include/mlir/Conversion/GPUCommon/GPUCommonPass.h +++ b/mlir/include/mlir/Conversion/GPUCommon/GPUCommonPass.h @@ -60,37 +60,6 @@ void populateGpuToLLVMConversionPatterns(LLVMTypeConverter &converter, OwningRewritePatternList &patterns, StringRef gpuBinaryAnnotation = {}); - -/// Creates a pass to convert kernel functions into GPU target object blobs. -/// -/// This transformation takes the body of each function that is annotated with -/// the 'gpu.kernel' attribute, copies it to a new LLVM module, compiles the -/// module with help of the GPU backend to target object and then invokes -/// the provided blobGenerator to produce a binary blob. Such blob is then -/// attached as a string attribute to the kernel function. -/// -/// Following callbacks are to be provided by user: -/// - loweringCallback : lower the module to an LLVM module. -/// - blobGenerator : build a blob executable on target GPU. -/// -/// Information wrt LLVM backend are to be supplied by user: -/// - triple : target triple to be used. -/// - targetChip : mcpu to be used. -/// - features : target-specific features to be used. -/// -/// Information about result attribute is to be specified by user: -/// - gpuBinaryAnnotation : the name of the attribute which contains the blob. -/// -/// After the transformation, the body of the kernel function is removed (i.e., -/// it is turned into a declaration). -/// -/// A non-empty gpuBinaryAnnotation overrides the pass' command line option. -std::unique_ptr> -createConvertGPUKernelToBlobPass(LoweringCallback loweringCallback, - BlobGenerator blobGenerator, StringRef triple, - StringRef targetChip, StringRef features, - StringRef gpuBinaryAnnotation = {}); - } // namespace mlir #endif // MLIR_CONVERSION_GPUCOMMON_GPUCOMMONPASS_H_ diff --git a/mlir/lib/Conversion/GPUCommon/CMakeLists.txt b/mlir/lib/Conversion/GPUCommon/CMakeLists.txt --- a/mlir/lib/Conversion/GPUCommon/CMakeLists.txt +++ b/mlir/lib/Conversion/GPUCommon/CMakeLists.txt @@ -16,7 +16,6 @@ add_mlir_conversion_library(MLIRGPUToGPURuntimeTransforms ConvertLaunchFuncToRuntimeCalls.cpp - ConvertKernelFuncToBlob.cpp GPUOpsLowering.cpp DEPENDS diff --git a/mlir/lib/Conversion/GPUCommon/ConvertKernelFuncToBlob.cpp b/mlir/lib/Conversion/GPUCommon/ConvertKernelFuncToBlob.cpp deleted file mode 100644 --- a/mlir/lib/Conversion/GPUCommon/ConvertKernelFuncToBlob.cpp +++ /dev/null @@ -1,93 +0,0 @@ -//===- ConvertKernelFuncToBlob.cpp - MLIR GPU lowering passes -------------===// -// -// 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 file implements a pass to convert gpu kernel functions into a -// corresponding binary blob that can be executed on a GPU. Currently -// only translates the function itself but no dependencies. -// -//===----------------------------------------------------------------------===// - -#include "mlir/Conversion/GPUCommon/GPUCommonPass.h" - -#include "mlir/Dialect/GPU/GPUDialect.h" -#include "mlir/Dialect/GPU/Passes.h" -#include "mlir/Dialect/LLVMIR/LLVMDialect.h" -#include "mlir/IR/Attributes.h" -#include "mlir/IR/Builders.h" -#include "mlir/IR/BuiltinOps.h" -#include "mlir/Pass/Pass.h" -#include "mlir/Pass/PassRegistry.h" -#include "mlir/Support/LogicalResult.h" - -#include "llvm/ADT/Optional.h" -#include "llvm/ADT/Twine.h" -#include "llvm/Support/Error.h" -#include "llvm/Support/Mutex.h" -#include "llvm/Support/TargetRegistry.h" -#include "llvm/Support/TargetSelect.h" - -using namespace mlir; - -namespace { - -/// A pass converting tagged kernel modules to a blob with target instructions. -/// -/// If tagged as a kernel module, each contained function is translated to -/// user-specified IR. A user provided BlobGenerator then compiles the IR to -/// GPU binary code, which is then attached as an attribute to the function. -/// The function body is erased. -class GpuKernelToBlobPass - : public PassWrapper { -public: - GpuKernelToBlobPass(LoweringCallback loweringCallback, - BlobGenerator blobGenerator, StringRef triple, - StringRef targetChip, StringRef features, - StringRef gpuBinaryAnnotation) - : loweringCallback(loweringCallback), blobGenerator(blobGenerator) { - if (!triple.empty()) - this->triple = triple.str(); - if (!targetChip.empty()) - this->chip = targetChip.str(); - if (!features.empty()) - this->features = features.str(); - if (!gpuBinaryAnnotation.empty()) - this->gpuBinaryAnnotation = gpuBinaryAnnotation.str(); - } - -private: - // Translates the 'getOperation()' result to an LLVM module. - // Note: when this class is removed, this function no longer needs to be - // virtual. - std::unique_ptr - translateToLLVMIR(llvm::LLVMContext &llvmContext) override { - return loweringCallback(getOperation(), llvmContext, "LLVMDialectModule"); - } - - // Serializes the target ISA to binary form. - std::unique_ptr> - serializeISA(const std::string &isa) override { - return blobGenerator(isa, getOperation().getLoc(), - getOperation().getName()); - } - - LoweringCallback loweringCallback; - BlobGenerator blobGenerator; -}; - -} // anonymous namespace - -std::unique_ptr> -mlir::createConvertGPUKernelToBlobPass(LoweringCallback loweringCallback, - BlobGenerator blobGenerator, - StringRef triple, StringRef targetChip, - StringRef features, - StringRef gpuBinaryAnnotation) { - return std::make_unique(loweringCallback, blobGenerator, - triple, targetChip, features, - gpuBinaryAnnotation); -}