From 66cc1ea68b5d558cb2acd6ea698f20b04d9b43be Mon Sep 17 00:00:00 2001 From: Paweł Dybiec Date: Sun, 13 Jan 2019 12:52:47 +0100 Subject: Start of live variable analysis --- source/mod_student/live_variables.ml | 50 ++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 source/mod_student/live_variables.ml (limited to 'source/mod_student/live_variables.ml') diff --git a/source/mod_student/live_variables.ml b/source/mod_student/live_variables.ml new file mode 100644 index 0000000..580892b --- /dev/null +++ b/source/mod_student/live_variables.ml @@ -0,0 +1,50 @@ +open Xi_lib +open Iface +open Ir +open Ir_utils +open Analysis (* <--- tu mogą być pomocne komentarze *) +open Analysis_domain + +module Make() = struct + + module Implementation(M:sig val cfg: ControlFlowGraph.t end) = struct + open M + + (* + * Zwróćmy tablicę gdzie każdy wierzchołek jest zainicjalizowany na + * konstruktor Simple (typ BlockKnowledge) gdzie na wejściu/wyjściu + * bloku mamy pusty zbiór rejestrów. + * + * Wierzchołki oznaczające basic-bloki powinny ostatecznie być opisane + * konstruktorem Complex, ale początkowo dla wygody możemy ustawić je na Simple. + * Ważne aby funkcja przeliczająca wiedzę dla bloku podstawowego ostatecznie + * opisał blok za pomocą konstruktora Complex. + *) + let initialize_table () = + let table = Hashtbl.create 513 in + let kw = Knowledge.make ~pre:RegSet.empty ~post:RegSet.empty in + let blk_kw = BlockKnowledge.make_simple kw in + let set v = + Hashtbl.replace table v blk_kw + in + List.iter set @@ ControlFlowGraph.labels cfg; + table + + + let result : LiveVariables.table = initialize_table () + + let rec compute_fixpoint () = + failwith "Not yet implemented" + + let analyse () = + compute_fixpoint (); + result + + end + + let analyse cfg = + let module Instance = Implementation(struct let cfg = cfg end) in + Instance.analyse () + + +end -- cgit 1.4.1