xref: /llvm-project/mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp (revision 35d55f2894a2a2cdca5db494f519aa5ec7273678)
1444822d7SSean Silva //===----------------------------------------------------------------------===//
2444822d7SSean Silva //
3444822d7SSean Silva // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4444822d7SSean Silva // See https://llvm.org/LICENSE.txt for license information.
5444822d7SSean Silva // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6444822d7SSean Silva //
7444822d7SSean Silva //===----------------------------------------------------------------------===//
8444822d7SSean Silva 
981ca5aa4SMatthias Springer #include "mlir/Dialect/Affine/IR/AffineOps.h"
10abc362a1SJakub Kuderski #include "mlir/Dialect/Arith/IR/Arith.h"
11513cdb82SJustin Fargnoli #include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
12eda6f907SRiver Riddle #include "mlir/Dialect/Complex/IR/Complex.h"
13444822d7SSean Silva #include "mlir/Dialect/Tensor/IR/Tensor.h"
145a9bdd85SOleksandr "Alex" Zinenko #include "mlir/Dialect/Transform/Interfaces/TransformInterfaces.h"
15513cdb82SJustin Fargnoli #include "mlir/Interfaces/SubsetOpInterface.h"
16444822d7SSean Silva #include "mlir/Transforms/InliningUtils.h"
17444822d7SSean Silva 
18444822d7SSean Silva using namespace mlir;
19444822d7SSean Silva using namespace mlir::tensor;
20444822d7SSean Silva 
21485cc55eSStella Laurenzo #include "mlir/Dialect/Tensor/IR/TensorOpsDialect.cpp.inc"
22485cc55eSStella Laurenzo 
23444822d7SSean Silva //===----------------------------------------------------------------------===//
24444822d7SSean Silva // TensorDialect Dialect Interfaces
25444822d7SSean Silva //===----------------------------------------------------------------------===//
26444822d7SSean Silva 
27444822d7SSean Silva namespace {
28444822d7SSean Silva struct TensorInlinerInterface : public DialectInlinerInterface {
29444822d7SSean Silva   using DialectInlinerInterface::DialectInlinerInterface;
isLegalToInline__anon1e42db460111::TensorInlinerInterface30444822d7SSean Silva   bool isLegalToInline(Region *dest, Region *src, bool wouldBeCloned,
314d67b278SJeff Niu                        IRMapping &valueMapping) const final {
32444822d7SSean Silva     return true;
33444822d7SSean Silva   }
isLegalToInline__anon1e42db460111::TensorInlinerInterface34444822d7SSean Silva   bool isLegalToInline(Operation *, Region *, bool wouldBeCloned,
354d67b278SJeff Niu                        IRMapping &) const final {
36444822d7SSean Silva     return true;
37444822d7SSean Silva   }
38444822d7SSean Silva };
39be0a7e9fSMehdi Amini } // namespace
40444822d7SSean Silva 
4123c9e8bcSAart Bik //===----------------------------------------------------------------------===//
4223c9e8bcSAart Bik // TensorDialect Methods
4323c9e8bcSAart Bik //===----------------------------------------------------------------------===//
4423c9e8bcSAart Bik 
initialize()45444822d7SSean Silva void TensorDialect::initialize() {
46444822d7SSean Silva   addOperations<
47444822d7SSean Silva #define GET_OP_LIST
48444822d7SSean Silva #include "mlir/Dialect/Tensor/IR/TensorOps.cpp.inc"
49444822d7SSean Silva       >();
50444822d7SSean Silva   addInterfaces<TensorInlinerInterface>();
51513cdb82SJustin Fargnoli   declarePromisedInterfaces<
52513cdb82SJustin Fargnoli       bufferization::BufferizableOpInterface, CastOp, CollapseShapeOp, DimOp,
53513cdb82SJustin Fargnoli       EmptyOp, ExpandShapeOp, ExtractSliceOp, ExtractOp, FromElementsOp,
54513cdb82SJustin Fargnoli       GenerateOp, InsertOp, InsertSliceOp, PadOp, ParallelInsertSliceOp, RankOp,
55513cdb82SJustin Fargnoli       ReshapeOp, SplatOp>();
56513cdb82SJustin Fargnoli   declarePromisedInterfaces<transform::FindPayloadReplacementOpInterface,
57513cdb82SJustin Fargnoli                             CollapseShapeOp, ExpandShapeOp, ExtractSliceOp,
58513cdb82SJustin Fargnoli                             InsertSliceOp, ReshapeOp>();
59513cdb82SJustin Fargnoli   declarePromisedInterfaces<ReifyRankedShapedTypeOpInterface, ExpandShapeOp,
60513cdb82SJustin Fargnoli                             CollapseShapeOp, PadOp>();
61513cdb82SJustin Fargnoli   declarePromisedInterfaces<SubsetOpInterface, ExtractSliceOp, InsertSliceOp,
62513cdb82SJustin Fargnoli                             ParallelInsertSliceOp>();
63513cdb82SJustin Fargnoli   declarePromisedInterfaces<SubsetInsertionOpInterface, InsertSliceOp,
64513cdb82SJustin Fargnoli                             ParallelInsertSliceOp>();
65*35d55f28SJustin Fargnoli   declarePromisedInterface<SubsetExtractionOpInterface, ExtractSliceOp>();
66513cdb82SJustin Fargnoli   declarePromisedInterfaces<TilingInterface, PadOp, PackOp, UnPackOp>();
67513cdb82SJustin Fargnoli   declarePromisedInterfaces<ValueBoundsOpInterface, CastOp, DimOp, EmptyOp,
68513cdb82SJustin Fargnoli                             ExtractSliceOp, PadOp, RankOp>();
69444822d7SSean Silva }
70