From 9dbb8eefd43b7acdd5d6d030deed839eb11bbd9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingo=20M=C3=BCller?= Date: Fri, 26 May 2023 09:43:16 +0000 Subject: [PATCH] [mlir][tensor] Implement getBufferType for ReshapeOp. This function should be implemented for ops that work in one-shot bufferization. Reviewed By: springerm Differential Revision: https://reviews.llvm.org/D151548 --- .../BufferizableOpInterfaceImpl.cpp | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/mlir/lib/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.cpp index 1a4fc3bb5bba..e824c73a1f07 100644 --- a/mlir/lib/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.cpp @@ -992,13 +992,28 @@ struct ReshapeOpInterface getBuffer(rewriter, reshapeOp.getShape(), options); if (failed(srcBuffer) || failed(shapeBuffer)) return failure(); - auto resultMemRefType = getMemRefTypeWithStaticIdentityLayout( - reshapeOp.getResult().getType(), - cast(srcBuffer->getType()).getMemorySpace()); + auto maybeResultMemRefType = + bufferization::getBufferType(reshapeOp.getResult(), options); + if (failed(maybeResultMemRefType)) + return failure(); replaceOpWithNewBufferizedOp( - rewriter, op, resultMemRefType, *srcBuffer, *shapeBuffer); + rewriter, op, maybeResultMemRefType.value(), *srcBuffer, *shapeBuffer); return success(); } + + FailureOr + getBufferType(Operation *op, Value value, const BufferizationOptions &options, + const DenseMap &fixedTypes) const { + auto reshapeOp = cast(op); + assert(value == reshapeOp.getResult() && "unexpected value provided"); + auto maybeSourceBufferType = bufferization::getBufferType( + reshapeOp.getSource(), options, fixedTypes); + if (failed(maybeSourceBufferType)) + return failure(); + return getMemRefTypeWithStaticIdentityLayout( + reshapeOp.getResult().getType(), + cast(maybeSourceBufferType.value()).getMemorySpace()); + } }; /// Analysis of ParallelInsertSliceOp.