Skip to content

Commit 8e793a9

Browse files
committed
do not return smallVector
Signed-off-by: dchigarev <[email protected]>
1 parent 7dbe433 commit 8e793a9

File tree

3 files changed

+18
-14
lines changed

3 files changed

+18
-14
lines changed

include/gc/Transforms/Utils/ValueUtils.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,9 @@ bool hasSharedMemSpace(mlir::Value memref);
5555

5656
// Go through all parent 'memref.subview' ops for the given `memref`
5757
// and return the folded offsets of all subviews and the root memref.
58-
std::tuple<SmallVector<Value>, Value>
59-
computeSubviewOffsets(PatternRewriter &rewriter, Location loc, Value memref);
58+
void computeSubviewOffsets(PatternRewriter &rewriter, Location loc,
59+
Value memref, SmallVector<Value> &resultOffsets,
60+
Value &resultRootMemref);
6061

6162
// Return the strides of the memref
6263
SmallVector<OpFoldResult> getMemrefStrides(PatternRewriter &rewriter,

lib/gc/Transforms/GPU/LinalgToXeGPU.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -835,10 +835,12 @@ static SmallVector<Value> createSLMDescTiles(PatternRewriter &rewriter,
835835
auto srcType = cast<MemRefType>(src.getType());
836836
assert(srcType.getRank() == 2 && "Expected a 2D memref");
837837

838+
SmallVector<Value> offsets;
839+
Value rootMemref;
838840
// 'imex::ConvertGPUXToSPIRVPass' doesn't allow 'memref.subview' ops in the
839841
// GPU kernel. We have to merge the subview offsets into the descriptor
840842
// offset.
841-
auto [offsets, rootMemref] = utils::computeSubviewOffsets(rewriter, loc, src);
843+
utils::computeSubviewOffsets(rewriter, loc, src, offsets, rootMemref);
842844
auto rootStridesFold = utils::getMemrefStrides(rewriter, loc, rootMemref);
843845
auto rootStrides =
844846
getValueOrCreateConstantIndexOp(rewriter, loc, rootStridesFold);

lib/gc/Transforms/Utils/ValueUtils.cpp

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -198,25 +198,26 @@ bool hasSharedMemSpace(mlir::Value memref) {
198198
return false;
199199
}
200200

201-
std::tuple<SmallVector<Value>, Value>
202-
computeSubviewOffsets(PatternRewriter &rewriter, Location loc, Value memref) {
201+
void computeSubviewOffsets(PatternRewriter &rewriter, Location loc,
202+
Value memref, SmallVector<Value> &resultOffsets,
203+
Value &resultRootMemref) {
203204
auto fillVal = rewriter.create<arith::ConstantIndexOp>(loc, 0);
204205
auto origShape = dyn_cast<MemRefType>(memref.getType()).getShape();
205206

206-
SmallVector<Value> resolvedOffsets(origShape.size(), fillVal);
207+
resultOffsets.clear();
208+
resultOffsets.append(origShape.size(), fillVal);
209+
resultRootMemref = memref;
207210

208-
while (auto subViewOp = memref.getDefiningOp<memref::SubViewOp>()) {
209-
auto currentOffsets = getAsOpFoldResult(resolvedOffsets);
210-
resolvedOffsets.clear();
211+
while (auto subViewOp = resultRootMemref.getDefiningOp<memref::SubViewOp>()) {
212+
auto currentOffsets = getAsOpFoldResult(resultOffsets);
213+
resultOffsets.clear();
211214

212215
affine::resolveIndicesIntoOpWithOffsetsAndStrides(
213-
rewriter, memref.getLoc(), subViewOp.getMixedOffsets(),
216+
rewriter, resultRootMemref.getLoc(), subViewOp.getMixedOffsets(),
214217
subViewOp.getMixedStrides(), subViewOp.getDroppedDims(), currentOffsets,
215-
resolvedOffsets);
216-
memref = subViewOp.getOperand(0);
218+
resultOffsets);
219+
resultRootMemref = subViewOp.getOperand(0);
217220
}
218-
219-
return std::make_tuple(std::move(resolvedOffsets), memref);
220221
}
221222

222223
SmallVector<OpFoldResult> getMemrefStrides(PatternRewriter &rewriter,

0 commit comments

Comments
 (0)