xref: /llvm-project/mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp (revision 35d55f2894a2a2cdca5db494f519aa5ec7273678)
1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "mlir/Dialect/Affine/IR/AffineOps.h"
10 #include "mlir/Dialect/Arith/IR/Arith.h"
11 #include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
12 #include "mlir/Dialect/Complex/IR/Complex.h"
13 #include "mlir/Dialect/Tensor/IR/Tensor.h"
14 #include "mlir/Dialect/Transform/Interfaces/TransformInterfaces.h"
15 #include "mlir/Interfaces/SubsetOpInterface.h"
16 #include "mlir/Transforms/InliningUtils.h"
17 
18 using namespace mlir;
19 using namespace mlir::tensor;
20 
21 #include "mlir/Dialect/Tensor/IR/TensorOpsDialect.cpp.inc"
22 
23 //===----------------------------------------------------------------------===//
24 // TensorDialect Dialect Interfaces
25 //===----------------------------------------------------------------------===//
26 
27 namespace {
28 struct TensorInlinerInterface : public DialectInlinerInterface {
29   using DialectInlinerInterface::DialectInlinerInterface;
isLegalToInline__anon1e42db460111::TensorInlinerInterface30   bool isLegalToInline(Region *dest, Region *src, bool wouldBeCloned,
31                        IRMapping &valueMapping) const final {
32     return true;
33   }
isLegalToInline__anon1e42db460111::TensorInlinerInterface34   bool isLegalToInline(Operation *, Region *, bool wouldBeCloned,
35                        IRMapping &) const final {
36     return true;
37   }
38 };
39 } // namespace
40 
41 //===----------------------------------------------------------------------===//
42 // TensorDialect Methods
43 //===----------------------------------------------------------------------===//
44 
initialize()45 void TensorDialect::initialize() {
46   addOperations<
47 #define GET_OP_LIST
48 #include "mlir/Dialect/Tensor/IR/TensorOps.cpp.inc"
49       >();
50   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<SubsetExtractionOpInterface, ExtractSliceOp>();
66   declarePromisedInterfaces<TilingInterface, PadOp, PackOp, UnPackOp>();
67   declarePromisedInterfaces<ValueBoundsOpInterface, CastOp, DimOp, EmptyOp,
68                             ExtractSliceOp, PadOp, RankOp>();
69 }
70