Program Representation

Compilers use a variety of intermediate representations of programs, such as abstract syntax trees, control flow graphs, and def-use chains etc. Most of these representations were developed in the context of traditional optimizing compilers, and are not adequate for complex program manipulation problems such as slicing. The program dependence graph (PDG) can be used for these purposes, but it is difficult to use the PDG directly to prove the correctness of analysis and restructuring algorithms because the PDG does not have a formal semantics.

To overcome these problems, we developed a representation called the dependence flow graph (DFG) which is an intermediate program representation unifying control flow and dataflow. The DFG has a precise operational semantics based on the dataflow model of computation, so it can be used to perform provably correct program manipulations.

Here are some people who use DFGs.

Publications: