soot.shimple.internal.analysis
Class DominanceFrontier

java.lang.Object
  |
  +--soot.shimple.internal.analysis.DominanceFrontier

public class DominanceFrontier
extends java.lang.Object

Class to compute the DominanceFrontier using Cytron's celebrated efficient algorithm.

See Also:
Efficiently Computing Static Single Assignment Form and the Control Dependence Graph

Constructor Summary
DominanceFrontier()
           
DominanceFrontier(java.util.List dominatorNodeHeads)
           
 
Method Summary
 void bottomUpDispatch(DominatorNode node)
          Make sure we visit children first.
 void processNode(DominatorNode node)
          Calculate dominance frontier for a set of basic blocks.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DominanceFrontier

public DominanceFrontier()

DominanceFrontier

public DominanceFrontier(java.util.List dominatorNodeHeads)
Method Detail

bottomUpDispatch

public void bottomUpDispatch(DominatorNode node)
Make sure we visit children first.

processNode

public void processNode(DominatorNode node)
Calculate dominance frontier for a set of basic blocks.

Uses the algorithm of Cytron et al., TOPLAS Oct. 91:

 for each X in a bottom-up traversal of the dominator tree do

      DF(X) < - null
      for each Y in Succ(X) do
        if (idom(Y)!=X) then DF(X) <- DF(X) U Y
      end
      for each Z in {idom(z) = X} do
        for each Y in DF(Z) do
              if (idom(Y)!=X) then DF(X) <- DF(X) U Y
        end
      end