Skip to content

Better extension from meet #316

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 8 commits into
base: flambda2.0-stable
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 39 additions & 2 deletions .depend
Original file line number Diff line number Diff line change
Expand Up @@ -9177,6 +9177,7 @@ middle_end/flambda/types/flambda_type.cmo : \
middle_end/flambda/naming/name_in_binding_pos.cmi \
middle_end/flambda/basic/name.cmi \
utils/misc.cmi \
middle_end/flambda/types/basic/meet_result.cmi \
middle_end/flambda/basic/kinded_parameter.cmi \
middle_end/flambda/cmx/ids_for_export.cmi \
utils/identifiable.cmi \
Expand Down Expand Up @@ -9232,6 +9233,7 @@ middle_end/flambda/types/flambda_type.cmx : \
middle_end/flambda/naming/name_in_binding_pos.cmx \
middle_end/flambda/basic/name.cmx \
utils/misc.cmx \
middle_end/flambda/types/basic/meet_result.cmx \
middle_end/flambda/basic/kinded_parameter.cmx \
middle_end/flambda/cmx/ids_for_export.cmx \
utils/identifiable.cmx \
Expand Down Expand Up @@ -9277,6 +9279,7 @@ middle_end/flambda/types/flambda_type.cmi : \
middle_end/flambda/naming/name_mode.cmi \
middle_end/flambda/naming/name_in_binding_pos.cmi \
middle_end/flambda/basic/name.cmi \
middle_end/flambda/types/basic/meet_result.cmi \
middle_end/flambda/basic/kinded_parameter.cmi \
middle_end/flambda/basic/invariant_env.cmi \
middle_end/flambda/cmx/ids_for_export.cmi \
Expand Down Expand Up @@ -9315,6 +9318,7 @@ middle_end/flambda/types/type_descr.rec.cmo : \
middle_end/flambda/naming/name_occurrences.cmi \
middle_end/flambda/naming/name_mode.cmi \
utils/misc.cmi \
middle_end/flambda/types/basic/meet_result.cmi \
middle_end/flambda/cmx/ids_for_export.cmi \
middle_end/flambda/compilenv_deps/flambda_colours.cmi \
middle_end/flambda/compilenv_deps/coercion.cmi \
Expand All @@ -9334,6 +9338,7 @@ middle_end/flambda/types/type_descr.rec.cmx : \
middle_end/flambda/naming/name_occurrences.cmx \
middle_end/flambda/naming/name_mode.cmx \
utils/misc.cmx \
middle_end/flambda/types/basic/meet_result.cmx \
middle_end/flambda/cmx/ids_for_export.cmx \
middle_end/flambda/compilenv_deps/flambda_colours.cmx \
middle_end/flambda/compilenv_deps/coercion.cmx \
Expand All @@ -9350,6 +9355,7 @@ middle_end/flambda/types/type_descr_intf.cmo : \
middle_end/flambda/types/basic/or_unknown.cmi \
middle_end/flambda/types/basic/or_bottom.cmi \
middle_end/flambda/basic/name.cmi \
middle_end/flambda/types/basic/meet_result.cmi \
middle_end/flambda/types/kinds/flambda_kind.cmi \
middle_end/flambda/naming/contains_names.cmo \
middle_end/flambda/cmx/contains_ids.cmo \
Expand All @@ -9361,6 +9367,7 @@ middle_end/flambda/types/type_descr_intf.cmx : \
middle_end/flambda/types/basic/or_unknown.cmx \
middle_end/flambda/types/basic/or_bottom.cmx \
middle_end/flambda/basic/name.cmx \
middle_end/flambda/types/basic/meet_result.cmx \
middle_end/flambda/types/kinds/flambda_kind.cmx \
middle_end/flambda/naming/contains_names.cmx \
middle_end/flambda/cmx/contains_ids.cmx \
Expand Down Expand Up @@ -9428,6 +9435,7 @@ middle_end/flambda/types/type_grammar.rec.cmi : \
middle_end/flambda/types/basic/or_bottom.cmi \
utils/numbers.cmi \
middle_end/flambda/basic/name.cmi \
middle_end/flambda/types/basic/meet_result.cmi \
middle_end/flambda/types/kinds/flambda_kind.cmi \
lambda/debuginfo.cmi \
middle_end/flambda/naming/contains_names.cmo \
Expand All @@ -9439,13 +9447,15 @@ middle_end/flambda/types/type_head_intf.cmo : \
utils/printing_cache.cmi \
middle_end/flambda/types/basic/or_unknown.cmi \
middle_end/flambda/types/basic/or_bottom.cmi \
middle_end/flambda/types/basic/meet_result.cmi \
middle_end/flambda/naming/contains_names.cmo \
middle_end/flambda/cmx/contains_ids.cmo \
middle_end/flambda/compilenv_deps/coercion.cmi
middle_end/flambda/types/type_head_intf.cmx : \
utils/printing_cache.cmx \
middle_end/flambda/types/basic/or_unknown.cmx \
middle_end/flambda/types/basic/or_bottom.cmx \
middle_end/flambda/types/basic/meet_result.cmx \
middle_end/flambda/naming/contains_names.cmx \
middle_end/flambda/cmx/contains_ids.cmx \
middle_end/flambda/compilenv_deps/coercion.cmx
Expand Down Expand Up @@ -9506,6 +9516,11 @@ middle_end/flambda/types/basic/meet_or_join_op.cmo : \
middle_end/flambda/types/basic/meet_or_join_op.cmx : \
middle_end/flambda/types/basic/meet_or_join_op.cmi
middle_end/flambda/types/basic/meet_or_join_op.cmi :
middle_end/flambda/types/basic/meet_result.cmo : \
middle_end/flambda/types/basic/meet_result.cmi
middle_end/flambda/types/basic/meet_result.cmx : \
middle_end/flambda/types/basic/meet_result.cmi
middle_end/flambda/types/basic/meet_result.cmi :
middle_end/flambda/types/basic/or_bottom.cmo : \
middle_end/flambda/types/basic/or_bottom.cmi
middle_end/flambda/types/basic/or_bottom.cmx : \
Expand Down Expand Up @@ -9690,6 +9705,7 @@ middle_end/flambda/types/env/typing_env.rec.cmo : \
middle_end/flambda/naming/name_in_binding_pos.cmi \
middle_end/flambda/basic/name.cmi \
utils/misc.cmi \
middle_end/flambda/types/basic/meet_result.cmi \
middle_end/flambda/basic/kinded_parameter.cmi \
middle_end/flambda/cmx/ids_for_export.cmi \
middle_end/flambda/types/kinds/flambda_kind.cmi \
Expand All @@ -9715,6 +9731,7 @@ middle_end/flambda/types/env/typing_env.rec.cmx : \
middle_end/flambda/naming/name_in_binding_pos.cmx \
middle_end/flambda/basic/name.cmx \
utils/misc.cmx \
middle_end/flambda/types/basic/meet_result.cmx \
middle_end/flambda/basic/kinded_parameter.cmx \
middle_end/flambda/cmx/ids_for_export.cmx \
middle_end/flambda/types/kinds/flambda_kind.cmx \
Expand Down Expand Up @@ -9865,13 +9882,15 @@ middle_end/flambda/types/structures/closures_entry.rec.cmo : \
utils/printing_cache.cmi \
middle_end/flambda/types/basic/or_bottom.cmi \
middle_end/flambda/naming/name_occurrences.cmi \
middle_end/flambda/types/basic/meet_result.cmi \
middle_end/flambda/cmx/ids_for_export.cmi \
middle_end/flambda/basic/closure_id.cmi \
middle_end/flambda/types/structures/closures_entry.rec.cmi
middle_end/flambda/types/structures/closures_entry.rec.cmx : \
utils/printing_cache.cmx \
middle_end/flambda/types/basic/or_bottom.cmx \
middle_end/flambda/naming/name_occurrences.cmx \
middle_end/flambda/types/basic/meet_result.cmx \
middle_end/flambda/cmx/ids_for_export.cmx \
middle_end/flambda/basic/closure_id.cmx \
middle_end/flambda/types/structures/closures_entry.rec.cmi
Expand Down Expand Up @@ -9912,6 +9931,7 @@ middle_end/flambda/types/structures/function_declaration_type.rec.cmo : \
middle_end/flambda/types/basic/or_bottom.cmi \
middle_end/flambda/naming/name_occurrences.cmi \
middle_end/flambda/naming/name_mode.cmi \
middle_end/flambda/types/basic/meet_result.cmi \
middle_end/flambda/cmx/ids_for_export.cmi \
lambda/debuginfo.cmi \
middle_end/flambda/basic/code_id.cmi \
Expand All @@ -9924,6 +9944,7 @@ middle_end/flambda/types/structures/function_declaration_type.rec.cmx : \
middle_end/flambda/types/basic/or_bottom.cmx \
middle_end/flambda/naming/name_occurrences.cmx \
middle_end/flambda/naming/name_mode.cmx \
middle_end/flambda/types/basic/meet_result.cmx \
middle_end/flambda/cmx/ids_for_export.cmx \
lambda/debuginfo.cmx \
middle_end/flambda/basic/code_id.cmx \
Expand All @@ -9946,6 +9967,7 @@ middle_end/flambda/types/structures/product.rec.cmo : \
middle_end/flambda/types/basic/or_bottom.cmi \
middle_end/flambda/naming/name_occurrences.cmi \
utils/misc.cmi \
middle_end/flambda/types/basic/meet_result.cmi \
middle_end/flambda/cmx/ids_for_export.cmi \
middle_end/flambda/types/kinds/flambda_kind.cmi \
middle_end/flambda/basic/closure_id.cmi \
Expand All @@ -9959,6 +9981,7 @@ middle_end/flambda/types/structures/product.rec.cmx : \
middle_end/flambda/types/basic/or_bottom.cmx \
middle_end/flambda/naming/name_occurrences.cmx \
utils/misc.cmx \
middle_end/flambda/types/basic/meet_result.cmx \
middle_end/flambda/cmx/ids_for_export.cmx \
middle_end/flambda/types/kinds/flambda_kind.cmx \
middle_end/flambda/basic/closure_id.cmx \
Expand Down Expand Up @@ -10001,6 +10024,7 @@ middle_end/flambda/types/structures/row_like.rec.cmo : \
utils/numbers.cmi \
middle_end/flambda/naming/name_occurrences.cmi \
utils/misc.cmi \
middle_end/flambda/types/basic/meet_result.cmi \
middle_end/flambda/cmx/ids_for_export.cmi \
utils/identifiable.cmi \
middle_end/flambda/types/kinds/flambda_kind.cmi \
Expand All @@ -10024,6 +10048,7 @@ middle_end/flambda/types/structures/row_like.rec.cmx : \
utils/numbers.cmx \
middle_end/flambda/naming/name_occurrences.cmx \
utils/misc.cmx \
middle_end/flambda/types/basic/meet_result.cmx \
middle_end/flambda/cmx/ids_for_export.cmx \
utils/identifiable.cmx \
middle_end/flambda/types/kinds/flambda_kind.cmx \
Expand Down Expand Up @@ -10072,19 +10097,20 @@ middle_end/flambda/types/structures/set_of_closures_contents.cmi : \
middle_end/flambda/basic/closure_id.cmi
middle_end/flambda/types/structures/type_structure_intf.cmo : \
utils/printing_cache.cmi \
middle_end/flambda/types/basic/or_bottom.cmi \
middle_end/flambda/types/basic/meet_result.cmi \
middle_end/flambda/naming/contains_names.cmo \
middle_end/flambda/cmx/contains_ids.cmo
middle_end/flambda/types/structures/type_structure_intf.cmx : \
utils/printing_cache.cmx \
middle_end/flambda/types/basic/or_bottom.cmx \
middle_end/flambda/types/basic/meet_result.cmx \
middle_end/flambda/naming/contains_names.cmx \
middle_end/flambda/cmx/contains_ids.cmx
middle_end/flambda/types/type_of_kind/type_of_kind_naked_float0.rec.cmo : \
middle_end/flambda/types/basic/or_unknown.cmi \
middle_end/flambda/types/basic/or_bottom.cmi \
utils/numbers.cmi \
middle_end/flambda/naming/name_occurrences.cmi \
middle_end/flambda/types/basic/meet_result.cmi \
middle_end/flambda/cmx/ids_for_export.cmi \
middle_end/flambda/compilenv_deps/coercion.cmi \
middle_end/flambda/types/type_of_kind/type_of_kind_naked_float0.rec.cmi
Expand All @@ -10093,6 +10119,7 @@ middle_end/flambda/types/type_of_kind/type_of_kind_naked_float0.rec.cmx : \
middle_end/flambda/types/basic/or_bottom.cmx \
utils/numbers.cmx \
middle_end/flambda/naming/name_occurrences.cmx \
middle_end/flambda/types/basic/meet_result.cmx \
middle_end/flambda/cmx/ids_for_export.cmx \
middle_end/flambda/compilenv_deps/coercion.cmx \
middle_end/flambda/types/type_of_kind/type_of_kind_naked_float0.rec.cmi
Expand All @@ -10106,6 +10133,7 @@ middle_end/flambda/types/type_of_kind/type_of_kind_naked_immediate0.rec.cmo : \
middle_end/flambda/types/basic/or_unknown.cmi \
middle_end/flambda/types/basic/or_bottom.cmi \
middle_end/flambda/naming/name_occurrences.cmi \
middle_end/flambda/types/basic/meet_result.cmi \
middle_end/flambda/cmx/ids_for_export.cmi \
middle_end/flambda/compilenv_deps/coercion.cmi \
middle_end/flambda/types/type_of_kind/type_of_kind_naked_immediate0.rec.cmi
Expand All @@ -10116,6 +10144,7 @@ middle_end/flambda/types/type_of_kind/type_of_kind_naked_immediate0.rec.cmx : \
middle_end/flambda/types/basic/or_unknown.cmx \
middle_end/flambda/types/basic/or_bottom.cmx \
middle_end/flambda/naming/name_occurrences.cmx \
middle_end/flambda/types/basic/meet_result.cmx \
middle_end/flambda/cmx/ids_for_export.cmx \
middle_end/flambda/compilenv_deps/coercion.cmx \
middle_end/flambda/types/type_of_kind/type_of_kind_naked_immediate0.rec.cmi
Expand All @@ -10127,6 +10156,7 @@ middle_end/flambda/types/type_of_kind/type_of_kind_naked_int32_0.rec.cmo : \
middle_end/flambda/types/basic/or_bottom.cmi \
utils/numbers.cmi \
middle_end/flambda/naming/name_occurrences.cmi \
middle_end/flambda/types/basic/meet_result.cmi \
middle_end/flambda/cmx/ids_for_export.cmi \
middle_end/flambda/compilenv_deps/coercion.cmi \
middle_end/flambda/types/type_of_kind/type_of_kind_naked_int32_0.rec.cmi
Expand All @@ -10135,6 +10165,7 @@ middle_end/flambda/types/type_of_kind/type_of_kind_naked_int32_0.rec.cmx : \
middle_end/flambda/types/basic/or_bottom.cmx \
utils/numbers.cmx \
middle_end/flambda/naming/name_occurrences.cmx \
middle_end/flambda/types/basic/meet_result.cmx \
middle_end/flambda/cmx/ids_for_export.cmx \
middle_end/flambda/compilenv_deps/coercion.cmx \
middle_end/flambda/types/type_of_kind/type_of_kind_naked_int32_0.rec.cmi
Expand All @@ -10145,6 +10176,7 @@ middle_end/flambda/types/type_of_kind/type_of_kind_naked_int64_0.rec.cmo : \
middle_end/flambda/types/basic/or_bottom.cmi \
utils/numbers.cmi \
middle_end/flambda/naming/name_occurrences.cmi \
middle_end/flambda/types/basic/meet_result.cmi \
middle_end/flambda/cmx/ids_for_export.cmi \
middle_end/flambda/compilenv_deps/coercion.cmi \
middle_end/flambda/types/type_of_kind/type_of_kind_naked_int64_0.rec.cmi
Expand All @@ -10153,6 +10185,7 @@ middle_end/flambda/types/type_of_kind/type_of_kind_naked_int64_0.rec.cmx : \
middle_end/flambda/types/basic/or_bottom.cmx \
utils/numbers.cmx \
middle_end/flambda/naming/name_occurrences.cmx \
middle_end/flambda/types/basic/meet_result.cmx \
middle_end/flambda/cmx/ids_for_export.cmx \
middle_end/flambda/compilenv_deps/coercion.cmx \
middle_end/flambda/types/type_of_kind/type_of_kind_naked_int64_0.rec.cmi
Expand All @@ -10163,6 +10196,7 @@ middle_end/flambda/types/type_of_kind/type_of_kind_naked_nativeint0.rec.cmo : \
middle_end/flambda/types/basic/or_unknown.cmi \
middle_end/flambda/types/basic/or_bottom.cmi \
middle_end/flambda/naming/name_occurrences.cmi \
middle_end/flambda/types/basic/meet_result.cmi \
middle_end/flambda/cmx/ids_for_export.cmi \
middle_end/flambda/compilenv_deps/coercion.cmi \
middle_end/flambda/types/type_of_kind/type_of_kind_naked_nativeint0.rec.cmi
Expand All @@ -10171,6 +10205,7 @@ middle_end/flambda/types/type_of_kind/type_of_kind_naked_nativeint0.rec.cmx : \
middle_end/flambda/types/basic/or_unknown.cmx \
middle_end/flambda/types/basic/or_bottom.cmx \
middle_end/flambda/naming/name_occurrences.cmx \
middle_end/flambda/types/basic/meet_result.cmx \
middle_end/flambda/cmx/ids_for_export.cmx \
middle_end/flambda/compilenv_deps/coercion.cmx \
middle_end/flambda/types/type_of_kind/type_of_kind_naked_nativeint0.rec.cmi
Expand Down Expand Up @@ -10198,6 +10233,7 @@ middle_end/flambda/types/type_of_kind/type_of_kind_value0.rec.cmo : \
middle_end/flambda/types/basic/or_unknown.cmi \
middle_end/flambda/types/basic/or_bottom.cmi \
middle_end/flambda/naming/name_occurrences.cmi \
middle_end/flambda/types/basic/meet_result.cmi \
middle_end/flambda/cmx/ids_for_export.cmi \
middle_end/flambda/compilenv_deps/coercion.cmi \
middle_end/flambda/types/type_of_kind/type_of_kind_value0.rec.cmi
Expand All @@ -10207,6 +10243,7 @@ middle_end/flambda/types/type_of_kind/type_of_kind_value0.rec.cmx : \
middle_end/flambda/types/basic/or_unknown.cmx \
middle_end/flambda/types/basic/or_bottom.cmx \
middle_end/flambda/naming/name_occurrences.cmx \
middle_end/flambda/types/basic/meet_result.cmx \
middle_end/flambda/cmx/ids_for_export.cmx \
middle_end/flambda/compilenv_deps/coercion.cmx \
middle_end/flambda/types/type_of_kind/type_of_kind_value0.rec.cmi
Expand Down
1 change: 1 addition & 0 deletions compilerlibs/Makefile.compilerlibs
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,7 @@ MIDDLE_END_FLAMBDA_TYPES=\
middle_end/flambda/types/env/aliases.cmo \
middle_end/flambda/types/basic/meet_or_join_op.cmo \
middle_end/flambda/types/basic/or_bottom.cmo \
middle_end/flambda/types/basic/meet_result.cmo \
middle_end/flambda/types/basic/string_info.cmo \
middle_end/flambda/types/basic/or_unknown_or_bottom.cmo \
middle_end/flambda/types/structures/code_age_relation.cmo \
Expand Down
2 changes: 1 addition & 1 deletion flambdatest/api_tests/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ CAMLDEP=$(CAMLRUN) $(ROOTDIR)/boot/ocamlc -depend
DEPFLAGS=-slash
DEPINCLUDES=$(INCLUDES)

SOURCES=extension_meet.ml import_test.ml
SOURCES=extension_meet.ml import_test.ml join_tests.ml

COMPILERLIBS=\
$(ROOTDIR)/compilerlibs/ocamlcommon.cma \
Expand Down
89 changes: 89 additions & 0 deletions flambdatest/api_tests/join_tests.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
(*
Continuation k has three parameters, three uses.
Variable x is defined after the fork but in all paths
Use types:
(=x, =x) { x : {0, 1} }
({0, 1, 2}, {0, 1, 2}) { x : {0, 1, 2} }
*)

module T = Flambda_type
module TE = Flambda_type.Typing_env

let test_join () =
let env_at_fork =
TE.create
~resolver:(fun _ -> None)
~get_imported_names:(fun () -> Name.Set.empty)
in
let param_a = Variable.create "a" in
let param_b = Variable.create "b" in
let param_c = Variable.create "c" in
let n_a = Name.var param_a in
let n_b = Name.var param_b in
let n_c = Name.var param_c in
let kind_ni = Flambda_kind.With_subkind.naked_immediate in
let kp_a = Kinded_parameter.create param_a kind_ni in
let kp_b = Kinded_parameter.create param_b kind_ni in
let kp_c = Kinded_parameter.create param_c kind_ni in
let params = [kp_c; kp_b; kp_a] in
let env_at_fork = TE.add_definitions_of_params env_at_fork ~params in
let var_x = Variable.create "x" in
let n_x = Name.var var_x in
let nb_x = Name_in_binding_pos.create n_x Name_mode.normal in
let env = TE.add_definition env_at_fork nb_x Flambda_kind.naked_immediate in
let alias name = T.alias_type_of Flambda_kind.naked_immediate (Simple.name name) in
let imms_left =
T.these_naked_immediates Target_imm.all_bools
in
let imms_right =
T.these_naked_immediates Target_imm.zero_one_and_minus_one
in
let env_left = TE.add_equation env n_a imms_left in
let env_left = TE.add_equation env_left n_b (alias n_x) in
let env_left = TE.add_equation env_left n_c (alias n_x) in
let env_left =
TE.add_equation env_left n_x imms_left
in
let env_right =
TE.add_equation env n_a (alias n_x)
in
let env_right =
TE.add_equation env_right n_b imms_right
in
let env_right =
TE.add_equation env_right n_c (alias n_x)
in
let env_right =
TE.add_equation env_right n_x imms_right
in
let join_env =
TE.cut_and_n_way_join
env_at_fork
[env_left, Obj.magic 0, Obj.magic 0;
env_right, Obj.magic 0, Obj.magic 0]
~params
~unknown_if_defined_at_or_later_than:Scope.initial
~extra_lifted_consts_in_use_envs:Symbol.Set.empty
~extra_allowed_names:Name_occurrences.empty
in
Format.eprintf
"Environments:@.\
Env at fork:@ %a@.\
Left env:@ %a@.\
Right env:@ %a@.@.\
Join env:@ %a@.@."
TE.print env_at_fork
TE.print env_left
TE.print env_right
TE.print join_env;
()

let _ =
let comp_unit =
let id = Ident.create_persistent "Test" in
let linkage_name = Linkage_name.create "camlTest" in
Compilation_unit.create id linkage_name
in
Compilation_unit.set_current comp_unit;
test_join ()

Loading