let clean_graph cfg =
let graph = cfg_graph cfg in
let rec reach n =
if !n.reachable then ()
else (!n.reachable <- true; iter_succ reach cfg n)
in reach (cfg_start cfg);
let clean n acc =
if !n.reachable then acc
else begin
debug "remove unreachable node %a@." VL.pretty n;
let v = node_type n in
CFG.remove_vertex graph n;
Hashtbl.remove cfg.stmt_node (node_type_id v);
v::acc
end
in
let unreach = fold_nodes clean cfg [] in
{ cfg with unreachables = unreach }