Module Flambda2_simplify.Rebuilt_expr
The type of expressions constructed by the simplifier.
Using a type that is different from Expr.t enables us to robustly avoid rebuilding terms during simplification when unnecessary, e.g. during speculative inlining tests.
Note that this module relies on the UA.t values passed in to determine the semantics of values of type t. As such, values of type t must not be passed between contexts where the value of UA.do_not_rebuild_terms differs.
type rebuilt_expr = Flambda2_simplify.Rebuilt_expr.tval print :
Flambda2_simplify_shared.Are_rebuilding_terms.t ->
Stdlib.Format.formatter ->
Flambda2_simplify.Rebuilt_expr.t ->
unitval to_expr :
Flambda2_simplify.Rebuilt_expr.t ->
Flambda2_simplify_shared.Are_rebuilding_terms.t ->
Flambda2_terms.Flambda.Expr.tThis function may only be used when rebuilding terms.
val to_apply_cont :
Flambda2_simplify.Rebuilt_expr.t ->
Flambda2_terms.Flambda.Apply_cont.t optionval can_be_removed_as_invalid :
Flambda2_simplify.Rebuilt_expr.t ->
Flambda2_simplify_shared.Are_rebuilding_terms.t ->
boolval term_not_rebuilt : Flambda2_simplify.Rebuilt_expr.tval create_let :
Flambda2_simplify_shared.Are_rebuilding_terms.t ->
Flambda2_bound_identifiers.Bound_pattern.t ->
Flambda2_terms.Flambda.Named.t ->
body:Flambda2_simplify.Rebuilt_expr.t ->
free_names_of_body:Flambda2_nominal.Name_occurrences.t ->
Flambda2_simplify.Rebuilt_expr.tThis should only be used by Expr_builder to make sure occurrences of function slots and value slots are recorded.
val create_apply_cont :
Flambda2_terms.Flambda.Apply_cont.t ->
Flambda2_simplify.Rebuilt_expr.tApply_cont expressions are always rebuilt to allow optimisations in Simplify_switch_expr and Simplify_let_cont_expr.
module Function_params_and_body : sig ... endmodule Continuation_handler : sig ... endval create_non_recursive_let_cont :
Flambda2_simplify_shared.Are_rebuilding_terms.t ->
Flambda2_identifiers.Continuation.t ->
Flambda2_simplify.Rebuilt_expr.Continuation_handler.t ->
body:Flambda2_simplify.Rebuilt_expr.t ->
free_names_of_body:Flambda2_nominal.Name_occurrences.t ->
Flambda2_simplify.Rebuilt_expr.tval create_non_recursive_let_cont' :
Flambda2_simplify_shared.Are_rebuilding_terms.t ->
Flambda2_identifiers.Continuation.t ->
Flambda2_simplify.Rebuilt_expr.Continuation_handler.t ->
body:Flambda2_simplify.Rebuilt_expr.t ->
num_free_occurrences_of_cont_in_body:Flambda2_nominal.Num_occurrences.t ->
is_applied_with_traps:bool ->
Flambda2_simplify.Rebuilt_expr.tval create_non_recursive_let_cont_without_free_names :
Flambda2_simplify_shared.Are_rebuilding_terms.t ->
Flambda2_identifiers.Continuation.t ->
Flambda2_simplify.Rebuilt_expr.Continuation_handler.t ->
body:Flambda2_simplify.Rebuilt_expr.t ->
Flambda2_simplify.Rebuilt_expr.tval create_recursive_let_cont :
Flambda2_simplify_shared.Are_rebuilding_terms.t ->
invariant_params:Flambda2_bound_identifiers.Bound_parameters.t ->
Flambda2_simplify.Rebuilt_expr.Continuation_handler.t
Flambda2_identifiers.Continuation.Lmap.t ->
body:Flambda2_simplify.Rebuilt_expr.t ->
Flambda2_simplify.Rebuilt_expr.tval create_switch :
Flambda2_simplify_shared.Are_rebuilding_terms.t ->
Flambda2_terms.Switch_expr.t ->
Flambda2_simplify.Rebuilt_expr.tval create_invalid :
Flambda2_terms.Flambda.Invalid.t ->
Flambda2_simplify.Rebuilt_expr.tval bind_no_simplification :
Flambda2_simplify_shared.Are_rebuilding_terms.t ->
bindings:
(Flambda2_bound_identifiers.Bound_var.t
* Flambda2_terms.Code_size.t
* Flambda2_terms.Flambda.Named.t)
list ->
body:Flambda2_simplify.Rebuilt_expr.t ->
cost_metrics_of_body:Flambda2_terms.Cost_metrics.t ->
free_names_of_body:Flambda2_nominal.Name_occurrences.t ->
Flambda2_simplify.Rebuilt_expr.t
* Flambda2_terms.Cost_metrics.t
* Flambda2_nominal.Name_occurrences.t