summaryrefslogtreecommitdiff
path: root/middle_end/lift_constants.ml
diff options
context:
space:
mode:
authorMark Shinwell <mshinwell@gmail.com>2016-02-08 14:05:38 +0100
committerMark Shinwell <mshinwell@gmail.com>2016-02-09 09:59:26 +0100
commita3975110317da9b47b018f60fdb57236e8db9f12 (patch)
tree55b067c9c19f128a35fc6d5a89228255855ae646 /middle_end/lift_constants.ml
parentec190a03a3e33acee42aea7f27a931ff70d3216f (diff)
downloadocaml-a3975110317da9b47b018f60fdb57236e8db9f12.tar.gz
Import latest Flambda changes
Diffstat (limited to 'middle_end/lift_constants.ml')
-rw-r--r--middle_end/lift_constants.ml21
1 files changed, 14 insertions, 7 deletions
diff --git a/middle_end/lift_constants.ml b/middle_end/lift_constants.ml
index c3beb9d9bd..4ceefb14be 100644
--- a/middle_end/lift_constants.ml
+++ b/middle_end/lift_constants.ml
@@ -142,13 +142,14 @@ let assign_symbols_and_collect_constant_definitions
in
collect_let_and_initialize_symbols program.program_body;
let record_set_of_closure_equalities (set_of_closures:Flambda.set_of_closures) =
- Variable.Map.iter (fun arg var ->
+ Variable.Map.iter (fun arg (var : Flambda.specialised_to) ->
if not (Inconstant_idents.variable arg inconstants) then
- Variable.Tbl.add var_to_definition_tbl arg (AA.Variable var))
+ Variable.Tbl.add var_to_definition_tbl arg (AA.Variable var.var))
set_of_closures.free_vars;
- Variable.Map.iter (fun arg var ->
+ Variable.Map.iter (fun arg (spec_to : Flambda.specialised_to) ->
if not (Inconstant_idents.variable arg inconstants) then
- Variable.Tbl.add var_to_definition_tbl arg (AA.Variable var))
+ Variable.Tbl.add var_to_definition_tbl arg
+ (AA.Variable spec_to.var))
set_of_closures.specialised_args
in
Flambda_iterators.iter_on_set_of_closures_of_program program
@@ -618,7 +619,7 @@ let introduce_free_variables_in_set_of_closures
| exception Not_found -> var
| external_var ->
(* specialised arguments bound to constant can be rewritten *)
- external_var
+ external_var.var
in
match Variable.Tbl.find var_to_block_field_tbl searched_var with
| def ->
@@ -671,14 +672,20 @@ let introduce_free_variables_in_set_of_closures
keep)
free_vars
in
+ let free_vars =
+ Flambda_utils.clean_projections ~which_variables:free_vars
+ in
let specialised_args =
(* Keep only those that are not rewritten to constants. *)
- Variable.Map.filter (fun _ v ->
- let keep = not (Variable.Tbl.mem var_to_block_field_tbl v) in
+ Variable.Map.filter (fun _ (spec_to : Flambda.specialised_to) ->
+ let keep = not (Variable.Tbl.mem var_to_block_field_tbl spec_to.var) in
if not keep then done_something := true;
keep)
specialised_args
in
+ let specialised_args =
+ Flambda_utils.clean_projections ~which_variables:specialised_args
+ in
if not !done_something then
set_of_closures
else