#include <mim/nest.h>
Classes | |
| struct | Children |
| struct | SiblDeps |
Public Types | |
| using | SCC = absl::btree_set<const Node*, GIDLt<const Node*>> |
| Strongly Connected Component. | |
Public Member Functions | |
Getters | |
| std::string | name () const |
| const Nest & | nest () const |
| const Node * | inest () const |
| Immediate nester/parent of this Node. | |
| auto | idom () const |
| Immediate Dominator for children in connected components. | |
| bool | is_root () const |
| Def * | mut () const |
| The mutable capsulated in this Node or nullptr, if it's a virtual root comprising several Nodes. | |
| uint32_t | level () const |
| uint32_t | loop_depth () const |
| uint32_t | gid () const |
| Stable id for deterministic hashing/ordering: the underlying mut's gid, or 0 for the (unique) virtual root. | |
Children | |
| const Children & | children () const |
| Children & | children () |
Sibling Dependencies | |
These are the dependencies across children(): A child n depends() on m, if a subtree of n uses m. | |
| template<bool Forward = true> | |
| auto & | sibl_deps () |
| template<bool Forward = true> | |
| const auto & | sibl_deps () const |
SCCs | |
SCCs for all children dependencies.
| |
| const auto & | SCCs () |
| const auto & | topo () const |
| Topological sorting of all SCCs. | |
| bool | is_recursive () const |
| bool | is_mutually_recursive () const |
| bool | is_directly_recursive () const |
Friends | |
| class | Nest |
| using mim::Nest::Node::SCC = absl::btree_set<const Node*, GIDLt<const Node*>> |
|
inline |
Definition at line 94 of file nest.h.
Referenced by mim::post_order().
|
inline |
|
inline |
Immediate Dominator for children in connected components.
This is used to transform first order programs into structured form in the [sflow](mim::plug::sflow) plugin and for late code placement in [Nest::lca].
|
inline |
Immediate nester/parent of this Node.
Definition at line 38 of file nest.h.
Referenced by mim::Nest::lca().
|
inline |
Definition at line 159 of file nest.h.
References is_recursive().
|
inline |
Definition at line 158 of file nest.h.
References is_recursive().
|
inline |
Definition at line 157 of file nest.h.
Referenced by is_directly_recursive(), and is_mutually_recursive().
|
inline |
|
inline |
The mutable capsulated in this Node or nullptr, if it's a virtual root comprising several Nodes.
Definition at line 45 of file nest.h.
References is_root().
Referenced by mim::Nest::Node::Children::contains(), mim::sexpr::Emitter::finalize(), name(), mim::Nest::Node::Children::operator[](), and mim::post_order().
|
inline |
Definition at line 36 of file nest.h.
References mut(), and mim::Def::unique_name().
|
inline |
|
inline |
|
inline |
Definition at line 143 of file nest.h.
References sibl_deps().
|
inline |
|
friend |