Skip to content

Commit 62b2f71

Browse files
committed
Various improvements
* Use `Coercion.t` rather than `Coercion.t option` in many places * Use `Rec_info.t` again where sensible (in making inlining decisions, for instance), but redefine it as `unit` pending the next phase of `Rec_info` overhaul * Add simple `int` fields to `Coercion.t` for changing recursion depth; this is simpler than what we'll actually need but specific enough that we can test meaningfully (e.g., we can tell whether coercions are composed in the right order)
1 parent 9acbd6a commit 62b2f71

31 files changed

+815
-1153
lines changed

.depend

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3892,10 +3892,15 @@ asmcomp/debug/reg_with_debug_info.cmi : \
38923892
asmcomp/reg.cmi \
38933893
middle_end/backend_var.cmi
38943894
middle_end/flambda/compilenv_deps/coercion.cmo : \
3895+
utils/misc.cmi \
3896+
middle_end/flambda/compilenv_deps/flambda_colours.cmi \
38953897
middle_end/flambda/compilenv_deps/coercion.cmi
38963898
middle_end/flambda/compilenv_deps/coercion.cmx : \
3899+
utils/misc.cmx \
3900+
middle_end/flambda/compilenv_deps/flambda_colours.cmx \
38973901
middle_end/flambda/compilenv_deps/coercion.cmi
3898-
middle_end/flambda/compilenv_deps/coercion.cmi :
3902+
middle_end/flambda/compilenv_deps/coercion.cmi : \
3903+
middle_end/flambda/compilenv_deps/rec_info.cmi
38993904
middle_end/flambda/compilenv_deps/compilation_unit.cmo : \
39003905
utils/misc.cmi \
39013906
middle_end/flambda/compilenv_deps/linkage_name.cmi \
@@ -3950,10 +3955,17 @@ middle_end/flambda/compilenv_deps/patricia_tree.cmi : \
39503955
utils/numbers.cmi \
39513956
utils/identifiable.cmi
39523957
middle_end/flambda/compilenv_deps/rec_info.cmo : \
3958+
utils/misc.cmi \
3959+
utils/identifiable.cmi \
3960+
middle_end/flambda/compilenv_deps/flambda_colours.cmi \
39533961
middle_end/flambda/compilenv_deps/rec_info.cmi
39543962
middle_end/flambda/compilenv_deps/rec_info.cmx : \
3963+
utils/misc.cmx \
3964+
utils/identifiable.cmx \
3965+
middle_end/flambda/compilenv_deps/flambda_colours.cmx \
39553966
middle_end/flambda/compilenv_deps/rec_info.cmi
3956-
middle_end/flambda/compilenv_deps/rec_info.cmi :
3967+
middle_end/flambda/compilenv_deps/rec_info.cmi : \
3968+
utils/identifiable.cmi
39573969
middle_end/flambda/compilenv_deps/reg_width_things.cmo : \
39583970
utils/targetint.cmi \
39593971
middle_end/flambda/compilenv_deps/target_imm.cmi \
@@ -5217,7 +5229,6 @@ middle_end/flambda/inlining/inlining_decision.cmo : \
52175229
middle_end/flambda/terms/function_declaration.cmi \
52185230
middle_end/flambda/terms/flambda.cmi \
52195231
middle_end/flambda/simplify/env/downwards_env.cmi \
5220-
middle_end/flambda/compilenv_deps/coercion.cmi \
52215232
utils/clflags.cmi \
52225233
middle_end/flambda/inlining/inlining_decision.cmi
52235234
middle_end/flambda/inlining/inlining_decision.cmx : \
@@ -5229,17 +5240,16 @@ middle_end/flambda/inlining/inlining_decision.cmx : \
52295240
middle_end/flambda/terms/function_declaration.cmx \
52305241
middle_end/flambda/terms/flambda.cmx \
52315242
middle_end/flambda/simplify/env/downwards_env.cmx \
5232-
middle_end/flambda/compilenv_deps/coercion.cmx \
52335243
utils/clflags.cmx \
52345244
middle_end/flambda/inlining/inlining_decision.cmi
52355245
middle_end/flambda/inlining/inlining_decision.cmi : \
5246+
middle_end/flambda/compilenv_deps/rec_info.cmi \
52365247
middle_end/flambda/types/inlining/inlining_state.cmi \
52375248
middle_end/flambda/inlining/inlining_cost.cmi \
52385249
middle_end/flambda/basic/inline_attribute.cmi \
52395250
middle_end/flambda/terms/function_declaration.cmi \
52405251
middle_end/flambda/terms/flambda.cmi \
5241-
middle_end/flambda/simplify/env/downwards_env.cmi \
5242-
middle_end/flambda/compilenv_deps/coercion.cmi
5252+
middle_end/flambda/simplify/env/downwards_env.cmi
52435253
middle_end/flambda/inlining/inlining_report.cmo : \
52445254
utils/misc.cmi \
52455255
middle_end/flambda/inlining/inlining_decision.cmi \
@@ -6166,7 +6176,6 @@ middle_end/flambda/simplify/simplify.cmo : \
61666176
middle_end/flambda/simplify/env/continuation_env_and_param_types.cmi \
61676177
middle_end/flambda/basic/continuation.cmi \
61686178
middle_end/flambda/compilenv_deps/compilation_unit.cmi \
6169-
middle_end/flambda/compilenv_deps/coercion.cmi \
61706179
middle_end/flambda/basic/code_id.cmi \
61716180
middle_end/flambda/types/structures/code_age_relation.cmi \
61726181
middle_end/flambda/basic/closure_id.cmi \
@@ -6237,7 +6246,6 @@ middle_end/flambda/simplify/simplify.cmx : \
62376246
middle_end/flambda/simplify/env/continuation_env_and_param_types.cmx \
62386247
middle_end/flambda/basic/continuation.cmx \
62396248
middle_end/flambda/compilenv_deps/compilation_unit.cmx \
6240-
middle_end/flambda/compilenv_deps/coercion.cmx \
62416249
middle_end/flambda/basic/code_id.cmx \
62426250
middle_end/flambda/types/structures/code_age_relation.cmx \
62436251
middle_end/flambda/basic/closure_id.cmx \
@@ -6309,7 +6317,6 @@ middle_end/flambda/simplify/simplify_apply_expr.rec.cmo : \
63096317
lambda/debuginfo.cmi \
63106318
middle_end/flambda/basic/continuation.cmi \
63116319
middle_end/flambda/compilenv_deps/compilation_unit.cmi \
6312-
middle_end/flambda/compilenv_deps/coercion.cmi \
63136320
middle_end/flambda/basic/code_id.cmi \
63146321
middle_end/flambda/types/structures/code_age_relation.cmi \
63156322
middle_end/flambda/basic/closure_id.cmi \
@@ -6342,7 +6349,6 @@ middle_end/flambda/simplify/simplify_apply_expr.rec.cmx : \
63426349
lambda/debuginfo.cmx \
63436350
middle_end/flambda/basic/continuation.cmx \
63446351
middle_end/flambda/compilenv_deps/compilation_unit.cmx \
6345-
middle_end/flambda/compilenv_deps/coercion.cmx \
63466352
middle_end/flambda/basic/code_id.cmx \
63476353
middle_end/flambda/types/structures/code_age_relation.cmx \
63486354
middle_end/flambda/basic/closure_id.cmx \
@@ -6696,7 +6702,6 @@ middle_end/flambda/simplify/simplify_set_of_closures.rec.cmo : \
66966702
middle_end/flambda/simplify/env/downwards_acc.cmi \
66976703
middle_end/flambda/basic/continuation.cmi \
66986704
middle_end/flambda/compilenv_deps/compilation_unit.cmi \
6699-
middle_end/flambda/compilenv_deps/coercion.cmi \
67006705
middle_end/flambda/basic/code_id.cmi \
67016706
middle_end/flambda/types/structures/code_age_relation.cmi \
67026707
middle_end/flambda/basic/closure_id.cmi \
@@ -6735,7 +6740,6 @@ middle_end/flambda/simplify/simplify_set_of_closures.rec.cmx : \
67356740
middle_end/flambda/simplify/env/downwards_acc.cmx \
67366741
middle_end/flambda/basic/continuation.cmx \
67376742
middle_end/flambda/compilenv_deps/compilation_unit.cmx \
6738-
middle_end/flambda/compilenv_deps/coercion.cmx \
67396743
middle_end/flambda/basic/code_id.cmx \
67406744
middle_end/flambda/types/structures/code_age_relation.cmx \
67416745
middle_end/flambda/basic/closure_id.cmx \
@@ -8785,6 +8789,7 @@ middle_end/flambda/types/flambda_type.cmo : \
87858789
middle_end/flambda/basic/scope.cmi \
87868790
middle_end/flambda/types/structures/row_like_maps_to_intf.cmo \
87878791
middle_end/flambda/basic/reg_width_const.cmi \
8792+
middle_end/flambda/compilenv_deps/rec_info.cmi \
87888793
middle_end/flambda/types/structures/product_intf.cmo \
87898794
utils/printing_cache.cmi \
87908795
middle_end/flambda/types/basic/or_unknown_or_bottom.cmi \
@@ -8838,6 +8843,7 @@ middle_end/flambda/types/flambda_type.cmx : \
88388843
middle_end/flambda/basic/scope.cmx \
88398844
middle_end/flambda/types/structures/row_like_maps_to_intf.cmx \
88408845
middle_end/flambda/basic/reg_width_const.cmx \
8846+
middle_end/flambda/compilenv_deps/rec_info.cmx \
88418847
middle_end/flambda/types/structures/product_intf.cmx \
88428848
utils/printing_cache.cmx \
88438849
middle_end/flambda/types/basic/or_unknown_or_bottom.cmx \
@@ -8883,6 +8889,7 @@ middle_end/flambda/types/flambda_type.cmi : \
88838889
middle_end/flambda/basic/simple.cmi \
88848890
middle_end/flambda/basic/scope.cmi \
88858891
middle_end/flambda/basic/reg_width_const.cmi \
8892+
middle_end/flambda/compilenv_deps/rec_info.cmi \
88868893
utils/printing_cache.cmi \
88878894
middle_end/flambda/types/basic/or_unknown_or_bottom.cmi \
88888895
middle_end/flambda/types/basic/or_unknown.cmi \
@@ -9034,6 +9041,7 @@ middle_end/flambda/types/type_grammar.rec.cmi : \
90349041
lambda/tag.cmi \
90359042
middle_end/flambda/basic/simple.cmi \
90369043
middle_end/flambda/basic/reg_width_const.cmi \
9044+
middle_end/flambda/compilenv_deps/rec_info.cmi \
90379045
utils/printing_cache.cmi \
90389046
middle_end/flambda/types/basic/or_unknown.cmi \
90399047
middle_end/flambda/types/basic/or_bottom.cmi \
@@ -9218,33 +9226,34 @@ middle_end/flambda/types/basic/var_within_closure_set.cmi : \
92189226
utils/identifiable.cmi
92199227
middle_end/flambda/types/env/aliases.cmo : \
92209228
middle_end/flambda/compilenv_deps/variable.cmi \
9221-
middle_end/flambda/compilenv_deps/reg_width_things.cmi \
9229+
middle_end/flambda/basic/simple.cmi \
92229230
middle_end/flambda/naming/name_mode.cmi \
92239231
middle_end/flambda/basic/name.cmi \
92249232
utils/misc.cmi \
92259233
middle_end/flambda/cmx/ids_for_export.cmi \
9226-
utils/identifiable.cmi \
9234+
middle_end/flambda/compilenv_deps/flambda_colours.cmi \
9235+
middle_end/flambda/compilenv_deps/coercion.cmi \
92279236
utils/clflags.cmi \
92289237
middle_end/flambda/types/env/binding_time.cmi \
92299238
middle_end/flambda/types/env/aliases.cmi
92309239
middle_end/flambda/types/env/aliases.cmx : \
92319240
middle_end/flambda/compilenv_deps/variable.cmx \
9232-
middle_end/flambda/compilenv_deps/reg_width_things.cmx \
9241+
middle_end/flambda/basic/simple.cmx \
92339242
middle_end/flambda/naming/name_mode.cmx \
92349243
middle_end/flambda/basic/name.cmx \
92359244
utils/misc.cmx \
92369245
middle_end/flambda/cmx/ids_for_export.cmx \
9237-
utils/identifiable.cmx \
9246+
middle_end/flambda/compilenv_deps/flambda_colours.cmx \
9247+
middle_end/flambda/compilenv_deps/coercion.cmx \
92389248
utils/clflags.cmx \
92399249
middle_end/flambda/types/env/binding_time.cmx \
92409250
middle_end/flambda/types/env/aliases.cmi
92419251
middle_end/flambda/types/env/aliases.cmi : \
9242-
middle_end/flambda/compilenv_deps/reg_width_things.cmi \
9252+
middle_end/flambda/basic/simple.cmi \
92439253
middle_end/flambda/naming/name_mode.cmi \
92449254
middle_end/flambda/basic/name.cmi \
9245-
middle_end/flambda/cmx/ids_for_export.cmi \
9246-
utils/identifiable.cmi \
92479255
middle_end/flambda/cmx/contains_ids.cmo \
9256+
middle_end/flambda/compilenv_deps/coercion.cmi \
92489257
middle_end/flambda/types/env/binding_time.cmi
92499258
middle_end/flambda/types/env/binding_time.cmo : \
92509259
utils/numbers.cmi \
@@ -9336,7 +9345,6 @@ middle_end/flambda/types/env/typing_env.rec.cmi : \
93369345
middle_end/flambda/types/kinds/flambda_kind.cmi \
93379346
middle_end/flambda/simplify/env/continuation_use_kind.cmi \
93389347
middle_end/flambda/compilenv_deps/compilation_unit.cmi \
9339-
middle_end/flambda/compilenv_deps/coercion.cmi \
93409348
middle_end/flambda/basic/code_id.cmi \
93419349
middle_end/flambda/types/structures/code_age_relation.cmi \
93429350
middle_end/flambda/basic/apply_cont_rewrite_id.cmi \
@@ -9492,31 +9500,32 @@ middle_end/flambda/types/structures/code_age_relation.cmi : \
94929500
middle_end/flambda/compilenv_deps/compilation_unit.cmi \
94939501
middle_end/flambda/basic/code_id.cmi
94949502
middle_end/flambda/types/structures/function_declaration_type.rec.cmo : \
9503+
middle_end/flambda/compilenv_deps/rec_info.cmi \
94959504
middle_end/flambda/types/basic/or_unknown_or_bottom.cmi \
94969505
middle_end/flambda/types/basic/or_bottom.cmi \
94979506
middle_end/flambda/naming/name_permutation.cmi \
94989507
middle_end/flambda/naming/name_occurrences.cmi \
94999508
middle_end/flambda/naming/name_mode.cmi \
95009509
middle_end/flambda/cmx/ids_for_export.cmi \
95019510
lambda/debuginfo.cmi \
9502-
middle_end/flambda/compilenv_deps/coercion.cmi \
95039511
middle_end/flambda/basic/code_id.cmi \
95049512
middle_end/flambda/types/structures/code_age_relation.cmi \
95059513
middle_end/flambda/types/structures/function_declaration_type.rec.cmi
95069514
middle_end/flambda/types/structures/function_declaration_type.rec.cmx : \
9515+
middle_end/flambda/compilenv_deps/rec_info.cmx \
95079516
middle_end/flambda/types/basic/or_unknown_or_bottom.cmx \
95089517
middle_end/flambda/types/basic/or_bottom.cmx \
95099518
middle_end/flambda/naming/name_permutation.cmx \
95109519
middle_end/flambda/naming/name_occurrences.cmx \
95119520
middle_end/flambda/naming/name_mode.cmx \
95129521
middle_end/flambda/cmx/ids_for_export.cmx \
95139522
lambda/debuginfo.cmx \
9514-
middle_end/flambda/compilenv_deps/coercion.cmx \
95159523
middle_end/flambda/basic/code_id.cmx \
95169524
middle_end/flambda/types/structures/code_age_relation.cmx \
95179525
middle_end/flambda/types/structures/function_declaration_type.rec.cmi
95189526
middle_end/flambda/types/structures/function_declaration_type.rec.cmi : \
95199527
middle_end/flambda/types/structures/type_structure_intf.cmo \
9528+
middle_end/flambda/compilenv_deps/rec_info.cmi \
95209529
middle_end/flambda/types/basic/or_unknown_or_bottom.cmi \
95219530
middle_end/flambda/types/basic/or_bottom.cmi \
95229531
lambda/debuginfo.cmi \

middle_end/flambda/basic/simple.ml

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -55,23 +55,28 @@ let const_from_descr descr = const (RWC.of_descr descr)
5555

5656
let without_coercion t = pattern_match t ~name ~const
5757

58-
let compose_coercion t ~newer_coercion =
59-
if is_const t then None
58+
let apply_coercion t applied_coercion =
59+
if Coercion.is_id applied_coercion then Some t
6060
else
61-
match newer_coercion with
62-
| None -> Some t
63-
| Some newer_coercion ->
64-
let coercion =
65-
match coercion t with
66-
| None -> newer_coercion
67-
| Some older_coercion ->
68-
Coercion.compose older_coercion ~newer:newer_coercion
69-
in
70-
Some (with_coercion (without_coercion t) coercion)
61+
let coercion =
62+
let existing_coercion = coercion t in
63+
if Coercion.is_id existing_coercion then Some applied_coercion
64+
else Coercion.compose existing_coercion ~then_:applied_coercion
65+
in
66+
coercion
67+
|> Option.map (fun coercion -> with_coercion (without_coercion t) coercion)
68+
69+
let apply_coercion_exn t applied_coercion =
70+
match apply_coercion t applied_coercion with
71+
| Some t -> t
72+
| None ->
73+
Misc.fatal_errorf "Cannot apply coercion %a to %a"
74+
print t
75+
Coercion.print applied_coercion
7176

7277
(* CR mshinwell: Make naming consistent with [Name] re. the option type *)
7378

74-
(* CR mshinwell: Careful that Coercion doesn't get dropped using the
79+
(* CR mshinwell: Careful that coercions don't get dropped using the
7580
following *)
7681

7782
let [@inline always] must_be_var t =
@@ -118,9 +123,7 @@ let apply_name_permutation t perm =
118123
let new_name = Name_permutation.apply_name perm old_name in
119124
if old_name == new_name then t
120125
else
121-
match coercion t with
122-
| None -> name new_name
123-
| Some coercion -> with_coercion (name new_name) coercion
126+
with_coercion (name new_name) (coercion t)
124127
in
125128
pattern_match t ~const:(fun _ -> t) ~name
126129

middle_end/flambda/basic/simple.mli

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ include module type of struct include Reg_width_things.Simple end
2323

2424
include Contains_names.S with type t := t
2525

26-
val compose_coercion : t -> newer_coercion:Coercion.t option -> t option
26+
val apply_coercion : t -> Coercion.t -> t option
27+
28+
val apply_coercion_exn : t -> Coercion.t -> t
2729

2830
val without_coercion : t -> t
2931

@@ -64,7 +66,7 @@ val const_from_descr : Reg_width_const.Descr.t -> t
6466

6567
val map_name : t -> f:(Name.t -> Name.t) -> t
6668

67-
val to_name : t -> (Coercion.t option * Name.t) option
69+
val to_name : t -> (Coercion.t * Name.t) option
6870

6971
(* CR mshinwell: remove these next two? *)
7072
val map_var : t -> f:(Variable.t -> Variable.t) -> t

middle_end/flambda/cmx/ids_for_export.ml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ let add_name t name =
7575
let add_simple t simple =
7676
let simples =
7777
match Simple.coercion simple with
78-
| None -> t.simples
79-
| Some _ -> Simple.Set.add simple t.simples
78+
| Id -> t.simples
79+
| _ -> Simple.Set.add simple t.simples
8080
in
8181
let t = { t with simples; } in
8282
Simple.pattern_match simple
@@ -92,10 +92,10 @@ let add_continuation t continuation =
9292
let from_simple simple =
9393
let simples =
9494
match Simple.coercion simple with
95-
| None ->
95+
| Id ->
9696
(* This simple will not be in the grand_table_of_simples *)
9797
Simple.Set.empty
98-
| Some _ -> Simple.Set.singleton simple
98+
| _ -> Simple.Set.singleton simple
9999
in
100100
Simple.pattern_match simple
101101
~const:(fun const ->
@@ -200,11 +200,11 @@ module Import_map = struct
200200
| simple -> simple
201201
| exception Not_found ->
202202
begin match Simple.coercion simple with
203-
| None ->
203+
| Id ->
204204
Simple.pattern_match simple
205205
~name:(fun n -> Simple.name (name t n))
206206
~const:(fun c -> Simple.const (const t c))
207-
| Some _coercion -> simple
207+
| _ -> simple
208208
end
209209

210210
let closure_var_is_used t var =

0 commit comments

Comments
 (0)