mirror of
https://github.com/zama-ai/concrete.git
synced 2026-02-08 19:44:57 -05:00
fix(compiler): Fix maps with symbolic offsets in memref casts for wrapper functions
This reverts commit d9363ffb27.
This commit is contained in:
@@ -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>`
|
||||
|
||||
Reference in New Issue
Block a user