let make_dominance_tree f =
let size = Array.length f in
let children = Array.create size [] in
let root = ref [] in
for i = 0 to size - 1 do
let dominator = f.(i).immediate_dominator in
if dominator != -1 then
children.(dominator) <- i::children.(dominator)
else
root := i::!root
done;
for i = 0 to size - 1 do
children.(i) <- List.rev children.(i)
done;
List.rev !root, children