let translate_statement stmt =
  let print_statement_list statement_list =
    List.iter (fun x -> print_string (print_il0 x)) statement_list;
  in
  let statement_list = replace_label stmt in
  print_string "-------------- check 1 --------------\n";
  print_endline (print_il0 statement_list);
  let statement_list_list = split_basic_block statement_list in
  let statement_list_list = List.filter (function l -> not (l = [])) statement_list_list in
  print_string "-------------- check 2 --------------\n";
  List.iter (function l -> print_string "--\n"; print_statement_list l) statement_list_list;
  print_string "-------------- check 3 --------------\n";
  let f = make_basic_block statement_list_list in
  print_function f;
  let f = eliminate_unreachable f in
  print_string "-------------- check 4 --------------\n";
  print_function f;
  f