Liveness analysis is related to allocating registers. Two temporary values can fit in the same register if they’re never ‘live’ at the same time. A temporary is *live* if it holds a value that will be used in the future.

He talked about what Control-Flow Graphs are, they’re pretty obvious though. Draw lines between nodes, nodes are instructions in the program; no labels. Lines indicate control flow.

There’s a bunch of definitions on slide 143 which are then used later in equations etc.

## How do you compute ‘Liveness’?

```
out(n) = set of in(s) where s is the 'successive' nodes
of n (note that because you work backwards, this
is the 'previous' ones.
The final node has no `out` bit.
in(n) = use(n) + (out(n) - def(n))
(where + is union and - is intersection)
```

Repeat this in a table until it is stable.