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