aboutsummaryrefslogtreecommitdiffstats
path: root/backend/Linearizeaux.ml
diff options
context:
space:
mode:
authorCyril SIX <cyril.six@kalray.eu>2020-02-21 11:44:43 +0100
committerCyril SIX <cyril.six@kalray.eu>2020-02-21 11:44:43 +0100
commit0271028f40c58068975170476dcaa5aadc21cb7e (patch)
tree1f2a964555ba4865fb0b5534c9a0a9bf0dfd6ee9 /backend/Linearizeaux.ml
parent87d8a302892026bc831fd5c310874f2aad6be194 (diff)
downloadcompcert-kvx-0271028f40c58068975170476dcaa5aadc21cb7e.tar.gz
compcert-kvx-0271028f40c58068975170476dcaa5aadc21cb7e.zip
Linearizeaux: function try_merge
Diffstat (limited to 'backend/Linearizeaux.ml')
-rw-r--r--backend/Linearizeaux.ml31
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