roc/crates/compiler/test_mono/generated
Ayaz Hafiz dd55be6142
Handle guards that appear multiple times in a compiled decision tree
Suppose we have a when expression

```
15 if foo -> <b1>
b  if bar -> <b2>
_         -> <b3>
```

that may have a decision tree like

```
15?
  \true => foo?
              \true  => <b1>
              \false => bar?
                           \true  => <b2>
                           \false => <b3>
  \false => bar?
               \true  => <b2>
               \false => <b3>
```

In this case, the guard "bar?" appears twice in the compiled decision
tree. We need to materialize the guard expression in both locations in
the compiled tree, which means we cannot as-is stamp a compiled `bar?`
twice in each location. The reason is that

- the compiled joinpoint for each `bar?` guard needs to have a unique ID
- the guard expression might have call which needs unique call spec IDs,
  or other joins that need unique joinpoint IDs.

So, save the expression as we build up the decision tree and materialize
the guard each time we need it. In practice the guards should be quite
small, so duplicating should be fine. We could avoid duplication, but
it's not clear to me how to do that exactly since the branches after the
guard might end up being different.
2023-03-25 16:14:21 -05:00
..
alias_variable.txt
alias_variable_and_return_it.txt Rip out polymorphic expression compilation 2023-01-21 12:37:09 -06:00
anonymous_closure_in_polymorphic_expression_issue_4717.txt update mono 2023-03-13 18:03:05 -07:00
anonymous_closure_lifted_to_named_issue_2403.txt Correctly compile rvalue closures defined in nested defines to lvalues 2022-12-01 15:47:18 -06:00
branch_store_variable.txt
call_function_in_empty_list.txt update mono 2023-03-13 18:03:05 -07:00
call_function_in_empty_list_unbound.txt update mono 2023-03-13 18:03:05 -07:00
choose_correct_recursion_var_under_record.txt update mono 2023-03-13 18:03:05 -07:00
choose_i128_layout.txt update mono 2023-03-12 08:42:37 -07:00
choose_u64_layout.txt update mono 2023-03-12 08:42:37 -07:00
choose_u128_layout.txt update mono 2023-03-12 08:42:37 -07:00
closure_in_list.txt update mono 2023-03-13 18:03:05 -07:00
crash.txt Update mono 2022-11-24 14:46:54 -06:00
dict.txt update dict.txt 2023-03-17 11:33:39 -05:00
empty_list_of_function_type.txt update mono 2023-03-13 18:03:05 -07:00
encode.txt update mono 2023-03-13 18:03:05 -07:00
encode_derived_nested_record_string.txt Update mono tests 2023-03-23 10:18:04 -05:00
encode_derived_record_one_field_string.txt Update mono tests 2023-03-23 10:18:04 -05:00
encode_derived_record_two_field_strings.txt Update mono tests 2023-03-23 10:18:04 -05:00
encode_derived_string.txt Update mono tests 2023-03-23 10:18:04 -05:00
encode_derived_tag_one_field_string.txt Update mono tests 2023-03-23 10:18:04 -05:00
encode_derived_tag_two_payloads_string.txt Update mono tests 2023-03-23 10:18:04 -05:00
factorial.txt update mono 2023-03-12 08:42:37 -07:00
fst.txt
function_pointer_lambda_set.txt Do not attempt to handle aliasing of procs in variable assignments 2022-12-01 15:20:58 -06:00
function_specialization_information_in_lambda_set_thunk.txt update mono 2023-03-12 08:42:37 -07:00
function_specialization_information_in_lambda_set_thunk_independent_defs.txt update mono 2023-03-12 08:42:37 -07:00
guard_pattern_true.txt Consolidate mono test behavior in debug and release modes 2022-11-02 15:04:47 -05:00
if_guard_bind_variable_false.txt Consolidate mono test behavior in debug and release modes 2022-11-02 15:04:47 -05:00
if_multi_branch.txt Consolidate mono test behavior in debug and release modes 2022-11-02 15:04:47 -05:00
inline_return_joinpoints_in_bool_lambda_set.txt update mono 2023-03-12 08:42:37 -07:00
inline_return_joinpoints_in_enum_lambda_set.txt update mono 2023-03-12 08:42:37 -07:00
inline_return_joinpoints_in_union_lambda_set.txt update mono 2023-03-12 08:42:37 -07:00
instantiate_annotated_as_recursive_alias_multiple_polymorphic_expr.txt Fix mono test 2023-01-18 10:06:14 -06:00
instantiate_annotated_as_recursive_alias_polymorphic_expr.txt Rip out polymorphic expression compilation 2023-01-21 12:37:09 -06:00
instantiate_annotated_as_recursive_alias_toplevel.txt Update tests 2022-07-18 17:55:02 -04:00
ir_assignment.txt
ir_int_add.txt update mono 2023-03-13 18:03:05 -07:00
ir_int_literal.txt
ir_plus.txt update mono 2023-03-12 08:42:37 -07:00
ir_round.txt update mono 2023-03-12 08:42:37 -07:00
ir_two_defs.txt update mono 2023-03-12 08:42:37 -07:00
ir_when_idiv.txt update mono 2023-03-12 08:42:37 -07:00
ir_when_just.txt update mono 2023-03-12 08:42:37 -07:00
ir_when_maybe.txt Remove tag_name from Expr::Tag 2022-07-03 16:48:51 -04:00
ir_when_record.txt
ir_when_these.txt Remove tag_name from Expr::Tag 2022-07-03 16:48:51 -04:00
is_nil.txt Consolidate mono test behavior in debug and release modes 2022-11-02 15:04:47 -05:00
issue_2535_let_weakened_fields_referenced_in_list.txt Weaken records in let-bindings 2023-01-14 15:33:51 +01:00
issue_2583_specialize_errors_behind_unified_branches.txt update mono tests 2023-03-15 16:44:02 -07:00
issue_2725_alias_polymorphic_lambda.txt Do not attempt to handle aliasing of procs in variable assignments 2022-12-01 15:20:58 -06:00
issue_2810.txt Update tests 2022-07-18 17:55:02 -04:00
issue_2811.txt
issue_3560_nested_tag_constructor_is_newtype.txt Reflect newtypes in path instructions 2022-07-21 18:17:57 -04:00
issue_3669.txt Consolidate mono test behavior in debug and release modes 2022-11-02 15:04:47 -05:00
issue_4557.txt Fix a bug in chasing assigned/hole on switch 2023-03-05 22:19:16 -06:00
issue_4705.txt Check in test for #4705 2022-12-07 10:59:05 -06:00
issue_4749.txt Update mono tests 2023-03-23 10:18:04 -05:00
issue_4772_weakened_monomorphic_destructure.txt Update mono tests 2023-03-23 10:18:04 -05:00
lambda_capture_niche_u8_vs_u64.txt update mono 2023-03-12 08:42:37 -07:00
lambda_capture_niches_have_captured_function_in_closure.txt Fix a bug in chasing assigned/hole on switch 2023-03-05 22:19:16 -06:00
lambda_capture_niches_with_non_capturing_function.txt Fix a bug in chasing assigned/hole on switch 2023-03-05 22:19:16 -06:00
lambda_capture_niches_with_other_lambda_capture.txt Fix a bug in chasing assigned/hole on switch 2023-03-05 22:19:16 -06:00
lambda_set_niche_same_layout_different_constructor.txt update mono tests 2023-03-08 23:03:32 +01:00
lambda_set_with_imported_toplevels_issue_4733.txt update mono 2023-03-12 08:42:37 -07:00
let_with_record_pattern.txt
let_with_record_pattern_list.txt
let_x_in_x.txt
let_x_in_x_indirect.txt Rip out polymorphic expression compilation 2023-01-21 12:37:09 -06:00
list_append.txt update mono 2023-03-13 18:03:05 -07:00
list_append_closure.txt update mono 2023-03-13 18:03:05 -07:00
list_cannot_update_inplace.txt update mono 2023-03-13 18:03:05 -07:00
list_get.txt update mono 2023-03-13 18:03:05 -07:00
list_len.txt update mono 2023-03-13 18:03:05 -07:00
list_map_closure_borrows.txt update mono tests 2023-03-15 16:44:02 -07:00
list_map_closure_owns.txt update mono tests 2023-03-15 16:44:02 -07:00
list_map_take_capturing_or_noncapturing.txt update mono 2023-03-13 18:03:05 -07:00
list_one_vs_one_spread_issue_4685.txt Update mono tests 2022-12-25 16:56:00 -06:00
list_pass_to_function.txt update mono 2023-03-13 18:03:05 -07:00
list_sort_asc.txt update mono 2023-03-13 18:03:05 -07:00
match_list.txt Update mono tests 2022-12-25 16:56:00 -06:00
match_on_result_with_uninhabited_error_branch.txt Unwrap layouts containing void layouts as newtypes 2022-09-19 16:50:49 -05:00
mk_pair_of.txt
monomorphized_applied_tag.txt Remove tag_name from Expr::Tag 2022-07-03 16:48:51 -04:00
monomorphized_floats.txt
monomorphized_ints.txt
monomorphized_list.txt Weaken lists 2023-01-12 10:02:20 -06:00
monomorphized_tag.txt Weaken zero-argument tags in let bindings 2023-01-16 10:49:16 -06:00
monomorphized_tag_with_aliased_args.txt Consolidate mono test behavior in debug and release modes 2022-11-02 15:04:47 -05:00
nested_closure.txt Treat unwrapped capture sets as unwrapped directly 2022-08-19 22:16:41 -05:00
nested_pattern_match.txt update mono 2023-03-12 08:42:37 -07:00
nullable_wrapped_with_non_nullable_singleton_tags.txt update mono tests 2023-03-15 16:44:02 -07:00
nullable_wrapped_with_nullable_not_last_index.txt Check in mono test case 2023-01-09 16:35:25 -06:00
num_width_gt_u8_layout_as_float.txt update mono 2023-03-12 08:42:37 -07:00
one_element_tag.txt
opaque_assign_to_symbol.txt Update tests 2022-07-18 17:55:02 -04:00
optional_when.txt update mono 2023-03-12 08:42:37 -07:00
order_list_size_tests_issue_4732.txt Update mono test name 2022-12-25 16:56:00 -06:00
pattern_as_nested.txt implement standard as patterns in mono IR 2023-01-11 14:18:13 +01:00
pattern_as_of_symbol.txt implement standard as patterns in mono IR 2023-01-11 14:18:13 +01:00
pattern_as_toplevel.txt implement standard as patterns in mono IR 2023-01-11 14:18:13 +01:00
peano.txt Update tests 2022-07-18 17:55:02 -04:00
peano1.txt Update mono tests 2022-07-25 11:44:48 -04:00
peano2.txt Update mono tests 2022-07-25 11:44:48 -04:00
polymorphic_expression_unification.txt update mono tests 2023-03-15 16:44:02 -07:00
quicksort_help.txt update mono 2023-03-12 08:42:37 -07:00
quicksort_swap.txt update mono 2023-03-13 18:03:05 -07:00
record_optional_field_function_no_use_default.txt update mono 2023-03-12 08:42:37 -07:00
record_optional_field_function_use_default.txt update mono 2023-03-12 08:42:37 -07:00
record_optional_field_let_no_use_default.txt update mono 2023-03-12 08:42:37 -07:00
record_optional_field_let_use_default.txt update mono 2023-03-12 08:42:37 -07:00
recursive_call_capturing_function.txt update mono 2023-03-12 08:42:37 -07:00
recursive_closure_with_transiently_used_capture.txt Check in mono golden 2023-03-21 07:18:12 -04:00
recursive_lambda_set_has_nested_non_recursive_lambda_sets_issue_5026.txt Fix a bug in chasing assigned/hole on switch 2023-03-05 22:19:16 -06:00
recursively_build_effect.txt update mono tests 2023-03-15 16:44:02 -07:00
rigids.txt update mono 2023-03-13 18:03:05 -07:00
simple_if.txt Consolidate mono test behavior in debug and release modes 2022-11-02 15:04:47 -05:00
specialize_ability_call.txt Update tests 2022-07-18 17:55:02 -04:00
specialize_closures.txt update mono 2023-03-12 08:42:37 -07:00
specialize_lowlevel.txt update mono 2023-03-12 08:42:37 -07:00
tail_call_elimination.txt update mono 2023-03-12 08:42:37 -07:00
tail_call_with_different_layout.txt update mono tests 2023-03-08 23:03:32 +01:00
tail_call_with_same_layout_different_lambda_sets.txt update mono tests 2023-03-08 23:03:32 +01:00
toplevel_accessor_fn_thunk.txt Update mono tests 2023-01-21 12:37:10 -06:00
tuple_pattern_match.txt implement mono / lowering for tuples 2023-02-07 18:54:50 -08:00
unreachable_branch_is_eliminated_but_produces_lambda_specializations.txt Eliminate joinpoints in trivial lambda set switches 2023-03-05 21:59:01 -06:00
unreachable_void_constructor.txt Update mono 2022-11-24 14:46:54 -06:00
unspecialized_lambda_set_unification_does_not_duplicate_identical_concrete_types.txt Update mono tests 2023-03-23 10:18:04 -05:00
unspecialized_lambda_set_unification_keeps_all_concrete_types_without_unification.txt Eliminate joinpoints in trivial lambda set switches 2023-03-05 21:59:01 -06:00
unspecialized_lambda_set_unification_keeps_all_concrete_types_without_unification_of_unifiable.txt Update mono tests 2023-03-23 10:18:04 -05:00
weakening_avoids_overspecialization.txt update mono 2023-03-13 18:03:05 -07:00
when_guard_appears_multiple_times_in_compiled_decision_tree_issue_5176.txt Handle guards that appear multiple times in a compiled decision tree 2023-03-25 16:14:21 -05:00
when_joinpoint.txt
when_nested_maybe.txt update mono 2023-03-12 08:42:37 -07:00
when_on_record.txt update mono 2023-03-12 08:42:37 -07:00
when_on_result.txt Remove tag_name from Expr::Tag 2022-07-03 16:48:51 -04:00
when_on_two_values.txt update mono 2023-03-12 08:42:37 -07:00