diff options
author | Cyril SIX <cyril.six@kalray.eu> | 2020-02-21 11:44:43 +0100 |
---|---|---|
committer | Cyril SIX <cyril.six@kalray.eu> | 2020-02-21 11:44:43 +0100 |
commit | 0271028f40c58068975170476dcaa5aadc21cb7e (patch) | |
tree | 1f2a964555ba4865fb0b5534c9a0a9bf0dfd6ee9 /backend/Linearizeaux.ml | |
parent | 87d8a302892026bc831fd5c310874f2aad6be194 (diff) | |
download | compcert-kvx-0271028f40c58068975170476dcaa5aadc21cb7e.tar.gz compcert-kvx-0271028f40c58068975170476dcaa5aadc21cb7e.zip |
Linearizeaux: function try_merge
Diffstat (limited to 'backend/Linearizeaux.ml')
-rw-r--r-- | backend/Linearizeaux.ml | 31 |
1 files changed, 20 insertions, 11 deletions
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 |