aboutsummaryrefslogtreecommitdiffstats
path: root/backend/Linearizeaux.ml
diff options
context:
space:
mode:
authorCyril SIX <cyril.six@kalray.eu>2020-02-20 11:50:51 +0100
committerCyril SIX <cyril.six@kalray.eu>2020-02-20 11:50:51 +0100
commit87d8a302892026bc831fd5c310874f2aad6be194 (patch)
tree33ff179c4890ec0c669b01172f9f1824b3718310 /backend/Linearizeaux.ml
parent840f7e5af8294d121caf1c712b75ba3c13914a54 (diff)
downloadcompcert-kvx-87d8a302892026bc831fd5c310874f2aad6be194.tar.gz
compcert-kvx-87d8a302892026bc831fd5c310874f2aad6be194.zip
WIP2
Diffstat (limited to 'backend/Linearizeaux.ml')
-rw-r--r--backend/Linearizeaux.ml40
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