CIRCT 21.0.0git
Loading...
Searching...
No Matches
LLVM.h
Go to the documentation of this file.
1//===- LLVM.h - Import and forward declare core LLVM types ------*- 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// This file forward declares and imports various common LLVM and MLIR datatypes
10// that we want to use unqualified.
11//
12// Note that most of these are forward declared and then imported into the circt
13// namespace with using decls, rather than being #included. This is because we
14// want clients to explicitly #include the files they need.
15//
16//===----------------------------------------------------------------------===//
17
18#ifndef CIRCT_SUPPORT_LLVM_H
19#define CIRCT_SUPPORT_LLVM_H
20
21// MLIR includes a lot of forward declarations of LLVM types, use them.
22#include "mlir/Support/LLVM.h"
23
24// Can not forward declare inline functions with default arguments, so we
25// include the header directly.
26#include "mlir/Support/LogicalResult.h"
27
28// Import classes from the `mlir` namespace into the `circt` namespace. All of
29// the following classes have been already forward declared and imported from
30// `llvm` in to the `mlir` namespace. For classes with default template
31// arguments, MLIR does not import the type directly, it creates a templated
32// using statement. This is due to the limitiation that only one declaration of
33// a type can have default arguments. For those types, it is important to import
34// the MLIR version, and not the LLVM version. To keep things simple, all
35// classes here should be imported from the `mlir` namespace, not the `llvm`
36// namespace.
37namespace circt {
38using mlir::APFloat; // NOLINT(misc-unused-using-decls)
39using mlir::APInt; // NOLINT(misc-unused-using-decls)
40using mlir::APSInt; // NOLINT(misc-unused-using-decls)
41using mlir::ArrayRef; // NOLINT(misc-unused-using-decls)
42using mlir::BitVector; // NOLINT(misc-unused-using-decls)
43using mlir::cast; // NOLINT(misc-unused-using-decls)
44using mlir::cast_or_null; // NOLINT(misc-unused-using-decls)
45using mlir::DenseMap; // NOLINT(misc-unused-using-decls)
46using mlir::DenseMapInfo; // NOLINT(misc-unused-using-decls)
47using mlir::DenseSet; // NOLINT(misc-unused-using-decls)
48using mlir::dyn_cast; // NOLINT(misc-unused-using-decls)
49using mlir::dyn_cast_or_null; // NOLINT(misc-unused-using-decls)
50using mlir::function_ref; // NOLINT(misc-unused-using-decls)
51using mlir::isa; // NOLINT(misc-unused-using-decls)
52using mlir::isa_and_nonnull; // NOLINT(misc-unused-using-decls)
53using mlir::isa_and_present; // NOLINT(misc-unused-using-decls)
54using mlir::iterator_range; // NOLINT(misc-unused-using-decls)
55using mlir::MutableArrayRef; // NOLINT(misc-unused-using-decls)
56using mlir::PointerUnion; // NOLINT(misc-unused-using-decls)
57using mlir::raw_ostream; // NOLINT(misc-unused-using-decls)
58using mlir::SetVector; // NOLINT(misc-unused-using-decls)
59using mlir::SmallPtrSet; // NOLINT(misc-unused-using-decls)
60using mlir::SmallPtrSetImpl; // NOLINT(misc-unused-using-decls)
61using mlir::SmallString; // NOLINT(misc-unused-using-decls)
62using mlir::SmallVector; // NOLINT(misc-unused-using-decls)
63using mlir::SmallVectorImpl; // NOLINT(misc-unused-using-decls)
64using mlir::StringLiteral; // NOLINT(misc-unused-using-decls)
65using mlir::StringRef; // NOLINT(misc-unused-using-decls)
66using mlir::StringSet; // NOLINT(misc-unused-using-decls)
67using mlir::TinyPtrVector; // NOLINT(misc-unused-using-decls)
68using mlir::Twine; // NOLINT(misc-unused-using-decls)
69using mlir::TypeSwitch; // NOLINT(misc-unused-using-decls)
70} // namespace circt
71
72// Forward declarations of LLVM classes to be imported in to the circt
73// namespace.
74namespace llvm {
75template <typename KeyT, typename ValueT, unsigned InlineBuckets,
76 typename KeyInfoT, typename BucketT>
78template <typename T, unsigned N, typename C>
80} // namespace llvm
81
82// Import things we want into our namespace.
83namespace circt {
84using llvm::SmallDenseMap; // NOLINT(misc-unused-using-decls)
85using llvm::SmallSet; // NOLINT(misc-unused-using-decls)
86} // namespace circt
87
88// Forward declarations of classes to be imported in to the circt namespace.
89namespace mlir {
90class ArrayAttr;
91class AsmParser;
92class AsmPrinter;
93class Attribute;
94class Block;
95class TypedAttr;
96class IRMapping;
97class BlockArgument;
98class BoolAttr;
99class Builder;
100class NamedAttrList;
101class ConversionPattern;
102class ConversionPatternRewriter;
103class ConversionTarget;
104class DenseElementsAttr;
105class Diagnostic;
106class Dialect;
107class DialectAsmParser;
108class DialectAsmPrinter;
109class DictionaryAttr;
110class DistinctAttr;
111class ElementsAttr;
112class FileLineColLoc;
113class FlatSymbolRefAttr;
114class FloatAttr;
115class FunctionType;
116class FusedLoc;
117class ImplicitLocOpBuilder;
118class IndexType;
119class InFlightDiagnostic;
120class IntegerAttr;
121class IntegerType;
122class Location;
123class LocationAttr;
124class MemRefType;
125class MLIRContext;
126class ModuleOp;
127class MutableOperandRange;
128class NamedAttribute;
129class NamedAttrList;
130class NoneType;
131class OpAsmDialectInterface;
132class OpAsmParser;
133class OpAsmPrinter;
134class OpaqueProperties;
135class OpBuilder;
136class OperandRange;
137class Operation;
138class OpFoldResult;
139class OpOperand;
140class OpResult;
141template <typename OpTy>
143class Pass;
144class PatternRewriter;
145class Region;
146class RewritePatternSet;
147class ShapedType;
148class SplatElementsAttr;
149class StringAttr;
150class SymbolRefAttr;
151class SymbolTable;
152class SymbolTableCollection;
153class TupleType;
154class Type;
155class TypeAttr;
156class TypeConverter;
157class TypeID;
158class TypeRange;
159class TypeStorage;
160class UnitAttr;
161class UnknownLoc;
162class Value;
163class ValueRange;
164class VectorType;
165class WalkResult;
166enum class RegionKind;
167struct CallInterfaceCallable;
168struct OperationState;
169class OperationName;
170
171namespace affine {
172struct MemRefAccess;
173} // namespace affine
174
175template <typename SourceOp>
177template <typename T>
178class OperationPass;
179template <typename SourceOp>
181
182using DefaultTypeStorage = TypeStorage;
183using OpAsmSetValueNameFn = function_ref<void(Value, StringRef)>;
184
185namespace OpTrait {}
186
187} // namespace mlir
188
189// Import things we want into our namespace.
190namespace circt {
191// clang-tidy removes following using directives incorrectly. So force
192// clang-tidy to ignore them.
193// TODO: It is better to use `NOLINTBEGIN/END` comments to disable clang-tidy
194// than adding `NOLINT` to every line. `NOLINTBEGIN/END` will supported from
195// clang-tidy-14.
196using mlir::ArrayAttr; // NOLINT(misc-unused-using-decls)
197using mlir::AsmParser; // NOLINT(misc-unused-using-decls)
198using mlir::AsmPrinter; // NOLINT(misc-unused-using-decls)
199using mlir::Attribute; // NOLINT(misc-unused-using-decls)
200using mlir::Block; // NOLINT(misc-unused-using-decls)
201using mlir::BlockArgument; // NOLINT(misc-unused-using-decls)
202using mlir::BoolAttr; // NOLINT(misc-unused-using-decls)
203using mlir::Builder; // NOLINT(misc-unused-using-decls)
204using mlir::CallInterfaceCallable; // NOLINT(misc-unused-using-decls)
205using mlir::ConversionPattern; // NOLINT(misc-unused-using-decls)
206using mlir::ConversionPatternRewriter; // NOLINT(misc-unused-using-decls)
207using mlir::ConversionTarget; // NOLINT(misc-unused-using-decls)
208using mlir::DefaultTypeStorage; // NOLINT(misc-unused-using-decls)
209using mlir::DenseElementsAttr; // NOLINT(misc-unused-using-decls)
210using mlir::Diagnostic; // NOLINT(misc-unused-using-decls)
211using mlir::Dialect; // NOLINT(misc-unused-using-decls)
212using mlir::DialectAsmParser; // NOLINT(misc-unused-using-decls)
213using mlir::DialectAsmPrinter; // NOLINT(misc-unused-using-decls)
214using mlir::DictionaryAttr; // NOLINT(misc-unused-using-decls)
215using mlir::DistinctAttr; // NOLINT(misc-unused-using-decls)
216using mlir::ElementsAttr; // NOLINT(misc-unused-using-decls)
217using mlir::failed; // NOLINT(misc-unused-using-decls)
218using mlir::failure; // NOLINT(misc-unused-using-decls)
219using mlir::FailureOr; // NOLINT(misc-unused-using-decls)
220using mlir::FileLineColLoc; // NOLINT(misc-unused-using-decls)
221using mlir::FlatSymbolRefAttr; // NOLINT(misc-unused-using-decls)
222using mlir::FloatAttr; // NOLINT(misc-unused-using-decls)
223using mlir::FunctionType; // NOLINT(misc-unused-using-decls)
224using mlir::FusedLoc; // NOLINT(misc-unused-using-decls)
225using mlir::ImplicitLocOpBuilder; // NOLINT(misc-unused-using-decls)
226using mlir::IndexType; // NOLINT(misc-unused-using-decls)
227using mlir::InFlightDiagnostic; // NOLINT(misc-unused-using-decls)
228using mlir::IntegerAttr; // NOLINT(misc-unused-using-decls)
229using mlir::IntegerType; // NOLINT(misc-unused-using-decls)
230using mlir::IRMapping; // NOLINT(misc-unused-using-decls)
231using mlir::Location; // NOLINT(misc-unused-using-decls)
232using mlir::LocationAttr; // NOLINT(misc-unused-using-decls)
233using mlir::LogicalResult; // NOLINT(misc-unused-using-decls)
234using mlir::MemRefType; // NOLINT(misc-unused-using-decls)
235using mlir::MLIRContext; // NOLINT(misc-unused-using-decls)
236using mlir::ModuleOp; // NOLINT(misc-unused-using-decls)
237using mlir::MutableOperandRange; // NOLINT(misc-unused-using-decls)
238using mlir::NamedAttribute; // NOLINT(misc-unused-using-decls)
239using mlir::NamedAttrList; // NOLINT(misc-unused-using-decls)
240using mlir::NoneType; // NOLINT(misc-unused-using-decls)
241using mlir::OpaqueProperties; // NOLINT(misc-unused-using-decls)
242using mlir::OpAsmDialectInterface; // NOLINT(misc-unused-using-decls)
243using mlir::OpAsmParser; // NOLINT(misc-unused-using-decls)
244using mlir::OpAsmPrinter; // NOLINT(misc-unused-using-decls)
245using mlir::OpAsmSetValueNameFn; // NOLINT(misc-unused-using-decls)
246using mlir::OpBuilder; // NOLINT(misc-unused-using-decls)
247using mlir::OpConversionPattern; // NOLINT(misc-unused-using-decls)
248using mlir::OperandRange; // NOLINT(misc-unused-using-decls)
249using mlir::Operation; // NOLINT(misc-unused-using-decls)
250using mlir::OperationName; // NOLINT(misc-unused-using-decls)
251using mlir::OperationPass; // NOLINT(misc-unused-using-decls)
252using mlir::OperationState; // NOLINT(misc-unused-using-decls)
253using mlir::OpFoldResult; // NOLINT(misc-unused-using-decls)
254using mlir::OpOperand; // NOLINT(misc-unused-using-decls)
255using mlir::OpResult; // NOLINT(misc-unused-using-decls)
256using mlir::OpRewritePattern; // NOLINT(misc-unused-using-decls)
257using mlir::OwningOpRef; // NOLINT(misc-unused-using-decls)
258using mlir::ParseResult; // NOLINT(misc-unused-using-decls)
259using mlir::Pass; // NOLINT(misc-unused-using-decls)
260using mlir::PatternRewriter; // NOLINT(misc-unused-using-decls)
261using mlir::Region; // NOLINT(misc-unused-using-decls)
262using mlir::RegionKind; // NOLINT(misc-unused-using-decls)
263using mlir::RewritePatternSet; // NOLINT(misc-unused-using-decls)
264using mlir::ShapedType; // NOLINT(misc-unused-using-decls)
265using mlir::SplatElementsAttr; // NOLINT(misc-unused-using-decls)
266using mlir::StringAttr; // NOLINT(misc-unused-using-decls)
267using mlir::succeeded; // NOLINT(misc-unused-using-decls)
268using mlir::success; // NOLINT(misc-unused-using-decls)
269using mlir::SymbolRefAttr; // NOLINT(misc-unused-using-decls)
270using mlir::SymbolTable; // NOLINT(misc-unused-using-decls)
271using mlir::SymbolTableCollection; // NOLINT(misc-unused-using-decls)
272using mlir::TupleType; // NOLINT(misc-unused-using-decls)
273using mlir::Type; // NOLINT(misc-unused-using-decls)
274using mlir::TypeAttr; // NOLINT(misc-unused-using-decls)
275using mlir::TypeConverter; // NOLINT(misc-unused-using-decls)
276using mlir::TypedAttr; // NOLINT(misc-unused-using-decls)
277using mlir::TypeID; // NOLINT(misc-unused-using-decls)
278using mlir::TypeRange; // NOLINT(misc-unused-using-decls)
279using mlir::TypeStorage; // NOLINT(misc-unused-using-decls)
280using mlir::UnitAttr; // NOLINT(misc-unused-using-decls)
281using mlir::UnknownLoc; // NOLINT(misc-unused-using-decls)
282using mlir::Value; // NOLINT(misc-unused-using-decls)
283using mlir::ValueRange; // NOLINT(misc-unused-using-decls)
284using mlir::VectorType; // NOLINT(misc-unused-using-decls)
285using mlir::WalkResult; // NOLINT(misc-unused-using-decls)
286using mlir::affine::MemRefAccess; // NOLINT(misc-unused-using-decls)
287namespace OpTrait = mlir::OpTrait;
288} // namespace circt
289
290#endif // CIRCT_SUPPORT_LLVM_H
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
TypeStorage DefaultTypeStorage
Definition LLVM.h:182
function_ref< void(Value, StringRef)> OpAsmSetValueNameFn
Definition LLVM.h:183