1 //===- GPUOpsLowering.h - GPU FuncOp / ReturnOp lowering -------*- C++ -*--===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 #ifndef MLIR_CONVERSION_GPUCOMMON_GPUOPSLOWERING_H_ 9 #define MLIR_CONVERSION_GPUCOMMON_GPUOPSLOWERING_H_ 10 11 #include "mlir/Conversion/StandardToLLVM/ConvertStandardToLLVM.h" 12 #include "mlir/Dialect/GPU/GPUDialect.h" 13 #include "mlir/Dialect/LLVMIR/LLVMDialect.h" 14 15 namespace mlir { 16 17 struct GPUFuncOpLowering : ConvertOpToLLVMPattern<gpu::GPUFuncOp> { 18 GPUFuncOpLowering(LLVMTypeConverter &converter, unsigned allocaAddrSpace, 19 Identifier kernelAttributeName) 20 : ConvertOpToLLVMPattern<gpu::GPUFuncOp>(converter), 21 allocaAddrSpace(allocaAddrSpace), 22 kernelAttributeName(kernelAttributeName) {} 23 24 LogicalResult 25 matchAndRewrite(gpu::GPUFuncOp gpuFuncOp, ArrayRef<Value> operands, 26 ConversionPatternRewriter &rewriter) const override; 27 28 private: 29 /// The address spcae to use for `alloca`s in private memory. 30 unsigned allocaAddrSpace; 31 32 /// The attribute name to use instead of `gpu.kernel`. 33 Identifier kernelAttributeName; 34 }; 35 36 struct GPUReturnOpLowering : public ConvertOpToLLVMPattern<gpu::ReturnOp> { 37 using ConvertOpToLLVMPattern<gpu::ReturnOp>::ConvertOpToLLVMPattern; 38 39 LogicalResult 40 matchAndRewrite(gpu::ReturnOp op, ArrayRef<Value> operands, 41 ConversionPatternRewriter &rewriter) const override { 42 rewriter.replaceOpWithNewOp<LLVM::ReturnOp>(op, operands); 43 return success(); 44 } 45 }; 46 47 } // namespace mlir 48 49 #endif // MLIR_CONVERSION_GPUCOMMON_GPUOPSLOWERING_H_ 50