EdgeKind

Possible edge kinds, or "colors".

Each Gyre node has one or more edge slots, which act as directed connectors. This means that nodes don't reference each other directly. Instead, they contain slots which connect to the slots of other nodes. There are different kinds of edge slots, which indicate their meaning. RULE: Every pair of connecting edge slots must have a matching kind.

Please note the directionality difference between 'dependency' and 'flow' edges.

Values

ValueMeaning
control

A control flow edge going from node A to B indicates that, after control reaches node A, it may then proceed to B. Multiple control flow edges leaving a node indicate either concurrency or a conditional branch.

data

Data dependency edges represent use-def relations. They go from slots using the value to the one which produced it.

memory

Memory dependencies are mostly like discriminated data dependencies. They must be treated differently because, unlike data dependencies which represent immutable values, memory is mutable and thus subject to more scheduling constraints, aliasing problems and data races.

type

Type dependencies represent compile-time values carrying type information.

Examples

Node* node;
InEdge.ID slot;
//
auto sink = InEdge.control(node, slot);
auto source = OutEdge.control(&sink);
//
auto def = InEdge.data(node, slot);
auto use = OutEdge.data(&def);

See Also