The purpose of data-flow analysis is to provide global information about how a procedure (or a larger segment of a program) manipulates its data. For example, constant-propagation analysis seeks to determine whether all asssignments to a particular variable that may provide the value of that variable at some particular point necessarily give it the same constant value. If so, a use of the variable at that point can be replaced by the constant.Muchnick, Steven S., Advanced Compiler Design & Implementation, pg. 217
The design of the DataFlow package implements data-flow analysis passes in terms of three parts: a flowgraph of nodes, a node-visitor to calculate flow functions defined according to a lattice, and a solver to find a maximum fixed point of the lattice.
Generally the nodes of an analysis will be BasicBlock objects, and the corresponding visitor will be an subclass of BasicBlockVisitor.