[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