Loading [MathJax]/extensions/tex2jax.js
CIRCT 21.0.0git
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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,
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 FWriteOp, FFlushOp, SystemFunctionOp, VerbatimOp, MacroRefOp,
44 FuncCallOp, FuncCallProceduralOp, ReturnOp, IncludeOp,
45 // Type declarations.
46 InterfaceOp, InterfaceSignalOp, InterfaceModportOp,
47 InterfaceInstanceOp, GetModportOp, AssignInterfaceSignalOp,
48 ReadInterfaceSignalOp, MacroDeclOp, MacroDefOp, FuncOp,
49 FuncDPIImportOp,
50 // Verification statements.
51 AssertOp, AssumeOp, CoverOp, AssertConcurrentOp, AssumeConcurrentOp,
52 CoverConcurrentOp, AssertPropertyOp, AssumePropertyOp,
53 CoverPropertyOp,
54 // Bind Statements
55 BindOp,
56 // Simulator control tasks
57 StopOp, FinishOp, ExitOp,
58 // Severity message tasks
59 FatalOp, ErrorOp, WarningOp, InfoOp,
60 // Memory loading tasks
61 ReadMemOp,
62 // Generate statements
63 GenerateOp, GenerateCaseOp,
64 // For statements
65 ForOp,
66 // Sampled value functiions
67 SampledOp,
68 // Time system functions
69 TimeOp, STimeOp>([&](auto expr) -> ResultType {
70 return thisCast->visitSV(expr, args...);
71 })
72 .Default([&](auto expr) -> ResultType {
73 return thisCast->visitInvalidSV(op, args...);
74 });
75 }
76
77 /// This callback is invoked on any invalid operations.
78 ResultType visitInvalidSV(Operation *op, ExtraArgs... args) {
79 op->emitOpError("unknown SV node");
80 abort();
81 }
82
83 /// This callback is invoked on any SV operations that are not handled by the
84 /// concrete visitor.
85 ResultType visitUnhandledSV(Operation *op, ExtraArgs... args) {
86 return ResultType();
87 }
88
89#define HANDLE(OPTYPE, OPKIND) \
90 ResultType visitSV(OPTYPE op, ExtraArgs... args) { \
91 return static_cast<ConcreteType *>(this)->visit##OPKIND##SV(op, args...); \
92 }
93
94 // Declarations
95 HANDLE(RegOp, Unhandled);
96 HANDLE(WireOp, Unhandled);
97 HANDLE(LogicOp, Unhandled);
98 HANDLE(LocalParamOp, Unhandled);
99 HANDLE(XMROp, Unhandled);
100 HANDLE(XMRRefOp, Unhandled);
101
102 // Expressions
103 HANDLE(ReadInOutOp, Unhandled);
104 HANDLE(ArrayIndexInOutOp, Unhandled);
105 HANDLE(VerbatimExprOp, Unhandled);
106 HANDLE(VerbatimExprSEOp, Unhandled);
107 HANDLE(IndexedPartSelectInOutOp, Unhandled);
108 HANDLE(IndexedPartSelectOp, Unhandled);
109 HANDLE(StructFieldInOutOp, Unhandled);
110 HANDLE(ConstantXOp, Unhandled);
111 HANDLE(ConstantZOp, Unhandled);
112 HANDLE(ConstantStrOp, Unhandled);
113 HANDLE(MacroRefExprOp, Unhandled);
114 HANDLE(MacroRefExprSEOp, Unhandled);
115 HANDLE(UnpackedArrayCreateOp, Unhandled);
116 HANDLE(UnpackedOpenArrayCastOp, Unhandled);
117 HANDLE(SFormatFOp, Unhandled);
118
119 // Control flow.
120 HANDLE(OrderedOutputOp, Unhandled);
121 HANDLE(IfDefOp, Unhandled);
122 HANDLE(IfDefProceduralOp, Unhandled);
123 HANDLE(IfOp, Unhandled);
124 HANDLE(AlwaysOp, Unhandled);
125 HANDLE(AlwaysCombOp, Unhandled);
126 HANDLE(AlwaysFFOp, Unhandled);
127 HANDLE(InitialOp, Unhandled);
128 HANDLE(CaseOp, Unhandled);
129
130 // Other Statements.
131 HANDLE(AssignOp, Unhandled);
132 HANDLE(BPAssignOp, Unhandled);
133 HANDLE(PAssignOp, Unhandled);
134 HANDLE(ForceOp, Unhandled);
135 HANDLE(ReleaseOp, Unhandled);
136 HANDLE(AliasOp, Unhandled);
137 HANDLE(FWriteOp, Unhandled);
138 HANDLE(FFlushOp, Unhandled);
139 HANDLE(SystemFunctionOp, Unhandled);
140 HANDLE(FuncCallProceduralOp, Unhandled);
141 HANDLE(FuncCallOp, Unhandled);
142 HANDLE(ReturnOp, Unhandled);
143 HANDLE(VerbatimOp, Unhandled);
144 HANDLE(MacroRefOp, Unhandled);
145 HANDLE(IncludeOp, Unhandled);
146
147 // Type declarations.
148 HANDLE(InterfaceOp, Unhandled);
149 HANDLE(InterfaceInstanceOp, Unhandled);
150 HANDLE(InterfaceSignalOp, Unhandled);
151 HANDLE(InterfaceModportOp, Unhandled);
152 HANDLE(GetModportOp, Unhandled);
153 HANDLE(AssignInterfaceSignalOp, Unhandled);
154 HANDLE(ReadInterfaceSignalOp, Unhandled);
155 HANDLE(MacroDefOp, Unhandled);
156 HANDLE(MacroDeclOp, Unhandled);
157 HANDLE(FuncDPIImportOp, Unhandled);
158 HANDLE(FuncOp, Unhandled);
159
160 // Verification statements.
161 HANDLE(AssertOp, Unhandled);
162 HANDLE(AssumeOp, Unhandled);
163 HANDLE(CoverOp, Unhandled);
164 HANDLE(AssertConcurrentOp, Unhandled);
165 HANDLE(AssumeConcurrentOp, Unhandled);
166 HANDLE(CoverConcurrentOp, Unhandled);
167 HANDLE(AssertPropertyOp, Unhandled);
168 HANDLE(AssumePropertyOp, Unhandled);
169 HANDLE(CoverPropertyOp, Unhandled);
170
171 // Bind statements.
172 HANDLE(BindOp, Unhandled);
173
174 // Simulator control tasks
175 HANDLE(StopOp, Unhandled);
176 HANDLE(FinishOp, Unhandled);
177 HANDLE(ExitOp, Unhandled);
178
179 // Severity message tasks
180 HANDLE(FatalOp, Unhandled);
181 HANDLE(ErrorOp, Unhandled);
182 HANDLE(WarningOp, Unhandled);
183 HANDLE(InfoOp, Unhandled);
184
185 // Memory loading tasks
186 HANDLE(ReadMemOp, Unhandled);
187
188 // Generate statements
189 HANDLE(GenerateOp, Unhandled);
190 HANDLE(GenerateCaseOp, Unhandled);
191
192 // For loop.
193 HANDLE(ForOp, Unhandled);
194
195 // Sampled Value Functions
196 HANDLE(SampledOp, Unhandled);
197
198 // Time System Functions
199 HANDLE(TimeOp, Unhandled);
200 HANDLE(STimeOp, Unhandled);
201#undef HANDLE
202};
203
204} // namespace sv
205} // namespace circt
206
207#endif // CIRCT_DIALECT_SV_SVVISITORS_H
HANDLE(AssumePropertyOp, Unhandled)
HANDLE(BindOp, Unhandled)
HANDLE(ConstantXOp, Unhandled)
HANDLE(InterfaceSignalOp, Unhandled)
HANDLE(ConstantStrOp, 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(IncludeOp, Unhandled)
HANDLE(XMROp, Unhandled)
HANDLE(ReleaseOp, Unhandled)
HANDLE(MacroDeclOp, Unhandled)
HANDLE(IfOp, 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(BPAssignOp, Unhandled)
HANDLE(CaseOp, Unhandled)
HANDLE(InterfaceModportOp, Unhandled)
HANDLE(OrderedOutputOp, 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:85
ResultType visitInvalidSV(Operation *op, ExtraArgs... args)
This callback is invoked on any invalid operations.
Definition SVVisitors.h:78
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(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