xref: /llvm-project/mlir/examples/toy/Ch7/include/toy/Dialect.h (revision 3dbac2c007c114a720300d2a4d79abe9ca1351e7)
1 //===- Dialect.h - Dialect definition for the Toy IR ----------------------===//
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 // This file implements the IR Dialect for the Toy language.
10 // See docs/Tutorials/Toy/Ch-2.md for more information.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef MLIR_TUTORIAL_TOY_DIALECT_H_
15 #define MLIR_TUTORIAL_TOY_DIALECT_H_
16 
17 #include "mlir/Bytecode/BytecodeOpInterface.h"
18 #include "mlir/IR/BuiltinTypes.h"
19 #include "mlir/IR/Dialect.h"
20 #include "mlir/IR/SymbolTable.h"
21 #include "mlir/Interfaces/CallInterfaces.h"
22 #include "mlir/Interfaces/CastInterfaces.h"
23 #include "mlir/Interfaces/FunctionInterfaces.h"
24 #include "mlir/Interfaces/SideEffectInterfaces.h"
25 #include "toy/ShapeInferenceInterface.h"
26 
27 namespace mlir {
28 namespace toy {
29 namespace detail {
30 struct StructTypeStorage;
31 } // namespace detail
32 } // namespace toy
33 } // namespace mlir
34 
35 /// Include the auto-generated header file containing the declaration of the toy
36 /// dialect.
37 #include "toy/Dialect.h.inc"
38 
39 //===----------------------------------------------------------------------===//
40 // Toy Operations
41 //===----------------------------------------------------------------------===//
42 
43 /// Include the auto-generated header file containing the declarations of the
44 /// toy operations.
45 #define GET_OP_CLASSES
46 #include "toy/Ops.h.inc"
47 
48 namespace mlir {
49 namespace toy {
50 
51 //===----------------------------------------------------------------------===//
52 // Toy Types
53 //===----------------------------------------------------------------------===//
54 
55 /// This class defines the Toy struct type. It represents a collection of
56 /// element types. All derived types in MLIR must inherit from the CRTP class
57 /// 'Type::TypeBase'. It takes as template parameters the concrete type
58 /// (StructType), the base class to use (Type), and the storage class
59 /// (StructTypeStorage).
60 class StructType : public mlir::Type::TypeBase<StructType, mlir::Type,
61                                                detail::StructTypeStorage> {
62 public:
63   /// Inherit some necessary constructors from 'TypeBase'.
64   using Base::Base;
65 
66   /// Create an instance of a `StructType` with the given element types. There
67   /// *must* be atleast one element type.
68   static StructType get(llvm::ArrayRef<mlir::Type> elementTypes);
69 
70   /// Returns the element types of this struct type.
71   llvm::ArrayRef<mlir::Type> getElementTypes();
72 
73   /// Returns the number of element type held by this struct.
getNumElementTypes()74   size_t getNumElementTypes() { return getElementTypes().size(); }
75 
76   /// The name of this struct type.
77   static constexpr StringLiteral name = "toy.struct";
78 };
79 } // namespace toy
80 } // namespace mlir
81 
82 #endif // MLIR_TUTORIAL_TOY_DIALECT_H_
83