sp-04/src/ch/usi/inf/sp/dom/DominatorAnalyzer.java

53 lines
1.6 KiB
Java

package ch.usi.inf.sp.dom;
import ch.usi.inf.sp.cfg.BasicBlock;
import ch.usi.inf.sp.cfg.ControlFlowGraph;
import ch.usi.inf.sp.graph.Traversal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DominatorAnalyzer {
/**
* Cooper et al.'s "Engineered Algorithm".
* ================================================================
* for all nodes, b // initialize the dominators array
* doms[b] ← Undefined
* doms[entryNode] ← entryNode
* Changed ← true
* while (Changed)
* Changed ← false
* for all nodes, b, in reverse postorder (except entryNode)
* newidom ← first (processed) predecessor of b // (pick one)
* for all other predecessors, p, of b
* if doms[p] != Undefined // i.e., if doms[p] already calculated
* newidom ← intersect(p, newidom)
* if doms[b] != newidom
* doms[b] ← newidom
* Changed ← true
*
* function intersect(b1, b2) returns node
* finger1 ← b1
* finger2 ← b2
* while (finger1 != finger2)
* while (finger1 < finger2)
* finger1 = doms[finger1]
* while (finger2 < finger1)
* finger2 = doms[finger2]
* return finger1
* ================================================================
* Figure 3 of Cooper, Harvey, Kennedy
*/
public static DominatorTree analyze(final ControlFlowGraph cfg) {
//TODO
return null;
}
// probably add a method intersect(...)
}