From 87d8a302892026bc831fd5c310874f2aad6be194 Mon Sep 17 00:00:00 2001 From: Cyril SIX Date: Thu, 20 Feb 2020 11:50:51 +0100 Subject: WIP2 --- backend/Linearizeaux.ml | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) (limited to 'backend/Linearizeaux.ml') diff --git a/backend/Linearizeaux.ml b/backend/Linearizeaux.ml index 8dccbb4b..d7150989 100644 --- a/backend/Linearizeaux.ml +++ b/backend/Linearizeaux.ml @@ -201,25 +201,33 @@ let try_merge code fs = let seqs = ref (Set.of_list fs) in let oldLength = ref (Set.cardinal !seqs) in let continue = ref true in + let found = ref false in while !continue do - iter_set (fun s -> - iter_set (fun s' -> - if (s == s') then () - else if (can_be_merged s s') then - begin - seqs - end - else () - ) !seqs - ) !seqs - (* FIXME - FIXME - continue *) + begin + found := false; + iter_set (fun s -> + if !found then () + else iter_set (fun s' -> + 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; + found := true; + end + else () + ) !seqs + ) !seqs; + if !oldLength == List.length !seqs then + continue := false + else + oldLength := List.length !seqs + end + done; + (* FIXME - continue *) - if !oldLength == List.length !seqs then - continue := false - else - oldLength := List.length !seqs - done let order_sequences fs = fs -- cgit