Skip to content

Commit 588cb13

Browse files
changing from dialect converstion to gpu transform pass
Signed-off-by: Muzammiluddin Syed <[email protected]>
1 parent 2eb3cb8 commit 588cb13

File tree

12 files changed

+53
-701
lines changed

12 files changed

+53
-701
lines changed

mlir/include/mlir/Conversion/Passes.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
#include "mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h"
3535
#include "mlir/Conversion/FuncToSPIRV/FuncToSPIRVPass.h"
3636
#include "mlir/Conversion/GPUCommon/GPUCommonPass.h"
37-
#include "mlir/Conversion/GPUToAMDGPU/GPUToAMDGPU.h"
3837
#include "mlir/Conversion/GPUToLLVMSPV/GPUToLLVMSPVPass.h"
3938
#include "mlir/Conversion/GPUToNVVM/GPUToNVVMPass.h"
4039
#include "mlir/Conversion/GPUToROCDL/GPUToROCDLPass.h"

mlir/include/mlir/Conversion/Passes.td

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -643,22 +643,6 @@ def ConvertGPUToSPIRV : Pass<"convert-gpu-to-spirv", "ModuleOp"> {
643643
];
644644
}
645645

646-
//===----------------------------------------------------------------------===//
647-
// GPUToAMDGPU
648-
//===----------------------------------------------------------------------===//
649-
650-
def ConvertGPUToAMDGPUPass : Pass<"convert-gpu-to-amdgpu"> {
651-
let summary = "Generate AMDGPU operations for gpu operations";
652-
let dependentDialects = [
653-
"LLVM::LLVMDialect",
654-
"::mlir::gpu::GPUDialect",
655-
"amdgpu::AMDGPUDialect",
656-
];
657-
let options = [Option<"subgroupSize", "subgroup-size", "unsigned",
658-
/*default=*/"64",
659-
"Size of subgroup">];
660-
}
661-
662646
//===----------------------------------------------------------------------===//
663647
// ConvertIndexToLLVMPass
664648
//===----------------------------------------------------------------------===//

mlir/include/mlir/Dialect/GPU/Transforms/Passes.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ void populateGpuDecomposeMemrefsPatterns(RewritePatternSet &patterns);
9494
/// Erase barriers that do not enforce conflicting memory side effects.
9595
void populateGpuEliminateBarriersPatterns(RewritePatternSet &patterns);
9696

97+
void populateGpuDecomposeSubgroupReduceToDppPatterns(
98+
RewritePatternSet &patterns, unsigned subgroupSize);
99+
97100
/// Generate the code for registering passes.
98101
#define GEN_PASS_REGISTRATION
99102
#include "mlir/Dialect/GPU/Transforms/Passes.h.inc"

mlir/include/mlir/Dialect/GPU/Transforms/Passes.td

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,4 +258,28 @@ def GpuSPIRVAttachTarget: Pass<"spirv-attach-target", ""> {
258258
];
259259
}
260260

261+
def GpuDecomposeSubgroupReduceToDppPass: Pass<"decompose-subgroup-reduce-to-dpp", ""> {
262+
let summary = "Decomposes reductions across subgroups to data parallel primitives.";
263+
let description = [{
264+
This pass decomposes gpu::subgroup_reduce ops to AMDGPU::DPP ops where
265+
applicable, while respecting cluster size and stride.
266+
267+
Example:
268+
```
269+
// File: in.mlir:
270+
[TO-DO]
271+
// mlir-opt --decompose-subgroup-reduce-to-dpp subgroup-size=64 in.mlir
272+
[TO-DO]
273+
```
274+
}];
275+
let dependentDialects = [
276+
"amdgpu::AMDGPUDialect",
277+
"LLVM::LLVMDialect",
278+
"ROCDL::ROCDLDialect",
279+
];
280+
let options = [Option<"subgroupSize", "subgroup-size", "unsigned",
281+
/*default=*/"64",
282+
"Size of subgroup">];
283+
}
284+
261285
#endif // MLIR_DIALECT_GPU_PASSES

mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1333,7 +1333,6 @@ struct ConvertAMDGPUToROCDLPass
13331333
using Base::Base;
13341334

13351335
void runOnOperation() override {
1336-
llvm::errs() << " WHEN DOES AMDGPU TO ROCDL RUN\n";
13371336
MLIRContext *ctx = &getContext();
13381337
FailureOr<Chipset> maybeChipset = Chipset::parse(chipset);
13391338
if (failed(maybeChipset)) {

mlir/lib/Conversion/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ add_subdirectory(FuncToEmitC)
2424
add_subdirectory(FuncToLLVM)
2525
add_subdirectory(FuncToSPIRV)
2626
add_subdirectory(GPUCommon)
27-
add_subdirectory(GPUToAMDGPU)
2827
add_subdirectory(GPUToLLVMSPV)
2928
add_subdirectory(GPUToNVVM)
3029
add_subdirectory(GPUToROCDL)

mlir/lib/Conversion/GPUToAMDGPU/CMakeLists.txt

Lines changed: 0 additions & 22 deletions
This file was deleted.

mlir/lib/Conversion/GPUToROCDL/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ add_mlir_conversion_library(MLIRGPUToROCDLTransforms
1515
MLIRMathToLLVM
1616
MLIRMathToROCDL
1717
MLIRAMDGPUToROCDL
18-
MLIRGPUToAMDGPU
1918
MLIRFuncToLLVM
2019
MLIRGPUDialect
2120
MLIRGPUToGPURuntimeTransforms

mlir/lib/Dialect/GPU/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ add_mlir_dialect_library(MLIRGPUTransforms
4141
Transforms/ShuffleRewriter.cpp
4242
Transforms/SPIRVAttachTarget.cpp
4343
Transforms/SubgroupReduceLowering.cpp
44+
Transforms/DecomposeSubgroupReduceToDpp.cpp
4445

4546
OBJECT
4647

mlir/lib/Conversion/GPUToAMDGPU/GPUToAMDGPU.cpp renamed to mlir/lib/Dialect/GPU/Transforms/DecomposeSubgroupReduceToDpp.cpp

Lines changed: 24 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
//===- GPUToAMDGPU.cpp - GPU to AMDGPU dialect conversion -------===//
1+
//===- DecomposeSubgroupReduceToDPP.cpp - Decompose subgroup reduce pass -===//
22
//
33
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
44
// See https://llvm.org/LICENSE.txt for license information.
55
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
66
//
77
//===----------------------------------------------------------------------===//
8+
//
9+
// This file implements decompose subgroup reduce to DPP pass.
10+
//
11+
//===----------------------------------------------------------------------===//
812

9-
#include "mlir/Conversion/GPUToAMDGPU/GPUToAMDGPU.h"
13+
#include "mlir/Dialect/GPU/Transforms/Passes.h"
1014

11-
#include "mlir/Conversion/LLVMCommon/ConversionTarget.h"
12-
#include "mlir/Conversion/LLVMCommon/Pattern.h"
13-
#include "mlir/Conversion/LLVMCommon/TypeConverter.h"
1415
#include "mlir/Dialect/AMDGPU/IR/AMDGPUDialect.h"
1516
#include "mlir/Dialect/AMDGPU/Utils/Chipset.h"
1617
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
@@ -22,20 +23,14 @@
2223
#include "mlir/Conversion/GPUCommon/GPUCommonPass.h"
2324
#include "mlir/Dialect/GPU/IR/GPUDialect.h"
2425
#include "mlir/Dialect/Vector/IR/VectorOps.h"
26+
#include "mlir/Transforms/GreedyPatternRewriteDriver.h"
27+
#include "mlir/Dialect/GPU/Transforms/Passes.h"
2528

2629
#include "llvm/Support/FormatVariadic.h"
27-
#include "llvm/Support/MathExtras.h"
28-
#include <cassert>
29-
#include <cstdint>
30-
31-
#include "../LLVMCommon/MemRefDescriptor.h"
32-
33-
#include "llvm/ADT/STLExtras.h"
34-
#include <optional>
3530

3631
namespace mlir {
37-
#define GEN_PASS_DEF_CONVERTGPUTOAMDGPUPASS
38-
#include "mlir/Conversion/Passes.h.inc"
32+
#define GEN_PASS_DEF_GPUDECOMPOSESUBGROUPREDUCETODPPPASS
33+
#include "mlir/Dialect/GPU/Transforms/Passes.h.inc"
3934
} // namespace mlir
4035

4136
using namespace mlir;
@@ -144,8 +139,8 @@ Value createSubgroupDPPReduction(OpBuilder &b, Location loc, Value input,
144139
struct ScalarSubgroupReduceToShuffles final
145140
: OpRewritePattern<gpu::SubgroupReduceOp> {
146141
ScalarSubgroupReduceToShuffles(MLIRContext *ctx, unsigned subgroupSize,
147-
bool matchClustered, PatternBenefit benefit)
148-
: OpRewritePattern(ctx, benefit), subgroupSize(subgroupSize),
142+
bool matchClustered)
143+
: OpRewritePattern(ctx), subgroupSize(subgroupSize),
149144
matchClustered(matchClustered) {}
150145

151146
LogicalResult matchAndRewrite(gpu::SubgroupReduceOp op,
@@ -174,30 +169,24 @@ struct ScalarSubgroupReduceToShuffles final
174169
bool matchClustered = false;
175170
};
176171

177-
struct ConvertGPUToAMDGPUPass
178-
: public impl::ConvertGPUToAMDGPUPassBase<ConvertGPUToAMDGPUPass> {
172+
struct GpuDecomposeSubgroupReduceToDppPass
173+
: public impl::GpuDecomposeSubgroupReduceToDppPassBase<
174+
GpuDecomposeSubgroupReduceToDppPass> {
179175
using Base::Base;
180176

181177
void runOnOperation() override {
182178
RewritePatternSet patterns(&getContext());
183-
LLVMTypeConverter converter(&getContext());
184-
LLVMConversionTarget target(getContext());
185-
target.addLegalDialect<::mlir::LLVM::LLVMDialect>();
186-
target.addLegalDialect<::mlir::amdgpu::AMDGPUDialect>();
187-
target.addLegalDialect<::mlir::ROCDL::ROCDLDialect>();
188-
189-
int subgroupSizeInt = static_cast<int>(subgroupSize);
190-
populateSubgroupReduceLoweringPatterns(converter, patterns, subgroupSizeInt,
191-
PatternBenefit(1));
192-
if (failed(applyPartialConversion(getOperation(), target,
193-
std::move(patterns))))
194-
signalPassFailure();
179+
// int subgroupSizeInt = static_cast<int>(subgroupSize);
180+
populateGpuDecomposeSubgroupReduceToDppPatterns(patterns, subgroupSize);
181+
if (failed(applyPatternsGreedily(getOperation(), std::move(patterns))))
182+
return signalPassFailure();
195183
}
196184
};
185+
197186
} // namespace
198187

199-
void mlir::populateSubgroupReduceLoweringPatterns(
200-
LLVMTypeConverter &converter, RewritePatternSet &patterns, unsigned subgroupSize, PatternBenefit benefit) {
188+
void mlir::populateGpuDecomposeSubgroupReduceToDppPatterns(
189+
RewritePatternSet &patterns, unsigned subgroupSize) {
201190
patterns.add<ScalarSubgroupReduceToShuffles>(
202-
patterns.getContext(), subgroupSize, /*matchClustered=*/true, benefit);
203-
}
191+
patterns.getContext(), subgroupSize, /*matchClustered=*/true);
192+
}

0 commit comments

Comments
 (0)