[Mlir-commits] [mlir] 9dfd3c3 - [mlir][sparse][gpu] reduce boilerplate class declarations
Aart Bik
llvmlistbot at llvm.org
Tue Aug 8 10:43:07 PDT 2023
Author: Aart Bik
Date: 2023-08-08T10:42:57-07:00
New Revision: 9dfd3c3247b7abfef6ec763fe462951ee311b578
URL: https://github.com/llvm/llvm-project/commit/9dfd3c3247b7abfef6ec763fe462951ee311b578
DIFF: https://github.com/llvm/llvm-project/commit/9dfd3c3247b7abfef6ec763fe462951ee311b578.diff
LOG: [mlir][sparse][gpu] reduce boilerplate class declarations
Macro is used to avoid repeating same pattern many times.
Also fixed the ordering of ops to be consistent.
Reviewed By: K-Wu
Differential Revision: https://reviews.llvm.org/D157419
Added:
Modified:
mlir/lib/Conversion/GPUCommon/GPUToLLVMConversion.cpp
Removed:
################################################################################
diff --git a/mlir/lib/Conversion/GPUCommon/GPUToLLVMConversion.cpp b/mlir/lib/Conversion/GPUCommon/GPUToLLVMConversion.cpp
index e72dcc89157227..7428b5ebe521d9 100644
--- a/mlir/lib/Conversion/GPUCommon/GPUToLLVMConversion.cpp
+++ b/mlir/lib/Conversion/GPUCommon/GPUToLLVMConversion.cpp
@@ -529,175 +529,8 @@ class ConvertSetDefaultDeviceOpToGpuRuntimeCallPattern
ConversionPatternRewriter &rewriter) const override;
};
-class ConvertCreateDnTensorOpToGpuRuntimeCallPattern
- : public ConvertOpToGpuRuntimeCallPattern<gpu::CreateDnTensorOp> {
-public:
- ConvertCreateDnTensorOpToGpuRuntimeCallPattern(
- LLVMTypeConverter &typeConverter)
- : ConvertOpToGpuRuntimeCallPattern<gpu::CreateDnTensorOp>(typeConverter) {
- }
-
-private:
- LogicalResult
- matchAndRewrite(gpu::CreateDnTensorOp op, OpAdaptor adaptor,
- ConversionPatternRewriter &rewriter) const override;
-};
-
-class ConvertDestroyDnTensorOpToGpuRuntimeCallPattern
- : public ConvertOpToGpuRuntimeCallPattern<gpu::DestroyDnTensorOp> {
-public:
- ConvertDestroyDnTensorOpToGpuRuntimeCallPattern(
- LLVMTypeConverter &typeConverter)
- : ConvertOpToGpuRuntimeCallPattern<gpu::DestroyDnTensorOp>(
- typeConverter) {}
-
-private:
- LogicalResult
- matchAndRewrite(gpu::DestroyDnTensorOp op, OpAdaptor adaptor,
- ConversionPatternRewriter &rewriter) const override;
-};
-
-class ConvertCreateCooOpToGpuRuntimeCallPattern
- : public ConvertOpToGpuRuntimeCallPattern<gpu::CreateCooOp> {
-public:
- ConvertCreateCooOpToGpuRuntimeCallPattern(LLVMTypeConverter &typeConverter)
- : ConvertOpToGpuRuntimeCallPattern<gpu::CreateCooOp>(typeConverter) {}
-
-private:
- LogicalResult
- matchAndRewrite(gpu::CreateCooOp op, OpAdaptor adaptor,
- ConversionPatternRewriter &rewriter) const override;
-};
-
-class ConvertCreateCooAoSOpToGpuRuntimeCallPattern
- : public ConvertOpToGpuRuntimeCallPattern<gpu::CreateCooAoSOp> {
-public:
- ConvertCreateCooAoSOpToGpuRuntimeCallPattern(LLVMTypeConverter &typeConverter)
- : ConvertOpToGpuRuntimeCallPattern<gpu::CreateCooAoSOp>(typeConverter) {}
-
-private:
- LogicalResult
- matchAndRewrite(gpu::CreateCooAoSOp op, OpAdaptor adaptor,
- ConversionPatternRewriter &rewriter) const override;
-};
-
-class ConvertCreateCsrOpToGpuRuntimeCallPattern
- : public ConvertOpToGpuRuntimeCallPattern<gpu::CreateCsrOp> {
-public:
- ConvertCreateCsrOpToGpuRuntimeCallPattern(LLVMTypeConverter &typeConverter)
- : ConvertOpToGpuRuntimeCallPattern<gpu::CreateCsrOp>(typeConverter) {}
-
-private:
- LogicalResult
- matchAndRewrite(gpu::CreateCsrOp op, OpAdaptor adaptor,
- ConversionPatternRewriter &rewriter) const override;
-};
-
-class ConvertCreate2To4SpMatOpToGpuRuntimeCallPattern
- : public ConvertOpToGpuRuntimeCallPattern<gpu::Create2To4SpMatOp> {
-public:
- ConvertCreate2To4SpMatOpToGpuRuntimeCallPattern(
- LLVMTypeConverter &typeConverter)
- : ConvertOpToGpuRuntimeCallPattern<gpu::Create2To4SpMatOp>(
- typeConverter) {}
-
-private:
- LogicalResult
- matchAndRewrite(gpu::Create2To4SpMatOp op, OpAdaptor adaptor,
- ConversionPatternRewriter &rewriter) const override;
-};
-
-class ConvertDestroySpMatOpToGpuRuntimeCallPattern
- : public ConvertOpToGpuRuntimeCallPattern<gpu::DestroySpMatOp> {
-public:
- ConvertDestroySpMatOpToGpuRuntimeCallPattern(LLVMTypeConverter &typeConverter)
- : ConvertOpToGpuRuntimeCallPattern<gpu::DestroySpMatOp>(typeConverter) {}
-
-private:
- LogicalResult
- matchAndRewrite(gpu::DestroySpMatOp op, OpAdaptor adaptor,
- ConversionPatternRewriter &rewriter) const override;
-};
-
-class ConvertSpMVBufferSizeOpToGpuRuntimeCallPattern
- : public ConvertOpToGpuRuntimeCallPattern<gpu::SpMVBufferSizeOp> {
-public:
- ConvertSpMVBufferSizeOpToGpuRuntimeCallPattern(
- LLVMTypeConverter &typeConverter)
- : ConvertOpToGpuRuntimeCallPattern<gpu::SpMVBufferSizeOp>(typeConverter) {
- }
-
-private:
- LogicalResult
- matchAndRewrite(gpu::SpMVBufferSizeOp op, OpAdaptor adaptor,
- ConversionPatternRewriter &rewriter) const override;
-};
-
-class ConvertSpMVOpToGpuRuntimeCallPattern
- : public ConvertOpToGpuRuntimeCallPattern<gpu::SpMVOp> {
-public:
- ConvertSpMVOpToGpuRuntimeCallPattern(LLVMTypeConverter &typeConverter)
- : ConvertOpToGpuRuntimeCallPattern<gpu::SpMVOp>(typeConverter) {}
-
-private:
- LogicalResult
- matchAndRewrite(gpu::SpMVOp op, OpAdaptor adaptor,
- ConversionPatternRewriter &rewriter) const override;
-};
-
-class ConvertSpMMBufferSizeOpToGpuRuntimeCallPattern
- : public ConvertOpToGpuRuntimeCallPattern<gpu::SpMMBufferSizeOp> {
-public:
- ConvertSpMMBufferSizeOpToGpuRuntimeCallPattern(
- LLVMTypeConverter &typeConverter)
- : ConvertOpToGpuRuntimeCallPattern<gpu::SpMMBufferSizeOp>(typeConverter) {
- }
-
-private:
- LogicalResult
- matchAndRewrite(gpu::SpMMBufferSizeOp op, OpAdaptor adaptor,
- ConversionPatternRewriter &rewriter) const override;
-};
-
-class ConvertSDDMMBufferSizeOpToGpuRuntimeCallPattern
- : public ConvertOpToGpuRuntimeCallPattern<gpu::SDDMMBufferSizeOp> {
-public:
- ConvertSDDMMBufferSizeOpToGpuRuntimeCallPattern(
- LLVMTypeConverter &typeConverter)
- : ConvertOpToGpuRuntimeCallPattern<gpu::SDDMMBufferSizeOp>(
- typeConverter) {}
-
-private:
- LogicalResult
- matchAndRewrite(gpu::SDDMMBufferSizeOp op, OpAdaptor adaptor,
- ConversionPatternRewriter &rewriter) const override;
-};
-
-class ConvertSpMMOpToGpuRuntimeCallPattern
- : public ConvertOpToGpuRuntimeCallPattern<gpu::SpMMOp> {
-public:
- ConvertSpMMOpToGpuRuntimeCallPattern(LLVMTypeConverter &typeConverter)
- : ConvertOpToGpuRuntimeCallPattern<gpu::SpMMOp>(typeConverter) {}
-
-private:
- LogicalResult
- matchAndRewrite(gpu::SpMMOp op, OpAdaptor adaptor,
- ConversionPatternRewriter &rewriter) const override;
-};
-
-class ConvertSDDMMOpToGpuRuntimeCallPattern
- : public ConvertOpToGpuRuntimeCallPattern<gpu::SDDMMOp> {
-public:
- ConvertSDDMMOpToGpuRuntimeCallPattern(LLVMTypeConverter &typeConverter)
- : ConvertOpToGpuRuntimeCallPattern<gpu::SDDMMOp>(typeConverter) {}
-
-private:
- LogicalResult
- matchAndRewrite(gpu::SDDMMOp op, OpAdaptor adaptor,
- ConversionPatternRewriter &rewriter) const override;
-};
-
-// TODO: Apply this pattern to all GPU ops.
+/// Generic rewriting rule for operation on sparse matrices.
+/// Currently supports CUDA (by means of cuSparse and cuSparseLt).
#define DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(op_name) \
class Convert##op_name##ToGpuRuntimeCallPattern \
: public ConvertOpToGpuRuntimeCallPattern<gpu::op_name> { \
@@ -712,12 +545,25 @@ class ConvertSDDMMOpToGpuRuntimeCallPattern
ConversionPatternRewriter &rewriter) const override; \
};
+DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(CreateDnTensorOp)
+DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(DestroyDnTensorOp)
+DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(CreateCooOp)
+DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(CreateCooAoSOp)
+DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(CreateCsrOp)
+DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(Create2To4SpMatOp)
+DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(DestroySpMatOp)
+DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(SpMVBufferSizeOp)
+DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(SpMVOp)
+DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(SpMMBufferSizeOp)
+DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(SDDMMBufferSizeOp)
+DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(SpMMOp)
+DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(SDDMMOp)
DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(SpGEMMCreateDescrOp)
DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(SpGEMMDestroyDescrOp)
DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(SpGEMMWorkEstimationOrComputeOp)
DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(SpGEMMEstimateMemoryOp)
-DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(SpGEMMGetSizeOp)
DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(SpGEMMCopyOp)
+DECLARE_CONVERT_OP_TO_GPU_RUNTIME_CALL_PATTERN(SpGEMMGetSizeOp)
} // namespace
@@ -2054,18 +1900,18 @@ void mlir::populateGpuToLLVMConversionPatterns(LLVMTypeConverter &converter,
ConvertCreateCsrOpToGpuRuntimeCallPattern,
ConvertCreate2To4SpMatOpToGpuRuntimeCallPattern,
ConvertDestroySpMatOpToGpuRuntimeCallPattern,
+ ConvertSpMVBufferSizeOpToGpuRuntimeCallPattern,
+ ConvertSpMVOpToGpuRuntimeCallPattern,
+ ConvertSpMMBufferSizeOpToGpuRuntimeCallPattern,
+ ConvertSDDMMBufferSizeOpToGpuRuntimeCallPattern,
+ ConvertSpMMOpToGpuRuntimeCallPattern,
+ ConvertSDDMMOpToGpuRuntimeCallPattern,
ConvertSpGEMMCreateDescrOpToGpuRuntimeCallPattern,
ConvertSpGEMMDestroyDescrOpToGpuRuntimeCallPattern,
ConvertSpGEMMWorkEstimationOrComputeOpToGpuRuntimeCallPattern,
ConvertSpGEMMEstimateMemoryOpToGpuRuntimeCallPattern,
- ConvertSpGEMMGetSizeOpToGpuRuntimeCallPattern,
ConvertSpGEMMCopyOpToGpuRuntimeCallPattern,
- ConvertSpMVBufferSizeOpToGpuRuntimeCallPattern,
- ConvertSpMVOpToGpuRuntimeCallPattern,
- ConvertSpMMBufferSizeOpToGpuRuntimeCallPattern,
- ConvertSpMMOpToGpuRuntimeCallPattern,
- ConvertSDDMMBufferSizeOpToGpuRuntimeCallPattern,
- ConvertSDDMMOpToGpuRuntimeCallPattern>(converter);
+ ConvertSpGEMMGetSizeOpToGpuRuntimeCallPattern>(converter);
patterns.add<ConvertLaunchFuncOpToGpuRuntimeCallPattern>(
converter, gpuBinaryAnnotation, kernelBarePtrCallConv);
patterns.add<EraseGpuModuleOpPattern>(&converter.getContext());
More information about the Mlir-commits
mailing list