'Construct a control dependence graph.
This implementation is based on figure 6 of paper An Efficient Method of Computing Static Single Assignment
Form by Ron Cytron, etc.'

def _construct(self):

    self._acyclic_cfg = self._cfg.copy()
    self._pre_process_cfg()
    self._pd_construct()
    self._graph = networkx.DiGraph()
    rdf = self._df_construct(self._post_dom)
    for y in self._cfg.graph.nodes_iter():
        if (y not in rdf):
            continue
        for x in rdf[y]:
            self._graph.add_edge(x, y)
