@@ -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
222223SmallVector<OpFoldResult> getMemrefStrides (PatternRewriter &rewriter,
0 commit comments