|
CIRCT 22.0.0git
|
This graph tracks modules and where they are instantiated. More...
#include <FIRRTLInstanceGraph.h>


Public Member Functions | |
| InstanceGraph (Operation *operation) | |
| Create a new module graph of a circuit. | |
| igraph::InstanceGraphNode * | getTopLevelNode () override |
| Get the node corresponding to the top-level module of a circuit. | |
| FModuleLike | getTopLevelModule () |
| Get the module corresponding to the top-level module of a circuit. | |
Public Member Functions inherited from circt::igraph::InstanceGraph | |
| InstanceGraph (Operation *parent) | |
| Create a new module graph of a circuit. | |
| InstanceGraph (const InstanceGraph &)=delete | |
| virtual | ~InstanceGraph ()=default |
| InstanceGraphNode * | lookupOrNull (StringAttr name) |
| Lookup an module by name. | |
| InstanceGraphNode * | lookupOrNull (ModuleOpInterface op) |
| Look up an InstanceGraphNode for a module. | |
| InstanceGraphNode * | lookup (ModuleOpInterface op) |
| Look up an InstanceGraphNode for a module. | |
| InstanceGraphNode * | lookup (StringAttr name) |
| Lookup an module by name. Aborts if the module does not exist. | |
| InstanceGraphNode * | operator[] (ModuleOpInterface op) |
| Lookup an InstanceGraphNode for a module. | |
| bool | isAncestor (ModuleOpInterface child, ModuleOpInterface parent, llvm::function_ref< bool(InstanceRecord *)> skipInstance=[](InstanceRecord *_) { return false;}) |
| Check if child is instantiated by a parent. | |
| FailureOr< llvm::ArrayRef< InstanceGraphNode * > > | getInferredTopLevelNodes () |
| Get the nodes corresponding to the inferred top-level modules of a circuit. | |
| Operation * | getParent () |
| Return the parent under which all nodes are nested. | |
| iterator | begin () |
| iterator | end () |
| template<typename Fn > | |
| decltype(auto) | walkPostOrder (Fn &&fn) |
| Perform a post-order walk across the modules. | |
| template<typename Fn > | |
| decltype(auto) | walkInversePostOrder (Fn &&fn) |
| Perform an inverse-post-order walk across the modules. | |
| virtual InstanceGraphNode * | addModule (ModuleOpInterface module) |
| Add a newly created module to the instance graph. | |
| virtual void | erase (InstanceGraphNode *node) |
| Remove this module from the instance graph. | |
| virtual void | replaceInstance (InstanceOpInterface inst, InstanceOpInterface newInst) |
| Replaces an instance of a module with another instance. | |
Private Attributes | |
| InstanceGraphNode * | topLevelNode |
Additional Inherited Members | |
Public Types inherited from circt::igraph::InstanceGraph | |
| using | iterator = detail::AddressIterator< NodeList::iterator > |
| Iterate through all modules. | |
Static Public Member Functions inherited from circt::igraph::InstanceGraph | |
| static NodeList InstanceGraph::* | getSublistAccess (Operation *) |
| Returns pointer to member of operation list. | |
Protected Member Functions inherited from circt::igraph::InstanceGraph | |
| ModuleOpInterface | getReferencedModuleImpl (InstanceOpInterface op) |
| InstanceGraphNode * | getOrAddNode (StringAttr name) |
| Get the node corresponding to the module. | |
Protected Attributes inherited from circt::igraph::InstanceGraph | |
| Operation * | parent |
| The node under which all modules are nested. | |
| NodeList | nodes |
| The storage for graph nodes, with deterministic iteration. | |
| llvm::DenseMap< Attribute, InstanceGraphNode * > | nodeMap |
| This maps each operation to its graph node. | |
| llvm::SmallVector< InstanceGraphNode * > | inferredTopLevelNodes |
| A caching of the inferred top level module(s). | |
This graph tracks modules and where they are instantiated.
This is intended to be used as a cached analysis on FIRRTL circuits. This class can be used to walk the modules efficiently in a bottom-up or top-down order.
To use this class, retrieve a cached copy from the analysis manager: auto &instanceGraph = getAnalysis<InstanceGraph>(getOperation());
Definition at line 35 of file FIRRTLInstanceGraph.h.
|
explicit |
Create a new module graph of a circuit.
This must be called on a FIRRTL CircuitOp or MLIR ModuleOp.
Definition at line 23 of file FIRRTLInstanceGraph.cpp.
References circt::igraph::InstanceGraph::getParent(), circt::igraph::InstanceGraph::lookup(), and topLevelNode.
|
inline |
Get the module corresponding to the top-level module of a circuit.
Definition at line 45 of file FIRRTLInstanceGraph.h.
References getTopLevelNode().
|
inlineoverridevirtual |
Get the node corresponding to the top-level module of a circuit.
Reimplemented from circt::igraph::InstanceGraph.
Definition at line 42 of file FIRRTLInstanceGraph.h.
References topLevelNode.
Referenced by getTopLevelModule().
|
private |
Definition at line 50 of file FIRRTLInstanceGraph.h.
Referenced by getTopLevelNode(), and InstanceGraph().