Skip to content

Commit 9816841

Browse files
committed
Overhaul Aliases_of_canonical_element; add Alias_set
Also return Bottom from more places (generally anything involved in a meet).
1 parent 29b5420 commit 9816841

17 files changed

+1449
-591
lines changed

.depend

+7-2
Original file line numberDiff line numberDiff line change
@@ -6002,6 +6002,7 @@ middle_end/flambda/simplify/common_subexpression_elimination.cmo : \
60026002
middle_end/flambda/compilenv_deps/flambda_features.cmi \
60036003
middle_end/flambda/basic/continuation_extra_params_and_args.cmi \
60046004
middle_end/flambda/basic/apply_cont_rewrite_id.cmi \
6005+
middle_end/flambda/types/env/aliases.cmi \
60056006
middle_end/flambda/simplify/common_subexpression_elimination.cmi
60066007
middle_end/flambda/simplify/common_subexpression_elimination.cmx : \
60076008
middle_end/flambda/compilenv_deps/variable.cmx \
@@ -6019,6 +6020,7 @@ middle_end/flambda/simplify/common_subexpression_elimination.cmx : \
60196020
middle_end/flambda/compilenv_deps/flambda_features.cmx \
60206021
middle_end/flambda/basic/continuation_extra_params_and_args.cmx \
60216022
middle_end/flambda/basic/apply_cont_rewrite_id.cmx \
6023+
middle_end/flambda/types/env/aliases.cmx \
60226024
middle_end/flambda/simplify/common_subexpression_elimination.cmi
60236025
middle_end/flambda/simplify/common_subexpression_elimination.cmi : \
60246026
middle_end/flambda/basic/simple.cmi \
@@ -9008,7 +9010,6 @@ middle_end/flambda/types/type_descr.rec.cmo : \
90089010
utils/misc.cmi \
90099011
middle_end/flambda/cmx/ids_for_export.cmi \
90109012
middle_end/flambda/compilenv_deps/flambda_colours.cmi \
9011-
middle_end/flambda/compilenv_deps/coercion.cmi \
90129013
utils/clflags.cmi \
90139014
middle_end/flambda/types/env/aliases.cmi \
90149015
middle_end/flambda/types/type_descr.rec.cmi
@@ -9027,7 +9028,6 @@ middle_end/flambda/types/type_descr.rec.cmx : \
90279028
utils/misc.cmx \
90289029
middle_end/flambda/cmx/ids_for_export.cmx \
90299030
middle_end/flambda/compilenv_deps/flambda_colours.cmx \
9030-
middle_end/flambda/compilenv_deps/coercion.cmx \
90319031
utils/clflags.cmx \
90329032
middle_end/flambda/types/env/aliases.cmx \
90339033
middle_end/flambda/types/type_descr.rec.cmi
@@ -9296,6 +9296,8 @@ middle_end/flambda/types/basic/var_within_closure_set.cmi : \
92969296
middle_end/flambda/types/env/aliases.cmo : \
92979297
middle_end/flambda/compilenv_deps/variable.cmi \
92989298
middle_end/flambda/basic/simple.cmi \
9299+
middle_end/flambda/compilenv_deps/reg_width_things.cmi \
9300+
middle_end/flambda/types/basic/or_bottom.cmi \
92999301
middle_end/flambda/naming/name_mode.cmi \
93009302
middle_end/flambda/basic/name.cmi \
93019303
utils/misc.cmi \
@@ -9308,6 +9310,8 @@ middle_end/flambda/types/env/aliases.cmo : \
93089310
middle_end/flambda/types/env/aliases.cmx : \
93099311
middle_end/flambda/compilenv_deps/variable.cmx \
93109312
middle_end/flambda/basic/simple.cmx \
9313+
middle_end/flambda/compilenv_deps/reg_width_things.cmx \
9314+
middle_end/flambda/types/basic/or_bottom.cmx \
93119315
middle_end/flambda/naming/name_mode.cmx \
93129316
middle_end/flambda/basic/name.cmx \
93139317
utils/misc.cmx \
@@ -9319,6 +9323,7 @@ middle_end/flambda/types/env/aliases.cmx : \
93199323
middle_end/flambda/types/env/aliases.cmi
93209324
middle_end/flambda/types/env/aliases.cmi : \
93219325
middle_end/flambda/basic/simple.cmi \
9326+
middle_end/flambda/types/basic/or_bottom.cmi \
93229327
middle_end/flambda/naming/name_mode.cmi \
93239328
middle_end/flambda/basic/name.cmi \
93249329
middle_end/flambda/cmx/contains_ids.cmo \

compilerlibs/Makefile.compilerlibs

+1-1
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ MIDDLE_END_FLAMBDA_BASIC=\
224224
middle_end/flambda/basic/coeffects.cmo \
225225
middle_end/flambda/basic/effects.cmo \
226226
middle_end/flambda/basic/export_id.cmo \
227+
middle_end/flambda/types/basic/or_bottom.cmo \
227228
middle_end/flambda/types/basic/or_unknown.cmo \
228229
middle_end/flambda/terms/flambda_primitive.cmo \
229230
middle_end/flambda/basic/recursive.cmo \
@@ -260,7 +261,6 @@ MIDDLE_END_FLAMBDA_TYPES=\
260261
middle_end/flambda/types/env/binding_time.cmo \
261262
middle_end/flambda/types/env/aliases.cmo \
262263
middle_end/flambda/types/basic/meet_or_join_op.cmo \
263-
middle_end/flambda/types/basic/or_bottom.cmo \
264264
middle_end/flambda/types/basic/string_info.cmo \
265265
middle_end/flambda/types/basic/or_unknown_or_bottom.cmo \
266266
middle_end/flambda/types/structures/code_age_relation.cmo \

middle_end/flambda/basic/kinded_parameter.ml

-2
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,6 @@ module List = struct
115115

116116
let name_set t = Name.Set.of_list (List.map Name.var (vars t))
117117

118-
let simple_set t = Simple.Set.of_list (simples t)
119-
120118
let rename t = List.map (fun t -> rename t) t
121119

122120
let arity t = List.map (fun t -> Flambda_kind.With_subkind.kind (kind t)) t

middle_end/flambda/basic/kinded_parameter.mli

-2
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,6 @@ module List : sig
6868
(** As for [var_set] but returns a set of [Name]s. *)
6969
val name_set : t -> Name.Set.t
7070

71-
val simple_set : t -> Simple.Set.t
72-
7371
val equal_vars : t -> Variable.t list -> bool
7472

7573
val rename : t -> t

middle_end/flambda/compilenv_deps/coercion.ml

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ let print ppf = function
4343
(Flambda_colours.coercion ())
4444
from_depth to_depth
4545
(Flambda_colours.normal ())
46-
46+
4747
let compose t1 ~then_:t2 =
4848
match t1, t2 with
4949
| Id, _ -> Some t2

middle_end/flambda/compilenv_deps/coercion.mli

+7
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,19 @@ type t = private
2424
val change_depth : from:int -> to_:int -> t
2525

2626
val id : t
27+
2728
val is_id : t -> bool
29+
2830
val inverse : t -> t
31+
2932
val compose : t -> then_:t -> t option
33+
3034
val compose_exn : t -> then_:t -> t
35+
3136
val print : Format.formatter -> t -> unit
37+
3238
val equal : t -> t -> bool
39+
3340
val hash : t -> int
3441

3542
val apply_to_rec_info : t -> Rec_info.t -> Rec_info.t

middle_end/flambda/compilenv_deps/flambda_colours.ml

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ let name_abstraction () = C.fg_256 172
5757

5858
let rec_info () = C.fg_256 249
5959

60-
let coercion () = C.fg_256 243
60+
let coercion () = C.fg_256 249
6161

6262
let error () = C.fg_256 160
6363

middle_end/flambda/compilenv_deps/reg_width_things.mli

+2
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@ module Simple : sig
158158

159159
val with_coercion : t -> Coercion.t -> t
160160

161+
(* CR lmaurer: Should make [name] and [const] take a [coercion] argument to
162+
be sure we're not dropping coercions by accident. *)
161163
val pattern_match
162164
: t
163165
-> name:(Name.t -> 'a)

middle_end/flambda/simplify/common_subexpression_elimination.ml

+12-5
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,12 @@ end
117117

118118
let cse_with_eligible_lhs ~typing_env_at_fork ~cse_at_each_use ~params prev_cse
119119
(extra_bindings: EPA.t) extra_equations =
120-
let params = KP.List.simple_set params in
120+
let params = KP.List.name_set params in
121+
let is_param simple =
122+
Simple.pattern_match simple
123+
~name:(fun name -> Name.Set.mem name params)
124+
~const:(fun _ -> false)
125+
in
121126
List.fold_left cse_at_each_use ~init:EP.Map.empty
122127
~f:(fun eligible (env_at_use, id, cse) ->
123128
let find_new_name =
@@ -182,15 +187,17 @@ let cse_with_eligible_lhs ~typing_env_at_fork ~cse_at_each_use ~params prev_cse
182187
since they are defined in [env_at_fork]. However these
183188
aren't bound at the use sites, so we must choose another
184189
alias that is. *)
185-
if not (Simple.Set.mem bound_to params) then Some bound_to
190+
if not (is_param bound_to) then Some bound_to
186191
else
187192
let aliases =
188193
TE.aliases_of_simple env_at_use
189194
~min_name_mode:NM.normal bound_to
190-
|> Simple.Map.filter (fun simple _coercion ->
191-
not (Simple.Set.mem simple params))
195+
|> Aliases.Alias_set.filter ~f:(fun simple ->
196+
not (is_param simple))
192197
in
193-
Simple.Map.get_singleton aliases |> Option.map fst
198+
(* CR lmaurer: This could be using
199+
[Aliases.Alias_set.find_best], I think? *)
200+
Aliases.Alias_set.get_singleton aliases
194201
in
195202
match bound_to with
196203
| None -> eligible

0 commit comments

Comments
 (0)