struct
#include <netlist/DataFlowAnalysis.hpp>
DataFlowAnalysis 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.