let ssa_transform t f parameter_list =
let f, variable_environment = promote_variable t parameter_list f in
print_string "\ncheck 1:\n";
for i = 0 to Array.length f - 1 do
print_string (" ------------- "^(string_of_int i)^" ------------- \n");
print_il_basic_block f.(i)
done;
find_dominator f;
insert_phi_function f;
print_string "\ncheck 2:\n";
for i = 0 to Array.length f - 1 do
print_string (" ------------- "^(string_of_int i)^" ------------- \n");
print_il_basic_block f.(i)
done;
let max_variable_number = Array.length variable_environment in
let f, max_variable_number, variable_environment =
make_ssa f max_variable_number variable_environment
in
print_string "\ncheck 3:\n";
for i = 0 to Array.length f - 1 do
print_string (" ------------- "^(string_of_int i)^" ------------- \n");
print_il_basic_block f.(i)
done;
find_loop f;
eliminate_redundant_move f max_variable_number;
eliminate_unused_variable f max_variable_number variable_environment;
print_string "\ncheck 4:\n";
for i = 0 to Array.length f - 1 do
print_string (" ------------- "^(string_of_int i)^" ------------- \n");
print_il_basic_block f.(i)
done;
let max_variable_number, variable_environment =
make_compact f max_variable_number variable_environment
in
print_string "\ncheck 5:\n";
for i = 0 to Array.length f - 1 do
print_string (" ------------- "^(string_of_int i)^" ------------- \n");
print_il_basic_block f.(i)
done;
f, max_variable_number, variable_environment