forked from OSchip/llvm-project
[mlir] Add populateGpuToLLVMConversionPatterns function
Differential Revision: https://reviews.llvm.org/D107218
This commit is contained in:
parent
a5a5e73353
commit
7d85560583
|
@ -52,6 +52,12 @@ using LoweringCallback = std::function<std::unique_ptr<llvm::Module>(
|
|||
/// typed ABI on top of GPU runtimes such as CUDA or ROCm (HIP).
|
||||
std::unique_ptr<OperationPass<ModuleOp>> createGpuToLLVMConversionPass();
|
||||
|
||||
/// Collect a set of patterns to convert from the GPU dialect to LLVM and
|
||||
/// populate converter for gpu types.
|
||||
void populateGpuToLLVMConversionPatterns(LLVMTypeConverter &converter,
|
||||
OwningRewritePatternList &patterns,
|
||||
StringRef gpuBinaryAnnotation = {});
|
||||
|
||||
} // namespace mlir
|
||||
|
||||
#endif // MLIR_CONVERSION_GPUCOMMON_GPUCOMMONPASS_H_
|
||||
|
|
|
@ -323,21 +323,7 @@ void GpuToLLVMConversionPass::runOnOperation() {
|
|||
populateStdToLLVMConversionPatterns(converter, patterns);
|
||||
populateAsyncStructuralTypeConversionsAndLegality(converter, patterns,
|
||||
target);
|
||||
|
||||
converter.addConversion(
|
||||
[context = &converter.getContext()](gpu::AsyncTokenType type) -> Type {
|
||||
return LLVM::LLVMPointerType::get(IntegerType::get(context, 8));
|
||||
});
|
||||
patterns.add<ConvertAllocOpToGpuRuntimeCallPattern,
|
||||
ConvertDeallocOpToGpuRuntimeCallPattern,
|
||||
ConvertHostRegisterOpToGpuRuntimeCallPattern,
|
||||
ConvertMemcpyOpToGpuRuntimeCallPattern,
|
||||
ConvertWaitAsyncOpToGpuRuntimeCallPattern,
|
||||
ConvertWaitOpToGpuRuntimeCallPattern,
|
||||
ConvertAsyncYieldToGpuRuntimeCallPattern>(converter);
|
||||
patterns.add<ConvertLaunchFuncOpToGpuRuntimeCallPattern>(converter,
|
||||
gpuBinaryAnnotation);
|
||||
patterns.add<EraseGpuModuleOpPattern>(&converter.getContext());
|
||||
populateGpuToLLVMConversionPatterns(converter, patterns, gpuBinaryAnnotation);
|
||||
|
||||
if (failed(
|
||||
applyPartialConversion(getOperation(), target, std::move(patterns))))
|
||||
|
@ -804,3 +790,22 @@ std::unique_ptr<mlir::OperationPass<mlir::ModuleOp>>
|
|||
mlir::createGpuToLLVMConversionPass() {
|
||||
return std::make_unique<GpuToLLVMConversionPass>();
|
||||
}
|
||||
|
||||
void mlir::populateGpuToLLVMConversionPatterns(
|
||||
LLVMTypeConverter &converter, OwningRewritePatternList &patterns,
|
||||
StringRef gpuBinaryAnnotation) {
|
||||
converter.addConversion(
|
||||
[context = &converter.getContext()](gpu::AsyncTokenType type) -> Type {
|
||||
return LLVM::LLVMPointerType::get(IntegerType::get(context, 8));
|
||||
});
|
||||
patterns.add<ConvertAllocOpToGpuRuntimeCallPattern,
|
||||
ConvertDeallocOpToGpuRuntimeCallPattern,
|
||||
ConvertHostRegisterOpToGpuRuntimeCallPattern,
|
||||
ConvertMemcpyOpToGpuRuntimeCallPattern,
|
||||
ConvertWaitAsyncOpToGpuRuntimeCallPattern,
|
||||
ConvertWaitOpToGpuRuntimeCallPattern,
|
||||
ConvertAsyncYieldToGpuRuntimeCallPattern>(converter);
|
||||
patterns.add<ConvertLaunchFuncOpToGpuRuntimeCallPattern>(converter,
|
||||
gpuBinaryAnnotation);
|
||||
patterns.add<EraseGpuModuleOpPattern>(&converter.getContext());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue