[Mlir-commits] [mlir] bf531f2 - [mlir][vector][bufferize] Implement DestinationStyleOpInterface on TransferWriteOp
Matthias Springer
llvmlistbot at llvm.org
Thu Oct 27 02:07:22 PDT 2022
Author: Matthias Springer
Date: 2022-10-27T11:02:19+02:00
New Revision: bf531f28f51a32e8f130ca1e6ce8d689315341d8
URL: https://github.com/llvm/llvm-project/commit/bf531f28f51a32e8f130ca1e6ce8d689315341d8
DIFF: https://github.com/llvm/llvm-project/commit/bf531f28f51a32e8f130ca1e6ce8d689315341d8.diff
LOG: [mlir][vector][bufferize] Implement DestinationStyleOpInterface on TransferWriteOp
This simplifies the BufferizableOpInterface implementation of vector.transfer_write.
Differential Revision: https://reviews.llvm.org/D136348
Added:
Modified:
mlir/include/mlir/Dialect/Vector/IR/VectorOps.h
mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
mlir/lib/Dialect/Vector/IR/CMakeLists.txt
mlir/lib/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.cpp
utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h
index 661affd953bd6..5250c6b9c406f 100644
--- a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h
+++ b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h
@@ -21,6 +21,7 @@
#include "mlir/IR/OpDefinition.h"
#include "mlir/IR/PatternMatch.h"
#include "mlir/Interfaces/ControlFlowInterfaces.h"
+#include "mlir/Interfaces/DestinationStyleOpInterface.h"
#include "mlir/Interfaces/InferTypeOpInterface.h"
#include "mlir/Interfaces/SideEffectInterfaces.h"
#include "mlir/Interfaces/VectorInterfaces.h"
diff --git a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
index 2b3ed4664f6c7..7e35fd6ff5400 100644
--- a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
+++ b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
@@ -16,6 +16,7 @@
include "mlir/Dialect/Vector/Interfaces/MaskingInterfaces.td"
include "mlir/IR/EnumAttr.td"
include "mlir/Interfaces/ControlFlowInterfaces.td"
+include "mlir/Interfaces/DestinationStyleOpInterface.td"
include "mlir/Interfaces/InferTypeOpInterface.td"
include "mlir/Interfaces/SideEffectInterfaces.td"
include "mlir/Interfaces/VectorInterfaces.td"
@@ -1270,7 +1271,8 @@ def Vector_TransferWriteOp :
DeclareOpInterfaceMethods<VectorUnrollOpInterface, ["getShapeForUnroll"]>,
DeclareOpInterfaceMethods<MaskableOpInterface>,
DeclareOpInterfaceMethods<MemoryEffectsOpInterface>,
- AttrSizedOperandSegments
+ AttrSizedOperandSegments,
+ DestinationStyleOpInterface
]>,
Arguments<(ins AnyVectorOfAnyRank:$vector,
AnyShaped:$source,
@@ -1393,6 +1395,10 @@ def Vector_TransferWriteOp :
/// This method is added to maintain uniformity with load/store
/// ops of other dialects.
Value getValue() { return getVector(); }
+
+ std::pair<int64_t, int64_t> getOutputsPositionRange() {
+ return {1, 2}; // `source` operand
+ }
}];
let hasFolder = 1;
diff --git a/mlir/lib/Dialect/Vector/IR/CMakeLists.txt b/mlir/lib/Dialect/Vector/IR/CMakeLists.txt
index d71ea243db7c3..05f63cf52d361 100644
--- a/mlir/lib/Dialect/Vector/IR/CMakeLists.txt
+++ b/mlir/lib/Dialect/Vector/IR/CMakeLists.txt
@@ -12,6 +12,7 @@ add_mlir_dialect_library(MLIRVectorDialect
MLIRArithDialect
MLIRControlFlowInterfaces
MLIRDataLayoutInterfaces
+ MLIRDestinationStyleOpInterface
MLIRDialectUtils
MLIRIR
MLIRMaskingInterfaces
diff --git a/mlir/lib/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.cpp
index 3ec95ed644dc4..b43114b5c10b1 100644
--- a/mlir/lib/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.cpp
+++ b/mlir/lib/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.cpp
@@ -9,6 +9,7 @@
#include "mlir/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.h"
#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
+#include "mlir/Dialect/Bufferization/IR/DstBufferizableOpInterfaceImpl.h"
#include "mlir/Dialect/Vector/IR/VectorOps.h"
#include "mlir/IR/Dialect.h"
#include "mlir/IR/Operation.h"
@@ -63,35 +64,12 @@ struct TransferReadOpInterface
/// Bufferization of vector.transfer_write. Replace with a new
/// vector.transfer_write that operates on a memref.
+///
+/// Note: DstBufferizableOpInterfaceExternalModel provides many default method
+/// implementations for DestinationStyle ops.
struct TransferWriteOpInterface
- : public BufferizableOpInterface::ExternalModel<TransferWriteOpInterface,
- vector::TransferWriteOp> {
- bool bufferizesToMemoryRead(Operation *op, OpOperand &opOperand,
- const AnalysisState &state) const {
- assert(opOperand.get().getType().isa<TensorType>() &&
- "only tensor types expected");
- return true;
- }
-
- bool bufferizesToMemoryWrite(Operation *op, OpOperand &opOperand,
- const AnalysisState &state) const {
- assert(opOperand.get().getType().isa<TensorType>() &&
- "only tensor types expected");
- return true;
- }
-
- SmallVector<OpResult> getAliasingOpResult(Operation *op, OpOperand &opOperand,
- const AnalysisState &state) const {
- assert(opOperand.get().getType().isa<TensorType>() &&
- "only tensor types expected");
- return {op->getOpResult(0)};
- }
-
- BufferRelation bufferRelation(Operation *op, OpResult opResult,
- const AnalysisState &state) const {
- return BufferRelation::Equivalent;
- }
-
+ : public DstBufferizableOpInterfaceExternalModel<TransferWriteOpInterface,
+ vector::TransferWriteOp> {
LogicalResult bufferize(Operation *op, RewriterBase &rewriter,
const BufferizationOptions &options) const {
auto writeOp = cast<vector::TransferWriteOp>(op);
diff --git a/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel b/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
index 4c75554d4668f..e60e712d1a671 100644
--- a/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
@@ -3246,6 +3246,7 @@ cc_library(
":ArithDialect",
":ArithUtils",
":ControlFlowInterfaces",
+ ":DestinationStyleOpInterface",
":DialectUtils",
":IR",
":InferTypeOpInterface",
@@ -8211,6 +8212,7 @@ td_library(
includes = ["include"],
deps = [
":ControlFlowInterfacesTdFiles",
+ ":DestinationStyleOpInterfaceTdFiles",
":InferTypeOpInterfaceTdFiles",
":MaskingInterfacesTdFiles",
":OpBaseTdFiles",
More information about the Mlir-commits
mailing list