CIRCT 23.0.0git
Loading...
Searching...
No Matches
SVVisitors.h
Go to the documentation of this file.
1//===- SVVisitors.h - SV Dialect Visitors -----------------------*- 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 defines visitors that make it easier to work with SV IR.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef CIRCT_DIALECT_SV_SVVISITORS_H
14#define CIRCT_DIALECT_SV_SVVISITORS_H
15
17#include "llvm/ADT/TypeSwitch.h"
18
19namespace circt {
20namespace sv {
21
22template <typename ConcreteType, typename ResultType = void,
23 typename... ExtraArgs>
24class Visitor {
25public:
26 ResultType dispatchSVVisitor(Operation *op, ExtraArgs... args) {
27 auto *thisCast = static_cast<ConcreteType *>(this);
28 return TypeSwitch<Operation *, ResultType>(op)
29 .template Case<
30 // Expressions
31 ReadInOutOp, ArrayIndexInOutOp, VerbatimExprOp, VerbatimExprSEOp,
32 IndexedPartSelectInOutOp, IndexedPartSelectOp, StructFieldInOutOp,
33 ConstantXOp, ConstantZOp, ConstantStrOp, MacroRefExprOp,
34 MacroRefExprSEOp, UnpackedArrayCreateOp, UnpackedOpenArrayCastOp,
35 SFormatFOp, ConcatStrOp,
36 // Declarations.
37 RegOp, WireOp, LogicOp, LocalParamOp, XMROp, XMRRefOp,
38 // Control flow.
39 OrderedOutputOp, IfDefOp, IfDefProceduralOp, IfOp, AlwaysOp,
40 AlwaysCombOp, AlwaysFFOp, InitialOp, CaseOp,
41 // Other Statements.
42 AssignOp, BPAssignOp, PAssignOp, ForceOp, ReleaseOp, AliasOp,
43 WriteOp, FWriteOp, FFlushOp, FCloseOp, SystemFunctionOp, VerbatimOp,
44 MacroRefOp, FuncCallOp, FuncCallProceduralOp, ReturnOp, IncludeOp,
45 MacroErrorOp,
46 // Type declarations.
47 InterfaceOp, SVVerbatimSourceOp, InterfaceSignalOp,
48 InterfaceModportOp, InterfaceInstanceOp, GetModportOp,
49 AssignInterfaceSignalOp, ReadInterfaceSignalOp, MacroDeclOp,
50 MacroDefOp, FuncOp, FuncDPIImportOp,
51 // Verification statements.
52 AssertOp, AssumeOp, CoverOp, AssertConcurrentOp, AssumeConcurrentOp,
53 CoverConcurrentOp, AssertPropertyOp, AssumePropertyOp,
54 CoverPropertyOp,
55 // Bind Statements
56 BindOp,
57 // Simulator control tasks
58 StopOp, FinishOp, ExitOp,
59 // Severity message tasks
60 FatalProceduralOp, FatalOp, ErrorProceduralOp, WarningProceduralOp,
61 InfoProceduralOp, ErrorOp, WarningOp, InfoOp,
62 // Memory loading tasks
63 ReadMemOp,
64 // Generate statements
65 GenerateOp, GenerateCaseOp, GenerateForOp,
66 // For statements
67 ForOp,
68 // Sampled value functiions
69 SampledOp,
70 // Time system functions
71 TimeOp, STimeOp>([&](auto expr) -> ResultType {
72 return thisCast->visitSV(expr, args...);
73 })
74 .Default([&](auto expr) -> ResultType {
75 return thisCast->visitInvalidSV(op, args...);
76 });
77 }
78
79 /// This callback is invoked on any invalid operations.
80 ResultType visitInvalidSV(Operation *op, ExtraArgs... args) {
81 op->emitOpError("unknown SV node");
82 abort();
83 }
84
85 /// This callback is invoked on any SV operations that are not handled by the
86 /// concrete visitor.
87 ResultType visitUnhandledSV(Operation *op, ExtraArgs... args) {
88 return ResultType();
89 }
90
91#define HANDLE(OPTYPE, OPKIND) \
92 ResultType visitSV(OPTYPE op, ExtraArgs... args) { \
93 return static_cast<ConcreteType *>(this)->visit##OPKIND##SV(op, args...); \
94 }
95
96 // Declarations
97 HANDLE(RegOp, Unhandled);
98 HANDLE(WireOp, Unhandled);
99 HANDLE(LogicOp, Unhandled);
100 HANDLE(LocalParamOp, Unhandled);
101 HANDLE(XMROp, Unhandled);
102 HANDLE(XMRRefOp, Unhandled);
103
104 // Expressions
105 HANDLE(ReadInOutOp, Unhandled);
106 HANDLE(ArrayIndexInOutOp, Unhandled);
107 HANDLE(VerbatimExprOp, Unhandled);
108 HANDLE(VerbatimExprSEOp, Unhandled);
109 HANDLE(IndexedPartSelectInOutOp, Unhandled);
110 HANDLE(IndexedPartSelectOp, Unhandled);
111 HANDLE(StructFieldInOutOp, Unhandled);
112 HANDLE(ConstantXOp, Unhandled);
113 HANDLE(ConstantZOp, Unhandled);
114 HANDLE(ConstantStrOp, Unhandled);
115 HANDLE(MacroRefExprOp, Unhandled);
116 HANDLE(MacroRefExprSEOp, Unhandled);
117 HANDLE(UnpackedArrayCreateOp, Unhandled);
118 HANDLE(UnpackedOpenArrayCastOp, Unhandled);
119 HANDLE(SFormatFOp, Unhandled);
120 HANDLE(ConcatStrOp, Unhandled);
121
122 // Control flow.
123 HANDLE(OrderedOutputOp, Unhandled);
124 HANDLE(IfDefOp, Unhandled);
125 HANDLE(IfDefProceduralOp, Unhandled);
126 HANDLE(IfOp, Unhandled);
127 HANDLE(AlwaysOp, Unhandled);
128 HANDLE(AlwaysCombOp, Unhandled);
129 HANDLE(AlwaysFFOp, Unhandled);
130 HANDLE(InitialOp, Unhandled);
131 HANDLE(CaseOp, Unhandled);
132
133 // Other Statements.
134 HANDLE(AssignOp, Unhandled);
135 HANDLE(BPAssignOp, Unhandled);
136 HANDLE(PAssignOp, Unhandled);
137 HANDLE(ForceOp, Unhandled);
138 HANDLE(ReleaseOp, Unhandled);
139 HANDLE(AliasOp, Unhandled);
140 HANDLE(WriteOp, Unhandled);
141 HANDLE(FWriteOp, Unhandled);
142 HANDLE(FFlushOp, Unhandled);
143 HANDLE(FCloseOp, Unhandled);
144 HANDLE(SystemFunctionOp, Unhandled);
145 HANDLE(FuncCallProceduralOp, Unhandled);
146 HANDLE(FuncCallOp, Unhandled);
147 HANDLE(ReturnOp, Unhandled);
148 HANDLE(VerbatimOp, Unhandled);
149 HANDLE(MacroRefOp, Unhandled);
150 HANDLE(IncludeOp, Unhandled);
151 HANDLE(MacroErrorOp, Unhandled);
152
153 // Type declarations.
154 HANDLE(InterfaceOp, Unhandled);
155 HANDLE(SVVerbatimSourceOp, Unhandled);
156 HANDLE(InterfaceInstanceOp, Unhandled);
157 HANDLE(InterfaceSignalOp, Unhandled);
158 HANDLE(InterfaceModportOp, Unhandled);
159 HANDLE(GetModportOp, Unhandled);
160 HANDLE(AssignInterfaceSignalOp, Unhandled);
161 HANDLE(ReadInterfaceSignalOp, Unhandled);
162 HANDLE(MacroDefOp, Unhandled);
163 HANDLE(MacroDeclOp, Unhandled);
164 HANDLE(FuncDPIImportOp, Unhandled);
165 HANDLE(FuncOp, Unhandled);
166
167 // Verification statements.
168 HANDLE(AssertOp, Unhandled);
169 HANDLE(AssumeOp, Unhandled);
170 HANDLE(CoverOp, Unhandled);
171 HANDLE(AssertConcurrentOp, Unhandled);
172 HANDLE(AssumeConcurrentOp, Unhandled);
173 HANDLE(CoverConcurrentOp, Unhandled);
174 HANDLE(AssertPropertyOp, Unhandled);
175 HANDLE(AssumePropertyOp, Unhandled);
176 HANDLE(CoverPropertyOp, Unhandled);
177
178 // Bind statements.
179 HANDLE(BindOp, Unhandled);
180
181 // Simulator control tasks
182 HANDLE(StopOp, Unhandled);
183 HANDLE(FinishOp, Unhandled);
184 HANDLE(ExitOp, Unhandled);
185
186 // Severity message tasks
187 HANDLE(FatalProceduralOp, Unhandled);
188 HANDLE(FatalOp, Unhandled);
189 HANDLE(ErrorProceduralOp, Unhandled);
190 HANDLE(WarningProceduralOp, Unhandled);
191 HANDLE(InfoProceduralOp, Unhandled);
192 HANDLE(ErrorOp, Unhandled);
193 HANDLE(WarningOp, Unhandled);
194 HANDLE(InfoOp, Unhandled);
195
196 // Memory loading tasks
197 HANDLE(ReadMemOp, Unhandled);
198
199 // Generate statements
200 HANDLE(GenerateOp, Unhandled);
201 HANDLE(GenerateCaseOp, Unhandled);
202 HANDLE(GenerateForOp, Unhandled);
203
204 // For loop.
205 HANDLE(ForOp, Unhandled);
206
207 // Sampled Value Functions
208 HANDLE(SampledOp, Unhandled);
209
210 // Time System Functions
211 HANDLE(TimeOp, Unhandled);
212 HANDLE(STimeOp, Unhandled);
213#undef HANDLE
214};
215
216} // namespace sv
217} // namespace circt
218
219#endif // CIRCT_DIALECT_SV_SVVISITORS_H
HANDLE(MacroErrorOp, Unhandled)
HANDLE(AssumePropertyOp, Unhandled)
HANDLE(FatalProceduralOp, Unhandled)
HANDLE(BindOp, Unhandled)
HANDLE(ConstantXOp, Unhandled)
HANDLE(InterfaceSignalOp, Unhandled)
HANDLE(ConstantStrOp, Unhandled)
HANDLE(WarningProceduralOp, Unhandled)
HANDLE(GenerateForOp, Unhandled)
HANDLE(ReadInterfaceSignalOp, Unhandled)
HANDLE(StopOp, Unhandled)
HANDLE(SFormatFOp, Unhandled)
HANDLE(ExitOp, Unhandled)
HANDLE(ForOp, Unhandled)
HANDLE(TimeOp, Unhandled)
HANDLE(FinishOp, Unhandled)
HANDLE(XMRRefOp, Unhandled)
HANDLE(FWriteOp, Unhandled)
HANDLE(AssumeOp, Unhandled)
HANDLE(IfDefOp, Unhandled)
HANDLE(AssertOp, Unhandled)
HANDLE(ForceOp, Unhandled)
HANDLE(AssignOp, Unhandled)
HANDLE(CoverOp, Unhandled)
HANDLE(RegOp, Unhandled)
HANDLE(FuncOp, Unhandled)
HANDLE(FuncCallOp, Unhandled)
HANDLE(ReadInOutOp, Unhandled)
ResultType dispatchSVVisitor(Operation *op, ExtraArgs... args)
Definition SVVisitors.h:26
HANDLE(UnpackedOpenArrayCastOp, Unhandled)
HANDLE(WarningOp, Unhandled)
HANDLE(SampledOp, Unhandled)
HANDLE(VerbatimExprOp, Unhandled)
HANDLE(InfoProceduralOp, Unhandled)
HANDLE(IncludeOp, Unhandled)
HANDLE(XMROp, Unhandled)
HANDLE(ReleaseOp, Unhandled)
HANDLE(MacroDeclOp, Unhandled)
HANDLE(IfOp, Unhandled)
HANDLE(ConcatStrOp, Unhandled)
HANDLE(InterfaceOp, Unhandled)
HANDLE(FFlushOp, Unhandled)
HANDLE(AlwaysCombOp, Unhandled)
HANDLE(AlwaysOp, Unhandled)
HANDLE(CoverPropertyOp, Unhandled)
HANDLE(InitialOp, Unhandled)
HANDLE(GenerateCaseOp, Unhandled)
HANDLE(GetModportOp, Unhandled)
HANDLE(InterfaceInstanceOp, Unhandled)
HANDLE(StructFieldInOutOp, Unhandled)
HANDLE(ArrayIndexInOutOp, Unhandled)
HANDLE(FatalOp, Unhandled)
HANDLE(AlwaysFFOp, Unhandled)
HANDLE(AssertPropertyOp, Unhandled)
HANDLE(CoverConcurrentOp, Unhandled)
HANDLE(ErrorProceduralOp, Unhandled)
HANDLE(BPAssignOp, Unhandled)
HANDLE(CaseOp, Unhandled)
HANDLE(InterfaceModportOp, Unhandled)
HANDLE(OrderedOutputOp, Unhandled)
HANDLE(WriteOp, Unhandled)
HANDLE(InfoOp, Unhandled)
HANDLE(UnpackedArrayCreateOp, Unhandled)
HANDLE(PAssignOp, Unhandled)
ResultType visitUnhandledSV(Operation *op, ExtraArgs... args)
This callback is invoked on any SV operations that are not handled by the concrete visitor.
Definition SVVisitors.h:87
HANDLE(FCloseOp, Unhandled)
ResultType visitInvalidSV(Operation *op, ExtraArgs... args)
This callback is invoked on any invalid operations.
Definition SVVisitors.h:80
HANDLE(AssignInterfaceSignalOp, Unhandled)
HANDLE(VerbatimOp, Unhandled)
HANDLE(FuncDPIImportOp, Unhandled)
HANDLE(MacroRefOp, Unhandled)
HANDLE(AliasOp, Unhandled)
HANDLE(GenerateOp, Unhandled)
HANDLE(MacroRefExprOp, Unhandled)
HANDLE(WireOp, Unhandled)
HANDLE(SVVerbatimSourceOp, Unhandled)
HANDLE(ReturnOp, Unhandled)
HANDLE(STimeOp, Unhandled)
HANDLE(IndexedPartSelectOp, Unhandled)
HANDLE(IndexedPartSelectInOutOp, Unhandled)
HANDLE(ConstantZOp, Unhandled)
HANDLE(AssumeConcurrentOp, Unhandled)
HANDLE(LocalParamOp, Unhandled)
HANDLE(FuncCallProceduralOp, Unhandled)
HANDLE(ReadMemOp, Unhandled)
HANDLE(MacroRefExprSEOp, Unhandled)
HANDLE(AssertConcurrentOp, Unhandled)
HANDLE(SystemFunctionOp, Unhandled)
HANDLE(ErrorOp, Unhandled)
HANDLE(LogicOp, Unhandled)
HANDLE(IfDefProceduralOp, Unhandled)
HANDLE(VerbatimExprSEOp, Unhandled)
HANDLE(MacroDefOp, Unhandled)
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
Definition sv.py:1