Skip to content

Commit 513cdb8

Browse files
[mlir] Declare promised interfaces for all dialects (#78368)
This PR adds promised interface declarations for all interfaces declared in `InitAllDialects.h`. Promised interfaces allow a dialect to declare that it will have an implementation of a particular interface, crashing the program if one isn't provided when the interface is used.
1 parent fadc38e commit 513cdb8

File tree

14 files changed

+114
-0
lines changed

14 files changed

+114
-0
lines changed

mlir/lib/Dialect/Affine/IR/AffineOps.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "mlir/IR/OpDefinition.h"
1818
#include "mlir/IR/PatternMatch.h"
1919
#include "mlir/Interfaces/ShapedOpInterfaces.h"
20+
#include "mlir/Interfaces/ValueBoundsOpInterface.h"
2021
#include "mlir/Support/MathExtras.h"
2122
#include "mlir/Transforms/InliningUtils.h"
2223
#include "llvm/ADT/ScopeExit.h"
@@ -220,6 +221,8 @@ void AffineDialect::initialize() {
220221
#include "mlir/Dialect/Affine/IR/AffineOps.cpp.inc"
221222
>();
222223
addInterfaces<AffineInlinerInterface>();
224+
declarePromisedInterfaces<ValueBoundsOpInterface, AffineApplyOp, AffineMaxOp,
225+
AffineMinOp>();
223226
}
224227

225228
/// Materialize a single constant operation from a given attribute value with

mlir/lib/Dialect/Arith/IR/ArithDialect.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,12 @@
88

99
#include "mlir/Conversion/ConvertToLLVM/ToLLVMInterface.h"
1010
#include "mlir/Dialect/Arith/IR/Arith.h"
11+
#include "mlir/Dialect/Bufferization/IR/BufferDeallocationOpInterface.h"
12+
#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
1113
#include "mlir/Dialect/UB/IR/UBOps.h"
1214
#include "mlir/IR/Builders.h"
1315
#include "mlir/IR/DialectImplementation.h"
16+
#include "mlir/Interfaces/ValueBoundsOpInterface.h"
1417
#include "mlir/Transforms/InliningUtils.h"
1518
#include "llvm/ADT/TypeSwitch.h"
1619

@@ -46,6 +49,12 @@ void arith::ArithDialect::initialize() {
4649
>();
4750
addInterfaces<ArithInlinerInterface>();
4851
declarePromisedInterface<ArithDialect, ConvertToLLVMPatternInterface>();
52+
declarePromisedInterface<SelectOp,
53+
bufferization::BufferDeallocationOpInterface>();
54+
declarePromisedInterfaces<bufferization::BufferizableOpInterface, ConstantOp,
55+
IndexCastOp, SelectOp>();
56+
declarePromisedInterfaces<ValueBoundsOpInterface, AddIOp, ConstantOp, SubIOp,
57+
MulIOp>();
4958
}
5059

5160
/// Materialize an integer or floating point constant.

mlir/lib/Dialect/ControlFlow/IR/ControlFlowOps.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
#include "mlir/Conversion/ConvertToLLVM/ToLLVMInterface.h"
1212
#include "mlir/Dialect/Arith/IR/Arith.h"
13+
#include "mlir/Dialect/Bufferization/IR/BufferDeallocationOpInterface.h"
14+
#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
1315
#include "mlir/IR/AffineExpr.h"
1416
#include "mlir/IR/AffineMap.h"
1517
#include "mlir/IR/Builders.h"
@@ -69,6 +71,10 @@ void ControlFlowDialect::initialize() {
6971
>();
7072
addInterfaces<ControlFlowInlinerInterface>();
7173
declarePromisedInterface<ControlFlowDialect, ConvertToLLVMPatternInterface>();
74+
declarePromisedInterfaces<bufferization::BufferizableOpInterface, BranchOp,
75+
CondBranchOp>();
76+
declarePromisedInterface<CondBranchOp,
77+
bufferization::BufferDeallocationOpInterface>();
7278
}
7379

7480
//===----------------------------------------------------------------------===//

mlir/lib/Dialect/Func/IR/FuncOps.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "mlir/Dialect/Func/IR/FuncOps.h"
1010

1111
#include "mlir/Conversion/ConvertToLLVM/ToLLVMInterface.h"
12+
#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
1213
#include "mlir/IR/BuiltinOps.h"
1314
#include "mlir/IR/BuiltinTypes.h"
1415
#include "mlir/IR/IRMapping.h"
@@ -43,6 +44,8 @@ void FuncDialect::initialize() {
4344
>();
4445
declarePromisedInterface<FuncDialect, DialectInlinerInterface>();
4546
declarePromisedInterface<FuncDialect, ConvertToLLVMPatternInterface>();
47+
declarePromisedInterfaces<bufferization::BufferizableOpInterface, CallOp,
48+
FuncOp, ReturnOp>();
4649
}
4750

4851
/// Materialize a single constant operation from a given attribute value with

mlir/lib/Dialect/GPU/IR/GPUDialect.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "mlir/Dialect/GPU/IR/GPUDialect.h"
1414

1515
#include "mlir/Dialect/Arith/IR/Arith.h"
16+
#include "mlir/Dialect/Bufferization/IR/BufferDeallocationOpInterface.h"
1617
#include "mlir/Dialect/MemRef/IR/MemRef.h"
1718
#include "mlir/IR/Attributes.h"
1819
#include "mlir/IR/Builders.h"
@@ -215,6 +216,8 @@ void GPUDialect::initialize() {
215216
#include "mlir/Dialect/GPU/IR/GPUOpsAttributes.cpp.inc"
216217
>();
217218
addInterfaces<GPUInlinerInterface>();
219+
declarePromisedInterface<TerminatorOp,
220+
bufferization::BufferDeallocationOpInterface>();
218221
}
219222

220223
static std::string getSparseHandleKeyword(SparseHandleKind kind) {

mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@
2121
#include "mlir/IR/BuiltinTypes.h"
2222
#include "mlir/IR/Dialect.h"
2323
#include "mlir/IR/DialectImplementation.h"
24+
#include "mlir/Interfaces/DestinationStyleOpInterface.h"
2425
#include "mlir/Interfaces/FunctionInterfaces.h"
26+
#include "mlir/Interfaces/SubsetOpInterface.h"
27+
#include "mlir/Interfaces/ValueBoundsOpInterface.h"
2528
#include "mlir/Parser/Parser.h"
2629
#include "mlir/Support/LLVM.h"
2730
#include "mlir/Transforms/InliningUtils.h"
@@ -123,6 +126,23 @@ void mlir::linalg::LinalgDialect::initialize() {
123126
declarePromisedInterface<GenericOp, mesh::ShardingInterface>();
124127
declarePromisedInterfaces<mesh::ShardingInterface,
125128
#define GET_OP_LIST
129+
#include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc"
130+
>();
131+
declarePromisedInterface<CopyOp, SubsetOpInterface>();
132+
declarePromisedInterface<CopyOp, SubsetInsertionOpInterface>();
133+
declarePromisedInterface<IndexOp, ValueBoundsOpInterface>();
134+
declarePromisedInterface<linalg::GenericOp, TilingInterface>();
135+
declarePromisedInterface<linalg::GenericOp, PartialReductionOpInterface>();
136+
declarePromisedInterfaces<TilingInterface,
137+
#define GET_OP_LIST
138+
#include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc"
139+
>();
140+
declarePromisedInterfaces<PartialReductionOpInterface,
141+
#define GET_OP_LIST
142+
#include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc"
143+
>();
144+
declarePromisedInterfaces<bufferization::BufferizableOpInterface,
145+
#define GET_OP_LIST
126146
#include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc"
127147
>();
128148
}

mlir/lib/Dialect/MemRef/IR/MemRefDialect.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,13 @@
88

99
#include "mlir/Conversion/ConvertToLLVM/ToLLVMInterface.h"
1010
#include "mlir/Dialect/Arith/IR/Arith.h"
11+
#include "mlir/Dialect/Bufferization/IR/AllocationOpInterface.h"
1112
#include "mlir/Dialect/MemRef/IR/MemRef.h"
13+
#include "mlir/IR/BuiltinTypes.h"
14+
#include "mlir/Interfaces/MemorySlotInterfaces.h"
15+
#include "mlir/Interfaces/RuntimeVerifiableOpInterface.h"
1216
#include "mlir/Interfaces/SideEffectInterfaces.h"
17+
#include "mlir/Interfaces/ValueBoundsOpInterface.h"
1318
#include "mlir/Transforms/InliningUtils.h"
1419
#include <optional>
1520

@@ -43,6 +48,13 @@ void mlir::memref::MemRefDialect::initialize() {
4348
>();
4449
addInterfaces<MemRefInlinerInterface>();
4550
declarePromisedInterface<MemRefDialect, ConvertToLLVMPatternInterface>();
51+
declarePromisedInterfaces<bufferization::AllocationOpInterface, AllocOp,
52+
AllocaOp, ReallocOp>();
53+
declarePromisedInterfaces<RuntimeVerifiableOpInterface, CastOp, ExpandShapeOp,
54+
LoadOp, ReinterpretCastOp, StoreOp, SubViewOp>();
55+
declarePromisedInterfaces<ValueBoundsOpInterface, AllocOp, AllocaOp, CastOp,
56+
DimOp, GetGlobalOp, RankOp, SubViewOp>();
57+
declarePromisedInterface<MemRefType, DestructurableTypeInterface>();
4658
}
4759

4860
/// Finds the unique dealloc operation (if one exists) for `allocValue`.

mlir/lib/Dialect/SCF/IR/SCF.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
#include "mlir/Dialect/SCF/IR/SCF.h"
1010
#include "mlir/Dialect/Arith/IR/Arith.h"
1111
#include "mlir/Dialect/Arith/Utils/Utils.h"
12+
#include "mlir/Dialect/Bufferization/IR/BufferDeallocationOpInterface.h"
13+
#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
1214
#include "mlir/Dialect/ControlFlow/IR/ControlFlowOps.h"
1315
#include "mlir/Dialect/MemRef/IR/MemRef.h"
1416
#include "mlir/Dialect/SCF/IR/DeviceMappingInterface.h"
@@ -18,6 +20,7 @@
1820
#include "mlir/IR/Matchers.h"
1921
#include "mlir/IR/PatternMatch.h"
2022
#include "mlir/Interfaces/FunctionInterfaces.h"
23+
#include "mlir/Interfaces/ValueBoundsOpInterface.h"
2124
#include "mlir/Support/MathExtras.h"
2225
#include "mlir/Transforms/InliningUtils.h"
2326
#include "llvm/ADT/MapVector.h"
@@ -71,6 +74,12 @@ void SCFDialect::initialize() {
7174
#include "mlir/Dialect/SCF/IR/SCFOps.cpp.inc"
7275
>();
7376
addInterfaces<SCFInlinerInterface>();
77+
declarePromisedInterfaces<bufferization::BufferDeallocationOpInterface,
78+
InParallelOp, ReduceReturnOp>();
79+
declarePromisedInterfaces<bufferization::BufferizableOpInterface, ConditionOp,
80+
ExecuteRegionOp, ForOp, IfOp, IndexSwitchOp,
81+
ForallOp, InParallelOp, WhileOp, YieldOp>();
82+
declarePromisedInterface<ForOp, ValueBoundsOpInterface>();
7483
}
7584

7685
/// Default callback for IfOp builders. Inserts a yield without arguments.

mlir/lib/Dialect/Shape/IR/Shape.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "mlir/Dialect/Shape/IR/Shape.h"
1212

1313
#include "mlir/Dialect/Arith/IR/Arith.h"
14+
#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
1415
#include "mlir/Dialect/CommonFolders.h"
1516
#include "mlir/Dialect/Tensor/IR/Tensor.h"
1617
#include "mlir/Dialect/Traits.h"
@@ -143,6 +144,8 @@ void ShapeDialect::initialize() {
143144
// still evolving it makes it simple to start with an unregistered ops and
144145
// try different variants before actually defining the op.
145146
allowUnknownOperations();
147+
declarePromisedInterfaces<bufferization::BufferizableOpInterface, AssumingOp,
148+
AssumingYieldOp>();
146149
}
147150

148151
Operation *ShapeDialect::materializeConstant(OpBuilder &builder,

mlir/lib/Dialect/SparseTensor/IR/SparseTensorDialect.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "mlir/Dialect/SparseTensor/IR/SparseTensorType.h"
1717

1818
#include "mlir/Dialect/Arith/IR/Arith.h"
19+
#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
1920
#include "mlir/Dialect/Utils/StaticValueUtils.h"
2021
#include "mlir/IR/Builders.h"
2122
#include "mlir/IR/DialectImplementation.h"
@@ -1956,6 +1957,10 @@ void SparseTensorDialect::initialize() {
19561957
#define GET_OP_LIST
19571958
#include "mlir/Dialect/SparseTensor/IR/SparseTensorOps.cpp.inc"
19581959
>();
1960+
declarePromisedInterfaces<
1961+
bufferization::BufferizableOpInterface, ConcatenateOp, ConvertOp, LoadOp,
1962+
NewOp, NumberOfEntriesOp, AssembleOp, DisassembleOp,
1963+
ToCoordinatesBufferOp, ToCoordinatesOp, ToPositionsOp, ToValuesOp>();
19591964
}
19601965

19611966
#define GET_OP_CLASSES

mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,11 @@
88

99
#include "mlir/Dialect/Affine/IR/AffineOps.h"
1010
#include "mlir/Dialect/Arith/IR/Arith.h"
11+
#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
1112
#include "mlir/Dialect/Complex/IR/Complex.h"
1213
#include "mlir/Dialect/Tensor/IR/Tensor.h"
14+
#include "mlir/Dialect/Transform/IR/TransformInterfaces.h"
15+
#include "mlir/Interfaces/SubsetOpInterface.h"
1316
#include "mlir/Transforms/InliningUtils.h"
1417

1518
using namespace mlir;
@@ -45,4 +48,22 @@ void TensorDialect::initialize() {
4548
#include "mlir/Dialect/Tensor/IR/TensorOps.cpp.inc"
4649
>();
4750
addInterfaces<TensorInlinerInterface>();
51+
declarePromisedInterfaces<
52+
bufferization::BufferizableOpInterface, CastOp, CollapseShapeOp, DimOp,
53+
EmptyOp, ExpandShapeOp, ExtractSliceOp, ExtractOp, FromElementsOp,
54+
GenerateOp, InsertOp, InsertSliceOp, PadOp, ParallelInsertSliceOp, RankOp,
55+
ReshapeOp, SplatOp>();
56+
declarePromisedInterfaces<transform::FindPayloadReplacementOpInterface,
57+
CollapseShapeOp, ExpandShapeOp, ExtractSliceOp,
58+
InsertSliceOp, ReshapeOp>();
59+
declarePromisedInterfaces<ReifyRankedShapedTypeOpInterface, ExpandShapeOp,
60+
CollapseShapeOp, PadOp>();
61+
declarePromisedInterfaces<SubsetOpInterface, ExtractSliceOp, InsertSliceOp,
62+
ParallelInsertSliceOp>();
63+
declarePromisedInterfaces<SubsetInsertionOpInterface, InsertSliceOp,
64+
ParallelInsertSliceOp>();
65+
declarePromisedInterface<ExtractSliceOp, SubsetExtractionOpInterface>();
66+
declarePromisedInterfaces<TilingInterface, PadOp, PackOp, UnPackOp>();
67+
declarePromisedInterfaces<ValueBoundsOpInterface, CastOp, DimOp, EmptyOp,
68+
ExtractSliceOp, PadOp, RankOp>();
4869
}

mlir/lib/Dialect/Tosa/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ add_mlir_dialect_library(MLIRTosaDialect
1212
MLIRTosaDialectBytecodeIncGen
1313
MLIRTosaOpsIncGen
1414
MLIRTosaInterfacesIncGen
15+
MLIRShardingInterfaceIncGen
1516

1617
LINK_LIBS PUBLIC
1718
MLIRIR

mlir/lib/Dialect/Tosa/IR/TosaOps.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
//===----------------------------------------------------------------------===//
1414

1515
#include "mlir/Dialect/Tosa/IR/TosaOps.h"
16+
#include "mlir/Dialect/Mesh/Interfaces/ShardingInterface.h"
1617
#include "mlir/Dialect/Quant/QuantOps.h"
1718
#include "mlir/Dialect/Tensor/IR/Tensor.h"
1819
#include "mlir/Dialect/Tosa/Utils/QuantUtils.h"
@@ -136,6 +137,14 @@ void TosaDialect::initialize() {
136137
#include "mlir/Dialect/Tosa/IR/TosaAttributes.cpp.inc"
137138
>();
138139
addInterfaces<TosaDialectBytecodeInterface, TosaInlinerInterface>();
140+
declarePromisedInterfaces<
141+
mesh::ShardingInterface, ClampOp, SigmoidOp, TanhOp, AddOp,
142+
ArithmeticRightShiftOp, BitwiseAndOp, BitwiseOrOp, BitwiseXorOp, DivOp,
143+
LogicalAndOp, LogicalLeftShiftOp, LogicalRightShiftOp, LogicalOrOp,
144+
LogicalXorOp, MaximumOp, MinimumOp, MulOp, PowOp, SubOp, AbsOp,
145+
BitwiseNotOp, CeilOp, ClzOp, ExpOp, FloorOp, LogOp, LogicalNotOp,
146+
NegateOp, ReciprocalOp, RsqrtOp, SelectOp, EqualOp, GreaterOp,
147+
GreaterEqualOp, MatMulOp>();
139148
}
140149

141150
Operation *TosaDialect::materializeConstant(OpBuilder &builder, Attribute value,

mlir/lib/Dialect/Vector/IR/VectorOps.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "mlir/Dialect/Affine/IR/ValueBoundsOpInterfaceImpl.h"
1717
#include "mlir/Dialect/Arith/IR/Arith.h"
1818
#include "mlir/Dialect/Arith/Utils/Utils.h"
19+
#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
1920
#include "mlir/Dialect/MemRef/IR/MemRef.h"
2021
#include "mlir/Dialect/Tensor/IR/Tensor.h"
2122
#include "mlir/Dialect/Utils/IndexingUtils.h"
@@ -31,6 +32,7 @@
3132
#include "mlir/IR/OpImplementation.h"
3233
#include "mlir/IR/PatternMatch.h"
3334
#include "mlir/IR/TypeUtilities.h"
35+
#include "mlir/Interfaces/SubsetOpInterface.h"
3436
#include "mlir/Interfaces/ValueBoundsOpInterface.h"
3537
#include "mlir/Support/LLVM.h"
3638
#include "mlir/Transforms/InliningUtils.h"
@@ -374,6 +376,14 @@ void VectorDialect::initialize() {
374376
>();
375377

376378
addInterfaces<VectorInlinerInterface>();
379+
380+
declarePromisedInterfaces<bufferization::BufferizableOpInterface,
381+
TransferReadOp, TransferWriteOp, GatherOp, MaskOp,
382+
YieldOp>();
383+
declarePromisedInterfaces<SubsetOpInterface, TransferReadOp,
384+
TransferWriteOp>();
385+
declarePromisedInterface<TransferReadOp, SubsetExtractionOpInterface>();
386+
declarePromisedInterface<TransferWriteOp, SubsetInsertionOpInterface>();
377387
}
378388

379389
/// Materialize a single constant operation from a given attribute value with

0 commit comments

Comments
 (0)