[Mlir-commits] [mlir] ae4cea3 - [mlir] Add support for tensor.extract to comprehensive bufferization
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Tue Jul 13 09:55:07 PDT 2021
Author: thomasraoux
Date: 2021-07-13T09:54:46-07:00
New Revision: ae4cea38f18e32d4a106871d751af380032e16fe
URL: https://github.com/llvm/llvm-project/commit/ae4cea38f18e32d4a106871d751af380032e16fe
DIFF: https://github.com/llvm/llvm-project/commit/ae4cea38f18e32d4a106871d751af380032e16fe.diff
LOG: [mlir] Add support for tensor.extract to comprehensive bufferization
Differential Revision: https://reviews.llvm.org/D105870
Added:
Modified:
mlir/lib/Dialect/Linalg/Transforms/ComprehensiveBufferize.cpp
mlir/test/Dialect/Linalg/comprehensive-module-bufferize.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/Linalg/Transforms/ComprehensiveBufferize.cpp b/mlir/lib/Dialect/Linalg/Transforms/ComprehensiveBufferize.cpp
index e49b02058e1a..1ff39fc2e3e6 100644
--- a/mlir/lib/Dialect/Linalg/Transforms/ComprehensiveBufferize.cpp
+++ b/mlir/lib/Dialect/Linalg/Transforms/ComprehensiveBufferize.cpp
@@ -2115,6 +2115,22 @@ static LogicalResult bufferize(OpBuilder &b, linalg::YieldOp yieldOp,
return success();
llvm_unreachable("unexpected yieldOp");
}
+
+/// Bufferization for tensor::ExtractOp just translate to memref.load, it only
+/// reads the tensor.
+static LogicalResult bufferize(OpBuilder &b, tensor::ExtractOp extractOp,
+ BlockAndValueMapping &bvm,
+ BufferizationAliasInfo &aliasInfo) {
+ // Take a guard before anything else.
+ OpBuilder::InsertionGuard g(b);
+ b.setInsertionPoint(extractOp);
+
+ Location loc = extractOp.getLoc();
+ Value srcMemref = lookup(bvm, extractOp.tensor());
+ Value l = b.create<memref::LoadOp>(loc, srcMemref, extractOp.indices());
+ extractOp.replaceAllUsesWith(l);
+ return success();
+}
//===----------------------------------------------------------------------===//
// Bufferization analyses.
//===----------------------------------------------------------------------===//
@@ -2310,6 +2326,7 @@ static LogicalResult bufferizeFuncOpInternals(
scf::ForOp,
InitTensorOp,
InsertSliceOp,
+ tensor::ExtractOp,
LinalgOp,
ReturnOp,
TiledLoopOp,
diff --git a/mlir/test/Dialect/Linalg/comprehensive-module-bufferize.mlir b/mlir/test/Dialect/Linalg/comprehensive-module-bufferize.mlir
index 96fb8b4ba8fc..bab271108da0 100644
--- a/mlir/test/Dialect/Linalg/comprehensive-module-bufferize.mlir
+++ b/mlir/test/Dialect/Linalg/comprehensive-module-bufferize.mlir
@@ -34,6 +34,19 @@ func @fill_inplace(%A : tensor<?xf32> {linalg.inplaceable = true}) -> tensor<?xf
// -----
+// CHECK-LABEL: func @tensor_extract(%{{.*}}: memref<?xf32, #{{.*}}>) -> f32 {
+func @tensor_extract(%A : tensor<?xf32>) -> (f32) {
+ %c0 = constant 0 : index
+
+// CHECK: %[[RES:.*]] = memref.load {{.*}} : memref<?xf32, #{{.*}}>
+ %0 = tensor.extract %A[%c0] : tensor<?xf32>
+
+// CHECK: return %[[RES]] : f32
+ return %0 : f32
+}
+
+// -----
+
// CHECK-DAG: #[[$map_1d_dyn:.*]] = affine_map<(d0)[s0, s1] -> (d0 * s1 + s0)>
/// No linalg.inplaceable flag, must allocate.
More information about the Mlir-commits
mailing list