diff options
author | Cyril SIX <cyril.six@kalray.eu> | 2020-02-20 11:50:51 +0100 |
---|---|---|
committer | Cyril SIX <cyril.six@kalray.eu> | 2020-02-20 11:50:51 +0100 |
commit | 87d8a302892026bc831fd5c310874f2aad6be194 (patch) | |
tree | 33ff179c4890ec0c669b01172f9f1824b3718310 /backend/Linearizeaux.ml | |
parent | 840f7e5af8294d121caf1c712b75ba3c13914a54 (diff) | |
download | compcert-kvx-87d8a302892026bc831fd5c310874f2aad6be194.tar.gz compcert-kvx-87d8a302892026bc831fd5c310874f2aad6be194.zip |
WIP2
Diffstat (limited to 'backend/Linearizeaux.ml')
-rw-r--r-- | backend/Linearizeaux.ml | 40 |
1 files changed, 24 insertions, 16 deletions
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 |