Module Flambda2_simplify.Downwards_env
type resolver =
Compilation_unit.t ->
Flambda2_types.Typing_env.Serializable.t optiontype get_imported_code = unit -> Flambda2_cmx.Exported_code.tval print : Format.formatter -> t -> unitPrint a human-readable version of the given environment.
val create :
round:int ->
machine_width:Target_system.Machine_width.t ->
resolver:resolver ->
get_imported_code:get_imported_code ->
propagating_float_consts:bool ->
unit_toplevel_exn_continuation:Flambda2_identifiers.Continuation.t ->
unit_toplevel_return_continuation:Flambda2_identifiers.Continuation.t ->
toplevel_my_region:Flambda2_identifiers.Variable.t ->
toplevel_my_ghost_region:Flambda2_identifiers.Variable.t ->
tCreate a new environment, marked as being at the toplevel of a compilation unit.
val all_code : t -> Flambda2_terms.Code.t Flambda2_identifiers.Code_id.Map.tval machine_width : t -> Target_system.Machine_width.tval resolver :
t ->
Compilation_unit.t ->
Flambda2_types.Typing_env.Serializable.t optionval propagating_float_consts : t -> boolval at_unit_toplevel : t -> boolval is_defined_at_toplevel : t -> Flambda2_identifiers.Variable.t -> boolval add_symbol_projection :
t ->
Flambda2_identifiers.Variable.t ->
Flambda2_term_basics.Symbol_projection.t ->
tval find_symbol_projection :
t ->
Flambda2_identifiers.Variable.t ->
Flambda2_term_basics.Symbol_projection.t optionval unit_toplevel_return_continuation :
t ->
Flambda2_identifiers.Continuation.tval unit_toplevel_exn_continuation : t -> Flambda2_identifiers.Continuation.tval get_continuation_scope : t -> Flambda2_term_basics.Scope.tval typing_env : t -> Flambda2_types.Typing_env.tval define_continuations :
can_be_lifted:bool ->
t ->
Flambda2_identifiers.Continuation.t list ->
tval define_variable :
t ->
Flambda2_bound_identifiers.Bound_var.t ->
Flambda2_kinds.Flambda_kind.t ->
tval define_extra_variable :
t ->
Flambda2_bound_identifiers.Bound_var.t ->
Flambda2_kinds.Flambda_kind.t ->
tval add_name :
t ->
Flambda2_bound_identifiers.Bound_name.t ->
Flambda2_types.t ->
tval add_variable :
t ->
Flambda2_bound_identifiers.Bound_var.t ->
Flambda2_types.t ->
tval add_equation_on_variable :
t ->
Flambda2_identifiers.Variable.t ->
Flambda2_types.t ->
tval mem_variable : t -> Flambda2_identifiers.Variable.t -> boolval add_symbol : t -> Flambda2_identifiers.Symbol.t -> Flambda2_types.t -> tval define_symbol :
t ->
Flambda2_identifiers.Symbol.t ->
Flambda2_kinds.Flambda_kind.t ->
tval mem_symbol : t -> Flambda2_identifiers.Symbol.t -> boolval find_symbol : t -> Flambda2_identifiers.Symbol.t -> Flambda2_types.tval add_equation_on_symbol :
t ->
Flambda2_identifiers.Symbol.t ->
Flambda2_types.t ->
tval define_name :
t ->
Flambda2_bound_identifiers.Bound_name.t ->
Flambda2_kinds.Flambda_kind.t ->
tval define_name_if_undefined :
t ->
Flambda2_bound_identifiers.Bound_name.t ->
Flambda2_kinds.Flambda_kind.t ->
tval add_equation_on_name :
t ->
Flambda2_identifiers.Name.t ->
Flambda2_types.t ->
tval define_parameters :
extra:bool ->
t ->
params:Flambda2_bound_identifiers.Bound_parameters.t ->
tval add_parameters :
extra:bool ->
?name_mode:Flambda2_nominal.Name_mode.t ->
t ->
Flambda2_bound_identifiers.Bound_parameters.t ->
param_types:Flambda2_types.t list ->
tval add_parameters_with_unknown_types :
extra:bool ->
?alloc_modes:Flambda2_bound_identifiers.Alloc_mode.For_types.t list ->
?name_mode:Flambda2_nominal.Name_mode.t ->
t ->
Flambda2_bound_identifiers.Bound_parameters.t ->
tval mark_parameters_as_toplevel :
t ->
Flambda2_bound_identifiers.Bound_parameters.t ->
tval extend_typing_environment :
t ->
Flambda2_types.Typing_env_extension.With_extra_variables.t ->
tval with_typing_env : t -> Flambda2_types.Typing_env.t -> tval map_typing_env :
t ->
f:(Flambda2_types.Typing_env.t -> Flambda2_types.Typing_env.t) ->
tval check_simple_is_bound : t -> Flambda2_term_basics.Simple.t -> unitval define_code :
t ->
code_id:Flambda2_identifiers.Code_id.t ->
code:Flambda2_terms.Code.t ->
tval mem_code : t -> Flambda2_identifiers.Code_id.t -> boolval find_code_exn :
t ->
Flambda2_identifiers.Code_id.t ->
Flambda2_terms.Code_or_metadata.tThis function raises if the code ID is unbound.
val merge_inlined_debuginfo :
t ->
from_apply_expr:Flambda2_term_basics.Inlined_debuginfo.t ->
tval add_inlined_debuginfo : t -> Debuginfo.t -> Debuginfo.tval round : t -> intval set_inlining_state : t -> Flambda2_terms.Inlining_state.t -> tval get_inlining_state : t -> Flambda2_terms.Inlining_state.tval add_cse :
t ->
Flambda2_terms.Flambda_primitive.Eligible_for_cse.t ->
bound_to:Flambda2_term_basics.Simple.t ->
name_mode:Flambda2_nominal.Name_mode.t ->
tval find_cse :
t ->
Flambda2_terms.Flambda_primitive.Eligible_for_cse.t ->
Flambda2_term_basics.Simple.t optionval find_comparison_result :
t ->
Flambda2_identifiers.Variable.t ->
Comparison_result.t optionval cse : t -> Common_subexpression_elimination.tval comparison_results :
t ->
Comparison_result.t Flambda2_identifiers.Variable.Map.tval with_cse : t -> Common_subexpression_elimination.t -> tmodule Disable_inlining_reason : sig ... endval set_do_not_rebuild_terms_and_disable_inlining :
t ->
Disable_inlining_reason.t ->
tval set_disable_inlining : t -> Disable_inlining_reason.t -> tmodule Disable_inlining : sig ... endval disable_inlining : t -> Disable_inlining.tval are_rebuilding_terms : t -> Flambda2_simplify_shared.Are_rebuilding_terms.tval enter_closure :
Flambda2_identifiers.Code_id.t ->
return_continuation:Flambda2_identifiers.Continuation.t ->
exn_continuation:Flambda2_identifiers.Continuation.t ->
my_closure:Flambda2_identifiers.Variable.t ->
t ->
tval closure_info : t -> Closure_info.tval inlining_arguments : t -> Flambda2_terms.Inlining_arguments.tval set_inlining_arguments : Flambda2_terms.Inlining_arguments.t -> t -> tval enter_inlined_apply :
called_code:Flambda2_terms.Code.t ->
apply:Flambda2_terms.Flambda.Import.Apply.t ->
was_inline_always:bool ->
t ->
tval generate_phantom_lets : t -> boolval inlining_history_tracker : t -> Flambda2_terms.Inlining_history.Tracker.tval set_inlining_history_tracker :
Flambda2_terms.Inlining_history.Tracker.t ->
t ->
tval relative_history : t -> Flambda2_terms.Inlining_history.Relative.tval loopify_state : t -> Loopify_state.tval set_loopify_state : Loopify_state.t -> t -> tval with_code_age_relation : Flambda2_types.Code_age_relation.t -> t -> tval defined_variables_by_scope : t -> Lifted_cont_params.t listval enter_continuation_handler : Lifted_cont_params.t -> t -> tval variables_defined_in_current_continuation : t -> Lifted_cont_params.tval cost_of_lifting_continuations_out_of_current_one : t -> intval must_inline : t -> boolval replay_history : t -> Replay_history.tval with_replay_history : (Replay_history.t * bool) option -> t -> tval record_inlining_decision :
apply:Flambda2_terms.Apply_expr.t ->
Flambda2_simplify_shared.Call_site_inlining_decision_type.t ->
t ->
tval with_join_analysis :
Flambda2_identifiers.Apply_cont_rewrite_id.t Flambda2_types.Join_analysis.t
option ->
t ->
tval join_analysis :
t ->
Flambda2_identifiers.Apply_cont_rewrite_id.t Flambda2_types.Join_analysis.t
optionval map_specialization_cost :
f:(Specialization_cost.t -> Specialization_cost.t) ->
t ->
tval specialization_cost : t -> Specialization_cost.tval has_seen_a_non_liftable_continuation : t -> bool