Package harpoon.Analysis.DataFlow

Provides the classes for performing Data-Flow Analysis on a number of Intermediate Representations.

See:
          Description

Class Summary
BackwardDataFlowBasicBlockVisitor BackwardDataFlowBasicBlockVisitor
BackwardDataFlowQuadVisitor BackwardDataFlowQuadVisitor
CachingLiveTemps CachingLiveTemps is an extension of LiveTemps that keeps a cache of the recent results that it calculated.
DataFlowBasicBlockVisitor DataFlowBasicBlockVisitor is a specialized BasicBlockVisitor for performing data flow analysis on a set of BasicBlock.
DataFlowQuadVisitor DataFlowQuadVisitor
ForwardDataFlowBasicBlockVisitor ForwardDataFlowBasicBlockVisitor
ForwardDataFlowQuadVisitor ForwardDataFlowQuadVisitor
InstrSolver InstrSolver
LiveTemps LiveTemps is an extension of LiveVars for performing liveness analysis on Temps.
LiveVars LiveVars performs Liveness Analysis for the variables in the HCodes passed to it.
LiveVars.BBVisitor  
LiveVars.BBVisitor.LiveVarInfo  
ReachingDefs ReachingDefs is a ForwardDataFlowBasicBlockVisitor for performing reaching definitions analysis on any IR that implements HCodeElement, CFGraphable, and UseDefable.
ReachingHCodeElements ReachingHCodeElements is an extension of ReachingDefs for performing reaching definitions analysis on HCodeElementss.
ReversePostOrderEnumerator  
ReversePostOrderIterator  
Solver Solver contains static methods to find the fixed point of a set of data-flow equations.
SpaceHeavyLiveTemps SpaceHeavyLiveTemps is an extension of LiveTemps that keeps ALL of the results of the queries that it has calculated alive.
TreeSolver A blatant rip-off of Whaley's QuadSolver class, used to solve data flow equations (baby).
 

Package harpoon.Analysis.DataFlow Description

Provides the classes for performing Data-Flow Analysis on a number of Intermediate Representations.

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.

Related Documentation

For further information, see:

Author:
John Whaley, Felix Klock (pnkfelix@mit.edu)