forge.dataflow
Class DominatorAnalysis

java.lang.Object
  extended by forge.dataflow.DataflowAnalysis<java.util.Set<CFGStmt>>
      extended by forge.dataflow.DominatorAnalysis

public final class DominatorAnalysis
extends DataflowAnalysis<java.util.Set<CFGStmt>>

Computes the dominators for each node in the CFG.

Author:
Greg Dennis (gdennis@mit.edu)

Field Summary
static DominatorAnalysis ANALYSIS
          singleton.
 
Method Summary
 java.util.Set<CFGStmt> copy(java.util.Set<CFGStmt> data)
          Makes a copy of the specified data.
 java.util.Set<CFGStmt> initial()
          Returns the initial data set.
 boolean merge(java.util.Set<CFGStmt> from, java.util.Set<CFGStmt> into)
          Merges "from" data into the "into" data and return true iff the into data has changed.
 java.util.Set<CFGStmt> transfer(AssignStmt stmt, java.util.Set<CFGStmt> input)
          Transfer function at an assign stmt.
 BranchData<java.util.Set<CFGStmt>> transfer(BranchStmt stmt, java.util.Set<CFGStmt> input)
          Transfer function at a branch node.
 java.util.Set<CFGStmt> transfer(CallStmt stmt, java.util.Set<CFGStmt> input)
          Transfer function at a call stmt.
 java.util.Set<CFGStmt> transfer(CreateStmt stmt, java.util.Set<CFGStmt> input)
          Transfer function at a create stmt.
 java.util.Set<CFGStmt> transfer(ExitStmt stmt, java.util.Set<CFGStmt> input)
          Transfer function at a terminal node.
 java.util.Set<CFGStmt> transfer(SpecStmt stmt, java.util.Set<CFGStmt> input)
          Transfer function at an spec stmt.
 
Methods inherited from class forge.dataflow.DataflowAnalysis
analyze, isBackward
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

ANALYSIS

public static final DominatorAnalysis ANALYSIS
singleton.

Method Detail

initial

public java.util.Set<CFGStmt> initial()
Description copied from class: DataflowAnalysis
Returns the initial data set. If this is a forward analysis, it is the data immediately preceding the CFG's entry node; in a backward analysis it is the exit data immediate following the terminal node.

Specified by:
initial in class DataflowAnalysis<java.util.Set<CFGStmt>>

transfer

public java.util.Set<CFGStmt> transfer(AssignStmt stmt,
                                       java.util.Set<CFGStmt> input)
Description copied from class: DataflowAnalysis
Transfer function at an assign stmt. This implementation returns the input data.

Overrides:
transfer in class DataflowAnalysis<java.util.Set<CFGStmt>>

transfer

public BranchData<java.util.Set<CFGStmt>> transfer(BranchStmt stmt,
                                                   java.util.Set<CFGStmt> input)
Description copied from class: DataflowAnalysis
Transfer function at a branch node. If this is a backward analysis, the then and else data must be the same; they must exhibit reference equality (==) with one another; otherwise, the analyze method may throw an IllegalStateException. This implementation returns new BranchData(input).

Overrides:
transfer in class DataflowAnalysis<java.util.Set<CFGStmt>>

transfer

public java.util.Set<CFGStmt> transfer(CallStmt stmt,
                                       java.util.Set<CFGStmt> input)
Description copied from class: DataflowAnalysis
Transfer function at a call stmt. This implementation returns the input data.

Overrides:
transfer in class DataflowAnalysis<java.util.Set<CFGStmt>>

transfer

public java.util.Set<CFGStmt> transfer(CreateStmt stmt,
                                       java.util.Set<CFGStmt> input)
Description copied from class: DataflowAnalysis
Transfer function at a create stmt. This implementation returns the input data.

Overrides:
transfer in class DataflowAnalysis<java.util.Set<CFGStmt>>

transfer

public java.util.Set<CFGStmt> transfer(SpecStmt stmt,
                                       java.util.Set<CFGStmt> input)
Description copied from class: DataflowAnalysis
Transfer function at an spec stmt. This implementation returns the input data.

Overrides:
transfer in class DataflowAnalysis<java.util.Set<CFGStmt>>

transfer

public java.util.Set<CFGStmt> transfer(ExitStmt stmt,
                                       java.util.Set<CFGStmt> input)
Description copied from class: DataflowAnalysis
Transfer function at a terminal node. This implementation returns the input data.

Overrides:
transfer in class DataflowAnalysis<java.util.Set<CFGStmt>>

merge

public boolean merge(java.util.Set<CFGStmt> from,
                     java.util.Set<CFGStmt> into)
Description copied from class: DataflowAnalysis
Merges "from" data into the "into" data and return true iff the into data has changed.

Specified by:
merge in class DataflowAnalysis<java.util.Set<CFGStmt>>

copy

public java.util.Set<CFGStmt> copy(java.util.Set<CFGStmt> data)
Description copied from class: DataflowAnalysis
Makes a copy of the specified data.

Specified by:
copy in class DataflowAnalysis<java.util.Set<CFGStmt>>