let insert_phi_function f =
let size = Array.length f in
let df = find_dominance_frontier f in
let assignment = find_assignment_node f in
let phi_target = Array.create size [] in
let rec insert r t i =
if not (List.mem_assoc r phi_target.(i)) then
phi_target.(i) <- ( r, t )::phi_target.(i);
if not (List.mem_assoc r assignment.(i)) then begin
assignment.(i) <- ( r, t )::assignment.(i);
List.iter (insert r t) df.(i)
end
in
for i = 0 to size - 1 do
List.iter (function r, t -> List.iter (insert r t) df.(i)) assignment.(i)
done;
for i = 0 to size - 1 do
let size = List.length f.(i).predecessor in
let make( n, t ) = n, t, Array.create size n in
f.(i).phi_function <- List.map make phi_target.(i)
done