fix(compiler): Fix maps with symbolic offsets in memref casts for wrapper functions

This reverts commit d9363ffb27.
This commit is contained in:
Quentin Bourgerie
2022-10-05 12:24:48 +02:00
parent cf9a36c197
commit 090e0dbbca

View File

@@ -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<AffineExpr, 4> 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<int64_t> 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>`