Module Lift_code

type lifter = Flambda.program -> Flambda.program
val lift_lets : lifter

Lift let bindings to attempt to increase the length of scopes, as an aid to further optimizations. For example: let c = let b = <expr> in b, b in fst c would be transformed to: let b = <expr> in let c = b, b in fst c which is then clearly just: <expr>

val lift_lets_expr : Flambda.t -> toplevel:bool -> Flambda.t
val lifting_helper : Flambda.t list -> evaluation_order:[ `Left_to_right | `Right_to_left ] -> create_body:(Variable.t list -> Flambda.t) -> name:Internal_variable_names.t -> Flambda.t