Skip to content
Snippets Groups Projects
Commit cfdb4fe9 authored by THIRIOUX Xavier's avatar THIRIOUX Xavier
Browse files

- corrected bugs with the inlining mode

parent 3f823d04
No related branches found
No related tags found
No related merge requests found
......@@ -14,6 +14,8 @@
(** Predefined operator clocks *)
open Clocks
let ck_tuple cl = new_ck (Ctuple cl) true
let ck_bin_univ =
let univ = new_univar () in
new_ck (Carrow (new_ck (Ctuple [univ;univ]) true, univ)) true
......
......@@ -391,7 +391,14 @@ let expr_list_of_expr expr =
let expr_of_expr_list loc elist =
match elist with
| [t] -> { t with expr_loc = loc }
| t::_ -> { t with expr_desc = Expr_tuple elist; expr_loc = loc }
| t::_ ->
let tlist = List.map (fun e -> e.expr_type) elist in
let clist = List.map (fun e -> e.expr_clock) elist in
{ t with expr_desc = Expr_tuple elist;
expr_type = Type_predef.type_tuple tlist;
expr_clock = Clock_predef.ck_tuple clist;
expr_tag = Utils.new_tag ();
expr_loc = loc }
| _ -> assert false
let call_of_expr expr =
......
......@@ -62,6 +62,7 @@ let inline_call orig_expr args reset locals node =
assert (reset = None);
let assign_inputs = mkeq loc (List.map (fun v -> v.var_id) inputs', args) in
let assign_inputs = Splitting.tuple_split_eq assign_inputs in
let expr = expr_of_expr_list
loc
(List.map (fun v -> mkexpr loc (Expr_ident v.var_id)) outputs')
......@@ -77,7 +78,7 @@ let inline_call orig_expr args reset locals node =
in
expr,
inputs'@outputs'@locals'@locals,
assign_inputs::eqs',
assign_inputs@eqs',
asserts'
......@@ -118,8 +119,7 @@ let rec inline_expr expr locals nodes =
(* let _ = Format.eprintf "Inlining call to %s@." id in *)
let node = try List.find (check_node_name id) nodes
with Not_found -> (assert false) in
let node =
match node.top_decl_desc with Node nd -> nd | _ -> assert false in
let node = node_of_top node in
let node = inline_node node nodes in
let expr, locals', eqs'', asserts'' =
inline_call expr args' reset locals' node in
......
......@@ -425,6 +425,9 @@ let find_eq xl eqs =
to the computed schedule [sch]
*)
let sort_equations_from_schedule nd sch =
(* Format.eprintf "%s schedule: %a@."
nd.node_id
(Utils.fprintf_list ~sep:" ; " Scheduling.pp_eq_schedule) sch;*)
let split_eqs = Splitting.tuple_split_eq_list nd.node_eqs in
let eqs_rev, remainder =
List.fold_left
......@@ -439,12 +442,14 @@ let sort_equations_from_schedule nd sch =
([], split_eqs)
sch
in
if List.length remainder > 0 then (
Format.eprintf "Equations not used are@.%a@.Full equation set is:@.%a@.@?"
Printers.pp_node_eqs remainder
Printers.pp_node_eqs nd.node_eqs;
assert false);
List.rev eqs_rev
begin
if List.length remainder > 0 then (
Format.eprintf "Equations not used are@.%a@.Full equation set is:@.%a@.@?"
Printers.pp_node_eqs remainder
Printers.pp_node_eqs nd.node_eqs;
assert false);
List.rev eqs_rev
end
let translate_eqs node args eqs =
List.fold_right (fun eq args -> translate_eq node args eq) eqs args;;
......
......@@ -85,31 +85,30 @@ and pp_handlers fmt hl =
and pp_app fmt id e r =
match r with
| None ->
(match id, e.expr_desc with
| "+", Expr_tuple([e1;e2]) -> fprintf fmt "(%a + %a)" pp_expr e1 pp_expr e2
| "uminus", _ -> fprintf fmt "(- %a)" pp_expr e
| "-", Expr_tuple([e1;e2]) -> fprintf fmt "(%a - %a)" pp_expr e1 pp_expr e2
| "*", Expr_tuple([e1;e2]) -> fprintf fmt "(%a * %a)" pp_expr e1 pp_expr e2
| "/", Expr_tuple([e1;e2]) -> fprintf fmt "(%a / %a)" pp_expr e1 pp_expr e2
| "mod", Expr_tuple([e1;e2]) -> fprintf fmt "(%a mod %a)" pp_expr e1 pp_expr e2
| "&&", Expr_tuple([e1;e2]) -> fprintf fmt "(%a and %a)" pp_expr e1 pp_expr e2
| "||", Expr_tuple([e1;e2]) -> fprintf fmt "(%a or %a)" pp_expr e1 pp_expr e2
| "xor", Expr_tuple([e1;e2]) -> fprintf fmt "(%a xor %a)" pp_expr e1 pp_expr e2
| "impl", Expr_tuple([e1;e2]) -> fprintf fmt "(%a => %a)" pp_expr e1 pp_expr e2
| "<", Expr_tuple([e1;e2]) -> fprintf fmt "(%a < %a)" pp_expr e1 pp_expr e2
| "<=", Expr_tuple([e1;e2]) -> fprintf fmt "(%a <= %a)" pp_expr e1 pp_expr e2
| ">", Expr_tuple([e1;e2]) -> fprintf fmt "(%a > %a)" pp_expr e1 pp_expr e2
| ">=", Expr_tuple([e1;e2]) -> fprintf fmt "(%a >= %a)" pp_expr e1 pp_expr e2
| "!=", Expr_tuple([e1;e2]) -> fprintf fmt "(%a != %a)" pp_expr e1 pp_expr e2
| "=", Expr_tuple([e1;e2]) -> fprintf fmt "(%a = %a)" pp_expr e1 pp_expr e2
| "not", _ -> fprintf fmt "(not %a)" pp_expr e
| _, Expr_tuple _ -> fprintf fmt "%s %a" id pp_expr e
| _ -> fprintf fmt "%s (%a)" id pp_expr e
)
| Some (x, l) -> fprintf fmt "%s (%a) every %s(%s)" id pp_expr e l x
| None -> pp_call fmt id e
| Some (x, l) -> fprintf fmt "%t every %s(%s)" (fun fmt -> pp_call fmt id e) l x
and pp_call fmt id e =
match id, e.expr_desc with
| "+", Expr_tuple([e1;e2]) -> fprintf fmt "(%a + %a)" pp_expr e1 pp_expr e2
| "uminus", _ -> fprintf fmt "(- %a)" pp_expr e
| "-", Expr_tuple([e1;e2]) -> fprintf fmt "(%a - %a)" pp_expr e1 pp_expr e2
| "*", Expr_tuple([e1;e2]) -> fprintf fmt "(%a * %a)" pp_expr e1 pp_expr e2
| "/", Expr_tuple([e1;e2]) -> fprintf fmt "(%a / %a)" pp_expr e1 pp_expr e2
| "mod", Expr_tuple([e1;e2]) -> fprintf fmt "(%a mod %a)" pp_expr e1 pp_expr e2
| "&&", Expr_tuple([e1;e2]) -> fprintf fmt "(%a and %a)" pp_expr e1 pp_expr e2
| "||", Expr_tuple([e1;e2]) -> fprintf fmt "(%a or %a)" pp_expr e1 pp_expr e2
| "xor", Expr_tuple([e1;e2]) -> fprintf fmt "(%a xor %a)" pp_expr e1 pp_expr e2
| "impl", Expr_tuple([e1;e2]) -> fprintf fmt "(%a => %a)" pp_expr e1 pp_expr e2
| "<", Expr_tuple([e1;e2]) -> fprintf fmt "(%a < %a)" pp_expr e1 pp_expr e2
| "<=", Expr_tuple([e1;e2]) -> fprintf fmt "(%a <= %a)" pp_expr e1 pp_expr e2
| ">", Expr_tuple([e1;e2]) -> fprintf fmt "(%a > %a)" pp_expr e1 pp_expr e2
| ">=", Expr_tuple([e1;e2]) -> fprintf fmt "(%a >= %a)" pp_expr e1 pp_expr e2
| "!=", Expr_tuple([e1;e2]) -> fprintf fmt "(%a != %a)" pp_expr e1 pp_expr e2
| "=", Expr_tuple([e1;e2]) -> fprintf fmt "(%a = %a)" pp_expr e1 pp_expr e2
| "not", _ -> fprintf fmt "(not %a)" pp_expr e
| _, Expr_tuple _ -> fprintf fmt "%s %a" id pp_expr e
| _ -> fprintf fmt "%s (%a)" id pp_expr e
and pp_eexpr fmt e =
fprintf fmt "%a%t %a"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment