CIRCT 20.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::iterator_range; // NOLINT(misc-unused-using-decls)
54using mlir::MutableArrayRef; // NOLINT(misc-unused-using-decls)
55using mlir::PointerUnion; // NOLINT(misc-unused-using-decls)
56using mlir::raw_ostream; // NOLINT(misc-unused-using-decls)
57using mlir::SetVector; // NOLINT(misc-unused-using-decls)
58using mlir::SmallPtrSet; // NOLINT(misc-unused-using-decls)
59using mlir::SmallPtrSetImpl; // NOLINT(misc-unused-using-decls)
60using mlir::SmallString; // NOLINT(misc-unused-using-decls)
61using mlir::SmallVector; // NOLINT(misc-unused-using-decls)
62using mlir::SmallVectorImpl; // NOLINT(misc-unused-using-decls)
63using mlir::StringLiteral; // NOLINT(misc-unused-using-decls)
64using mlir::StringRef; // NOLINT(misc-unused-using-decls)
65using mlir::StringSet; // NOLINT(misc-unused-using-decls)
66using mlir::TinyPtrVector; // NOLINT(misc-unused-using-decls)
67using mlir::Twine; // NOLINT(misc-unused-using-decls)
68using mlir::TypeSwitch; // NOLINT(misc-unused-using-decls)
69} // namespace circt
70
71// Forward declarations of LLVM classes to be imported in to the circt
72// namespace.
73namespace llvm {
74template <typename KeyT, typename ValueT, unsigned InlineBuckets,
75 typename KeyInfoT, typename BucketT>
77template <typename T, unsigned N, typename C>
79} // namespace llvm
80
81// Import things we want into our namespace.
82namespace circt {
83using llvm::SmallDenseMap; // NOLINT(misc-unused-using-decls)
84using llvm::SmallSet; // NOLINT(misc-unused-using-decls)
85} // namespace circt
86
87// Forward declarations of classes to be imported in to the circt namespace.
88namespace mlir {
89class ArrayAttr;
90class AsmParser;
91class AsmPrinter;
92class Attribute;
93class Block;
94class TypedAttr;
95class IRMapping;
96class BlockArgument;
97class BoolAttr;
98class Builder;
99class NamedAttrList;
100class ConversionPattern;
101class ConversionPatternRewriter;
102class ConversionTarget;
103class DenseElementsAttr;
104class Diagnostic;
105class Dialect;
106class DialectAsmParser;
107class DialectAsmPrinter;
108class DictionaryAttr;
109class DistinctAttr;
110class ElementsAttr;
111class FileLineColLoc;
112class FlatSymbolRefAttr;
113class FloatAttr;
114class FunctionType;
115class FusedLoc;
116class ImplicitLocOpBuilder;
117class IndexType;
118class InFlightDiagnostic;
119class IntegerAttr;
120class IntegerType;
121class Location;
122class LocationAttr;
123class MemRefType;
124class MLIRContext;
125class ModuleOp;
126class MutableOperandRange;
127class NamedAttribute;
128class NamedAttrList;
129class NoneType;
130class OpAsmDialectInterface;
131class OpAsmParser;
132class OpAsmPrinter;
133class OpaqueProperties;
134class OpBuilder;
135class OperandRange;
136class Operation;
137class OpFoldResult;
138class OpOperand;
139class OpResult;
140template <typename OpTy>
142class Pass;
143class PatternRewriter;
144class Region;
145class RewritePatternSet;
146class ShapedType;
147class SplatElementsAttr;
148class StringAttr;
149class SymbolRefAttr;
150class SymbolTable;
151class SymbolTableCollection;
152class TupleType;
153class Type;
154class TypeAttr;
155class TypeConverter;
156class TypeID;
157class TypeRange;
158class TypeStorage;
159class UnitAttr;
160class UnknownLoc;
161class Value;
162class ValueRange;
163class VectorType;
164class WalkResult;
165enum class RegionKind;
166struct CallInterfaceCallable;
167struct OperationState;
168class OperationName;
169
170namespace affine {
171struct MemRefAccess;
172} // namespace affine
173
174template <typename SourceOp>
176template <typename T>
177class OperationPass;
178template <typename SourceOp>
180
181using DefaultTypeStorage = TypeStorage;
182using OpAsmSetValueNameFn = function_ref<void(Value, StringRef)>;
183
184namespace OpTrait {}
185
186} // namespace mlir
187
188// Import things we want into our namespace.
189namespace circt {
190// clang-tidy removes following using directives incorrectly. So force
191// clang-tidy to ignore them.
192// TODO: It is better to use `NOLINTBEGIN/END` comments to disable clang-tidy
193// than adding `NOLINT` to every line. `NOLINTBEGIN/END` will supported from
194// clang-tidy-14.
195using mlir::ArrayAttr; // NOLINT(misc-unused-using-decls)
196using mlir::AsmParser; // NOLINT(misc-unused-using-decls)
197using mlir::AsmPrinter; // NOLINT(misc-unused-using-decls)
198using mlir::Attribute; // NOLINT(misc-unused-using-decls)
199using mlir::Block; // NOLINT(misc-unused-using-decls)
200using mlir::BlockArgument; // NOLINT(misc-unused-using-decls)
201using mlir::BoolAttr; // NOLINT(misc-unused-using-decls)
202using mlir::Builder; // NOLINT(misc-unused-using-decls)
203using mlir::CallInterfaceCallable; // NOLINT(misc-unused-using-decls)
204using mlir::ConversionPattern; // NOLINT(misc-unused-using-decls)
205using mlir::ConversionPatternRewriter; // NOLINT(misc-unused-using-decls)
206using mlir::ConversionTarget; // NOLINT(misc-unused-using-decls)
207using mlir::DefaultTypeStorage; // NOLINT(misc-unused-using-decls)
208using mlir::DenseElementsAttr; // NOLINT(misc-unused-using-decls)
209using mlir::Diagnostic; // NOLINT(misc-unused-using-decls)
210using mlir::Dialect; // NOLINT(misc-unused-using-decls)
211using mlir::DialectAsmParser; // NOLINT(misc-unused-using-decls)
212using mlir::DialectAsmPrinter; // NOLINT(misc-unused-using-decls)
213using mlir::DictionaryAttr; // NOLINT(misc-unused-using-decls)
214using mlir::DistinctAttr; // NOLINT(misc-unused-using-decls)
215using mlir::ElementsAttr; // NOLINT(misc-unused-using-decls)
216using mlir::failed; // NOLINT(misc-unused-using-decls)
217using mlir::failure; // NOLINT(misc-unused-using-decls)
218using mlir::FailureOr; // NOLINT(misc-unused-using-decls)
219using mlir::FileLineColLoc; // NOLINT(misc-unused-using-decls)
220using mlir::FlatSymbolRefAttr; // NOLINT(misc-unused-using-decls)
221using mlir::FloatAttr; // NOLINT(misc-unused-using-decls)
222using mlir::FunctionType; // NOLINT(misc-unused-using-decls)
223using mlir::FusedLoc; // NOLINT(misc-unused-using-decls)
224using mlir::ImplicitLocOpBuilder; // NOLINT(misc-unused-using-decls)
225using mlir::IndexType; // NOLINT(misc-unused-using-decls)
226using mlir::InFlightDiagnostic; // NOLINT(misc-unused-using-decls)
227using mlir::IntegerAttr; // NOLINT(misc-unused-using-decls)
228using mlir::IntegerType; // NOLINT(misc-unused-using-decls)
229using mlir::IRMapping; // NOLINT(misc-unused-using-decls)
230using mlir::Location; // NOLINT(misc-unused-using-decls)
231using mlir::LocationAttr; // NOLINT(misc-unused-using-decls)
232using mlir::LogicalResult; // NOLINT(misc-unused-using-decls)
233using mlir::MemRefType; // NOLINT(misc-unused-using-decls)
234using mlir::MLIRContext; // NOLINT(misc-unused-using-decls)
235using mlir::ModuleOp; // NOLINT(misc-unused-using-decls)
236using mlir::MutableOperandRange; // NOLINT(misc-unused-using-decls)
237using mlir::NamedAttribute; // NOLINT(misc-unused-using-decls)
238using mlir::NamedAttrList; // NOLINT(misc-unused-using-decls)
239using mlir::NoneType; // NOLINT(misc-unused-using-decls)
240using mlir::OpaqueProperties; // NOLINT(misc-unused-using-decls)
241using mlir::OpAsmDialectInterface; // NOLINT(misc-unused-using-decls)
242using mlir::OpAsmParser; // NOLINT(misc-unused-using-decls)
243using mlir::OpAsmPrinter; // NOLINT(misc-unused-using-decls)
244using mlir::OpAsmSetValueNameFn; // NOLINT(misc-unused-using-decls)
245using mlir::OpBuilder; // NOLINT(misc-unused-using-decls)
246using mlir::OpConversionPattern; // NOLINT(misc-unused-using-decls)
247using mlir::OperandRange; // NOLINT(misc-unused-using-decls)
248using mlir::Operation; // NOLINT(misc-unused-using-decls)
249using mlir::OperationName; // NOLINT(misc-unused-using-decls)
250using mlir::OperationPass; // NOLINT(misc-unused-using-decls)
251using mlir::OperationState; // NOLINT(misc-unused-using-decls)
252using mlir::OpFoldResult; // NOLINT(misc-unused-using-decls)
253using mlir::OpOperand; // NOLINT(misc-unused-using-decls)
254using mlir::OpResult; // NOLINT(misc-unused-using-decls)
255using mlir::OpRewritePattern; // NOLINT(misc-unused-using-decls)
256using mlir::OwningOpRef; // NOLINT(misc-unused-using-decls)
257using mlir::ParseResult; // NOLINT(misc-unused-using-decls)
258using mlir::Pass; // NOLINT(misc-unused-using-decls)
259using mlir::PatternRewriter; // NOLINT(misc-unused-using-decls)
260using mlir::Region; // NOLINT(misc-unused-using-decls)
261using mlir::RegionKind; // NOLINT(misc-unused-using-decls)
262using mlir::RewritePatternSet; // NOLINT(misc-unused-using-decls)
263using mlir::ShapedType; // NOLINT(misc-unused-using-decls)
264using mlir::SplatElementsAttr; // NOLINT(misc-unused-using-decls)
265using mlir::StringAttr; // NOLINT(misc-unused-using-decls)
266using mlir::succeeded; // NOLINT(misc-unused-using-decls)
267using mlir::success; // NOLINT(misc-unused-using-decls)
268using mlir::SymbolRefAttr; // NOLINT(misc-unused-using-decls)
269using mlir::SymbolTable; // NOLINT(misc-unused-using-decls)
270using mlir::SymbolTableCollection; // NOLINT(misc-unused-using-decls)
271using mlir::TupleType; // NOLINT(misc-unused-using-decls)
272using mlir::Type; // NOLINT(misc-unused-using-decls)
273using mlir::TypeAttr; // NOLINT(misc-unused-using-decls)
274using mlir::TypeConverter; // NOLINT(misc-unused-using-decls)
275using mlir::TypedAttr; // NOLINT(misc-unused-using-decls)
276using mlir::TypeID; // NOLINT(misc-unused-using-decls)
277using mlir::TypeRange; // NOLINT(misc-unused-using-decls)
278using mlir::TypeStorage; // NOLINT(misc-unused-using-decls)
279using mlir::UnitAttr; // NOLINT(misc-unused-using-decls)
280using mlir::UnknownLoc; // NOLINT(misc-unused-using-decls)
281using mlir::Value; // NOLINT(misc-unused-using-decls)
282using mlir::ValueRange; // NOLINT(misc-unused-using-decls)
283using mlir::VectorType; // NOLINT(misc-unused-using-decls)
284using mlir::WalkResult; // NOLINT(misc-unused-using-decls)
285using mlir::affine::MemRefAccess; // NOLINT(misc-unused-using-decls)
286namespace OpTrait = mlir::OpTrait;
287} // namespace circt
288
289#endif // CIRCT_SUPPORT_LLVM_H
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
TypeStorage DefaultTypeStorage
Definition LLVM.h:181
function_ref< void(Value, StringRef)> OpAsmSetValueNameFn
Definition LLVM.h:182