Skip to content

Commit e733600

Browse files
committed
address review comments
1 parent 0e76378 commit e733600

File tree

3 files changed

+22
-20
lines changed

3 files changed

+22
-20
lines changed

mlir/include/mlir/Dialect/GPU/Utils/DistributionUtils.h

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,38 +22,39 @@ namespace mlir {
2222
namespace gpu {
2323
struct WarpDistributionPattern : OpRewritePattern<WarpExecuteOnLane0Op> {
2424
using OpRewritePattern<WarpExecuteOnLane0Op>::OpRewritePattern;
25+
2526
virtual LogicalResult
2627
matchAndRewrite(WarpExecuteOnLane0Op op,
2728
PatternRewriter &rewriter) const override = 0;
2829

2930
protected:
3031
/// Return a value yielded by `warpOp` which statifies the filter lamdba
3132
/// condition and is not dead.
32-
static OpOperand *getWarpResult(WarpExecuteOnLane0Op warpOp,
33-
const std::function<bool(Operation *)> &fn);
33+
OpOperand *getWarpResult(WarpExecuteOnLane0Op warpOp,
34+
const std::function<bool(Operation *)> &fn) const;
3435

3536
/// Helper to create a new WarpExecuteOnLane0Op with different signature.
36-
static WarpExecuteOnLane0Op moveRegionToNewWarpOpAndReplaceReturns(
37+
WarpExecuteOnLane0Op moveRegionToNewWarpOpAndReplaceReturns(
3738
RewriterBase &rewriter, WarpExecuteOnLane0Op warpOp,
38-
ValueRange newYieldedValues, TypeRange newReturnTypes);
39+
ValueRange newYieldedValues, TypeRange newReturnTypes) const;
3940

4041
/// Helper to create a new WarpExecuteOnLane0Op region with extra outputs.
4142
/// `indices` return the index of each new output.
42-
static WarpExecuteOnLane0Op moveRegionToNewWarpOpAndAppendReturns(
43+
WarpExecuteOnLane0Op moveRegionToNewWarpOpAndAppendReturns(
4344
RewriterBase &rewriter, WarpExecuteOnLane0Op warpOp,
4445
ValueRange newYieldedValues, TypeRange newReturnTypes,
45-
llvm::SmallVector<size_t> &indices);
46+
llvm::SmallVector<size_t> &indices) const;
4647

4748
/// Delinearize the given `laneId` into multiple dimensions, where each
4849
/// dimension's size is determined by `originalShape` and `distributedShape`
4950
/// together. This function expects the total numbers of threads needed for
5051
/// distribution is equal to `warpSize`. Returns true and updates
5152
/// `delinearizedIds` if so.
52-
static bool delinearizeLaneId(OpBuilder &builder, Location loc,
53-
ArrayRef<int64_t> originalShape,
54-
ArrayRef<int64_t> distributedShape,
55-
int64_t warpSize, Value laneId,
56-
SmallVectorImpl<Value> &delinearizedIds);
53+
bool delinearizeLaneId(OpBuilder &builder, Location loc,
54+
ArrayRef<int64_t> originalShape,
55+
ArrayRef<int64_t> distributedShape, int64_t warpSize,
56+
Value laneId,
57+
SmallVectorImpl<Value> &delinearizedIds) const;
5758
};
5859

5960
} // namespace gpu

mlir/lib/Dialect/GPU/Utils/DistributionUtils.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ using namespace mlir::gpu;
2323
WarpExecuteOnLane0Op
2424
WarpDistributionPattern::moveRegionToNewWarpOpAndReplaceReturns(
2525
RewriterBase &rewriter, WarpExecuteOnLane0Op warpOp,
26-
ValueRange newYieldedValues, TypeRange newReturnTypes) {
26+
ValueRange newYieldedValues, TypeRange newReturnTypes) const {
2727
// Create a new op before the existing one, with the extra operands.
2828
OpBuilder::InsertionGuard g(rewriter);
2929
rewriter.setInsertionPoint(warpOp);
@@ -51,7 +51,7 @@ WarpExecuteOnLane0Op
5151
WarpDistributionPattern::moveRegionToNewWarpOpAndAppendReturns(
5252
RewriterBase &rewriter, WarpExecuteOnLane0Op warpOp,
5353
ValueRange newYieldedValues, TypeRange newReturnTypes,
54-
llvm::SmallVector<size_t> &indices) {
54+
llvm::SmallVector<size_t> &indices) const {
5555
SmallVector<Type> types(warpOp.getResultTypes().begin(),
5656
warpOp.getResultTypes().end());
5757
auto yield = cast<gpu::YieldOp>(
@@ -82,7 +82,8 @@ WarpDistributionPattern::moveRegionToNewWarpOpAndAppendReturns(
8282
}
8383

8484
OpOperand *WarpDistributionPattern::getWarpResult(
85-
WarpExecuteOnLane0Op warpOp, const std::function<bool(Operation *)> &fn) {
85+
WarpExecuteOnLane0Op warpOp,
86+
const std::function<bool(Operation *)> &fn) const {
8687
auto yield = cast<gpu::YieldOp>(
8788
warpOp.getBodyRegion().getBlocks().begin()->getTerminator());
8889
for (OpOperand &yieldOperand : yield->getOpOperands()) {
@@ -99,7 +100,7 @@ OpOperand *WarpDistributionPattern::getWarpResult(
99100
bool WarpDistributionPattern::delinearizeLaneId(
100101
OpBuilder &builder, Location loc, ArrayRef<int64_t> originalShape,
101102
ArrayRef<int64_t> distributedShape, int64_t warpSize, Value laneId,
102-
SmallVectorImpl<Value> &delinearizedIds) {
103+
SmallVectorImpl<Value> &delinearizedIds) const {
103104
// If the original shape and the distributed shape is the same, we don't
104105
// distribute at all--every thread is handling the whole. For such case, we
105106
// should not rely on lane IDs later. So just return an empty lane ID vector.

mlir/lib/Dialect/Vector/Transforms/VectorDistribute.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -536,11 +536,11 @@ struct WarpOpTransferWrite : public WarpDistributionPattern {
536536
/// Clone `writeOp` assumed to be nested under `warpOp` into a new warp
537537
/// execute op with the proper return type. The new write op is updated to
538538
/// write the result of the new warp execute op. The old `writeOp` is deleted.
539-
static vector::TransferWriteOp cloneWriteOp(RewriterBase &rewriter,
540-
WarpExecuteOnLane0Op warpOp,
541-
vector::TransferWriteOp writeOp,
542-
VectorType targetType,
543-
VectorType maybeMaskType) {
539+
vector::TransferWriteOp cloneWriteOp(RewriterBase &rewriter,
540+
WarpExecuteOnLane0Op warpOp,
541+
vector::TransferWriteOp writeOp,
542+
VectorType targetType,
543+
VectorType maybeMaskType) const {
544544
assert(writeOp->getParentOp() == warpOp &&
545545
"write must be nested immediately under warp");
546546
OpBuilder::InsertionGuard g(rewriter);

0 commit comments

Comments
 (0)