# Termination and Efficiency of Data-Flow Analysis

**Definition:** A **chain** of length is a sequence such that

where means, as usual,

**Definition:** A lattice has a **finite height** if it has a chain of length and every chain is of length at most .

A finite lattice is of finite height

**Example:** The constant propagation lattice is an infinite lattice of height 2. One example chain of length 2 is

**Example:** If a state of a (one-variable) program is given by an integer, then a concrete lattice element is a set of integers. This lattice has infinite height. There is a chain

for every .

Consider a finite-height lattice

Values at each program point in DataflowAnalysis.scala is monotonically increasing

- stabilization happens in finite number of steps when the lattice has finite height
- at each step the size of lattice in at least one point increases
- termination in |CFG.V| |L.Elem| steps
- in many cases can be shown to be better

## Worklist Algorithm

The simple algorithm in DataflowAnalysis.scala always goes through all vertices

There is no need to go through vertices whose predecessors have not changed

Worklist algorithm:

- maintain a worklist (queue) of vertices whose fact needs to be updated
- initially: put entry into queue
- remove a vertex from queue, compute its new fact
- if the value changed, add all its successors into queue

Can avoid some unnecessary traversals

Note: we can re-order vertices in the queue

- different orderings correspond to different algorithm variations
- useful strategy: iterate over inner loops first