slang::netlist::DataFlowAnalysis struct

A data flow analysis used as part of the netlist graph construction.

Public types

using ParentAnalysis = analysis::AbstractFlowAnalysis<DataFlowAnalysis, AnalysisState>

Public static functions

static auto unreachableState() -> AnalysisState
static auto topState() -> AnalysisState

Constructors, destructors, conversion operators

DataFlowAnalysis(analysis::AnalysisManager& analysisManager, ast::Symbol const& symbol, NetlistGraph& graph, NetlistNode* externalNode = nullptr)

Public functions

auto getState() -> AnalysisState&
auto getState() const -> AnalysisState const&
auto saveLValueFlag() -> auto
void handleRvalue(ast::ValueSymbol const& symbol, ast::Expression const& lsp, DriverBitRange bounds)
void handleLvalue(ast::ValueSymbol const& symbol, ast::Expression const& lsp, DriverBitRange bounds)
void noteReference(ast::ValueSymbol const& symbol, ast::Expression const& lsp)
void finalize()
template<typename T>
void handle(const T& expr)
template<typename T>
void handle(const T& expr)
void updateNode(NetlistNode* node, bool conditional)
void handle(const ast::ProceduralAssignStatement& stmt)
void handle(const ast::AssignmentExpression& expr)
void handle(ast::ConditionalStatement const& stmt)
void handle(ast::CaseStatement const& stmt)
auto mergeStates(AnalysisState const& a, AnalysisState const& b) -> AnalysisState
void joinState(AnalysisState& result, AnalysisState const& other)
void meetState(AnalysisState& result, AnalysisState const& other)
auto copyState(AnalysisState const& source) -> AnalysisState

Public variables

analysis::AnalysisManager& analysisManager
SymbolTracker symbolTracker
ast::LSPVisitor<DataFlowAnalysis> lspVisitor
bool isLValue
bool isBlocking
bool prohibitLValue
NetlistGraph& graph
NetlistNode* externalNode
std::vector<PendingRvalue> pendingLValues

Function documentation

void slang::netlist::DataFlowAnalysis::noteReference(ast::ValueSymbol const& symbol, ast::Expression const& lsp)

As per DataFlowAnalysis in upstream slang, but with custom handling of L- and R-values. Called by the LSP visitor.

void slang::netlist::DataFlowAnalysis::finalize()

Finalize the analysis by processing any pending non-blocking L-values. This should be called after the main analysis has completed.