CIRCT  19.0.0git
Passes.h
Go to the documentation of this file.
1 //===- Passes.h - FIRRTL pass entry points ----------------------*- 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 header file defines prototypes that expose pass constructors.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef CIRCT_DIALECT_FIRRTL_PASSES_H
14 #define CIRCT_DIALECT_FIRRTL_PASSES_H
15 
16 #include "mlir/Pass/Pass.h"
17 #include "mlir/Pass/PassRegistry.h"
18 #include <memory>
19 #include <optional>
20 
21 namespace mlir {
22 class Pass;
23 } // namespace mlir
24 
25 namespace circt {
26 namespace firrtl {
27 
28 std::unique_ptr<mlir::Pass> createResolvePathsPass();
29 
30 std::unique_ptr<mlir::Pass>
31 createLowerFIRRTLAnnotationsPass(bool ignoreUnhandledAnnotations = false,
32  bool ignoreClasslessAnnotations = false,
33  bool noRefTypePorts = false);
34 
35 std::unique_ptr<mlir::Pass> createLowerOpenAggsPass();
36 
37 /// Configure which aggregate values will be preserved by the LowerTypes pass.
38 namespace PreserveAggregate {
40  /// Don't preserve aggregate at all. This has been default behaivor and
41  /// compatible with SFC.
43 
44  /// Preserve only 1d vectors of ground type (e.g. UInt<2>[3]).
46 
47  /// Preserve only vectors (e.g. UInt<2>[3][3]).
48  Vec,
49 
50  /// Preserve all aggregate values.
51  All,
52 };
53 }
54 
55 std::unique_ptr<mlir::Pass> createLowerFIRRTLTypesPass(
58 
59 std::unique_ptr<mlir::Pass> createLowerBundleVectorTypesPass();
60 
61 std::unique_ptr<mlir::Pass> createLowerCHIRRTLPass();
62 
63 std::unique_ptr<mlir::Pass>
64 createLowerIntmodulesPass(bool fixupEICGWrapper = false);
65 
66 std::unique_ptr<mlir::Pass> createLowerIntrinsicsPass();
67 
68 std::unique_ptr<mlir::Pass> createIMConstPropPass();
69 
70 std::unique_ptr<mlir::Pass>
71 createRemoveUnusedPortsPass(bool ignoreDontTouch = false);
72 
73 std::unique_ptr<mlir::Pass> createInlinerPass();
74 
75 std::unique_ptr<mlir::Pass> createInferReadWritePass();
76 
77 std::unique_ptr<mlir::Pass>
78 createCreateSiFiveMetadataPass(bool replSeqMem = false,
79  mlir::StringRef replSeqMemFile = "");
80 
81 std::unique_ptr<mlir::Pass> createVBToBVPass();
82 
83 std::unique_ptr<mlir::Pass> createAddSeqMemPortsPass();
84 
85 std::unique_ptr<mlir::Pass> createDedupPass();
86 
87 std::unique_ptr<mlir::Pass>
88 createEmitOMIRPass(mlir::StringRef outputFilename = "");
89 
90 std::unique_ptr<mlir::Pass> createLowerMatchesPass();
91 
92 std::unique_ptr<mlir::Pass> createLowerSignaturesPass();
93 
94 std::unique_ptr<mlir::Pass> createPassiveWiresPass();
95 
96 std::unique_ptr<mlir::Pass> createExpandWhensPass();
97 
98 std::unique_ptr<mlir::Pass> createFlattenMemoryPass();
99 
100 std::unique_ptr<mlir::Pass> createInferWidthsPass();
101 
102 std::unique_ptr<mlir::Pass> createInferResetsPass();
103 
104 std::unique_ptr<mlir::Pass> createLowerMemoryPass();
105 
106 std::unique_ptr<mlir::Pass>
107 createHoistPassthroughPass(bool hoistHWDrivers = true);
108 
109 std::unique_ptr<mlir::Pass> createProbeDCEPass();
110 
111 std::unique_ptr<mlir::Pass>
112 createMemToRegOfVecPass(bool replSeqMem = false, bool ignoreReadEnable = false);
113 
114 std::unique_ptr<mlir::Pass> createPrefixModulesPass();
115 
116 std::unique_ptr<mlir::Pass> createFIRRTLFieldSourcePass();
117 
118 std::unique_ptr<mlir::Pass> createPrintInstanceGraphPass();
119 
120 std::unique_ptr<mlir::Pass> createPrintNLATablePass();
121 
122 std::unique_ptr<mlir::Pass>
123 createBlackBoxReaderPass(std::optional<mlir::StringRef> inputPrefix = {});
124 
125 enum class CompanionMode {
126  // Lower companions to SystemVerilog binds.
127  Bind,
128  // Lower companions to explicit instances. Used when assertions or other
129  // debugging constructs from the companion are to be included in the design.
130  Instantiate,
131  // Drop companion modules, eliminating them from the design.
132  Drop,
133 };
134 
135 std::unique_ptr<mlir::Pass>
137 
138 std::unique_ptr<mlir::Pass> createCheckCombLoopsPass();
139 
140 std::unique_ptr<mlir::Pass> createSFCCompatPass();
141 
142 std::unique_ptr<mlir::Pass>
143 createMergeConnectionsPass(bool enableAggressiveMerging = false);
144 
145 std::unique_ptr<mlir::Pass> createVectorizationPass();
146 
147 std::unique_ptr<mlir::Pass> createInjectDUTHierarchyPass();
148 
149 std::unique_ptr<mlir::Pass> createDropConstPass();
150 
151 /// Configure which values will be explicitly preserved by the DropNames pass.
152 namespace PreserveValues {
154  /// Strip all names. No name on declaration is preserved.
156  /// Don't explicitly preserve any named values. Every named operation could
157  /// be optimized away by the compiler. Unlike `Strip` names could be preserved
158  /// until the end.
160  // Explicitly preserved values with meaningful names. If a name begins with
161  // an "_" it is not considered meaningful.
163  // Explicitly preserve all values. No named operation should be optimized
164  // away by the compiler.
166 };
167 }
168 
169 std::unique_ptr<mlir::Pass>
171 
172 std::unique_ptr<mlir::Pass> createExtractInstancesPass();
173 
174 std::unique_ptr<mlir::Pass> createIMDeadCodeElimPass();
175 
176 std::unique_ptr<mlir::Pass> createRandomizeRegisterInitPass();
177 
178 std::unique_ptr<mlir::Pass> createRegisterOptimizerPass();
179 
180 std::unique_ptr<mlir::Pass> createLowerXMRPass();
181 
182 std::unique_ptr<mlir::Pass>
183 createResolveTracesPass(mlir::StringRef outputAnnotationFilename = "");
184 
185 std::unique_ptr<mlir::Pass> createInnerSymbolDCEPass();
186 
187 std::unique_ptr<mlir::Pass> createFinalizeIRPass();
188 
189 std::unique_ptr<mlir::Pass> createLowerClassesPass();
190 
191 std::unique_ptr<mlir::Pass> createLowerLayersPass();
192 
193 std::unique_ptr<mlir::Pass> createLayerMergePass();
194 
195 std::unique_ptr<mlir::Pass> createLayerSinkPass();
196 
197 std::unique_ptr<mlir::Pass> createMaterializeDebugInfoPass();
198 
199 std::unique_ptr<mlir::Pass> createLintingPass();
200 
201 std::unique_ptr<mlir::Pass> createSpecializeOptionPass();
202 
203 std::unique_ptr<mlir::Pass> createCreateCompanionAssume();
204 
205 /// Generate the code for registering passes.
206 #define GEN_PASS_REGISTRATION
207 #include "circt/Dialect/FIRRTL/Passes.h.inc"
208 
209 } // namespace firrtl
210 } // namespace circt
211 
212 #endif // CIRCT_DIALECT_FIRRTL_PASSES_H
@ All
Preserve all aggregate values.
Definition: Passes.h:51
@ OneDimVec
Preserve only 1d vectors of ground type (e.g. UInt<2>[3]).
Definition: Passes.h:45
@ Vec
Preserve only vectors (e.g. UInt<2>[3][3]).
Definition: Passes.h:48
@ None
Don't preserve aggregate at all.
Definition: Passes.h:42
@ None
Don't explicitly preserve any named values.
Definition: Passes.h:159
@ Strip
Strip all names. No name on declaration is preserved.
Definition: Passes.h:155
std::unique_ptr< mlir::Pass > createInferReadWritePass()
std::unique_ptr< mlir::Pass > createCheckCombLoopsPass()
std::unique_ptr< mlir::Pass > createFIRRTLFieldSourcePass()
std::unique_ptr< mlir::Pass > createFinalizeIRPass()
Definition: FinalizeIR.cpp:38
std::unique_ptr< mlir::Pass > createLowerFIRRTLTypesPass(PreserveAggregate::PreserveMode mode=PreserveAggregate::None, PreserveAggregate::PreserveMode memoryMode=PreserveAggregate::None)
This is the pass constructor.
std::unique_ptr< mlir::Pass > createResolveTracesPass(mlir::StringRef outputAnnotationFilename="")
std::unique_ptr< mlir::Pass > createEmitOMIRPass(mlir::StringRef outputFilename="")
std::unique_ptr< mlir::Pass > createResolvePathsPass()
std::unique_ptr< mlir::Pass > createLowerSignaturesPass()
This is the pass constructor.
std::unique_ptr< mlir::Pass > createSpecializeOptionPass()
std::unique_ptr< mlir::Pass > createVBToBVPass()
Definition: VBToBV.cpp:988
std::unique_ptr< mlir::Pass > createGrandCentralPass(CompanionMode companionMode=CompanionMode::Bind)
std::unique_ptr< mlir::Pass > createLowerIntmodulesPass(bool fixupEICGWrapper=false)
This is the pass constructor.
std::unique_ptr< mlir::Pass > createIMConstPropPass()
std::unique_ptr< mlir::Pass > createBlackBoxReaderPass(std::optional< mlir::StringRef > inputPrefix={})
std::unique_ptr< mlir::Pass > createCreateCompanionAssume()
std::unique_ptr< mlir::Pass > createCreateSiFiveMetadataPass(bool replSeqMem=false, mlir::StringRef replSeqMemFile="")
std::unique_ptr< mlir::Pass > createRemoveUnusedPortsPass(bool ignoreDontTouch=false)
std::unique_ptr< mlir::Pass > createLayerMergePass()
Definition: LayerMerge.cpp:73
std::unique_ptr< mlir::Pass > createInlinerPass()
std::unique_ptr< mlir::Pass > createVectorizationPass()
std::unique_ptr< mlir::Pass > createLowerMemoryPass()
std::unique_ptr< mlir::Pass > createDropNamesPass(PreserveValues::PreserveMode mode=PreserveValues::None)
Definition: DropName.cpp:92
std::unique_ptr< mlir::Pass > createLowerLayersPass()
std::unique_ptr< mlir::Pass > createIMDeadCodeElimPass()
std::unique_ptr< mlir::Pass > createLintingPass()
Definition: Lint.cpp:69
std::unique_ptr< mlir::Pass > createLowerBundleVectorTypesPass()
std::unique_ptr< mlir::Pass > createPassiveWiresPass()
This is the pass constructor.
std::unique_ptr< mlir::Pass > createExtractInstancesPass()
std::unique_ptr< mlir::Pass > createDedupPass()
Definition: Dedup.cpp:1793
std::unique_ptr< mlir::Pass > createLayerSinkPass()
Definition: LayerSink.cpp:52
std::unique_ptr< mlir::Pass > createHoistPassthroughPass(bool hoistHWDrivers=true)
This is the pass constructor.
std::unique_ptr< mlir::Pass > createProbeDCEPass()
This is the pass constructor.
Definition: ProbeDCE.cpp:78
std::unique_ptr< mlir::Pass > createLowerCHIRRTLPass()
std::unique_ptr< mlir::Pass > createPrintInstanceGraphPass()
std::unique_ptr< mlir::Pass > createPrintNLATablePass()
std::unique_ptr< mlir::Pass > createInnerSymbolDCEPass()
std::unique_ptr< mlir::Pass > createExpandWhensPass()
std::unique_ptr< mlir::Pass > createLowerXMRPass()
Definition: LowerXMR.cpp:851
std::unique_ptr< mlir::Pass > createLowerIntrinsicsPass()
This is the pass constructor.
std::unique_ptr< mlir::Pass > createInferWidthsPass()
std::unique_ptr< mlir::Pass > createMemToRegOfVecPass(bool replSeqMem=false, bool ignoreReadEnable=false)
std::unique_ptr< mlir::Pass > createLowerOpenAggsPass()
This is the pass constructor.
std::unique_ptr< mlir::Pass > createDropConstPass()
Definition: DropConst.cpp:96
std::unique_ptr< mlir::Pass > createSFCCompatPass()
Definition: SFCCompat.cpp:155
std::unique_ptr< mlir::Pass > createPrefixModulesPass()
std::unique_ptr< mlir::Pass > createInjectDUTHierarchyPass()
std::unique_ptr< mlir::Pass > createRandomizeRegisterInitPass()
std::unique_ptr< mlir::Pass > createLowerClassesPass()
std::unique_ptr< mlir::Pass > createAddSeqMemPortsPass()
std::unique_ptr< mlir::Pass > createLowerFIRRTLAnnotationsPass(bool ignoreUnhandledAnnotations=false, bool ignoreClasslessAnnotations=false, bool noRefTypePorts=false)
This is the pass constructor.
std::unique_ptr< mlir::Pass > createRegisterOptimizerPass()
std::unique_ptr< mlir::Pass > createLowerMatchesPass()
std::unique_ptr< mlir::Pass > createMergeConnectionsPass(bool enableAggressiveMerging=false)
std::unique_ptr< mlir::Pass > createInferResetsPass()
std::unique_ptr< mlir::Pass > createFlattenMemoryPass()
std::unique_ptr< mlir::Pass > createMaterializeDebugInfoPass()
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
Definition: DebugAnalysis.h:21