Skip to content

Commit 1a4420b

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 f5a3c1a commit 1a4420b

31 files changed

+844
-1185
lines changed

.depend

+31-22
Original file line numberDiff line numberDiff line change
@@ -3896,10 +3896,15 @@ asmcomp/debug/reg_with_debug_info.cmi : \
38963896
asmcomp/reg.cmi \
38973897
middle_end/backend_var.cmi
38983898
middle_end/flambda/compilenv_deps/coercion.cmo : \
3899+
utils/misc.cmi \
3900+
middle_end/flambda/compilenv_deps/flambda_colours.cmi \
38993901
middle_end/flambda/compilenv_deps/coercion.cmi
39003902
middle_end/flambda/compilenv_deps/coercion.cmx : \
3903+
utils/misc.cmx \
3904+
middle_end/flambda/compilenv_deps/flambda_colours.cmx \
39013905
middle_end/flambda/compilenv_deps/coercion.cmi
3902-
middle_end/flambda/compilenv_deps/coercion.cmi :
3906+
middle_end/flambda/compilenv_deps/coercion.cmi : \
3907+
middle_end/flambda/compilenv_deps/rec_info.cmi
39033908
middle_end/flambda/compilenv_deps/compilation_unit.cmo : \
39043909
utils/misc.cmi \
39053910
middle_end/flambda/compilenv_deps/linkage_name.cmi \
@@ -3954,10 +3959,17 @@ middle_end/flambda/compilenv_deps/patricia_tree.cmi : \
39543959
utils/numbers.cmi \
39553960
utils/identifiable.cmi
39563961
middle_end/flambda/compilenv_deps/rec_info.cmo : \
3962+
utils/misc.cmi \
3963+
utils/identifiable.cmi \
3964+
middle_end/flambda/compilenv_deps/flambda_colours.cmi \
39573965
middle_end/flambda/compilenv_deps/rec_info.cmi
39583966
middle_end/flambda/compilenv_deps/rec_info.cmx : \
3967+
utils/misc.cmx \
3968+
utils/identifiable.cmx \
3969+
middle_end/flambda/compilenv_deps/flambda_colours.cmx \
39593970
middle_end/flambda/compilenv_deps/rec_info.cmi
3960-
middle_end/flambda/compilenv_deps/rec_info.cmi :
3971+
middle_end/flambda/compilenv_deps/rec_info.cmi : \
3972+
utils/identifiable.cmi
39613973
middle_end/flambda/compilenv_deps/reg_width_things.cmo : \
39623974
utils/targetint.cmi \
39633975
middle_end/flambda/compilenv_deps/target_imm.cmi \
@@ -5203,7 +5215,6 @@ middle_end/flambda/inlining/inlining_decision.cmo : \
52035215
middle_end/flambda/terms/function_declaration.cmi \
52045216
middle_end/flambda/terms/flambda.cmi \
52055217
middle_end/flambda/simplify/env/downwards_env.cmi \
5206-
middle_end/flambda/compilenv_deps/coercion.cmi \
52075218
utils/clflags.cmi \
52085219
middle_end/flambda/inlining/inlining_decision.cmi
52095220
middle_end/flambda/inlining/inlining_decision.cmx : \
@@ -5215,17 +5226,16 @@ middle_end/flambda/inlining/inlining_decision.cmx : \
52155226
middle_end/flambda/terms/function_declaration.cmx \
52165227
middle_end/flambda/terms/flambda.cmx \
52175228
middle_end/flambda/simplify/env/downwards_env.cmx \
5218-
middle_end/flambda/compilenv_deps/coercion.cmx \
52195229
utils/clflags.cmx \
52205230
middle_end/flambda/inlining/inlining_decision.cmi
52215231
middle_end/flambda/inlining/inlining_decision.cmi : \
5232+
middle_end/flambda/compilenv_deps/rec_info.cmi \
52225233
middle_end/flambda/types/inlining/inlining_state.cmi \
52235234
middle_end/flambda/inlining/inlining_cost.cmi \
52245235
middle_end/flambda/basic/inline_attribute.cmi \
52255236
middle_end/flambda/terms/function_declaration.cmi \
52265237
middle_end/flambda/terms/flambda.cmi \
5227-
middle_end/flambda/simplify/env/downwards_env.cmi \
5228-
middle_end/flambda/compilenv_deps/coercion.cmi
5238+
middle_end/flambda/simplify/env/downwards_env.cmi
52295239
middle_end/flambda/inlining/inlining_report.cmo : \
52305240
utils/misc.cmi \
52315241
middle_end/flambda/inlining/inlining_decision.cmi \
@@ -6156,7 +6166,6 @@ middle_end/flambda/simplify/simplify.cmo : \
61566166
middle_end/flambda/simplify/env/continuation_env_and_param_types.cmi \
61576167
middle_end/flambda/basic/continuation.cmi \
61586168
middle_end/flambda/compilenv_deps/compilation_unit.cmi \
6159-
middle_end/flambda/compilenv_deps/coercion.cmi \
61606169
middle_end/flambda/basic/code_id.cmi \
61616170
middle_end/flambda/types/structures/code_age_relation.cmi \
61626171
middle_end/flambda/basic/closure_id.cmi \
@@ -6229,7 +6238,6 @@ middle_end/flambda/simplify/simplify.cmx : \
62296238
middle_end/flambda/simplify/env/continuation_env_and_param_types.cmx \
62306239
middle_end/flambda/basic/continuation.cmx \
62316240
middle_end/flambda/compilenv_deps/compilation_unit.cmx \
6232-
middle_end/flambda/compilenv_deps/coercion.cmx \
62336241
middle_end/flambda/basic/code_id.cmx \
62346242
middle_end/flambda/types/structures/code_age_relation.cmx \
62356243
middle_end/flambda/basic/closure_id.cmx \
@@ -6301,7 +6309,6 @@ middle_end/flambda/simplify/simplify_apply_expr.rec.cmo : \
63016309
lambda/debuginfo.cmi \
63026310
middle_end/flambda/basic/continuation.cmi \
63036311
middle_end/flambda/compilenv_deps/compilation_unit.cmi \
6304-
middle_end/flambda/compilenv_deps/coercion.cmi \
63056312
middle_end/flambda/basic/code_id.cmi \
63066313
middle_end/flambda/types/structures/code_age_relation.cmi \
63076314
middle_end/flambda/basic/closure_id.cmi \
@@ -6334,7 +6341,6 @@ middle_end/flambda/simplify/simplify_apply_expr.rec.cmx : \
63346341
lambda/debuginfo.cmx \
63356342
middle_end/flambda/basic/continuation.cmx \
63366343
middle_end/flambda/compilenv_deps/compilation_unit.cmx \
6337-
middle_end/flambda/compilenv_deps/coercion.cmx \
63386344
middle_end/flambda/basic/code_id.cmx \
63396345
middle_end/flambda/types/structures/code_age_relation.cmx \
63406346
middle_end/flambda/basic/closure_id.cmx \
@@ -6731,7 +6737,6 @@ middle_end/flambda/simplify/simplify_set_of_closures.rec.cmo : \
67316737
middle_end/flambda/simplify/env/downwards_acc.cmi \
67326738
middle_end/flambda/basic/continuation.cmi \
67336739
middle_end/flambda/compilenv_deps/compilation_unit.cmi \
6734-
middle_end/flambda/compilenv_deps/coercion.cmi \
67356740
middle_end/flambda/basic/code_id.cmi \
67366741
middle_end/flambda/types/structures/code_age_relation.cmi \
67376742
middle_end/flambda/basic/closure_id.cmi \
@@ -6771,7 +6776,6 @@ middle_end/flambda/simplify/simplify_set_of_closures.rec.cmx : \
67716776
middle_end/flambda/simplify/env/downwards_acc.cmx \
67726777
middle_end/flambda/basic/continuation.cmx \
67736778
middle_end/flambda/compilenv_deps/compilation_unit.cmx \
6774-
middle_end/flambda/compilenv_deps/coercion.cmx \
67756779
middle_end/flambda/basic/code_id.cmx \
67766780
middle_end/flambda/types/structures/code_age_relation.cmx \
67776781
middle_end/flambda/basic/closure_id.cmx \
@@ -8856,6 +8860,7 @@ middle_end/flambda/types/flambda_type.cmo : \
88568860
middle_end/flambda/basic/scope.cmi \
88578861
middle_end/flambda/types/structures/row_like_maps_to_intf.cmo \
88588862
middle_end/flambda/basic/reg_width_const.cmi \
8863+
middle_end/flambda/compilenv_deps/rec_info.cmi \
88598864
middle_end/flambda/types/structures/product_intf.cmo \
88608865
utils/printing_cache.cmi \
88618866
middle_end/flambda/types/basic/or_unknown_or_bottom.cmi \
@@ -8909,6 +8914,7 @@ middle_end/flambda/types/flambda_type.cmx : \
89098914
middle_end/flambda/basic/scope.cmx \
89108915
middle_end/flambda/types/structures/row_like_maps_to_intf.cmx \
89118916
middle_end/flambda/basic/reg_width_const.cmx \
8917+
middle_end/flambda/compilenv_deps/rec_info.cmx \
89128918
middle_end/flambda/types/structures/product_intf.cmx \
89138919
utils/printing_cache.cmx \
89148920
middle_end/flambda/types/basic/or_unknown_or_bottom.cmx \
@@ -8954,6 +8960,7 @@ middle_end/flambda/types/flambda_type.cmi : \
89548960
middle_end/flambda/basic/simple.cmi \
89558961
middle_end/flambda/basic/scope.cmi \
89568962
middle_end/flambda/basic/reg_width_const.cmi \
8963+
middle_end/flambda/compilenv_deps/rec_info.cmi \
89578964
utils/printing_cache.cmi \
89588965
middle_end/flambda/types/basic/or_unknown_or_bottom.cmi \
89598966
middle_end/flambda/types/basic/or_unknown.cmi \
@@ -9105,6 +9112,7 @@ middle_end/flambda/types/type_grammar.rec.cmi : \
91059112
lambda/tag.cmi \
91069113
middle_end/flambda/basic/simple.cmi \
91079114
middle_end/flambda/basic/reg_width_const.cmi \
9115+
middle_end/flambda/compilenv_deps/rec_info.cmi \
91089116
utils/printing_cache.cmi \
91099117
middle_end/flambda/types/basic/or_unknown.cmi \
91109118
middle_end/flambda/types/basic/or_bottom.cmi \
@@ -9289,33 +9297,34 @@ middle_end/flambda/types/basic/var_within_closure_set.cmi : \
92899297
utils/identifiable.cmi
92909298
middle_end/flambda/types/env/aliases.cmo : \
92919299
middle_end/flambda/compilenv_deps/variable.cmi \
9292-
middle_end/flambda/compilenv_deps/reg_width_things.cmi \
9300+
middle_end/flambda/basic/simple.cmi \
92939301
middle_end/flambda/naming/name_mode.cmi \
92949302
middle_end/flambda/basic/name.cmi \
92959303
utils/misc.cmi \
92969304
middle_end/flambda/cmx/ids_for_export.cmi \
9297-
utils/identifiable.cmi \
9305+
middle_end/flambda/compilenv_deps/flambda_colours.cmi \
9306+
middle_end/flambda/compilenv_deps/coercion.cmi \
92989307
utils/clflags.cmi \
92999308
middle_end/flambda/types/env/binding_time.cmi \
93009309
middle_end/flambda/types/env/aliases.cmi
93019310
middle_end/flambda/types/env/aliases.cmx : \
93029311
middle_end/flambda/compilenv_deps/variable.cmx \
9303-
middle_end/flambda/compilenv_deps/reg_width_things.cmx \
9312+
middle_end/flambda/basic/simple.cmx \
93049313
middle_end/flambda/naming/name_mode.cmx \
93059314
middle_end/flambda/basic/name.cmx \
93069315
utils/misc.cmx \
93079316
middle_end/flambda/cmx/ids_for_export.cmx \
9308-
utils/identifiable.cmx \
9317+
middle_end/flambda/compilenv_deps/flambda_colours.cmx \
9318+
middle_end/flambda/compilenv_deps/coercion.cmx \
93099319
utils/clflags.cmx \
93109320
middle_end/flambda/types/env/binding_time.cmx \
93119321
middle_end/flambda/types/env/aliases.cmi
93129322
middle_end/flambda/types/env/aliases.cmi : \
9313-
middle_end/flambda/compilenv_deps/reg_width_things.cmi \
9323+
middle_end/flambda/basic/simple.cmi \
93149324
middle_end/flambda/naming/name_mode.cmi \
93159325
middle_end/flambda/basic/name.cmi \
9316-
middle_end/flambda/cmx/ids_for_export.cmi \
9317-
utils/identifiable.cmi \
93189326
middle_end/flambda/cmx/contains_ids.cmo \
9327+
middle_end/flambda/compilenv_deps/coercion.cmi \
93199328
middle_end/flambda/types/env/binding_time.cmi
93209329
middle_end/flambda/types/env/binding_time.cmo : \
93219330
utils/numbers.cmi \
@@ -9407,7 +9416,6 @@ middle_end/flambda/types/env/typing_env.rec.cmi : \
94079416
middle_end/flambda/types/kinds/flambda_kind.cmi \
94089417
middle_end/flambda/simplify/env/continuation_use_kind.cmi \
94099418
middle_end/flambda/compilenv_deps/compilation_unit.cmi \
9410-
middle_end/flambda/compilenv_deps/coercion.cmi \
94119419
middle_end/flambda/basic/code_id.cmi \
94129420
middle_end/flambda/types/structures/code_age_relation.cmi \
94139421
middle_end/flambda/basic/apply_cont_rewrite_id.cmi \
@@ -9563,31 +9571,32 @@ middle_end/flambda/types/structures/code_age_relation.cmi : \
95639571
middle_end/flambda/compilenv_deps/compilation_unit.cmi \
95649572
middle_end/flambda/basic/code_id.cmi
95659573
middle_end/flambda/types/structures/function_declaration_type.rec.cmo : \
9574+
middle_end/flambda/compilenv_deps/rec_info.cmi \
95669575
middle_end/flambda/types/basic/or_unknown_or_bottom.cmi \
95679576
middle_end/flambda/types/basic/or_bottom.cmi \
95689577
middle_end/flambda/naming/name_permutation.cmi \
95699578
middle_end/flambda/naming/name_occurrences.cmi \
95709579
middle_end/flambda/naming/name_mode.cmi \
95719580
middle_end/flambda/cmx/ids_for_export.cmi \
95729581
lambda/debuginfo.cmi \
9573-
middle_end/flambda/compilenv_deps/coercion.cmi \
95749582
middle_end/flambda/basic/code_id.cmi \
95759583
middle_end/flambda/types/structures/code_age_relation.cmi \
95769584
middle_end/flambda/types/structures/function_declaration_type.rec.cmi
95779585
middle_end/flambda/types/structures/function_declaration_type.rec.cmx : \
9586+
middle_end/flambda/compilenv_deps/rec_info.cmx \
95789587
middle_end/flambda/types/basic/or_unknown_or_bottom.cmx \
95799588
middle_end/flambda/types/basic/or_bottom.cmx \
95809589
middle_end/flambda/naming/name_permutation.cmx \
95819590
middle_end/flambda/naming/name_occurrences.cmx \
95829591
middle_end/flambda/naming/name_mode.cmx \
95839592
middle_end/flambda/cmx/ids_for_export.cmx \
95849593
lambda/debuginfo.cmx \
9585-
middle_end/flambda/compilenv_deps/coercion.cmx \
95869594
middle_end/flambda/basic/code_id.cmx \
95879595
middle_end/flambda/types/structures/code_age_relation.cmx \
95889596
middle_end/flambda/types/structures/function_declaration_type.rec.cmi
95899597
middle_end/flambda/types/structures/function_declaration_type.rec.cmi : \
95909598
middle_end/flambda/types/structures/type_structure_intf.cmo \
9599+
middle_end/flambda/compilenv_deps/rec_info.cmi \
95919600
middle_end/flambda/types/basic/or_unknown_or_bottom.cmi \
95929601
middle_end/flambda/types/basic/or_bottom.cmi \
95939602
lambda/debuginfo.cmi \

middle_end/flambda/basic/simple.ml

+19-16
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

+4-2
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

+6-6
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)