# `Reach.ControlFlow`
[🔗](https://github.com/elixir-vibe/reach/blob/v2.8.4/lib/reach/control_flow.ex#L1)

Translates IR nodes into control flow graph vertices and edges.

# `edge_label`

```elixir
@type edge_label() ::
  :sequential
  | :true_branch
  | :false_branch
  | {:clause_match, non_neg_integer()}
  | {:clause_fail, non_neg_integer()}
  | :guard_success
  | :guard_fail
  | :exception
  | :catch_entry
  | :after_entry
  | :timeout
  | :return
```

# `vertex`

```elixir
@type vertex() :: Reach.IR.Node.id() | :entry | :exit
```

# `build`

```elixir
@spec build(Reach.IR.Node.t()) :: Graph.t()
```

Builds a control flow graph from a function definition IR node.

Returns a `Graph.t()` with `:entry` and `:exit` as synthetic nodes.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
