SUMMARY
Given:
- A CFG,
- a domain of "dataflow facts" (a complete lattice L),
- a monotonic dataflow function for each CFG node, and
- an initial dataflow fact (an element of L)
the goal of dataflow analysis is to compute a "dataflow fact"
(an element of L) for each CFG node.
Ideally, we want the MOP (meet over all paths) solution, in which
the fact at node n is the combination of the facts induced by all paths to n.
However, for CFGs with cycles, it is not possible to compute this solution
directly.
Another approach to solving a dataflow problem is to solve a system
of equations that relates the dataflow facts that hold before each
node to the facts that hold after the node.
There are two basic approaches to solving the systems of equations:
- iterative algorithms
- elimination algorithms
Kildall showed that if the dataflow functions are distributive,
then the (original version of the)
iterative algorithm always terminates,
and always finds the MOP solution.
Kam and Ullman later showed that if the dataflow functions are
monotonic then the iterative algorithm always finds the
greatest solution to the set of equations.
They also showed that if the functions are monotonic but not
distributive, then that solution is not always the same as
the MOP solution.
I think it is true that the
greatest solution to the system of equations is always
an approximation to the MOP solution (i.e.,
may be lower in the lattice of solutions).
Return to
Dataflow Analysis table of contents.
Go to the previous section.