heptagon/compiler/minils/main/mls_compiler.ml
2011-10-23 17:42:26 +02:00

60 lines
2 KiB
OCaml

(**************************************************************************)
(* *)
(* Heptagon *)
(* *)
(* Author : Marc Pouzet *)
(* Organization : Demons, LRI, University of Paris-Sud, Orsay *)
(* *)
(**************************************************************************)
open Misc
open Location
open Compiler_utils
open Compiler_options
let pp p = if !verbose then Mls_printer.print stdout p
let compile_program p =
(* Clocking *)
let p =
try pass "Clocking" true Clocking.program p pp
with Errors.Error ->
comment ~sep:"" "\nInfered clocks :\n";
pp p;
comment ~sep:"*** " ("Clocking failed.");
if !print_types then Global_printer.print_interface Format.std_formatter;
raise Errors.Error
in
if !print_types then Global_printer.print_interface Format.std_formatter;
(* Level clocks *)
let p = pass "Level clock" true Level_clock.program p pp in
(* Dataglow minimization *)
let p =
let call_tomato = !tomato or (List.length !tomato_nodes > 0) in
let p = pass "Extended value inlining" call_tomato Inline_extvalues.program p pp in
pass "Data-flow minimization" call_tomato Tomato.program p pp in
(** TODO: re enable when ported to the new AST
let p =
pass "Automata minimization checks" true Tomato.tomato_checks p pp in
*)
(* Normalize memories*)
let p = pass "Normalize memories" true Normalize_mem.program p pp in
(* Scheduling *)
let p =
if not !Compiler_options.use_old_scheduler then
pass "Scheduling (with minimization of interferences)" true Schedule_interf.program p pp
else
pass "Scheduling" true Schedule.program p pp
in
(* Memory allocation *)
let p = pass "Memory allocation" !do_mem_alloc Interference.program p pp in
p