[Mlir-commits] [mlir] [mlir][bufferization] Introduce reconcileBufferTypeMismatchFn hook (PR #202667)
Andrei Golubev
llvmlistbot at llvm.org
Thu Jun 11 07:53:21 PDT 2026
================
@@ -368,12 +368,42 @@ defaultUnknownTypeConverter(TensorLikeType tensorType, Attribute memorySpace,
cast<TensorType>(tensorType), memorySpace));
}
+/// Default reconcile hook: memory space mismatch is an error, layout mismatch
+/// is resolved by promoting to fully dynamic.
+FailureOr<BufferLikeType>
+defaultReconcileBufferTypeMismatch(Operation *op, BufferLikeType x,
+ BufferLikeType y,
+ const BufferizationOptions &) {
+ const auto xMemRef = cast<BaseMemRefType>(x);
+ const auto yMemRef = cast<BaseMemRefType>(y);
+
+ if (xMemRef.getMemorySpace() != yMemRef.getMemorySpace())
+ return op->emitError(
+ "inconsistent memory spaces in buffers provided for reconciliation");
+
+ if (isa<UnrankedMemRefType>(xMemRef)) {
+ // unranked memrefs have no layout.
+ return x;
+ }
+
+ const auto xRankedMemref = cast<MemRefType>(xMemRef);
+ int64_t dynamicOffset = ShapedType::kDynamic;
+ SmallVector<int64_t> dynamicStrides(xRankedMemref.getRank(),
+ ShapedType::kDynamic);
+ auto stridedLayout = StridedLayoutAttr::get(xRankedMemref.getContext(),
+ dynamicOffset, dynamicStrides);
+ return cast<BufferLikeType>(
+ MemRefType::get(xRankedMemref.getShape(), xRankedMemref.getElementType(),
----------------
andrey-golubev wrote:
made a common base function that is used in two places.
https://github.com/llvm/llvm-project/pull/202667
More information about the Mlir-commits
mailing list