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 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