Added a generic onfiguration for backends

Each backend gives a function used to 
enable/disable passes, executed before the
beginning of the compilation
This commit is contained in:
Cédric Pasteur 2011-04-14 13:53:30 +02:00
parent 2f346f873c
commit 57bc9f210b
4 changed files with 22 additions and 10 deletions

View file

@ -51,6 +51,8 @@ let compile_program modname source_f =
let close_all_files () = close_in source_c; close_out epci_c; close_out mls_c in
try
(* Activates passes according to the backend used *)
Mls2seq.load_conf ();
(* Process the [lexbuf] to an Heptagon AST *)
let p = Hept_parser_scoper.parse_program modname lexbuf in
(* Process the Heptagon AST *)

View file

@ -19,7 +19,6 @@ open Misc
type target =
| Obc of (Obc.program -> unit)
| Obc_no_params of (Obc.program -> unit)
| Obc_scalar of (Obc.program ->unit)
| Minils of (Minils.program -> unit)
| Minils_no_params of (Minils.program -> unit)
@ -39,12 +38,13 @@ let write_obc_file p =
close_out obc;
comment "Generation of Obc code"
let no_conf () = ()
let targets = [ "c", Obc_no_params Cmain.program;
"java", Obc_scalar Java_main.program;
"obc", Obc write_obc_file;
"obc_np", Obc_no_params write_obc_file;
"epo", Minils write_object_file ]
let targets = [ "c",(Obc_no_params Cmain.program, no_conf);
"java", (Obc_scalar Java_main.program, java_conf);
"obc", (Obc write_obc_file, no_conf;
"obc_np", (Obc_no_params write_obc_file, no_conf);
"epo", (Minils write_object_file, no_conf) ]
let generate_target p s =
let print_unfolded p_list =
@ -52,7 +52,7 @@ let generate_target p s =
if !Compiler_options.verbose
then List.iter (Mls_printer.print stderr) p_list in
let target =
(try List.assoc s targets
(try fst (List.assoc s targets)
with Not_found -> language_error s; raise Errors.Error) in
match target with
| Minils convert_fun ->
@ -69,10 +69,16 @@ let generate_target p s =
let o_list = List.map Mls2obc.program p_list in
let o_list = List.map Obc_compiler.program o_list in
List.iter convert_fun o_list
| Obc_scalar convert_fun ->
let p = p |> Mls2obc.program |> Scalarize.program in
convert_fun p
let load_conf () =
let target_conf s =
try
let conf = snd (List.assoc s targets) in
conf ()
with
Not_found -> language_error s; raise Errors.Error
in
List.iter target_conf !target_languages
(** Translation into dataflow and sequential languages, defaults to obc. *)
let program p =

View file

@ -3,6 +3,8 @@ open Signature
open Java
open Java_printer
let java_conf () =
Compiler_options.do_scalarize := true
(** returns the vd and the pat of a fresh ident from [name] *)
let mk_var ty name =

View file

@ -97,6 +97,8 @@ let add_tomato_check s = tomato_check := s :: !tomato_check
let do_iterator_fusion = ref false
let do_scalarize = ref false
let doc_verbose = "\t\t\tSet verbose mode"
and doc_version = "\t\tThe version of the compiler"
and doc_print_types = "\t\t\tPrint types"