MLIR 22.0.0git
Dialect.h
Go to the documentation of this file.
1//===- Dialect.h - Dialect class --------------------------------*- C++ -*-===//
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// Dialect wrapper to simplify using TableGen Record defining a MLIR dialect.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef MLIR_TABLEGEN_DIALECT_H_
14#define MLIR_TABLEGEN_DIALECT_H_
15
16#include "mlir/Support/LLVM.h"
17#include "llvm/TableGen/Record.h"
18
19#include <string>
20#include <vector>
21
22namespace llvm {
23class Record;
24} // namespace llvm
25
26namespace mlir {
27namespace tblgen {
28// Wrapper class that contains a MLIR dialect's information defined in TableGen
29// and provides helper methods for accessing them.
30class Dialect {
31public:
32 explicit Dialect(const llvm::Record *def);
33
34 // Returns the name of this dialect.
35 StringRef getName() const;
36
37 // Returns the C++ namespaces that ops of this dialect should be placed into.
38 StringRef getCppNamespace() const;
39
40 // Returns this dialect's C++ class name.
41 std::string getCppClassName() const;
42
43 // Returns the summary description of the dialect. Returns empty string if
44 // none.
45 StringRef getSummary() const;
46
47 // Returns the description of the dialect. Returns empty string if none.
48 StringRef getDescription() const;
49
50 // Returns the list of dialect (class names) that this dialect depends on.
51 // These are dialects that will be loaded on construction of this dialect.
53
54 // Returns the dialects extra class declaration code.
55 std::optional<StringRef> getExtraClassDeclaration() const;
56
57 /// Returns true if this dialect has a canonicalizer.
58 bool hasCanonicalizer() const;
59
60 /// Returns true if this dialect has a constant materializer.
61 bool hasConstantMaterializer() const;
62
63 /// Returns true if the destructor definition is provided explicitly or
64 /// false if a default should be generated.
65 bool hasNonDefaultDestructor() const;
66
67 /// Returns true if this dialect has an operation attribute verifier.
68 bool hasOperationAttrVerify() const;
69
70 /// Returns true if this dialect has a region argument attribute verifier.
71 bool hasRegionArgAttrVerify() const;
72
73 /// Returns true if this dialect has a region result attribute verifier.
74 bool hasRegionResultAttrVerify() const;
75
76 /// Returns true if this dialect has fallback interfaces for its operations.
78
79 /// Returns true if this dialect should generate the default dispatch for
80 /// attribute printing/parsing.
82
83 /// Returns true if this dialect should generate the default dispatch for
84 /// type printing/parsing.
85 bool useDefaultTypePrinterParser() const;
86
87 /// Returns true if this dialect can be extended at runtime with new
88 /// operations or types.
89 bool isExtensible() const;
90
91 /// Default to use properties for storing Attributes for operations in this
92 /// dialect.
93 bool usePropertiesForAttributes() const;
94
95 const llvm::DagInit *getDiscardableAttributes() const;
96
97 const llvm::Record *getDef() const { return def; }
98
99 // Returns whether two dialects are equal by checking the equality of the
100 // underlying record.
101 bool operator==(const Dialect &other) const;
102
103 bool operator!=(const Dialect &other) const { return !(*this == other); }
104
105 // Compares two dialects by comparing the names of the dialects.
106 bool operator<(const Dialect &other) const;
107
108 // Returns whether the dialect is defined.
109 explicit operator bool() const { return def != nullptr; }
110 bool isDefined() const { return def != nullptr; }
111
112private:
113 const llvm::Record *def;
114 std::vector<StringRef> dependentDialects;
115};
116} // namespace tblgen
117} // namespace mlir
118
119#endif // MLIR_TABLEGEN_DIALECT_H_
StringRef getDescription() const
Definition Dialect.cpp:52
const llvm::Record * getDef() const
Definition Dialect.h:97
Dialect(const llvm::Record *def)
Definition Dialect.cpp:19
StringRef getSummary() const
Definition Dialect.cpp:48
std::optional< StringRef > getExtraClassDeclaration() const
Definition Dialect.cpp:60
ArrayRef< StringRef > getDependentDialects() const
Definition Dialect.cpp:56
const llvm::DagInit * getDiscardableAttributes() const
Definition Dialect.cpp:109
bool hasRegionArgAttrVerify() const
Returns true if this dialect has a region argument attribute verifier.
Definition Dialect.cpp:81
bool hasNonDefaultDestructor() const
Returns true if the destructor definition is provided explicitly or false if a default should be gene...
Definition Dialect.cpp:73
StringRef getCppNamespace() const
Definition Dialect.cpp:28
bool useDefaultAttributePrinterParser() const
Returns true if this dialect should generate the default dispatch for attribute printing/parsing.
Definition Dialect.cpp:93
bool isExtensible() const
Returns true if this dialect can be extended at runtime with new operations or types.
Definition Dialect.cpp:101
StringRef getName() const
bool hasOperationInterfaceFallback() const
Returns true if this dialect has fallback interfaces for its operations.
Definition Dialect.cpp:89
bool hasCanonicalizer() const
Returns true if this dialect has a canonicalizer.
Definition Dialect.cpp:65
bool operator<(const Dialect &other) const
Definition Dialect.cpp:117
bool hasConstantMaterializer() const
Returns true if this dialect has a constant materializer.
Definition Dialect.cpp:69
std::string getCppClassName() const
Definition Dialect.cpp:32
bool hasRegionResultAttrVerify() const
Returns true if this dialect has a region result attribute verifier.
Definition Dialect.cpp:85
bool useDefaultTypePrinterParser() const
Returns true if this dialect should generate the default dispatch for type printing/parsing.
Definition Dialect.cpp:97
bool hasOperationAttrVerify() const
Returns true if this dialect has an operation attribute verifier.
Definition Dialect.cpp:77
bool isDefined() const
Definition Dialect.h:110
bool operator==(const Dialect &other) const
Definition Dialect.cpp:113
bool usePropertiesForAttributes() const
Default to use properties for storing Attributes for operations in this dialect.
Definition Dialect.cpp:105
bool operator!=(const Dialect &other) const
Definition Dialect.h:103
The OpAsmOpInterface, see OpAsmInterface.td for more details.
Definition CallGraph.h:229
Include the generated interface declarations.