From 0271028f40c58068975170476dcaa5aadc21cb7e Mon Sep 17 00:00:00 2001 From: Cyril SIX Date: Fri, 21 Feb 2020 11:44:43 +0100 Subject: Linearizeaux: function try_merge --- backend/Linearizeaux.ml | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) (limited to 'backend/Linearizeaux.ml') diff --git a/backend/Linearizeaux.ml b/backend/Linearizeaux.ml index d7150989..44322a46 100644 --- a/backend/Linearizeaux.ml +++ b/backend/Linearizeaux.ml @@ -195,11 +195,22 @@ let forward_sequences code entry = in [fs] @ (f code rem) in (f code [entry]) -let iter_set f s = Seq.iter f (Set.to_seq s) +module PInt = struct + type t = P.t + let compare x y = compare (P.to_int x) (P.to_int y) +end + +module PSet = Set.Make(PInt) + +let iter_set f s = Seq.iter f (PSet.to_seq s) + +let can_be_merged s s' = false + +let merge s s' = Some s let try_merge code fs = - let seqs = ref (Set.of_list fs) in - let oldLength = ref (Set.cardinal !seqs) in + let seqs = ref (PSet.of_list fs) in + let oldLength = ref (PSet.cardinal !seqs) in let continue = ref true in let found = ref false in while !continue do @@ -211,23 +222,21 @@ let try_merge code fs = if (!found || s == s') then () else if (can_be_merged s s') then begin - seqs := Set.remove s !seqs; - seqs := Set.remove s' !seqs; - seqs := Set.add (get_some (merge s s')) !seqs; + seqs := PSet.remove s !seqs; + seqs := PSet.remove s' !seqs; + seqs := PSet.add (get_some (merge s s')) !seqs; found := true; end else () ) !seqs ) !seqs; - if !oldLength == List.length !seqs then + if !oldLength == PSet.cardinal !seqs then continue := false else - oldLength := List.length !seqs + oldLength := PSet.cardinal !seqs end done; - (* FIXME - continue *) - - + !seqs let order_sequences fs = fs -- cgit