From 090e0dbbcae311d8d8c76a1cb83e1f2061fa9e5e Mon Sep 17 00:00:00 2001 From: Quentin Bourgerie Date: Wed, 5 Oct 2022 12:24:48 +0200 Subject: [PATCH] fix(compiler): Fix maps with symbolic offsets in memref casts for wrapper functions This reverts commit d9363ffb276c604718c1dd9607c4fbc9832dca7c. --- .../BufferizableOpInterfaceImpl.cpp | 29 +++++-------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/compiler/lib/Dialect/BConcrete/Transforms/BufferizableOpInterfaceImpl.cpp b/compiler/lib/Dialect/BConcrete/Transforms/BufferizableOpInterfaceImpl.cpp index 3bafbc943..fb829b78d 100644 --- a/compiler/lib/Dialect/BConcrete/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/compiler/lib/Dialect/BConcrete/Transforms/BufferizableOpInterfaceImpl.cpp @@ -37,30 +37,17 @@ namespace {} // namespace namespace { -// Returns a map with a symbolic offset for each dimension, i.e., for N -// dimensions, it returns -// -// [d1, d2, ..., dN](s1, s2, ..., sN) -> (d1 + s1, d2 + s2, ..., dN + sN) -// -AffineMap getMultiDimSymbolicOffsetMap(mlir::RewriterBase &rewriter, - unsigned rank) { - SmallVector dimExprs; - dimExprs.reserve(rank); - - for (unsigned i = 0; i < rank; ++i) - dimExprs.push_back(rewriter.getAffineDimExpr(i) + - rewriter.getAffineSymbolExpr(i)); - - return AffineMap::get(/*dimCount=*/rank, /*symbolCount=*/rank, dimExprs, - rewriter.getContext()); -} - mlir::Type getDynamicMemrefWithUnknownOffset(mlir::RewriterBase &rewriter, size_t rank) { std::vector shape(rank, -1); - - return mlir::MemRefType::get(shape, rewriter.getI64Type(), - getMultiDimSymbolicOffsetMap(rewriter, rank)); + mlir::AffineExpr expr = rewriter.getAffineSymbolExpr(0); + for (size_t i = 0; i < rank; i++) { + expr = expr + + (rewriter.getAffineDimExpr(i) * rewriter.getAffineSymbolExpr(i + 1)); + } + return mlir::MemRefType::get( + shape, rewriter.getI64Type(), + mlir::AffineMap::get(rank, rank + 1, expr, rewriter.getContext())); } // Returns `memref.cast %0 : memref<...xAxT> to memref<...x?xT>`