heptagon/compiler/minils/analysis/level_clock.ml

33 lines
1.5 KiB
OCaml
Raw Normal View History

2011-05-12 17:40:23 +02:00
(**************************************************************************)
(* *)
(* Heptagon *)
(* *)
(* Author : Marc Pouzet *)
(* Organization : Demons, LRI, University of Paris-Sud, Orsay *)
(* *)
(**************************************************************************)
open Clocks
open Minils
(* Any clock variable left after clocking is free and should be set to level_ck.
2011-06-27 16:08:56 +02:00
Since inputs and outputs are grounded to Cbase, this happens when
2011-05-23 09:24:57 +02:00
no data dependence exists between an expression and the inputs/outputs.*)
2011-05-12 17:40:23 +02:00
(* We are confident that it is sufficient to unify level_ck with base_ck
for expressions having a base_ck == Cvar.
The other ones are coming from one like this one,
indeed if it was Con (Cvar,c,x) x would have to be defined with an expression of clock Cvar.*)
2011-05-23 14:03:45 +02:00
let eq _ acc eq =
let e = eq.eq_rhs in
2011-05-12 17:40:23 +02:00
let _ = match ck_repr e.e_base_ck with
2011-05-23 09:24:57 +02:00
| Cvar {contents = Cindex _} -> unify_ck e.e_base_ck e.e_level_ck
2011-05-12 17:40:23 +02:00
| _ -> ()
in
2011-05-23 14:03:45 +02:00
eq,acc (* no recursion since in minils exps are not recursive *)
2011-05-12 17:40:23 +02:00
let program p =
2011-05-23 14:03:45 +02:00
let funs = { Mls_mapfold.defaults with Mls_mapfold.eq = eq } in
2011-05-12 17:40:23 +02:00
let p, _ = Mls_mapfold.program_it funs [] p in
p