Module Flambda_utils

val find_declaration_variable : Closure_id.t -> Flambda.function_declarations -> Variable.t
val function_arity : Flambda.function_declaration -> int
val variables_bound_by_the_closure : Closure_id.t -> Flambda.function_declarations -> Variable.Set.t
val can_be_merged : Flambda.t -> Flambda.t -> bool
val description_of_toplevel_node : Flambda.t -> string
val make_closure_declaration : is_classic_mode:bool -> id:Variable.t -> body:Flambda.t -> params:Parameter.t list -> Flambda.t
val toplevel_substitution : Variable.t Variable.Map.t -> Flambda.expr -> Flambda.expr
val toplevel_substitution_named : Variable.t Variable.Map.t -> Flambda.named -> Flambda.named
val bind : bindings:(Variable.t * Flambda.named) list -> body:Flambda.t -> Flambda.t
val name_expr_from_var : var:Variable.t -> Flambda.named -> Flambda.t
val initialize_symbols : Flambda.program -> (Symbol.t * Tag.t * Flambda.t list) list
val imported_symbols : Flambda.program -> Symbol.Set.t
val needed_import_symbols : Flambda.program -> Symbol.Set.t
val introduce_needed_import_symbols : Flambda.program -> Flambda.program
val root_symbol : Flambda.program -> Symbol.t
val might_raise_static_exn : Flambda.named -> Static_exception.t -> bool
val all_lifted_constants : Flambda.program -> (Symbol.t * Flambda.constant_defining_value) list
val all_lifted_constants_as_map : Flambda.program -> Flambda.constant_defining_value Symbol.Map.t
val all_lifted_constant_sets_of_closures : Flambda.program -> Set_of_closures_id.Set.t
val all_lifted_constant_closures : Flambda.program -> Closure_id.Set.t
val all_sets_of_closures : Flambda.program -> Flambda.set_of_closures list
val substitute_read_symbol_field_for_variables : (Symbol.t * int list) Variable.Map.t -> Flambda.t -> Flambda.t
module Switch_storer : sig ... end
val fun_vars_referenced_in_decls : Flambda.function_declarations -> closure_symbol:(Closure_id.t -> Symbol.t) -> Variable.Set.t Variable.Map.t
val closures_required_by_entry_point : entry_point:Closure_id.t -> closure_symbol:(Closure_id.t -> Symbol.t) -> Flambda.function_declarations -> Variable.Set.t
val all_functions_parameters : Flambda.function_declarations -> Variable.Set.t
val contains_stub : Flambda.function_declarations -> bool
val projection_to_named : Projection.t -> Flambda.named
type specialised_to_same_as =
  1. | Not_specialised
  2. | Specialised_and_aliased_to of Variable.Set.t
val parameters_specialised_to_the_same_variable : function_decls:Flambda.function_declarations -> specialised_args:Flambda.specialised_to Variable.Map.t -> specialised_to_same_as list Variable.Map.t