In a nutshell, a VL is a data structure that represents a partial order. For each function in the program, a CAG is created. A CAG is a data structure that specifies the flow of values through a computation. This structure is based solely on data dependencies rather than control flow. Figure 3 illustrates a simple CAG for a sequential set of instructions.
Nodes contain values and operators.
Directed edges indicate data flow, and thus data dependencies. A more interesting example in Figure 4 shows how a control construct can be converted to a data-flow representation. The first step of the analysis phase builds a VL for each type, and a CAG for a routine from the structures already created. The algorithm constructs each VL in such a way that the bottom of the lattice contains data elements whose values are known. Further up in the lattice are elements whose values are less certain.