Skip to content

Commit aa3bc07

Browse files
committed
Remove more uses of Simple.Set and Simple.Map
Everything is now gone except for a few stragglers in `cmx/` and `naming/`; these will be more easily dealt with after some changes to `Simple.t`.
1 parent dec3cbd commit aa3bc07

File tree

7 files changed

+77
-43
lines changed

7 files changed

+77
-43
lines changed

middle_end/flambda/basic/name.ml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,11 @@ let must_be_symbol_opt t =
104104
pattern_match t
105105
~var:(fun _ -> None)
106106
~symbol:(fun sym -> Some sym)
107+
108+
module Pair = struct
109+
include Identifiable.Make_pair
110+
(Reg_width_things.Name)
111+
(Reg_width_things.Name)
112+
113+
type nonrec t = t * t
114+
end

middle_end/flambda/basic/name.mli

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,10 @@ val must_be_var_opt : t -> Variable.t option
5555
val must_be_symbol_opt : t -> Symbol.t option
5656

5757
val rename : t -> t
58+
59+
module Pair : sig
60+
type nonrec t = t * t
61+
62+
include Identifiable.S with type t := t
63+
end
64+

middle_end/flambda/basic/simple.ml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -158,14 +158,6 @@ module List = struct
158158
else result
159159
end
160160

161-
module Pair = struct
162-
include Identifiable.Make_pair
163-
(Reg_width_things.Simple)
164-
(Reg_width_things.Simple)
165-
166-
type nonrec t = t * t
167-
end
168-
169161
module With_kind = struct
170162
type nonrec t = t * Flambda_kind.t
171163

middle_end/flambda/basic/simple.mli

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,6 @@ module List : sig
9494
include Identifiable.S with type t := t
9595
end
9696

97-
module Pair : sig
98-
type nonrec t = t * t
99-
100-
include Identifiable.S with type t := t
101-
end
102-
10397
module With_kind : sig
10498
type nonrec t = t * Flambda_kind.t
10599

middle_end/flambda/cmx/flambda_cmx_format.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ let create ~final_typing_env ~all_code ~exported_offsets ~used_closure_vars =
6262
Variable.Map.empty
6363
in
6464
let simples =
65-
Simple.Set.fold (fun simple simples ->
65+
Reg_width_things.Simple.Set.fold (fun simple simples ->
6666
Simple.Map.add simple (Simple.export simple) simples)
6767
exported_ids.simples
6868
Simple.Map.empty

middle_end/flambda/compare/compare.ml

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -766,6 +766,25 @@ let function_decls env decl1 decl2 : unit Comparison.t =
766766
else Different { approximant = () }
767767
;;
768768

769+
(** Match up equal elements in two lists and iterate through both of them,
770+
using [f] analogously to [Map.S.merge] *)
771+
let iter2_merged l1 l2 ~compare ~f =
772+
let l1 = List.sort compare l1 in
773+
let l2 = List.sort compare l2 in
774+
let rec go l1 l2 =
775+
match l1, l2 with
776+
| [] , [] -> ()
777+
| a1 :: l1, [] -> f (Some a1) None ; go l1 []
778+
| [] , a2 :: l2 -> f None (Some a2); go [] l2
779+
| a1 :: l1, a2 :: l2 ->
780+
begin match compare a1 a2 with
781+
| 0 -> f (Some a1) (Some a2); go l1 l2
782+
| c when c < 0 -> f (Some a1) None ; go l1 (a2 :: l2)
783+
| _ -> f None (Some a2); go (a1 :: l1) l2
784+
end
785+
in
786+
go l1 l2
787+
769788
let sets_of_closures env set1 set2 : Set_of_closures.t Comparison.t =
770789
(* Need to do unification on closure vars and closure ids, we we're going to
771790
* invert both maps, figuring the closure vars with the same value should be
@@ -777,28 +796,28 @@ let sets_of_closures env set1 set2 : Set_of_closures.t Comparison.t =
777796
|> List.map (fun (var, value) ->
778797
subst_simple env value, var
779798
)
780-
|> Simple.Map.of_list
781799
in
782800
(* We want to process the whole map to find new correspondences between
783801
* closure vars, so we need to remember whether we've found any mismatches *)
784802
let ok = ref true in
785-
(* Using merge here as a map version of [List.iter2]; always returning None
786-
* means the returned map is always empty, so this shouldn't waste much *)
787-
let _ : unit Simple.Map.t =
788-
Simple.Map.merge (fun _value var1 var2 ->
789-
begin
790-
match var1, var2 with
791-
| None, None -> ()
792-
| Some _, None | None, Some _ -> ok := false
793-
| Some var1, Some var2 ->
794-
begin
795-
match closure_vars env var1 var2 with
796-
| Equivalent -> ()
797-
| Different { approximant = _ } -> ok := false
798-
end
799-
end;
800-
None
801-
) (closure_vars_by_value set1) (closure_vars_by_value set2)
803+
let () =
804+
let compare (value1, _var1) (value2, _var2) =
805+
Simple.compare value1 value2
806+
in
807+
iter2_merged (closure_vars_by_value set1) (closure_vars_by_value set2)
808+
~compare
809+
~f:(fun elt1 elt2 ->
810+
begin
811+
match elt1, elt2 with
812+
| None, None -> ()
813+
| Some _, None | None, Some _ -> ok := false
814+
| Some (_value1, var1), Some (_value2, var2) ->
815+
begin
816+
match closure_vars env var1 var2 with
817+
| Equivalent -> ()
818+
| Different { approximant = _ } -> ok := false
819+
end
820+
end)
802821
in
803822
let closure_ids_and_fun_decls_by_code_id set =
804823
let map = Function_declarations.funs (Set_of_closures.function_decls set) in
@@ -809,6 +828,8 @@ let sets_of_closures env set1 set2 : Set_of_closures.t Comparison.t =
809828
)
810829
|> Code_id.Map.of_list
811830
in
831+
(* Using merge here as a map version of [List.iter2]; always returning None
832+
* means the returned map is always empty, so this shouldn't waste much *)
812833
let _ : unit Code_id.Map.t =
813834
Code_id.Map.merge (fun _code_id value1 value2 ->
814835
begin

middle_end/flambda/types/env/meet_env.rec.ml

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
type t = {
2020
env : Typing_env.t;
21-
already_meeting : Simple.Pair.Set.t;
21+
already_meeting : Name.Pair.Set.t;
2222
}
2323

2424
let print ppf { env; already_meeting; } =
@@ -27,33 +27,45 @@ let print ppf { env; already_meeting; } =
2727
@[<hov 1>(env@ %a)@]@ \
2828
@[<hov 1>(already_meeting@ %a)@])@]"
2929
Typing_env.print env
30-
Simple.Pair.Set.print already_meeting
30+
Name.Pair.Set.print already_meeting
3131

3232
let create env =
3333
{ env;
34-
already_meeting = Simple.Pair.Set.empty;
34+
already_meeting = Name.Pair.Set.empty;
3535
}
3636

3737
let env t = t.env
38+
39+
let already_meeting_names t name1 name2 =
40+
Name.Pair.Set.mem (name1, name2) t.already_meeting
41+
|| Name.Pair.Set.mem (name2, name1) t.already_meeting
3842

3943
let already_meeting t simple1 simple2 =
40-
Simple.Pair.Set.mem (simple1, simple2) t.already_meeting
41-
|| Simple.Pair.Set.mem (simple2, simple1) t.already_meeting
44+
let const _const = false in
45+
Simple.pattern_match simple1 ~const ~name:(fun name1 ->
46+
Simple.pattern_match simple2 ~const ~name:(fun name2 ->
47+
already_meeting_names t name1 name2))
4248

43-
let now_meeting t simple1 simple2 =
44-
if already_meeting t simple1 simple2 then begin
49+
let now_meeting_names t name1 name2 =
50+
if already_meeting_names t name1 name2 then begin
4551
Misc.fatal_errorf "Already meeting %a and %a:@ %a"
46-
Simple.print simple1
47-
Simple.print simple2
52+
Name.print name1
53+
Name.print name2
4854
print t
4955
end;
5056
let already_meeting =
51-
Simple.Pair.Set.add (simple1, simple2) t.already_meeting
57+
Name.Pair.Set.add (name1, name2) t.already_meeting
5258
in
5359
{ t with
5460
already_meeting;
5561
}
5662

63+
let now_meeting t simple1 simple2 =
64+
let const _const = t in
65+
Simple.pattern_match simple1 ~const ~name:(fun name1 ->
66+
Simple.pattern_match simple2 ~const ~name:(fun name2 ->
67+
now_meeting_names t name1 name2))
68+
5769
(* let with_typing_env t typing_env =
5870
* { t with
5971
* env = typing_env;

0 commit comments

Comments
 (0)