CIRCT  18.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> createLowerIntrinsicsPass();
64 
65 std::unique_ptr<mlir::Pass> createIMConstPropPass();
66 
67 std::unique_ptr<mlir::Pass>
68 createRemoveUnusedPortsPass(bool ignoreDontTouch = false);
69 
70 std::unique_ptr<mlir::Pass> createInlinerPass();
71 
72 std::unique_ptr<mlir::Pass> createInferReadWritePass();
73 
74 std::unique_ptr<mlir::Pass>
75 createCreateSiFiveMetadataPass(bool replSeqMem = false,
76  mlir::StringRef replSeqMemFile = "");
77 
78 std::unique_ptr<mlir::Pass> createWireDFTPass();
79 
80 std::unique_ptr<mlir::Pass> createVBToBVPass();
81 
82 std::unique_ptr<mlir::Pass> createAddSeqMemPortsPass();
83 
84 std::unique_ptr<mlir::Pass> createDedupPass();
85 
86 std::unique_ptr<mlir::Pass>
87 createEmitOMIRPass(mlir::StringRef outputFilename = "");
88 
89 std::unique_ptr<mlir::Pass> createLowerMatchesPass();
90 
91 std::unique_ptr<mlir::Pass> createExpandWhensPass();
92 
93 std::unique_ptr<mlir::Pass> createFlattenMemoryPass();
94 
95 std::unique_ptr<mlir::Pass> createInferWidthsPass();
96 
97 std::unique_ptr<mlir::Pass> createInferResetsPass();
98 
99 std::unique_ptr<mlir::Pass> createLowerMemoryPass();
100 
101 std::unique_ptr<mlir::Pass>
102 createHoistPassthroughPass(bool hoistHWDrivers = true);
103 
104 std::unique_ptr<mlir::Pass> createProbeDCEPass();
105 
106 std::unique_ptr<mlir::Pass>
107 createMemToRegOfVecPass(bool replSeqMem = false, bool ignoreReadEnable = false);
108 
109 std::unique_ptr<mlir::Pass> createPrefixModulesPass();
110 
111 std::unique_ptr<mlir::Pass> createFIRRTLFieldSourcePass();
112 
113 std::unique_ptr<mlir::Pass> createPrintInstanceGraphPass();
114 
115 std::unique_ptr<mlir::Pass> createPrintNLATablePass();
116 
117 std::unique_ptr<mlir::Pass>
118 createBlackBoxReaderPass(std::optional<mlir::StringRef> inputPrefix = {});
119 
120 enum class CompanionMode {
121  // Lower companions to SystemVerilog binds.
122  Bind,
123  // Lower companions to explicit instances. Used when assertions or other
124  // debugging constructs from the companion are to be included in the design.
125  Instantiate,
126  // Drop companion modules, eliminating them from the design.
127  Drop,
128 };
129 
130 std::unique_ptr<mlir::Pass>
132 
133 std::unique_ptr<mlir::Pass> createCheckCombLoopsPass();
134 
135 std::unique_ptr<mlir::Pass> createSFCCompatPass();
136 
137 std::unique_ptr<mlir::Pass>
138 createMergeConnectionsPass(bool enableAggressiveMerging = false);
139 
140 std::unique_ptr<mlir::Pass> createVectorizationPass();
141 
142 std::unique_ptr<mlir::Pass> createInjectDUTHierarchyPass();
143 
144 std::unique_ptr<mlir::Pass> createDropConstPass();
145 
146 /// Configure which values will be explicitly preserved by the DropNames pass.
147 namespace PreserveValues {
149  /// Strip all names. No name on declaration is preserved.
151  /// Don't explicitly preserve any named values. Every named operation could
152  /// be optimized away by the compiler. Unlike `Strip` names could be preserved
153  /// until the end.
155  // Explicitly preserved values with meaningful names. If a name begins with
156  // an "_" it is not considered meaningful.
158  // Explicitly preserve all values. No named operation should be optimized
159  // away by the compiler.
161 };
162 }
163 
164 std::unique_ptr<mlir::Pass>
166 
167 std::unique_ptr<mlir::Pass> createExtractInstancesPass();
168 
169 std::unique_ptr<mlir::Pass> createIMDeadCodeElimPass();
170 
171 std::unique_ptr<mlir::Pass> createRandomizeRegisterInitPass();
172 
173 std::unique_ptr<mlir::Pass> createRegisterOptimizerPass();
174 
175 std::unique_ptr<mlir::Pass> createLowerXMRPass();
176 
177 std::unique_ptr<mlir::Pass>
178 createResolveTracesPass(mlir::StringRef outputAnnotationFilename = "");
179 
180 std::unique_ptr<mlir::Pass> createInnerSymbolDCEPass();
181 
182 std::unique_ptr<mlir::Pass> createFinalizeIRPass();
183 
184 std::unique_ptr<mlir::Pass> createLowerClassesPass();
185 
186 std::unique_ptr<mlir::Pass> createLowerGroupsPass();
187 
188 std::unique_ptr<mlir::Pass> createGroupMergePass();
189 
190 std::unique_ptr<mlir::Pass> createGroupSinkPass();
191 
192 std::unique_ptr<mlir::Pass> createMaterializeDebugInfoPass();
193 
194 std::unique_ptr<mlir::Pass> createLintingPass();
195 
196 /// Generate the code for registering passes.
197 #define GEN_PASS_REGISTRATION
198 #include "circt/Dialect/FIRRTL/Passes.h.inc"
199 
200 } // namespace firrtl
201 } // namespace circt
202 
203 #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:154
@ Strip
Strip all names. No name on declaration is preserved.
Definition: Passes.h:150
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 > createVBToBVPass()
Definition: VBToBV.cpp:986
std::unique_ptr< mlir::Pass > createGrandCentralPass(CompanionMode companionMode=CompanionMode::Bind)
std::unique_ptr< mlir::Pass > createIMConstPropPass()
std::unique_ptr< mlir::Pass > createBlackBoxReaderPass(std::optional< mlir::StringRef > inputPrefix={})
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 > 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:91
std::unique_ptr< mlir::Pass > createGroupMergePass()
Definition: GroupMerge.cpp:75
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 > createExtractInstancesPass()
std::unique_ptr< mlir::Pass > createDedupPass()
Definition: Dedup.cpp:1687
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 > createGroupSinkPass()
Definition: GroupSink.cpp:52
std::unique_ptr< mlir::Pass > createLowerXMRPass()
Definition: LowerXMR.cpp:843
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 > createLowerGroupsPass()
std::unique_ptr< mlir::Pass > createDropConstPass()
Definition: DropConst.cpp:95
std::unique_ptr< mlir::Pass > createSFCCompatPass()
Definition: SFCCompat.cpp:141
std::unique_ptr< mlir::Pass > createWireDFTPass()
Definition: WireDFT.cpp:499
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()
This file defines an intermediate representation for circuits acting as an abstraction for constraint...
Definition: DebugAnalysis.h:21