13#ifndef CIRCT_DIALECT_SV_SVVISITORS_H
14#define CIRCT_DIALECT_SV_SVVISITORS_H
17#include "llvm/ADT/TypeSwitch.h"
22template <
typename ConcreteType,
typename ResultType = void,
23 typename... ExtraArgs>
27 auto *thisCast =
static_cast<ConcreteType *
>(
this);
28 return TypeSwitch<Operation *, ResultType>(op)
31 ReadInOutOp, ArrayIndexInOutOp, VerbatimExprOp, VerbatimExprSEOp,
32 IndexedPartSelectInOutOp, IndexedPartSelectOp, StructFieldInOutOp,
33 ConstantXOp, ConstantZOp, ConstantStrOp, MacroRefExprOp,
34 MacroRefExprSEOp, UnpackedArrayCreateOp, UnpackedOpenArrayCastOp,
36 RegOp, WireOp, LogicOp, LocalParamOp, XMROp, XMRRefOp,
38 OrderedOutputOp, IfDefOp, IfDefProceduralOp, IfOp, AlwaysOp,
39 AlwaysCombOp, AlwaysFFOp, InitialOp, CaseOp,
41 AssignOp, BPAssignOp, PAssignOp, ForceOp, ReleaseOp, AliasOp,
42 FWriteOp, SystemFunctionOp, VerbatimOp, MacroRefOp, FuncCallOp,
43 FuncCallProceduralOp, ReturnOp, IncludeOp,
45 InterfaceOp, InterfaceSignalOp, InterfaceModportOp,
46 InterfaceInstanceOp, GetModportOp, AssignInterfaceSignalOp,
47 ReadInterfaceSignalOp, MacroDeclOp, MacroDefOp, FuncOp,
50 AssertOp, AssumeOp, CoverOp, AssertConcurrentOp, AssumeConcurrentOp,
51 CoverConcurrentOp, AssertPropertyOp, AssumePropertyOp,
56 StopOp, FinishOp, ExitOp,
58 FatalOp, ErrorOp, WarningOp, InfoOp,
62 GenerateOp, GenerateCaseOp,
68 TimeOp, STimeOp>([&](
auto expr) -> ResultType {
69 return thisCast->visitSV(expr, args...);
71 .Default([&](
auto expr) -> ResultType {
72 return thisCast->visitInvalidSV(op, args...);
78 op->emitOpError(
"unknown SV node");
88#define HANDLE(OPTYPE, OPKIND) \
89 ResultType visitSV(OPTYPE op, ExtraArgs... args) { \
90 return static_cast<ConcreteType *>(this)->visit##OPKIND##SV(op, args...); \
106 HANDLE(IndexedPartSelectInOutOp, Unhandled);
114 HANDLE(UnpackedArrayCreateOp, Unhandled);
115 HANDLE(UnpackedOpenArrayCastOp, Unhandled);
150 HANDLE(AssignInterfaceSignalOp, Unhandled);
151 HANDLE(ReadInterfaceSignalOp, Unhandled);
HANDLE(AssumePropertyOp, Unhandled)
HANDLE(BindOp, Unhandled)
HANDLE(ConstantXOp, Unhandled)
HANDLE(InterfaceSignalOp, Unhandled)
HANDLE(ConstantStrOp, Unhandled)
HANDLE(ReadInterfaceSignalOp, Unhandled)
HANDLE(StopOp, Unhandled)
HANDLE(ExitOp, 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(FuncOp, Unhandled)
HANDLE(FuncCallOp, Unhandled)
HANDLE(ReadInOutOp, Unhandled)
ResultType dispatchSVVisitor(Operation *op, ExtraArgs... args)
HANDLE(UnpackedOpenArrayCastOp, Unhandled)
HANDLE(WarningOp, Unhandled)
HANDLE(SampledOp, Unhandled)
HANDLE(VerbatimExprOp, Unhandled)
HANDLE(IncludeOp, Unhandled)
HANDLE(ReleaseOp, Unhandled)
HANDLE(MacroDeclOp, Unhandled)
HANDLE(InterfaceOp, 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.
ResultType visitInvalidSV(Operation *op, ExtraArgs... args)
This callback is invoked on any invalid operations.
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.