[Mlir-commits] [mlir] [mlir] Declare promised interfaces for all dialects (PR #78368)
Justin Fargnoli
llvmlistbot at llvm.org
Sun Feb 11 14:18:30 PST 2024
https://github.com/justinfargnoli updated https://github.com/llvm/llvm-project/pull/78368
>From 8942f99919a8f212c93d538e5f32b0ac776904d2 Mon Sep 17 00:00:00 2001
From: justinfargnoli <justinfargnoli at gmail.com>
Date: Thu, 11 Jan 2024 20:00:53 -0800
Subject: [PATCH 1/8] Declare Affine Interfaces
---
mlir/lib/Dialect/Affine/IR/AffineOps.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp
index adb56ab36438bf..1055778daa25cb 100644
--- a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp
+++ b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp
@@ -8,6 +8,7 @@
#include "mlir/Dialect/Affine/IR/AffineOps.h"
#include "mlir/Dialect/Affine/IR/AffineValueMap.h"
+#include "mlir/Interfaces/ValueBoundsOpInterface.h"
#include "mlir/Dialect/MemRef/IR/MemRef.h"
#include "mlir/Dialect/UB/IR/UBOps.h"
#include "mlir/IR/AffineExprVisitor.h"
@@ -220,6 +221,9 @@ void AffineDialect::initialize() {
#include "mlir/Dialect/Affine/IR/AffineOps.cpp.inc"
>();
addInterfaces<AffineInlinerInterface>();
+ declarePromisedInterface<AffineApplyOp, ValueBoundsOpInterface>();
+ declarePromisedInterface<AffineMaxOp, ValueBoundsOpInterface>();
+ declarePromisedInterface<AffineMinOp, ValueBoundsOpInterface>();
}
/// Materialize a single constant operation from a given attribute value with
>From 15bd7df67930b2723197e39f6b0c0e0b53bf038e Mon Sep 17 00:00:00 2001
From: justinfargnoli <justinfargnoli at gmail.com>
Date: Tue, 16 Jan 2024 15:58:28 -0800
Subject: [PATCH 2/8] Declare most other dialect interface implementations
---
mlir/lib/Dialect/Arith/IR/ArithDialect.cpp | 13 +++++
.../Bufferization/IR/BufferizationDialect.cpp | 4 ++
.../Dialect/ControlFlow/IR/ControlFlowOps.cpp | 7 +++
mlir/lib/Dialect/GPU/IR/GPUDialect.cpp | 2 +
mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp | 5 ++
mlir/lib/Dialect/MemRef/IR/MemRefDialect.cpp | 22 +++++++++
mlir/lib/Dialect/SCF/IR/SCF.cpp | 15 ++++++
mlir/lib/Dialect/Shape/IR/Shape.cpp | 3 ++
.../SparseTensor/IR/SparseTensorDialect.cpp | 25 ++++++++++
mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp | 47 +++++++++++++++++++
mlir/lib/Dialect/Vector/IR/VectorOps.cpp | 17 +++++++
11 files changed, 160 insertions(+)
diff --git a/mlir/lib/Dialect/Arith/IR/ArithDialect.cpp b/mlir/lib/Dialect/Arith/IR/ArithDialect.cpp
index 745c5706a838ce..1c5b0d8df44ed7 100644
--- a/mlir/lib/Dialect/Arith/IR/ArithDialect.cpp
+++ b/mlir/lib/Dialect/Arith/IR/ArithDialect.cpp
@@ -8,7 +8,10 @@
#include "mlir/Conversion/ConvertToLLVM/ToLLVMInterface.h"
#include "mlir/Dialect/Arith/IR/Arith.h"
+#include "mlir/Dialect/Bufferization/IR/BufferDeallocationOpInterface.h"
+#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
#include "mlir/Dialect/UB/IR/UBOps.h"
+#include "mlir/Interfaces/ValueBoundsOpInterface.h"
#include "mlir/IR/Builders.h"
#include "mlir/IR/DialectImplementation.h"
#include "mlir/Transforms/InliningUtils.h"
@@ -46,6 +49,16 @@ void arith::ArithDialect::initialize() {
>();
addInterfaces<ArithInlinerInterface>();
declarePromisedInterface<ArithDialect, ConvertToLLVMPatternInterface>();
+ declarePromisedInterface<SelectOp, bufferization::BufferDeallocationOpInterface>();
+ declarePromisedInterface<ConstantOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<IndexCastOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<SelectOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<AddIOp, ValueBoundsOpInterface>();
+ declarePromisedInterface<ConstantOp, ValueBoundsOpInterface>();
+ declarePromisedInterface<SubIOp, ValueBoundsOpInterface>();
+ declarePromisedInterface<MulIOp, ValueBoundsOpInterface>();
}
/// Materialize an integer or floating point constant.
diff --git a/mlir/lib/Dialect/Bufferization/IR/BufferizationDialect.cpp b/mlir/lib/Dialect/Bufferization/IR/BufferizationDialect.cpp
index e5a0c3c45b09e2..d8a38868ac862a 100644
--- a/mlir/lib/Dialect/Bufferization/IR/BufferizationDialect.cpp
+++ b/mlir/lib/Dialect/Bufferization/IR/BufferizationDialect.cpp
@@ -10,6 +10,7 @@
#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
#include "mlir/Dialect/Bufferization/IR/Bufferization.h"
#include "mlir/Dialect/MemRef/IR/MemRef.h"
+#include "mlir/Dialect/Func/IR/FuncOps.h"
#include "mlir/Dialect/Tensor/IR/Tensor.h"
#include "mlir/Interfaces/FunctionInterfaces.h"
#include "mlir/Transforms/InliningUtils.h"
@@ -63,6 +64,9 @@ void mlir::bufferization::BufferizationDialect::initialize() {
#include "mlir/Dialect/Bufferization/IR/BufferizationOps.cpp.inc"
>();
addInterfaces<BufferizationInlinerInterface>();
+ declarePromisedInterface<func::CallOp, BufferizableOpInterface>();
+ declarePromisedInterface<func::FuncOp, BufferizableOpInterface>();
+ declarePromisedInterface<func::ReturnOp, BufferizableOpInterface>();
}
LogicalResult BufferizationDialect::verifyRegionArgAttribute(
diff --git a/mlir/lib/Dialect/ControlFlow/IR/ControlFlowOps.cpp b/mlir/lib/Dialect/ControlFlow/IR/ControlFlowOps.cpp
index d242d75bd51fa7..95027fc52791f3 100644
--- a/mlir/lib/Dialect/ControlFlow/IR/ControlFlowOps.cpp
+++ b/mlir/lib/Dialect/ControlFlow/IR/ControlFlowOps.cpp
@@ -10,6 +10,8 @@
#include "mlir/Conversion/ConvertToLLVM/ToLLVMInterface.h"
#include "mlir/Dialect/Arith/IR/Arith.h"
+#include "mlir/Dialect/Bufferization/IR/BufferDeallocationOpInterface.h"
+#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
#include "mlir/IR/AffineExpr.h"
#include "mlir/IR/AffineMap.h"
#include "mlir/IR/Builders.h"
@@ -69,6 +71,11 @@ void ControlFlowDialect::initialize() {
>();
addInterfaces<ControlFlowInlinerInterface>();
declarePromisedInterface<ControlFlowDialect, ConvertToLLVMPatternInterface>();
+ declarePromisedInterface<BranchOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<CondBranchOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<CondBranchOp,
+ bufferization::BufferDeallocationOpInterface>();
}
//===----------------------------------------------------------------------===//
diff --git a/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp b/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp
index 30b6cd74147e6f..ed763f03fb2a28 100644
--- a/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp
+++ b/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp
@@ -13,6 +13,7 @@
#include "mlir/Dialect/GPU/IR/GPUDialect.h"
#include "mlir/Dialect/Arith/IR/Arith.h"
+#include "mlir/Dialect/Bufferization/IR/BufferDeallocationOpInterface.h"
#include "mlir/Dialect/MemRef/IR/MemRef.h"
#include "mlir/IR/Attributes.h"
#include "mlir/IR/Builders.h"
@@ -215,6 +216,7 @@ void GPUDialect::initialize() {
#include "mlir/Dialect/GPU/IR/GPUOpsAttributes.cpp.inc"
>();
addInterfaces<GPUInlinerInterface>();
+ declarePromisedInterface<TerminatorOp, bufferization::BufferDeallocationOpInterface>();
}
static std::string getSparseHandleKeyword(SparseHandleKind kind) {
diff --git a/mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp b/mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp
index 5069d43e7db95f..875fe8278fef53 100644
--- a/mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp
+++ b/mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp
@@ -21,6 +21,8 @@
#include "mlir/IR/Dialect.h"
#include "mlir/IR/DialectImplementation.h"
#include "mlir/Interfaces/FunctionInterfaces.h"
+#include "mlir/Interfaces/SubsetOpInterface.h"
+#include "mlir/Interfaces/ValueBoundsOpInterface.h"
#include "mlir/Parser/Parser.h"
#include "mlir/Support/LLVM.h"
#include "mlir/Transforms/InliningUtils.h"
@@ -118,6 +120,9 @@ void mlir::linalg::LinalgDialect::initialize() {
>(namedStructuredOpRegionBuilders);
addInterfaces<LinalgInlinerInterface>();
+ declarePromisedInterface<CopyOp, SubsetOpInterface>();
+ declarePromisedInterface<CopyOp, SubsetInsertionOpInterface>();
+ declarePromisedInterface<IndexOp, ValueBoundsOpInterface>();
}
LogicalResult LinalgDialect::verifyOperationAttribute(Operation *op,
diff --git a/mlir/lib/Dialect/MemRef/IR/MemRefDialect.cpp b/mlir/lib/Dialect/MemRef/IR/MemRefDialect.cpp
index d71669a274b8fc..47c236a267ca99 100644
--- a/mlir/lib/Dialect/MemRef/IR/MemRefDialect.cpp
+++ b/mlir/lib/Dialect/MemRef/IR/MemRefDialect.cpp
@@ -8,8 +8,13 @@
#include "mlir/Conversion/ConvertToLLVM/ToLLVMInterface.h"
#include "mlir/Dialect/Arith/IR/Arith.h"
+#include "mlir/Dialect/Bufferization/IR/AllocationOpInterface.h"
#include "mlir/Dialect/MemRef/IR/MemRef.h"
+#include "mlir/IR/BuiltinTypes.h"
+#include "mlir/Interfaces/MemorySlotInterfaces.h"
+#include "mlir/Interfaces/RuntimeVerifiableOpInterface.h"
#include "mlir/Interfaces/SideEffectInterfaces.h"
+#include "mlir/Interfaces/ValueBoundsOpInterface.h"
#include "mlir/Transforms/InliningUtils.h"
#include <optional>
@@ -43,6 +48,23 @@ void mlir::memref::MemRefDialect::initialize() {
>();
addInterfaces<MemRefInlinerInterface>();
declarePromisedInterface<MemRefDialect, ConvertToLLVMPatternInterface>();
+ declarePromisedInterface<AllocOp, bufferization::AllocationOpInterface>();
+ declarePromisedInterface<AllocaOp, bufferization::AllocationOpInterface>();
+ declarePromisedInterface<ReallocOp, bufferization::AllocationOpInterface>();
+ declarePromisedInterface<CastOp, RuntimeVerifiableOpInterface>();
+ declarePromisedInterface<ExpandShapeOp, RuntimeVerifiableOpInterface>();
+ declarePromisedInterface<LoadOp, RuntimeVerifiableOpInterface>();
+ declarePromisedInterface<ReinterpretCastOp, RuntimeVerifiableOpInterface>();
+ declarePromisedInterface<StoreOp, RuntimeVerifiableOpInterface>();
+ declarePromisedInterface<SubViewOp, RuntimeVerifiableOpInterface>();
+ declarePromisedInterface<AllocOp, ValueBoundsOpInterface>();
+ declarePromisedInterface<AllocaOp, ValueBoundsOpInterface>();
+ declarePromisedInterface<CastOp, ValueBoundsOpInterface>();
+ declarePromisedInterface<DimOp, ValueBoundsOpInterface>();
+ declarePromisedInterface<GetGlobalOp, ValueBoundsOpInterface>();
+ declarePromisedInterface<RankOp, ValueBoundsOpInterface>();
+ declarePromisedInterface<SubViewOp, ValueBoundsOpInterface>();
+ declarePromisedInterface<MemRefType, DestructurableTypeInterface>();
}
/// Finds the unique dealloc operation (if one exists) for `allocValue`.
diff --git a/mlir/lib/Dialect/SCF/IR/SCF.cpp b/mlir/lib/Dialect/SCF/IR/SCF.cpp
index 9822ee522c6ed8..e71ad06e8d4696 100644
--- a/mlir/lib/Dialect/SCF/IR/SCF.cpp
+++ b/mlir/lib/Dialect/SCF/IR/SCF.cpp
@@ -9,10 +9,13 @@
#include "mlir/Dialect/SCF/IR/SCF.h"
#include "mlir/Dialect/Arith/IR/Arith.h"
#include "mlir/Dialect/Arith/Utils/Utils.h"
+#include "mlir/Dialect/Bufferization/IR/BufferDeallocationOpInterface.h"
+#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
#include "mlir/Dialect/ControlFlow/IR/ControlFlowOps.h"
#include "mlir/Dialect/MemRef/IR/MemRef.h"
#include "mlir/Dialect/SCF/IR/DeviceMappingInterface.h"
#include "mlir/Dialect/Tensor/IR/Tensor.h"
+#include "mlir/Interfaces/ValueBoundsOpInterface.h"
#include "mlir/IR/BuiltinAttributes.h"
#include "mlir/IR/IRMapping.h"
#include "mlir/IR/Matchers.h"
@@ -71,6 +74,18 @@ void SCFDialect::initialize() {
#include "mlir/Dialect/SCF/IR/SCFOps.cpp.inc"
>();
addInterfaces<SCFInlinerInterface>();
+ declarePromisedInterface<InParallelOp, bufferization::BufferDeallocationOpInterface>();
+ declarePromisedInterface<ReduceReturnOp, bufferization::BufferDeallocationOpInterface>();
+ declarePromisedInterface<ConditionOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<ExecuteRegionOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<ForOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<IfOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<IndexSwitchOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<ForallOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<InParallelOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<WhileOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<YieldOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<ForOp, ValueBoundsOpInterface>();
}
/// Default callback for IfOp builders. Inserts a yield without arguments.
diff --git a/mlir/lib/Dialect/Shape/IR/Shape.cpp b/mlir/lib/Dialect/Shape/IR/Shape.cpp
index 4f829db1305c85..625fd0cd5082c5 100644
--- a/mlir/lib/Dialect/Shape/IR/Shape.cpp
+++ b/mlir/lib/Dialect/Shape/IR/Shape.cpp
@@ -11,6 +11,7 @@
#include "mlir/Dialect/Shape/IR/Shape.h"
#include "mlir/Dialect/Arith/IR/Arith.h"
+#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
#include "mlir/Dialect/CommonFolders.h"
#include "mlir/Dialect/Tensor/IR/Tensor.h"
#include "mlir/Dialect/Traits.h"
@@ -143,6 +144,8 @@ void ShapeDialect::initialize() {
// still evolving it makes it simple to start with an unregistered ops and
// try different variants before actually defining the op.
allowUnknownOperations();
+ declarePromisedInterface<AssumingOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<AssumingYieldOp, bufferization::BufferizableOpInterface>();
}
Operation *ShapeDialect::materializeConstant(OpBuilder &builder,
diff --git a/mlir/lib/Dialect/SparseTensor/IR/SparseTensorDialect.cpp b/mlir/lib/Dialect/SparseTensor/IR/SparseTensorDialect.cpp
index 6033ebf6897ce0..54f62d28ce1256 100644
--- a/mlir/lib/Dialect/SparseTensor/IR/SparseTensorDialect.cpp
+++ b/mlir/lib/Dialect/SparseTensor/IR/SparseTensorDialect.cpp
@@ -16,6 +16,7 @@
#include "mlir/Dialect/SparseTensor/IR/SparseTensorType.h"
#include "mlir/Dialect/Arith/IR/Arith.h"
+#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
#include "mlir/Dialect/Utils/StaticValueUtils.h"
#include "mlir/IR/Builders.h"
#include "mlir/IR/DialectImplementation.h"
@@ -1780,6 +1781,30 @@ void SparseTensorDialect::initialize() {
#define GET_OP_LIST
#include "mlir/Dialect/SparseTensor/IR/SparseTensorOps.cpp.inc"
>();
+ declarePromisedInterface<ConcatenateOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<ConvertOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<LoadOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<NewOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<InsertOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<NumberOfEntriesOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<AssembleOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<DisassembleOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<ToCoordinatesBufferOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<ToCoordinatesOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<ToPositionsOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<ToValuesOp,
+ bufferization::BufferizableOpInterface>();
}
#define GET_OP_CLASSES
diff --git a/mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp b/mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp
index 62032ff301bece..ad7f288f6223f2 100644
--- a/mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp
+++ b/mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp
@@ -8,8 +8,11 @@
#include "mlir/Dialect/Affine/IR/AffineOps.h"
#include "mlir/Dialect/Arith/IR/Arith.h"
+#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
#include "mlir/Dialect/Complex/IR/Complex.h"
#include "mlir/Dialect/Tensor/IR/Tensor.h"
+#include "mlir/Dialect/Transform/IR/TransformInterfaces.h"
+#include "mlir/Interfaces/SubsetOpInterface.h"
#include "mlir/Transforms/InliningUtils.h"
using namespace mlir;
@@ -45,4 +48,48 @@ void TensorDialect::initialize() {
#include "mlir/Dialect/Tensor/IR/TensorOps.cpp.inc"
>();
addInterfaces<TensorInlinerInterface>();
+ declarePromisedInterface<CastOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<CollapseShapeOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<DimOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<EmptyOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<ExpandShapeOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<ExtractSliceOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<ExtractOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<FromElementsOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<GenerateOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<InsertOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<InsertSliceOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<PadOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<ParallelInsertSliceOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<RankOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<ReshapeOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<SplatOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<CollapseShapeOp,
+ transform::FindPayloadReplacementOpInterface>();
+ declarePromisedInterface<ExpandShapeOp,
+ transform::FindPayloadReplacementOpInterface>();
+ declarePromisedInterface<ExtractSliceOp,
+ transform::FindPayloadReplacementOpInterface>();
+ declarePromisedInterface<InsertSliceOp,
+ transform::FindPayloadReplacementOpInterface>();
+ declarePromisedInterface<ReshapeOp,
+ transform::FindPayloadReplacementOpInterface>();
+ declarePromisedInterface<ExpandShapeOp, ReifyRankedShapedTypeOpInterface>();
+ declarePromisedInterface<CollapseShapeOp, ReifyRankedShapedTypeOpInterface>();
+ declarePromisedInterface<PadOp, ReifyRankedShapedTypeOpInterface>();
+ declarePromisedInterface<ExtractSliceOp, SubsetOpInterface>();
+ declarePromisedInterface<ExtractSliceOp, SubsetExtractionOpInterface>();
+ declarePromisedInterface<InsertSliceOp, SubsetOpInterface>();
+ declarePromisedInterface<InsertSliceOp, SubsetInsertionOpInterface>();
+ declarePromisedInterface<ParallelInsertSliceOp, SubsetOpInterface>();
+ declarePromisedInterface<ParallelInsertSliceOp, SubsetInsertionOpInterface>();
+ declarePromisedInterface<PadOp, TilingInterface>();
+ declarePromisedInterface<PackOp, TilingInterface>();
+ declarePromisedInterface<UnPackOp, TilingInterface>();
+ declarePromisedInterface<CastOp, ValueBoundsOpInterface>();
+ declarePromisedInterface<DimOp, ValueBoundsOpInterface>();
+ declarePromisedInterface<EmptyOp, ValueBoundsOpInterface>();
+ declarePromisedInterface<ExtractSliceOp, ValueBoundsOpInterface>();
+ declarePromisedInterface<PadOp, ValueBoundsOpInterface>();
+ declarePromisedInterface<RankOp, ValueBoundsOpInterface>();
}
diff --git a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
index 452354413e8833..7fc74ccdc9c83b 100644
--- a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
+++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
@@ -16,6 +16,7 @@
#include "mlir/Dialect/Affine/IR/ValueBoundsOpInterfaceImpl.h"
#include "mlir/Dialect/Arith/IR/Arith.h"
#include "mlir/Dialect/Arith/Utils/Utils.h"
+#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
#include "mlir/Dialect/MemRef/IR/MemRef.h"
#include "mlir/Dialect/Tensor/IR/Tensor.h"
#include "mlir/Dialect/Utils/IndexingUtils.h"
@@ -31,6 +32,7 @@
#include "mlir/IR/OpImplementation.h"
#include "mlir/IR/PatternMatch.h"
#include "mlir/IR/TypeUtilities.h"
+#include "mlir/Interfaces/SubsetOpInterface.h"
#include "mlir/Interfaces/ValueBoundsOpInterface.h"
#include "mlir/Support/LLVM.h"
#include "mlir/Transforms/InliningUtils.h"
@@ -374,6 +376,21 @@ void VectorDialect::initialize() {
>();
addInterfaces<VectorInlinerInterface>();
+
+ declarePromisedInterface<TransferReadOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<TransferWriteOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<GatherOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<MaskOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<YieldOp, bufferization::BufferizableOpInterface>();
+
+ declarePromisedInterface<TransferReadOp, SubsetOpInterface>();
+ declarePromisedInterface<TransferReadOp, SubsetExtractionOpInterface>();
+ declarePromisedInterface<TransferWriteOp, SubsetOpInterface>();
+ declarePromisedInterface<TransferWriteOp, SubsetInsertionOpInterface>();
}
/// Materialize a single constant operation from a given attribute value with
>From af3b104554dfb75cb89c5b8f5c3d23496bbeac00 Mon Sep 17 00:00:00 2001
From: justinfargnoli <justinfargnoli at gmail.com>
Date: Tue, 16 Jan 2024 16:23:49 -0800
Subject: [PATCH 3/8] clang-format changes
---
mlir/lib/Dialect/Arith/IR/ArithDialect.cpp | 5 +++--
.../Bufferization/IR/BufferizationDialect.cpp | 2 +-
mlir/lib/Dialect/GPU/IR/GPUDialect.cpp | 3 ++-
mlir/lib/Dialect/SCF/IR/SCF.cpp | 20 +++++++++++-------
mlir/lib/Dialect/Shape/IR/Shape.cpp | 6 ++++--
.../SparseTensor/IR/SparseTensorDialect.cpp | 12 ++++-------
mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp | 21 ++++++++++++-------
mlir/lib/Dialect/Vector/IR/VectorOps.cpp | 6 ++----
8 files changed, 43 insertions(+), 32 deletions(-)
diff --git a/mlir/lib/Dialect/Arith/IR/ArithDialect.cpp b/mlir/lib/Dialect/Arith/IR/ArithDialect.cpp
index 1c5b0d8df44ed7..1ebc4588bf9ea9 100644
--- a/mlir/lib/Dialect/Arith/IR/ArithDialect.cpp
+++ b/mlir/lib/Dialect/Arith/IR/ArithDialect.cpp
@@ -11,9 +11,9 @@
#include "mlir/Dialect/Bufferization/IR/BufferDeallocationOpInterface.h"
#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
#include "mlir/Dialect/UB/IR/UBOps.h"
-#include "mlir/Interfaces/ValueBoundsOpInterface.h"
#include "mlir/IR/Builders.h"
#include "mlir/IR/DialectImplementation.h"
+#include "mlir/Interfaces/ValueBoundsOpInterface.h"
#include "mlir/Transforms/InliningUtils.h"
#include "llvm/ADT/TypeSwitch.h"
@@ -49,7 +49,8 @@ void arith::ArithDialect::initialize() {
>();
addInterfaces<ArithInlinerInterface>();
declarePromisedInterface<ArithDialect, ConvertToLLVMPatternInterface>();
- declarePromisedInterface<SelectOp, bufferization::BufferDeallocationOpInterface>();
+ declarePromisedInterface<SelectOp,
+ bufferization::BufferDeallocationOpInterface>();
declarePromisedInterface<ConstantOp,
bufferization::BufferizableOpInterface>();
declarePromisedInterface<IndexCastOp,
diff --git a/mlir/lib/Dialect/Bufferization/IR/BufferizationDialect.cpp b/mlir/lib/Dialect/Bufferization/IR/BufferizationDialect.cpp
index d8a38868ac862a..c4d91ba72daac4 100644
--- a/mlir/lib/Dialect/Bufferization/IR/BufferizationDialect.cpp
+++ b/mlir/lib/Dialect/Bufferization/IR/BufferizationDialect.cpp
@@ -9,8 +9,8 @@
#include "mlir/Dialect/Affine/IR/AffineOps.h"
#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
#include "mlir/Dialect/Bufferization/IR/Bufferization.h"
-#include "mlir/Dialect/MemRef/IR/MemRef.h"
#include "mlir/Dialect/Func/IR/FuncOps.h"
+#include "mlir/Dialect/MemRef/IR/MemRef.h"
#include "mlir/Dialect/Tensor/IR/Tensor.h"
#include "mlir/Interfaces/FunctionInterfaces.h"
#include "mlir/Transforms/InliningUtils.h"
diff --git a/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp b/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp
index ed763f03fb2a28..530ee44eb42885 100644
--- a/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp
+++ b/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp
@@ -216,7 +216,8 @@ void GPUDialect::initialize() {
#include "mlir/Dialect/GPU/IR/GPUOpsAttributes.cpp.inc"
>();
addInterfaces<GPUInlinerInterface>();
- declarePromisedInterface<TerminatorOp, bufferization::BufferDeallocationOpInterface>();
+ declarePromisedInterface<TerminatorOp,
+ bufferization::BufferDeallocationOpInterface>();
}
static std::string getSparseHandleKeyword(SparseHandleKind kind) {
diff --git a/mlir/lib/Dialect/SCF/IR/SCF.cpp b/mlir/lib/Dialect/SCF/IR/SCF.cpp
index e71ad06e8d4696..2146a42d5469cb 100644
--- a/mlir/lib/Dialect/SCF/IR/SCF.cpp
+++ b/mlir/lib/Dialect/SCF/IR/SCF.cpp
@@ -15,12 +15,12 @@
#include "mlir/Dialect/MemRef/IR/MemRef.h"
#include "mlir/Dialect/SCF/IR/DeviceMappingInterface.h"
#include "mlir/Dialect/Tensor/IR/Tensor.h"
-#include "mlir/Interfaces/ValueBoundsOpInterface.h"
#include "mlir/IR/BuiltinAttributes.h"
#include "mlir/IR/IRMapping.h"
#include "mlir/IR/Matchers.h"
#include "mlir/IR/PatternMatch.h"
#include "mlir/Interfaces/FunctionInterfaces.h"
+#include "mlir/Interfaces/ValueBoundsOpInterface.h"
#include "mlir/Support/MathExtras.h"
#include "mlir/Transforms/InliningUtils.h"
#include "llvm/ADT/MapVector.h"
@@ -74,15 +74,21 @@ void SCFDialect::initialize() {
#include "mlir/Dialect/SCF/IR/SCFOps.cpp.inc"
>();
addInterfaces<SCFInlinerInterface>();
- declarePromisedInterface<InParallelOp, bufferization::BufferDeallocationOpInterface>();
- declarePromisedInterface<ReduceReturnOp, bufferization::BufferDeallocationOpInterface>();
- declarePromisedInterface<ConditionOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<ExecuteRegionOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<InParallelOp,
+ bufferization::BufferDeallocationOpInterface>();
+ declarePromisedInterface<ReduceReturnOp,
+ bufferization::BufferDeallocationOpInterface>();
+ declarePromisedInterface<ConditionOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<ExecuteRegionOp,
+ bufferization::BufferizableOpInterface>();
declarePromisedInterface<ForOp, bufferization::BufferizableOpInterface>();
declarePromisedInterface<IfOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<IndexSwitchOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<IndexSwitchOp,
+ bufferization::BufferizableOpInterface>();
declarePromisedInterface<ForallOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<InParallelOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<InParallelOp,
+ bufferization::BufferizableOpInterface>();
declarePromisedInterface<WhileOp, bufferization::BufferizableOpInterface>();
declarePromisedInterface<YieldOp, bufferization::BufferizableOpInterface>();
declarePromisedInterface<ForOp, ValueBoundsOpInterface>();
diff --git a/mlir/lib/Dialect/Shape/IR/Shape.cpp b/mlir/lib/Dialect/Shape/IR/Shape.cpp
index 625fd0cd5082c5..c26e0d4a119af9 100644
--- a/mlir/lib/Dialect/Shape/IR/Shape.cpp
+++ b/mlir/lib/Dialect/Shape/IR/Shape.cpp
@@ -144,8 +144,10 @@ void ShapeDialect::initialize() {
// still evolving it makes it simple to start with an unregistered ops and
// try different variants before actually defining the op.
allowUnknownOperations();
- declarePromisedInterface<AssumingOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<AssumingYieldOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<AssumingOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<AssumingYieldOp,
+ bufferization::BufferizableOpInterface>();
}
Operation *ShapeDialect::materializeConstant(OpBuilder &builder,
diff --git a/mlir/lib/Dialect/SparseTensor/IR/SparseTensorDialect.cpp b/mlir/lib/Dialect/SparseTensor/IR/SparseTensorDialect.cpp
index 54f62d28ce1256..91c90c7ea46e27 100644
--- a/mlir/lib/Dialect/SparseTensor/IR/SparseTensorDialect.cpp
+++ b/mlir/lib/Dialect/SparseTensor/IR/SparseTensorDialect.cpp
@@ -1783,14 +1783,10 @@ void SparseTensorDialect::initialize() {
>();
declarePromisedInterface<ConcatenateOp,
bufferization::BufferizableOpInterface>();
- declarePromisedInterface<ConvertOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<LoadOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<NewOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<InsertOp,
- bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<ConvertOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<LoadOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<NewOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<InsertOp, bufferization::BufferizableOpInterface>();
declarePromisedInterface<NumberOfEntriesOp,
bufferization::BufferizableOpInterface>();
declarePromisedInterface<AssembleOp,
diff --git a/mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp b/mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp
index ad7f288f6223f2..8c215aae62d6d2 100644
--- a/mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp
+++ b/mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp
@@ -49,18 +49,25 @@ void TensorDialect::initialize() {
>();
addInterfaces<TensorInlinerInterface>();
declarePromisedInterface<CastOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<CollapseShapeOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<CollapseShapeOp,
+ bufferization::BufferizableOpInterface>();
declarePromisedInterface<DimOp, bufferization::BufferizableOpInterface>();
declarePromisedInterface<EmptyOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<ExpandShapeOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<ExtractSliceOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<ExpandShapeOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<ExtractSliceOp,
+ bufferization::BufferizableOpInterface>();
declarePromisedInterface<ExtractOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<FromElementsOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<GenerateOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<FromElementsOp,
+ bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<GenerateOp,
+ bufferization::BufferizableOpInterface>();
declarePromisedInterface<InsertOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<InsertSliceOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<InsertSliceOp,
+ bufferization::BufferizableOpInterface>();
declarePromisedInterface<PadOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<ParallelInsertSliceOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<ParallelInsertSliceOp,
+ bufferization::BufferizableOpInterface>();
declarePromisedInterface<RankOp, bufferization::BufferizableOpInterface>();
declarePromisedInterface<ReshapeOp, bufferization::BufferizableOpInterface>();
declarePromisedInterface<SplatOp, bufferization::BufferizableOpInterface>();
diff --git a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
index 7fc74ccdc9c83b..18b1f63fa35d43 100644
--- a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
+++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
@@ -381,10 +381,8 @@ void VectorDialect::initialize() {
bufferization::BufferizableOpInterface>();
declarePromisedInterface<TransferWriteOp,
bufferization::BufferizableOpInterface>();
- declarePromisedInterface<GatherOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<MaskOp,
- bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<GatherOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterface<MaskOp, bufferization::BufferizableOpInterface>();
declarePromisedInterface<YieldOp, bufferization::BufferizableOpInterface>();
declarePromisedInterface<TransferReadOp, SubsetOpInterface>();
>From c49b98ba7ad97291cd12c9b3dbb804283872ed66 Mon Sep 17 00:00:00 2001
From: justinfargnoli <justinfargnoli at gmail.com>
Date: Tue, 16 Jan 2024 16:29:04 -0800
Subject: [PATCH 4/8] clang-format changes
---
mlir/lib/Dialect/Affine/IR/AffineOps.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp
index 1055778daa25cb..ebf4f97218f5da 100644
--- a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp
+++ b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp
@@ -8,7 +8,6 @@
#include "mlir/Dialect/Affine/IR/AffineOps.h"
#include "mlir/Dialect/Affine/IR/AffineValueMap.h"
-#include "mlir/Interfaces/ValueBoundsOpInterface.h"
#include "mlir/Dialect/MemRef/IR/MemRef.h"
#include "mlir/Dialect/UB/IR/UBOps.h"
#include "mlir/IR/AffineExprVisitor.h"
@@ -18,6 +17,7 @@
#include "mlir/IR/OpDefinition.h"
#include "mlir/IR/PatternMatch.h"
#include "mlir/Interfaces/ShapedOpInterfaces.h"
+#include "mlir/Interfaces/ValueBoundsOpInterface.h"
#include "mlir/Support/MathExtras.h"
#include "mlir/Transforms/InliningUtils.h"
#include "llvm/ADT/ScopeExit.h"
>From 922420c9856ca2e58e2f3775b7601179888610ec Mon Sep 17 00:00:00 2001
From: justinfargnoli <justinfargnoli at gmail.com>
Date: Sat, 27 Jan 2024 18:32:40 -0800
Subject: [PATCH 5/8] Declare multiple interfaces at once for Linalg and Tosa
---
mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp | 31 ++++++++++++++++++++
mlir/lib/Dialect/Tosa/IR/TosaOps.cpp | 20 +++++++++++++
2 files changed, 51 insertions(+)
diff --git a/mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp b/mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp
index 875fe8278fef53..7ca8c1eb4b2a3e 100644
--- a/mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp
+++ b/mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp
@@ -20,6 +20,7 @@
#include "mlir/IR/BuiltinTypes.h"
#include "mlir/IR/Dialect.h"
#include "mlir/IR/DialectImplementation.h"
+#include "mlir/Interfaces/DestinationStyleOpInterface.h"
#include "mlir/Interfaces/FunctionInterfaces.h"
#include "mlir/Interfaces/SubsetOpInterface.h"
#include "mlir/Interfaces/ValueBoundsOpInterface.h"
@@ -99,6 +100,25 @@ void addNamedOpBuilders(
(addNamedOpBuilderImpl<OpTypes>(map), ...);
}
+template <typename... Ops>
+struct LinalgOpInterfaceHelper {
+ static void declareOpInterface(LinalgDialect *dialect) {
+ (dialect->declarePromisedInterface<Ops, bufferization::BufferizableOpInterface>(), ...);
+ }
+};
+
+template <typename OpType>
+static void declareOne(LinalgDialect *dialect) {
+ dialect->declarePromisedInterface<OpType, TilingInterface>();
+ dialect->declarePromisedInterface<OpType, PartialReductionOpInterface>();
+}
+
+/// Variadic helper function.
+template <typename... OpTypes>
+static void declareAll(LinalgDialect *dialect) {
+ (declareOne<OpTypes>(), ...);
+}
+
void mlir::linalg::LinalgDialect::initialize() {
addAttributes<
#define GET_ATTRDEF_LIST
@@ -120,9 +140,20 @@ void mlir::linalg::LinalgDialect::initialize() {
>(namedStructuredOpRegionBuilders);
addInterfaces<LinalgInlinerInterface>();
+
declarePromisedInterface<CopyOp, SubsetOpInterface>();
declarePromisedInterface<CopyOp, SubsetInsertionOpInterface>();
declarePromisedInterface<IndexOp, ValueBoundsOpInterface>();
+
+ declareOne<linalg::GenericOp>(this);
+ declareAll<
+#include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc"
+ >(this);
+
+ LinalgOpInterfaceHelper<
+#define GET_OP_LIST
+#include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc"
+ >::declareOpInterface(this);
}
LogicalResult LinalgDialect::verifyOperationAttribute(Operation *op,
diff --git a/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp b/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp
index 729116da45e47d..9205058bb5961a 100644
--- a/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp
+++ b/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp
@@ -12,6 +12,7 @@
//
//===----------------------------------------------------------------------===//
+#include "mlir/Dialect/Mesh/Interfaces/ShardingInterface.h"
#include "mlir/Dialect/Tosa/IR/TosaOps.h"
#include "mlir/Dialect/Quant/QuantOps.h"
#include "mlir/Dialect/Tensor/IR/Tensor.h"
@@ -126,6 +127,17 @@ SmallVector<Region *> tosa::WhileOp::getLoopRegions() { return {&getBody()}; }
// Tosa dialect initialization.
//===----------------------------------------------------------------------===//
+template <typename OpType>
+static void declareElemwiseOne(TosaDialect *dialect) {
+ dialect->declarePromisedInterface<OpType, mesh::ShardingInterface>();
+}
+
+/// Variadic helper function.
+template <typename... OpTypes>
+static void declareElemwiseAll(TosaDialect *dialect) {
+ (declareElemwiseOne<OpTypes>(dialect), ...);
+}
+
void TosaDialect::initialize() {
addOperations<
#define GET_OP_LIST
@@ -136,6 +148,14 @@ void TosaDialect::initialize() {
#include "mlir/Dialect/Tosa/IR/TosaAttributes.cpp.inc"
>();
addInterfaces<TosaDialectBytecodeInterface, TosaInlinerInterface>();
+ declareElemwiseAll<ClampOp, SigmoidOp, TanhOp, AddOp, ArithmeticRightShiftOp,
+ BitwiseAndOp, BitwiseOrOp, BitwiseXorOp, DivOp,
+ LogicalAndOp, LogicalLeftShiftOp, LogicalRightShiftOp,
+ LogicalOrOp, LogicalXorOp, MaximumOp, MinimumOp, MulOp,
+ PowOp, SubOp, AbsOp, BitwiseNotOp, CeilOp, ClzOp, ExpOp,
+ FloorOp, LogOp, LogicalNotOp, NegateOp, ReciprocalOp,
+ RsqrtOp, SelectOp, EqualOp, GreaterOp, GreaterEqualOp>(this);
+ declarePromisedInterface<MatMulOp, mesh::ShardingInterface>();
}
Operation *TosaDialect::materializeConstant(OpBuilder &builder, Attribute value,
>From 41811e4f651a031f40397c9b91ec7d5254f1a552 Mon Sep 17 00:00:00 2001
From: justinfargnoli <justinfargnoli at gmail.com>
Date: Sat, 27 Jan 2024 19:53:23 -0800
Subject: [PATCH 6/8] clang-format changes
---
mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp | 6 ++++--
mlir/lib/Dialect/Tosa/IR/TosaOps.cpp | 5 +++--
2 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp b/mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp
index 7ca8c1eb4b2a3e..2a68fb6d7ec77f 100644
--- a/mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp
+++ b/mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp
@@ -103,7 +103,9 @@ void addNamedOpBuilders(
template <typename... Ops>
struct LinalgOpInterfaceHelper {
static void declareOpInterface(LinalgDialect *dialect) {
- (dialect->declarePromisedInterface<Ops, bufferization::BufferizableOpInterface>(), ...);
+ (dialect->declarePromisedInterface<
+ Ops, bufferization::BufferizableOpInterface>(),
+ ...);
}
};
@@ -153,7 +155,7 @@ void mlir::linalg::LinalgDialect::initialize() {
LinalgOpInterfaceHelper<
#define GET_OP_LIST
#include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc"
- >::declareOpInterface(this);
+ >::declareOpInterface(this);
}
LogicalResult LinalgDialect::verifyOperationAttribute(Operation *op,
diff --git a/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp b/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp
index 9205058bb5961a..4aab051bd22b35 100644
--- a/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp
+++ b/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp
@@ -12,8 +12,8 @@
//
//===----------------------------------------------------------------------===//
-#include "mlir/Dialect/Mesh/Interfaces/ShardingInterface.h"
#include "mlir/Dialect/Tosa/IR/TosaOps.h"
+#include "mlir/Dialect/Mesh/Interfaces/ShardingInterface.h"
#include "mlir/Dialect/Quant/QuantOps.h"
#include "mlir/Dialect/Tensor/IR/Tensor.h"
#include "mlir/Dialect/Tosa/Utils/QuantUtils.h"
@@ -154,7 +154,8 @@ void TosaDialect::initialize() {
LogicalOrOp, LogicalXorOp, MaximumOp, MinimumOp, MulOp,
PowOp, SubOp, AbsOp, BitwiseNotOp, CeilOp, ClzOp, ExpOp,
FloorOp, LogOp, LogicalNotOp, NegateOp, ReciprocalOp,
- RsqrtOp, SelectOp, EqualOp, GreaterOp, GreaterEqualOp>(this);
+ RsqrtOp, SelectOp, EqualOp, GreaterOp, GreaterEqualOp>(
+ this);
declarePromisedInterface<MatMulOp, mesh::ShardingInterface>();
}
>From 895e56461f39ea78b70ad709c4434580181af402 Mon Sep 17 00:00:00 2001
From: justinfargnoli <justinfargnoli at gmail.com>
Date: Thu, 1 Feb 2024 19:58:52 -0800
Subject: [PATCH 7/8] Include from Tensor instead of Transform
---
mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp b/mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp
index 8c215aae62d6d2..e8bb2ec96b4786 100644
--- a/mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp
+++ b/mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp
@@ -11,7 +11,7 @@
#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
#include "mlir/Dialect/Complex/IR/Complex.h"
#include "mlir/Dialect/Tensor/IR/Tensor.h"
-#include "mlir/Dialect/Transform/IR/TransformInterfaces.h"
+#include "mlir/Dialect/Tensor/TransformOps/TensorTransformOps.h"
#include "mlir/Interfaces/SubsetOpInterface.h"
#include "mlir/Transforms/InliningUtils.h"
>From 5f448a14789a822da251ec0b8a161507e462d7dd Mon Sep 17 00:00:00 2001
From: justinfargnoli <justinfargnoli at gmail.com>
Date: Sun, 11 Feb 2024 14:15:49 -0800
Subject: [PATCH 8/8] Declare multiple promised interfaces at once
---
mlir/include/mlir/IR/Dialect.h | 5 ++
mlir/lib/Dialect/Affine/IR/AffineOps.cpp | 5 +-
mlir/lib/Dialect/Arith/IR/ArithDialect.cpp | 13 ++--
.../Bufferization/IR/BufferizationDialect.cpp | 5 +-
.../Dialect/ControlFlow/IR/ControlFlowOps.cpp | 5 +-
mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp | 39 +++--------
mlir/lib/Dialect/MemRef/IR/MemRefDialect.cpp | 22 ++----
mlir/lib/Dialect/SCF/IR/SCF.cpp | 22 ++----
mlir/lib/Dialect/Shape/IR/Shape.cpp | 6 +-
.../SparseTensor/IR/SparseTensorDialect.cpp | 24 ++-----
mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp | 67 +++++--------------
mlir/lib/Dialect/Tosa/IR/TosaOps.cpp | 28 +++-----
mlir/lib/Dialect/Vector/IR/VectorOps.cpp | 15 ++---
13 files changed, 73 insertions(+), 183 deletions(-)
diff --git a/mlir/include/mlir/IR/Dialect.h b/mlir/include/mlir/IR/Dialect.h
index 45f29f37dd3b97..98fa956a45c600 100644
--- a/mlir/include/mlir/IR/Dialect.h
+++ b/mlir/include/mlir/IR/Dialect.h
@@ -216,6 +216,11 @@ class Dialect {
{TypeID::get<ConcreteT>(), InterfaceT::getInterfaceID()});
}
+ template <typename InterfaceT, typename... ConcreteT>
+ void declarePromisedInterfaces() {
+ (declarePromisedInterface<ConcreteT, InterfaceT>(), ...);
+ }
+
/// Checks if the given interface, which is attempting to be used, is a
/// promised interface of this dialect that has yet to be implemented. If so,
/// emits a fatal error. `interfaceName` is an optional string that contains a
diff --git a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp
index ebf4f97218f5da..f9875ca01fe082 100644
--- a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp
+++ b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp
@@ -221,9 +221,8 @@ void AffineDialect::initialize() {
#include "mlir/Dialect/Affine/IR/AffineOps.cpp.inc"
>();
addInterfaces<AffineInlinerInterface>();
- declarePromisedInterface<AffineApplyOp, ValueBoundsOpInterface>();
- declarePromisedInterface<AffineMaxOp, ValueBoundsOpInterface>();
- declarePromisedInterface<AffineMinOp, ValueBoundsOpInterface>();
+ declarePromisedInterfaces<ValueBoundsOpInterface, AffineApplyOp, AffineMaxOp,
+ AffineMinOp>();
}
/// Materialize a single constant operation from a given attribute value with
diff --git a/mlir/lib/Dialect/Arith/IR/ArithDialect.cpp b/mlir/lib/Dialect/Arith/IR/ArithDialect.cpp
index 1ebc4588bf9ea9..6a593185ccedce 100644
--- a/mlir/lib/Dialect/Arith/IR/ArithDialect.cpp
+++ b/mlir/lib/Dialect/Arith/IR/ArithDialect.cpp
@@ -51,15 +51,10 @@ void arith::ArithDialect::initialize() {
declarePromisedInterface<ArithDialect, ConvertToLLVMPatternInterface>();
declarePromisedInterface<SelectOp,
bufferization::BufferDeallocationOpInterface>();
- declarePromisedInterface<ConstantOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<IndexCastOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<SelectOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<AddIOp, ValueBoundsOpInterface>();
- declarePromisedInterface<ConstantOp, ValueBoundsOpInterface>();
- declarePromisedInterface<SubIOp, ValueBoundsOpInterface>();
- declarePromisedInterface<MulIOp, ValueBoundsOpInterface>();
+ declarePromisedInterfaces<bufferization::BufferizableOpInterface, ConstantOp,
+ IndexCastOp, SelectOp>();
+ declarePromisedInterfaces<ValueBoundsOpInterface, AddIOp, ConstantOp, SubIOp,
+ MulIOp>();
}
/// Materialize an integer or floating point constant.
diff --git a/mlir/lib/Dialect/Bufferization/IR/BufferizationDialect.cpp b/mlir/lib/Dialect/Bufferization/IR/BufferizationDialect.cpp
index c4d91ba72daac4..a03e43bc039eb6 100644
--- a/mlir/lib/Dialect/Bufferization/IR/BufferizationDialect.cpp
+++ b/mlir/lib/Dialect/Bufferization/IR/BufferizationDialect.cpp
@@ -64,9 +64,8 @@ void mlir::bufferization::BufferizationDialect::initialize() {
#include "mlir/Dialect/Bufferization/IR/BufferizationOps.cpp.inc"
>();
addInterfaces<BufferizationInlinerInterface>();
- declarePromisedInterface<func::CallOp, BufferizableOpInterface>();
- declarePromisedInterface<func::FuncOp, BufferizableOpInterface>();
- declarePromisedInterface<func::ReturnOp, BufferizableOpInterface>();
+ declarePromisedInterfaces<BufferizableOpInterface, func::CallOp, func::FuncOp,
+ func::ReturnOp>();
}
LogicalResult BufferizationDialect::verifyRegionArgAttribute(
diff --git a/mlir/lib/Dialect/ControlFlow/IR/ControlFlowOps.cpp b/mlir/lib/Dialect/ControlFlow/IR/ControlFlowOps.cpp
index 95027fc52791f3..c6b02b9703e75f 100644
--- a/mlir/lib/Dialect/ControlFlow/IR/ControlFlowOps.cpp
+++ b/mlir/lib/Dialect/ControlFlow/IR/ControlFlowOps.cpp
@@ -71,9 +71,8 @@ void ControlFlowDialect::initialize() {
>();
addInterfaces<ControlFlowInlinerInterface>();
declarePromisedInterface<ControlFlowDialect, ConvertToLLVMPatternInterface>();
- declarePromisedInterface<BranchOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<CondBranchOp,
- bufferization::BufferizableOpInterface>();
+ declarePromisedInterfaces<bufferization::BufferizableOpInterface, BranchOp,
+ CondBranchOp>();
declarePromisedInterface<CondBranchOp,
bufferization::BufferDeallocationOpInterface>();
}
diff --git a/mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp b/mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp
index 2a68fb6d7ec77f..8ac69dec8bd1df 100644
--- a/mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp
+++ b/mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp
@@ -100,27 +100,6 @@ void addNamedOpBuilders(
(addNamedOpBuilderImpl<OpTypes>(map), ...);
}
-template <typename... Ops>
-struct LinalgOpInterfaceHelper {
- static void declareOpInterface(LinalgDialect *dialect) {
- (dialect->declarePromisedInterface<
- Ops, bufferization::BufferizableOpInterface>(),
- ...);
- }
-};
-
-template <typename OpType>
-static void declareOne(LinalgDialect *dialect) {
- dialect->declarePromisedInterface<OpType, TilingInterface>();
- dialect->declarePromisedInterface<OpType, PartialReductionOpInterface>();
-}
-
-/// Variadic helper function.
-template <typename... OpTypes>
-static void declareAll(LinalgDialect *dialect) {
- (declareOne<OpTypes>(), ...);
-}
-
void mlir::linalg::LinalgDialect::initialize() {
addAttributes<
#define GET_ATTRDEF_LIST
@@ -146,16 +125,20 @@ void mlir::linalg::LinalgDialect::initialize() {
declarePromisedInterface<CopyOp, SubsetOpInterface>();
declarePromisedInterface<CopyOp, SubsetInsertionOpInterface>();
declarePromisedInterface<IndexOp, ValueBoundsOpInterface>();
-
- declareOne<linalg::GenericOp>(this);
- declareAll<
+ declarePromisedInterface<linalg::GenericOp, TilingInterface>();
+ declarePromisedInterface<linalg::GenericOp, PartialReductionOpInterface>();
+ declarePromisedInterfaces<TilingInterface,
+#define GET_OP_LIST
#include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc"
- >(this);
-
- LinalgOpInterfaceHelper<
+ >();
+ declarePromisedInterfaces<PartialReductionOpInterface,
+#define GET_OP_LIST
+#include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc"
+ >();
+ declarePromisedInterfaces<bufferization::BufferizableOpInterface,
#define GET_OP_LIST
#include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc"
- >::declareOpInterface(this);
+ >();
}
LogicalResult LinalgDialect::verifyOperationAttribute(Operation *op,
diff --git a/mlir/lib/Dialect/MemRef/IR/MemRefDialect.cpp b/mlir/lib/Dialect/MemRef/IR/MemRefDialect.cpp
index 47c236a267ca99..41082a85a485f2 100644
--- a/mlir/lib/Dialect/MemRef/IR/MemRefDialect.cpp
+++ b/mlir/lib/Dialect/MemRef/IR/MemRefDialect.cpp
@@ -48,22 +48,12 @@ void mlir::memref::MemRefDialect::initialize() {
>();
addInterfaces<MemRefInlinerInterface>();
declarePromisedInterface<MemRefDialect, ConvertToLLVMPatternInterface>();
- declarePromisedInterface<AllocOp, bufferization::AllocationOpInterface>();
- declarePromisedInterface<AllocaOp, bufferization::AllocationOpInterface>();
- declarePromisedInterface<ReallocOp, bufferization::AllocationOpInterface>();
- declarePromisedInterface<CastOp, RuntimeVerifiableOpInterface>();
- declarePromisedInterface<ExpandShapeOp, RuntimeVerifiableOpInterface>();
- declarePromisedInterface<LoadOp, RuntimeVerifiableOpInterface>();
- declarePromisedInterface<ReinterpretCastOp, RuntimeVerifiableOpInterface>();
- declarePromisedInterface<StoreOp, RuntimeVerifiableOpInterface>();
- declarePromisedInterface<SubViewOp, RuntimeVerifiableOpInterface>();
- declarePromisedInterface<AllocOp, ValueBoundsOpInterface>();
- declarePromisedInterface<AllocaOp, ValueBoundsOpInterface>();
- declarePromisedInterface<CastOp, ValueBoundsOpInterface>();
- declarePromisedInterface<DimOp, ValueBoundsOpInterface>();
- declarePromisedInterface<GetGlobalOp, ValueBoundsOpInterface>();
- declarePromisedInterface<RankOp, ValueBoundsOpInterface>();
- declarePromisedInterface<SubViewOp, ValueBoundsOpInterface>();
+ declarePromisedInterfaces<bufferization::AllocationOpInterface, AllocOp,
+ AllocaOp, ReallocOp>();
+ declarePromisedInterfaces<RuntimeVerifiableOpInterface, CastOp, ExpandShapeOp,
+ LoadOp, ReinterpretCastOp, StoreOp, SubViewOp>();
+ declarePromisedInterfaces<ValueBoundsOpInterface, AllocOp, AllocaOp, CastOp,
+ DimOp, GetGlobalOp, RankOp, SubViewOp>();
declarePromisedInterface<MemRefType, DestructurableTypeInterface>();
}
diff --git a/mlir/lib/Dialect/SCF/IR/SCF.cpp b/mlir/lib/Dialect/SCF/IR/SCF.cpp
index 2146a42d5469cb..44f7a08a60c6c4 100644
--- a/mlir/lib/Dialect/SCF/IR/SCF.cpp
+++ b/mlir/lib/Dialect/SCF/IR/SCF.cpp
@@ -74,23 +74,11 @@ void SCFDialect::initialize() {
#include "mlir/Dialect/SCF/IR/SCFOps.cpp.inc"
>();
addInterfaces<SCFInlinerInterface>();
- declarePromisedInterface<InParallelOp,
- bufferization::BufferDeallocationOpInterface>();
- declarePromisedInterface<ReduceReturnOp,
- bufferization::BufferDeallocationOpInterface>();
- declarePromisedInterface<ConditionOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<ExecuteRegionOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<ForOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<IfOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<IndexSwitchOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<ForallOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<InParallelOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<WhileOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<YieldOp, bufferization::BufferizableOpInterface>();
+ declarePromisedInterfaces<bufferization::BufferDeallocationOpInterface,
+ InParallelOp, ReduceReturnOp>();
+ declarePromisedInterfaces<bufferization::BufferizableOpInterface, ConditionOp,
+ ExecuteRegionOp, ForOp, IfOp, IndexSwitchOp,
+ ForallOp, InParallelOp, WhileOp, YieldOp>();
declarePromisedInterface<ForOp, ValueBoundsOpInterface>();
}
diff --git a/mlir/lib/Dialect/Shape/IR/Shape.cpp b/mlir/lib/Dialect/Shape/IR/Shape.cpp
index c26e0d4a119af9..29d0fb1d982562 100644
--- a/mlir/lib/Dialect/Shape/IR/Shape.cpp
+++ b/mlir/lib/Dialect/Shape/IR/Shape.cpp
@@ -144,10 +144,8 @@ void ShapeDialect::initialize() {
// still evolving it makes it simple to start with an unregistered ops and
// try different variants before actually defining the op.
allowUnknownOperations();
- declarePromisedInterface<AssumingOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<AssumingYieldOp,
- bufferization::BufferizableOpInterface>();
+ declarePromisedInterfaces<bufferization::BufferizableOpInterface, AssumingOp,
+ AssumingYieldOp>();
}
Operation *ShapeDialect::materializeConstant(OpBuilder &builder,
diff --git a/mlir/lib/Dialect/SparseTensor/IR/SparseTensorDialect.cpp b/mlir/lib/Dialect/SparseTensor/IR/SparseTensorDialect.cpp
index 91c90c7ea46e27..c290eee3db40bc 100644
--- a/mlir/lib/Dialect/SparseTensor/IR/SparseTensorDialect.cpp
+++ b/mlir/lib/Dialect/SparseTensor/IR/SparseTensorDialect.cpp
@@ -1781,26 +1781,10 @@ void SparseTensorDialect::initialize() {
#define GET_OP_LIST
#include "mlir/Dialect/SparseTensor/IR/SparseTensorOps.cpp.inc"
>();
- declarePromisedInterface<ConcatenateOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<ConvertOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<LoadOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<NewOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<InsertOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<NumberOfEntriesOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<AssembleOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<DisassembleOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<ToCoordinatesBufferOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<ToCoordinatesOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<ToPositionsOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<ToValuesOp,
- bufferization::BufferizableOpInterface>();
+ declarePromisedInterfaces<
+ bufferization::BufferizableOpInterface, ConcatenateOp, ConvertOp, LoadOp,
+ NewOp, InsertOp, NumberOfEntriesOp, AssembleOp, DisassembleOp,
+ ToCoordinatesBufferOp, ToCoordinatesOp, ToPositionsOp, ToValuesOp>();
}
#define GET_OP_CLASSES
diff --git a/mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp b/mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp
index e8bb2ec96b4786..a8f2215455b02a 100644
--- a/mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp
+++ b/mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp
@@ -48,55 +48,22 @@ void TensorDialect::initialize() {
#include "mlir/Dialect/Tensor/IR/TensorOps.cpp.inc"
>();
addInterfaces<TensorInlinerInterface>();
- declarePromisedInterface<CastOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<CollapseShapeOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<DimOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<EmptyOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<ExpandShapeOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<ExtractSliceOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<ExtractOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<FromElementsOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<GenerateOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<InsertOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<InsertSliceOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<PadOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<ParallelInsertSliceOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<RankOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<ReshapeOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<SplatOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<CollapseShapeOp,
- transform::FindPayloadReplacementOpInterface>();
- declarePromisedInterface<ExpandShapeOp,
- transform::FindPayloadReplacementOpInterface>();
- declarePromisedInterface<ExtractSliceOp,
- transform::FindPayloadReplacementOpInterface>();
- declarePromisedInterface<InsertSliceOp,
- transform::FindPayloadReplacementOpInterface>();
- declarePromisedInterface<ReshapeOp,
- transform::FindPayloadReplacementOpInterface>();
- declarePromisedInterface<ExpandShapeOp, ReifyRankedShapedTypeOpInterface>();
- declarePromisedInterface<CollapseShapeOp, ReifyRankedShapedTypeOpInterface>();
- declarePromisedInterface<PadOp, ReifyRankedShapedTypeOpInterface>();
- declarePromisedInterface<ExtractSliceOp, SubsetOpInterface>();
+ declarePromisedInterfaces<
+ bufferization::BufferizableOpInterface, CastOp, CollapseShapeOp, DimOp,
+ EmptyOp, ExpandShapeOp, ExtractSliceOp, ExtractOp, FromElementsOp,
+ GenerateOp, InsertOp, InsertSliceOp, PadOp, ParallelInsertSliceOp, RankOp,
+ ReshapeOp, SplatOp>();
+ declarePromisedInterfaces<transform::FindPayloadReplacementOpInterface,
+ CollapseShapeOp, ExpandShapeOp, ExtractSliceOp,
+ InsertSliceOp, ReshapeOp>();
+ declarePromisedInterfaces<ReifyRankedShapedTypeOpInterface, ExpandShapeOp,
+ CollapseShapeOp, PadOp>();
+ declarePromisedInterfaces<SubsetOpInterface, ExtractSliceOp, InsertSliceOp,
+ ParallelInsertSliceOp>();
+ declarePromisedInterfaces<SubsetInsertionOpInterface, InsertSliceOp,
+ ParallelInsertSliceOp>();
declarePromisedInterface<ExtractSliceOp, SubsetExtractionOpInterface>();
- declarePromisedInterface<InsertSliceOp, SubsetOpInterface>();
- declarePromisedInterface<InsertSliceOp, SubsetInsertionOpInterface>();
- declarePromisedInterface<ParallelInsertSliceOp, SubsetOpInterface>();
- declarePromisedInterface<ParallelInsertSliceOp, SubsetInsertionOpInterface>();
- declarePromisedInterface<PadOp, TilingInterface>();
- declarePromisedInterface<PackOp, TilingInterface>();
- declarePromisedInterface<UnPackOp, TilingInterface>();
- declarePromisedInterface<CastOp, ValueBoundsOpInterface>();
- declarePromisedInterface<DimOp, ValueBoundsOpInterface>();
- declarePromisedInterface<EmptyOp, ValueBoundsOpInterface>();
- declarePromisedInterface<ExtractSliceOp, ValueBoundsOpInterface>();
- declarePromisedInterface<PadOp, ValueBoundsOpInterface>();
- declarePromisedInterface<RankOp, ValueBoundsOpInterface>();
+ declarePromisedInterfaces<TilingInterface, PadOp, PackOp, UnPackOp>();
+ declarePromisedInterfaces<ValueBoundsOpInterface, CastOp, DimOp, EmptyOp,
+ ExtractSliceOp, PadOp, RankOp>();
}
diff --git a/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp b/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp
index 4aab051bd22b35..488c8b5327abc1 100644
--- a/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp
+++ b/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp
@@ -127,17 +127,6 @@ SmallVector<Region *> tosa::WhileOp::getLoopRegions() { return {&getBody()}; }
// Tosa dialect initialization.
//===----------------------------------------------------------------------===//
-template <typename OpType>
-static void declareElemwiseOne(TosaDialect *dialect) {
- dialect->declarePromisedInterface<OpType, mesh::ShardingInterface>();
-}
-
-/// Variadic helper function.
-template <typename... OpTypes>
-static void declareElemwiseAll(TosaDialect *dialect) {
- (declareElemwiseOne<OpTypes>(dialect), ...);
-}
-
void TosaDialect::initialize() {
addOperations<
#define GET_OP_LIST
@@ -148,15 +137,14 @@ void TosaDialect::initialize() {
#include "mlir/Dialect/Tosa/IR/TosaAttributes.cpp.inc"
>();
addInterfaces<TosaDialectBytecodeInterface, TosaInlinerInterface>();
- declareElemwiseAll<ClampOp, SigmoidOp, TanhOp, AddOp, ArithmeticRightShiftOp,
- BitwiseAndOp, BitwiseOrOp, BitwiseXorOp, DivOp,
- LogicalAndOp, LogicalLeftShiftOp, LogicalRightShiftOp,
- LogicalOrOp, LogicalXorOp, MaximumOp, MinimumOp, MulOp,
- PowOp, SubOp, AbsOp, BitwiseNotOp, CeilOp, ClzOp, ExpOp,
- FloorOp, LogOp, LogicalNotOp, NegateOp, ReciprocalOp,
- RsqrtOp, SelectOp, EqualOp, GreaterOp, GreaterEqualOp>(
- this);
- declarePromisedInterface<MatMulOp, mesh::ShardingInterface>();
+ declarePromisedInterfaces<
+ mesh::ShardingInterface, ClampOp, SigmoidOp, TanhOp, AddOp,
+ ArithmeticRightShiftOp, BitwiseAndOp, BitwiseOrOp, BitwiseXorOp, DivOp,
+ LogicalAndOp, LogicalLeftShiftOp, LogicalRightShiftOp, LogicalOrOp,
+ LogicalXorOp, MaximumOp, MinimumOp, MulOp, PowOp, SubOp, AbsOp,
+ BitwiseNotOp, CeilOp, ClzOp, ExpOp, FloorOp, LogOp, LogicalNotOp,
+ NegateOp, ReciprocalOp, RsqrtOp, SelectOp, EqualOp, GreaterOp,
+ GreaterEqualOp, MatMulOp>();
}
Operation *TosaDialect::materializeConstant(OpBuilder &builder, Attribute value,
diff --git a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
index 18b1f63fa35d43..9e99739d408343 100644
--- a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
+++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
@@ -377,17 +377,12 @@ void VectorDialect::initialize() {
addInterfaces<VectorInlinerInterface>();
- declarePromisedInterface<TransferReadOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<TransferWriteOp,
- bufferization::BufferizableOpInterface>();
- declarePromisedInterface<GatherOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<MaskOp, bufferization::BufferizableOpInterface>();
- declarePromisedInterface<YieldOp, bufferization::BufferizableOpInterface>();
-
- declarePromisedInterface<TransferReadOp, SubsetOpInterface>();
+ declarePromisedInterfaces<bufferization::BufferizableOpInterface,
+ TransferReadOp, TransferWriteOp, GatherOp, MaskOp,
+ YieldOp>();
+ declarePromisedInterfaces<SubsetOpInterface, TransferReadOp,
+ TransferWriteOp>();
declarePromisedInterface<TransferReadOp, SubsetExtractionOpInterface>();
- declarePromisedInterface<TransferWriteOp, SubsetOpInterface>();
declarePromisedInterface<TransferWriteOp, SubsetInsertionOpInterface>();
}
More information about the Mlir-commits
mailing list