Skip to content

Commit 48e006b

Browse files
authored
Do not add extra_params to the lifted_cont_params (#3885)
Currently, any and all variables in scope, including parameters and extra parameters (coming from CSE and unboxing), are added to the lifted_cont_params. This is superfluous, since the handlers of lifted continuations do not contain any reference to these extra params prior to simplification, and these extra params can be recomputed for the lifted continuations. As it stands, this commit alone may lead to regressions, since we currently do not perform unboxing on the lifted_cont_params. This will be fixed in a later commit.
1 parent 7d862d0 commit 48e006b

File tree

6 files changed

+33
-19
lines changed

6 files changed

+33
-19
lines changed

middle_end/flambda2/simplify/env/downwards_env.ml

+17-10
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,9 @@ let [@ocamlformat "disable"] print ppf { round; typing_env;
116116
(Format.pp_print_list ~pp_sep:Format.pp_print_space Lifted_cont_params.print) defined_variables_by_scope
117117
cost_of_lifting_continuations_out_of_current_one
118118

119-
let define_variable t var kind =
119+
let define_variable0 ~extra t var kind =
120120
let defined_variables_by_scope =
121-
if Variable.Set.mem (Bound_var.var var) t.lifted
121+
if extra || Variable.Set.mem (Bound_var.var var) t.lifted
122122
then t.defined_variables_by_scope
123123
else
124124
match t.defined_variables_by_scope with
@@ -146,6 +146,9 @@ let define_variable t var kind =
146146
defined_variables_by_scope
147147
}
148148

149+
let define_variable t var kind =
150+
(define_variable0 [@inlined hint]) ~extra:false t var kind
151+
149152
let create ~round ~(resolver : resolver)
150153
~(get_imported_names : get_imported_names)
151154
~(get_imported_code : get_imported_code) ~propagating_float_consts
@@ -290,12 +293,15 @@ let define_name t name kind =
290293
kind)
291294
~symbol:(fun [@inline] sym -> (define_symbol [@inlined hint]) t sym kind)
292295

293-
let add_variable t var ty =
294-
let t = (define_variable [@inlined hint]) t var (T.kind ty) in
296+
let add_variable0 ~extra t var ty =
297+
let t = (define_variable0 [@inlined hint]) ~extra t var (T.kind ty) in
295298
{ t with
296299
typing_env = TE.add_equation t.typing_env (Name.var (Bound_var.var var)) ty
297300
}
298301

302+
let add_variable t var ty =
303+
(add_variable0 [@inlined hint]) ~extra:false t var ty
304+
299305
let add_symbol t sym ty =
300306
let t = (define_symbol [@inlined hint]) t sym (T.kind ty) in
301307
{ t with typing_env = TE.add_equation t.typing_env (Name.symbol sym) ty }
@@ -339,15 +345,16 @@ let add_equation_on_name t name ty =
339345
let typing_env = TE.add_equation t.typing_env name ty in
340346
{ t with typing_env }
341347

342-
let define_parameters t ~params =
348+
let define_parameters ~extra t ~params =
343349
List.fold_left
344350
(fun t param ->
345351
let var = Bound_var.create (BP.var param) Name_mode.normal in
346-
define_variable t var (K.With_subkind.kind (BP.kind param)))
352+
define_variable0 ~extra t var (K.With_subkind.kind (BP.kind param)))
347353
t
348354
(Bound_parameters.to_list params)
349355

350-
let add_parameters ?(name_mode = Name_mode.normal) t params ~param_types =
356+
let add_parameters ~extra ?(name_mode = Name_mode.normal) t params ~param_types
357+
=
351358
let params' = params in
352359
let params = Bound_parameters.to_list params in
353360
if List.compare_lengths params param_types <> 0
@@ -360,10 +367,10 @@ let add_parameters ?(name_mode = Name_mode.normal) t params ~param_types =
360367
List.fold_left2
361368
(fun t param param_type ->
362369
let var = Bound_var.create (BP.var param) name_mode in
363-
add_variable t var param_type)
370+
add_variable0 ~extra t var param_type)
364371
t params param_types
365372

366-
let add_parameters_with_unknown_types ?alloc_modes ?name_mode t params =
373+
let add_parameters_with_unknown_types ~extra ?alloc_modes ?name_mode t params =
367374
let params' = params in
368375
let params = Bound_parameters.to_list params in
369376
let alloc_modes =
@@ -380,7 +387,7 @@ let add_parameters_with_unknown_types ?alloc_modes ?name_mode t params =
380387
ListLabels.map2 params alloc_modes ~f:(fun param alloc_mode ->
381388
T.unknown_with_subkind ~alloc_mode (BP.kind param))
382389
in
383-
add_parameters ?name_mode t params' ~param_types
390+
add_parameters ~extra ?name_mode t params' ~param_types
384391

385392
let mark_parameters_as_toplevel t params =
386393
let variables_defined_at_toplevel =

middle_end/flambda2/simplify/env/downwards_env.mli

+3-1
Original file line numberDiff line numberDiff line change
@@ -99,16 +99,18 @@ val define_name_if_undefined : t -> Bound_name.t -> Flambda_kind.t -> t
9999

100100
val add_equation_on_name : t -> Name.t -> Flambda2_types.t -> t
101101

102-
val define_parameters : t -> params:Bound_parameters.t -> t
102+
val define_parameters : extra:bool -> t -> params:Bound_parameters.t -> t
103103

104104
val add_parameters :
105+
extra:bool ->
105106
?name_mode:Name_mode.t ->
106107
t ->
107108
Bound_parameters.t ->
108109
param_types:Flambda2_types.t list ->
109110
t
110111

111112
val add_parameters_with_unknown_types :
113+
extra:bool ->
112114
?alloc_modes:Alloc_mode.For_types.t list ->
113115
?name_mode:Name_mode.t ->
114116
t ->

middle_end/flambda2/simplify/join_points.ml

+9-5
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ let introduce_extra_params_for_join denv use_envs_with_ids
6565
denv, use_tenvs_with_ids
6666
else
6767
let extra_params = EPA.extra_params extra_params_and_args in
68-
let denv = DE.define_parameters denv ~params:extra_params in
68+
let denv = DE.define_parameters ~extra:true denv ~params:extra_params in
6969
let use_envs_with_ids =
7070
List.filter_map
7171
(introduce_extra_params_in_use_env extra_params_and_args)
@@ -185,7 +185,9 @@ let compute_handler_env ?cut_after uses ~is_recursive ~env_at_fork
185185
add_equations_on_params typing_env ~is_recursive ~params ~param_types
186186
in
187187
let use_env =
188-
let use_env = DE.define_parameters (U.env_at_use use) ~params in
188+
let use_env =
189+
DE.define_parameters ~extra:false (U.env_at_use use) ~params
190+
in
189191
DE.map_typing_env use_env ~f:add_or_meet_param_type
190192
in
191193
use_env, U.id use, U.use_kind use)
@@ -266,15 +268,17 @@ let compute_handler_env ?cut_after uses ~is_recursive ~env_at_fork
266268
then
267269
(* No need to add equations, as they will be computed from the use
268270
environments *)
269-
let denv = DE.define_parameters denv ~params in
271+
let denv = DE.define_parameters denv ~extra:false ~params in
270272
Profile.record_call ~accumulate:true "join" (fun () ->
271273
join ?cut_after denv params ~consts_lifted_during_body
272274
~use_envs_with_ids ~lifted_cont_extra_params_and_args)
273275
else
274276
(* Define parameters with basic equations from the subkinds *)
275-
let denv = DE.add_parameters_with_unknown_types denv params in
276277
let denv =
277-
DE.add_parameters_with_unknown_types denv
278+
DE.add_parameters_with_unknown_types denv ~extra:false params
279+
in
280+
let denv =
281+
DE.add_parameters_with_unknown_types denv ~extra:true
278282
(EPA.extra_params lifted_cont_extra_params_and_args)
279283
in
280284
denv, lifted_cont_extra_params_and_args

middle_end/flambda2/simplify/simplify_apply_expr.ml

+1-1
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ let simplify_direct_full_application ~simplify_expr dacc apply function_type
296296
result_types Apply.print apply;
297297
let denv = DA.denv dacc in
298298
let denv =
299-
DE.add_parameters_with_unknown_types
299+
DE.add_parameters_with_unknown_types ~extra:false
300300
~name_mode:Name_mode.in_types denv params
301301
in
302302
let params = Bound_parameters.to_list params in

middle_end/flambda2/simplify/simplify_let_cont_expr.ml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1137,7 +1137,7 @@ and simplify_single_recursive_handler ~simplify_expr cont_uses_env_so_far
11371137
uses (needed for the recursive continuation handlers). *)
11381138
let handler_env =
11391139
assert (not (DE.at_unit_toplevel denv_to_reset));
1140-
DE.add_parameters_with_unknown_types denv_to_reset params
1140+
DE.add_parameters_with_unknown_types ~extra:false denv_to_reset params
11411141
in
11421142
let handler_env = LCS.add_to_denv handler_env consts_lifted_during_body in
11431143
let code_age_relation = TE.code_age_relation (DA.typing_env dacc) in

middle_end/flambda2/simplify/simplify_set_of_closures.ml

+2-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ let dacc_inside_function context ~outer_dacc ~params ~my_closure ~my_region
3434
let dacc = C.dacc_inside_functions context in
3535
let alloc_modes = Code_metadata.param_modes code_metadata in
3636
let denv =
37-
DE.add_parameters_with_unknown_types ~alloc_modes (DA.denv dacc) params
37+
DE.add_parameters_with_unknown_types ~extra:false ~alloc_modes
38+
(DA.denv dacc) params
3839
|> DE.set_inlining_arguments inlining_arguments
3940
|> DE.set_inlining_history_tracker
4041
(Inlining_history.Tracker.inside_function absolute_history)

0 commit comments

Comments
 (0)