diff --git a/crates/compiler/test_mono/generated/anonymous_closure_in_polymorphic_expression_issue_4717.txt b/crates/compiler/test_mono/generated/anonymous_closure_in_polymorphic_expression_issue_4717.txt index 8f1450af21..b1f181ff54 100644 --- a/crates/compiler/test_mono/generated/anonymous_closure_in_polymorphic_expression_issue_4717.txt +++ b/crates/compiler/test_mono/generated/anonymous_closure_in_polymorphic_expression_issue_4717.txt @@ -15,12 +15,14 @@ procedure List.26 (List.153, List.154, List.155): ret List.157; procedure List.29 (List.298, List.299): + inc List.298; let List.508 : U64 = CallByName List.6 List.298; let List.300 : U64 = CallByName Num.77 List.508 List.299; let List.494 : List U8 = CallByName List.43 List.298 List.300; ret List.494; procedure List.43 (List.296, List.297): + inc List.296; let List.506 : U64 = CallByName List.6 List.296; let List.505 : U64 = CallByName Num.77 List.506 List.297; let List.496 : {U64, U64} = Struct {List.297, List.505}; @@ -43,10 +45,12 @@ procedure List.49 (List.370, List.371): procedure List.6 (#Attr.2): let List.507 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.507; procedure List.66 (#Attr.2, #Attr.3): let List.530 : U8 = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.530; procedure List.72 (#Attr.2, #Attr.3, #Attr.4): @@ -57,6 +61,7 @@ procedure List.80 (List.544, List.545, List.546, List.547, List.548): joinpoint List.518 List.433 List.434 List.435 List.436 List.437: let List.520 : Int1 = CallByName Num.22 List.436 List.437; if List.520 then + inc List.433; let List.529 : U8 = CallByName List.66 List.433 List.436; let List.521 : [C U64, C U64] = CallByName Test.4 List.434 List.529; let List.526 : U8 = 1i64; @@ -68,10 +73,12 @@ procedure List.80 (List.544, List.545, List.546, List.547, List.548): let List.523 : U64 = CallByName Num.19 List.436 List.524; jump List.518 List.433 List.438 List.435 List.523 List.437; else + dec List.433; let List.439 : U64 = UnionAtIndex (Id 0) (Index 0) List.521; let List.525 : [C U64, C U64] = TagId(0) List.439; ret List.525; else + dec List.433; let List.519 : [C U64, C U64] = TagId(1) List.434; ret List.519; in @@ -79,6 +86,7 @@ procedure List.80 (List.544, List.545, List.546, List.547, List.548): procedure List.92 (List.430, List.431, List.432): let List.516 : U64 = 0i64; + inc List.430; let List.517 : U64 = CallByName List.6 List.430; let List.515 : [C U64, C U64] = CallByName List.80 List.430 List.431 List.432 List.516 List.517; ret List.515; @@ -98,6 +106,7 @@ procedure Num.77 (#Attr.2, #Attr.3): procedure Test.1 (Test.2): let Test.13 : U64 = 0i64; let Test.14 : {} = Struct {}; + inc Test.2; let Test.3 : U64 = CallByName List.26 Test.2 Test.13 Test.14; let Test.12 : U64 = 0i64; let Test.10 : Int1 = CallByName Bool.11 Test.3 Test.12; diff --git a/crates/compiler/test_mono/generated/choose_correct_recursion_var_under_record.txt b/crates/compiler/test_mono/generated/choose_correct_recursion_var_under_record.txt index 2252a46f39..e5d6cafa31 100644 --- a/crates/compiler/test_mono/generated/choose_correct_recursion_var_under_record.txt +++ b/crates/compiler/test_mono/generated/choose_correct_recursion_var_under_record.txt @@ -3,6 +3,7 @@ procedure Bool.1 (): ret Bool.24; procedure List.2 (List.96, List.97): + inc List.96; let List.508 : U64 = CallByName List.6 List.96; let List.504 : Int1 = CallByName Num.22 List.97 List.508; if List.504 then @@ -10,20 +11,24 @@ procedure List.2 (List.96, List.97): let List.505 : [C {}, C Str] = TagId(1) List.506; ret List.505; else + dec List.96; let List.503 : {} = Struct {}; let List.502 : [C {}, C Str] = TagId(0) List.503; ret List.502; procedure List.5 (#Attr.2, #Attr.3): let List.510 : List Str = lowlevel ListMap { xs: `#Attr.#arg1` } #Attr.2 Test.10 #Attr.3; + decref #Attr.2; ret List.510; procedure List.6 (#Attr.2): let List.509 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.509; procedure List.66 (#Attr.2, #Attr.3): let List.507 : Str = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.507; procedure List.9 (List.287): @@ -53,13 +58,13 @@ procedure Result.5 (Result.12, Result.13): let Result.40 : U8 = GetTagId Result.12; let Result.41 : Int1 = lowlevel Eq Result.39 Result.40; if Result.41 then + dec Result.13; let Result.14 : Str = UnionAtIndex (Id 1) (Index 0) Result.12; inc Result.14; dec Result.12; ret Result.14; else dec Result.12; - inc Result.13; ret Result.13; procedure Test.10 (Test.11): @@ -78,6 +83,8 @@ procedure Test.2 (Test.6): let Test.31 : Int1 = lowlevel Eq Test.29 Test.30; if Test.31 then let Test.7 : [C List *self, C *self] = UnionAtIndex (Id 1) (Index 0) Test.6; + inc Test.7; + dec Test.6; let Test.8 : Str = CallByName Test.2 Test.7; let Test.18 : Int1 = CallByName Bool.1; if Test.18 then @@ -88,18 +95,17 @@ procedure Test.2 (Test.6): ret Test.17; else let Test.9 : List [C List *self, C *self] = UnionAtIndex (Id 0) (Index 0) Test.6; + inc Test.9; + dec Test.6; let Test.24 : {} = Struct {}; let Test.23 : List Str = CallByName List.5 Test.9 Test.24; let Test.21 : [C {}, C Str] = CallByName List.9 Test.23; - dec Test.23; let Test.22 : Str = "foo"; let Test.20 : Str = CallByName Result.5 Test.21 Test.22; - dec Test.22; ret Test.20; procedure Test.0 (): let Test.32 : List [C List *self, C *self] = Array []; let Test.15 : [C List *self, C *self] = TagId(0) Test.32; let Test.14 : Str = CallByName Test.2 Test.15; - dec Test.15; ret Test.14; diff --git a/crates/compiler/test_mono/generated/closure_in_list.txt b/crates/compiler/test_mono/generated/closure_in_list.txt index 2a672d6107..5509941306 100644 --- a/crates/compiler/test_mono/generated/closure_in_list.txt +++ b/crates/compiler/test_mono/generated/closure_in_list.txt @@ -1,5 +1,6 @@ procedure List.6 (#Attr.2): let List.494 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.494; procedure Test.1 (Test.5): @@ -14,5 +15,4 @@ procedure Test.0 (): let Test.7 : {} = Struct {}; let Test.4 : List I64 = CallByName Test.1 Test.7; let Test.6 : U64 = CallByName List.6 Test.4; - dec Test.4; ret Test.6; diff --git a/crates/compiler/test_mono/generated/compose_recursive_lambda_set_productive_nullable_wrapped.txt b/crates/compiler/test_mono/generated/compose_recursive_lambda_set_productive_nullable_wrapped.txt index 2099a1e66b..65bd43f497 100644 --- a/crates/compiler/test_mono/generated/compose_recursive_lambda_set_productive_nullable_wrapped.txt +++ b/crates/compiler/test_mono/generated/compose_recursive_lambda_set_productive_nullable_wrapped.txt @@ -12,28 +12,33 @@ procedure List.18 (List.136, List.137, List.138): procedure List.6 (#Attr.2): let List.511 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.511; procedure List.66 (#Attr.2, #Attr.3): let List.510 : Int1 = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.510; procedure List.80 (List.517, List.518, List.519, List.520, List.521): joinpoint List.500 List.433 List.434 List.435 List.436 List.437: let List.502 : Int1 = CallByName Num.22 List.436 List.437; if List.502 then + inc List.433; let List.509 : Int1 = CallByName List.66 List.433 List.436; let List.503 : [, C *self Int1, C *self Int1] = CallByName List.139 List.434 List.509 List.435; let List.506 : U64 = 1i64; let List.505 : U64 = CallByName Num.19 List.436 List.506; jump List.500 List.433 List.503 List.435 List.505 List.437; else + dec List.433; ret List.434; in jump List.500 List.517 List.518 List.519 List.520 List.521; procedure List.92 (List.430, List.431, List.432): let List.498 : U64 = 0i64; + inc List.430; let List.499 : U64 = CallByName List.6 List.430; let List.497 : [, C *self Int1, C *self Int1] = CallByName List.80 List.430 List.431 List.432 List.498 List.499; ret List.497; @@ -48,6 +53,7 @@ procedure Num.22 (#Attr.2, #Attr.3): procedure Str.3 (#Attr.2, #Attr.3): let Str.300 : Str = lowlevel StrConcat #Attr.2 #Attr.3; + dec #Attr.3; ret Str.300; procedure Test.1 (Test.5): @@ -65,7 +71,6 @@ procedure Test.11 (Test.53, Test.54): case 0: dec Test.7; let Test.28 : Str = CallByName Test.2 Test.29; - dec Test.29; ret Test.28; case 1: @@ -89,22 +94,18 @@ procedure Test.11 (Test.53, Test.54): jump Test.27 Test.53 Test.54; procedure Test.2 (Test.13): - inc Test.13; ret Test.13; procedure Test.3 (Test.14): let Test.48 : Str = "!"; let Test.47 : Str = CallByName Str.3 Test.14 Test.48; - dec Test.48; ret Test.47; procedure Test.4 (Test.15): let Test.44 : Str = "("; let Test.46 : Str = ")"; let Test.45 : Str = CallByName Str.3 Test.15 Test.46; - dec Test.46; let Test.43 : Str = CallByName Str.3 Test.44 Test.45; - dec Test.45; ret Test.43; procedure Test.6 (Test.7, Test.8, Test.5): @@ -136,7 +137,6 @@ procedure Test.9 (Test.10, #Attr.12): case 0: dec Test.7; let Test.39 : Str = CallByName Test.2 Test.10; - dec Test.10; jump Test.38 Test.39; case 1: @@ -156,14 +156,12 @@ procedure Test.0 (): let Test.23 : Int1 = CallByName Bool.2; let Test.22 : Int1 = CallByName Test.1 Test.23; let Test.16 : [, C *self Int1, C *self Int1] = CallByName List.18 Test.20 Test.21 Test.22; - dec Test.20; let Test.18 : Str = "hello"; let Test.19 : U8 = GetTagId Test.16; switch Test.19: case 0: dec Test.16; let Test.17 : Str = CallByName Test.2 Test.18; - dec Test.18; ret Test.17; case 1: diff --git a/crates/compiler/test_mono/generated/empty_list_of_function_type.txt b/crates/compiler/test_mono/generated/empty_list_of_function_type.txt index 9639d1eb45..b5d4f60c25 100644 --- a/crates/compiler/test_mono/generated/empty_list_of_function_type.txt +++ b/crates/compiler/test_mono/generated/empty_list_of_function_type.txt @@ -3,6 +3,7 @@ procedure Bool.1 (): ret Bool.23; procedure List.2 (List.96, List.97): + inc List.96; let List.500 : U64 = CallByName List.6 List.96; let List.496 : Int1 = CallByName Num.22 List.97 List.500; if List.496 then @@ -10,16 +11,19 @@ procedure List.2 (List.96, List.97): let List.497 : [C {}, C {}] = TagId(1) List.498; ret List.497; else + dec List.96; let List.495 : {} = Struct {}; let List.494 : [C {}, C {}] = TagId(0) List.495; ret List.494; procedure List.6 (#Attr.2): let List.501 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.501; procedure List.66 (#Attr.2, #Attr.3): let List.499 : {} = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.499; procedure Num.22 (#Attr.2, #Attr.3): @@ -27,6 +31,7 @@ procedure Num.22 (#Attr.2, #Attr.3): ret Num.275; procedure Test.2 (Test.5): + dec Test.5; let Test.17 : Str = "bar"; ret Test.17; @@ -35,7 +40,6 @@ procedure Test.0 (): joinpoint Test.15 Test.3: let Test.13 : U64 = 0i64; let Test.6 : [C {}, C {}] = CallByName List.2 Test.3 Test.13; - dec Test.3; let Test.10 : U8 = 1i64; let Test.11 : U8 = GetTagId Test.6; let Test.12 : Int1 = lowlevel Eq Test.10 Test.11; @@ -43,7 +47,6 @@ procedure Test.0 (): let Test.4 : {} = UnionAtIndex (Id 1) (Index 0) Test.6; let Test.8 : Str = "foo"; let Test.7 : Str = CallByName Test.2 Test.8; - dec Test.8; ret Test.7; else let Test.9 : Str = "bad!"; diff --git a/crates/compiler/test_mono/generated/encode_derived_nested_record_string.txt b/crates/compiler/test_mono/generated/encode_derived_nested_record_string.txt index 17c0706eec..8699e8d1bb 100644 --- a/crates/compiler/test_mono/generated/encode_derived_nested_record_string.txt +++ b/crates/compiler/test_mono/generated/encode_derived_nested_record_string.txt @@ -84,11 +84,11 @@ procedure Json.118 (Json.119, Json.486, Json.117): let Json.519 : I64 = 123i64; let Json.518 : U8 = CallByName Num.127 Json.519; let Json.121 : List U8 = CallByName List.4 Json.119 Json.518; + inc Json.117; let Json.517 : U64 = CallByName List.6 Json.117; let Json.494 : {List U8, U64} = Struct {Json.121, Json.517}; let Json.495 : {} = Struct {}; let Json.493 : {List U8, U64} = CallByName List.18 Json.117 Json.494 Json.495; - dec Json.117; let Json.123 : List U8 = StructAtIndex 0 Json.493; inc Json.123; dec Json.493; @@ -101,11 +101,11 @@ procedure Json.118 (Json.119, Json.486, Json.117): let Json.559 : I64 = 123i64; let Json.558 : U8 = CallByName Num.127 Json.559; let Json.121 : List U8 = CallByName List.4 Json.119 Json.558; + inc Json.117; let Json.557 : U64 = CallByName List.6 Json.117; let Json.534 : {List U8, U64} = Struct {Json.121, Json.557}; let Json.535 : {} = Struct {}; let Json.533 : {List U8, U64} = CallByName List.18 Json.117 Json.534 Json.535; - dec Json.117; let Json.123 : List U8 = StructAtIndex 0 Json.533; inc Json.123; dec Json.533; @@ -228,22 +228,27 @@ procedure List.4 (List.107, List.108): procedure List.6 (#Attr.2): let List.494 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.494; procedure List.6 (#Attr.2): let List.537 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.537; procedure List.6 (#Attr.2): let List.611 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.611; procedure List.66 (#Attr.2, #Attr.3): let List.532 : {Str, Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.532; procedure List.66 (#Attr.2, #Attr.3): let List.605 : {Str, Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.605; procedure List.70 (#Attr.2, #Attr.3): @@ -262,12 +267,14 @@ procedure List.80 (List.547, List.548, List.549, List.550, List.551): joinpoint List.522 List.433 List.434 List.435 List.436 List.437: let List.524 : Int1 = CallByName Num.22 List.436 List.437; if List.524 then + inc List.433; let List.531 : {Str, Str} = CallByName List.66 List.433 List.436; let List.525 : {List U8, U64} = CallByName List.139 List.434 List.531 List.435; let List.528 : U64 = 1i64; let List.527 : U64 = CallByName Num.19 List.436 List.528; jump List.522 List.433 List.525 List.435 List.527 List.437; else + dec List.433; ret List.434; in jump List.522 List.547 List.548 List.549 List.550 List.551; @@ -276,24 +283,28 @@ procedure List.80 (List.621, List.622, List.623, List.624, List.625): joinpoint List.595 List.433 List.434 List.435 List.436 List.437: let List.597 : Int1 = CallByName Num.22 List.436 List.437; if List.597 then + inc List.433; let List.604 : {Str, Str} = CallByName List.66 List.433 List.436; let List.598 : {List U8, U64} = CallByName List.139 List.434 List.604 List.435; let List.601 : U64 = 1i64; let List.600 : U64 = CallByName Num.19 List.436 List.601; jump List.595 List.433 List.598 List.435 List.600 List.437; else + dec List.433; ret List.434; in jump List.595 List.621 List.622 List.623 List.624 List.625; procedure List.92 (List.430, List.431, List.432): let List.520 : U64 = 0i64; + inc List.430; let List.521 : U64 = CallByName List.6 List.430; let List.519 : {List U8, U64} = CallByName List.80 List.430 List.431 List.432 List.520 List.521; ret List.519; procedure List.92 (List.430, List.431, List.432): let List.593 : U64 = 0i64; + inc List.430; let List.594 : U64 = CallByName List.6 List.430; let List.592 : {List U8, U64} = CallByName List.80 List.430 List.431 List.432 List.593 List.594; ret List.592; @@ -328,6 +339,7 @@ procedure Str.48 (#Attr.2, #Attr.3, #Attr.4): procedure Str.9 (Str.79): let Str.305 : U64 = 0i64; + inc Str.79; let Str.306 : U64 = CallByName List.6 Str.79; let Str.80 : {U64, Str, Int1, U8} = CallByName Str.48 Str.79 Str.305 Str.306; let Str.302 : Int1 = StructAtIndex 2 Str.80; diff --git a/crates/compiler/test_mono/generated/encode_derived_record_one_field_string.txt b/crates/compiler/test_mono/generated/encode_derived_record_one_field_string.txt index 0fd385f52a..e454a65d39 100644 --- a/crates/compiler/test_mono/generated/encode_derived_record_one_field_string.txt +++ b/crates/compiler/test_mono/generated/encode_derived_record_one_field_string.txt @@ -57,11 +57,11 @@ procedure Json.118 (Json.119, Json.486, Json.117): let Json.519 : I64 = 123i64; let Json.518 : U8 = CallByName Num.127 Json.519; let Json.121 : List U8 = CallByName List.4 Json.119 Json.518; + inc Json.117; let Json.517 : U64 = CallByName List.6 Json.117; let Json.494 : {List U8, U64} = Struct {Json.121, Json.517}; let Json.495 : {} = Struct {}; let Json.493 : {List U8, U64} = CallByName List.18 Json.117 Json.494 Json.495; - dec Json.117; let Json.123 : List U8 = StructAtIndex 0 Json.493; inc Json.123; dec Json.493; @@ -133,14 +133,17 @@ procedure List.4 (List.107, List.108): procedure List.6 (#Attr.2): let List.494 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.494; procedure List.6 (#Attr.2): let List.544 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.544; procedure List.66 (#Attr.2, #Attr.3): let List.538 : {Str, Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.538; procedure List.70 (#Attr.2, #Attr.3): @@ -159,18 +162,21 @@ procedure List.80 (List.554, List.555, List.556, List.557, List.558): joinpoint List.528 List.433 List.434 List.435 List.436 List.437: let List.530 : Int1 = CallByName Num.22 List.436 List.437; if List.530 then + inc List.433; let List.537 : {Str, Str} = CallByName List.66 List.433 List.436; let List.531 : {List U8, U64} = CallByName List.139 List.434 List.537 List.435; let List.534 : U64 = 1i64; let List.533 : U64 = CallByName Num.19 List.436 List.534; jump List.528 List.433 List.531 List.435 List.533 List.437; else + dec List.433; ret List.434; in jump List.528 List.554 List.555 List.556 List.557 List.558; procedure List.92 (List.430, List.431, List.432): let List.526 : U64 = 0i64; + inc List.430; let List.527 : U64 = CallByName List.6 List.430; let List.525 : {List U8, U64} = CallByName List.80 List.430 List.431 List.432 List.526 List.527; ret List.525; @@ -205,6 +211,7 @@ procedure Str.48 (#Attr.2, #Attr.3, #Attr.4): procedure Str.9 (Str.79): let Str.305 : U64 = 0i64; + inc Str.79; let Str.306 : U64 = CallByName List.6 Str.79; let Str.80 : {U64, Str, Int1, U8} = CallByName Str.48 Str.79 Str.305 Str.306; let Str.302 : Int1 = StructAtIndex 2 Str.80; diff --git a/crates/compiler/test_mono/generated/encode_derived_record_two_field_strings.txt b/crates/compiler/test_mono/generated/encode_derived_record_two_field_strings.txt index b188c045c1..60bb0dade0 100644 --- a/crates/compiler/test_mono/generated/encode_derived_record_two_field_strings.txt +++ b/crates/compiler/test_mono/generated/encode_derived_record_two_field_strings.txt @@ -65,11 +65,11 @@ procedure Json.118 (Json.119, Json.486, Json.117): let Json.519 : I64 = 123i64; let Json.518 : U8 = CallByName Num.127 Json.519; let Json.121 : List U8 = CallByName List.4 Json.119 Json.518; + inc Json.117; let Json.517 : U64 = CallByName List.6 Json.117; let Json.494 : {List U8, U64} = Struct {Json.121, Json.517}; let Json.495 : {} = Struct {}; let Json.493 : {List U8, U64} = CallByName List.18 Json.117 Json.494 Json.495; - dec Json.117; let Json.123 : List U8 = StructAtIndex 0 Json.493; inc Json.123; dec Json.493; @@ -141,14 +141,17 @@ procedure List.4 (List.107, List.108): procedure List.6 (#Attr.2): let List.494 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.494; procedure List.6 (#Attr.2): let List.544 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.544; procedure List.66 (#Attr.2, #Attr.3): let List.538 : {Str, Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.538; procedure List.70 (#Attr.2, #Attr.3): @@ -167,18 +170,21 @@ procedure List.80 (List.554, List.555, List.556, List.557, List.558): joinpoint List.528 List.433 List.434 List.435 List.436 List.437: let List.530 : Int1 = CallByName Num.22 List.436 List.437; if List.530 then + inc List.433; let List.537 : {Str, Str} = CallByName List.66 List.433 List.436; let List.531 : {List U8, U64} = CallByName List.139 List.434 List.537 List.435; let List.534 : U64 = 1i64; let List.533 : U64 = CallByName Num.19 List.436 List.534; jump List.528 List.433 List.531 List.435 List.533 List.437; else + dec List.433; ret List.434; in jump List.528 List.554 List.555 List.556 List.557 List.558; procedure List.92 (List.430, List.431, List.432): let List.526 : U64 = 0i64; + inc List.430; let List.527 : U64 = CallByName List.6 List.430; let List.525 : {List U8, U64} = CallByName List.80 List.430 List.431 List.432 List.526 List.527; ret List.525; @@ -213,6 +219,7 @@ procedure Str.48 (#Attr.2, #Attr.3, #Attr.4): procedure Str.9 (Str.79): let Str.305 : U64 = 0i64; + inc Str.79; let Str.306 : U64 = CallByName List.6 Str.79; let Str.80 : {U64, Str, Int1, U8} = CallByName Str.48 Str.79 Str.305 Str.306; let Str.302 : Int1 = StructAtIndex 2 Str.80; diff --git a/crates/compiler/test_mono/generated/encode_derived_string.txt b/crates/compiler/test_mono/generated/encode_derived_string.txt index 2ffd7b9767..c414a12bc8 100644 --- a/crates/compiler/test_mono/generated/encode_derived_string.txt +++ b/crates/compiler/test_mono/generated/encode_derived_string.txt @@ -38,6 +38,7 @@ procedure List.4 (List.107, List.108): procedure List.6 (#Attr.2): let List.494 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.494; procedure List.70 (#Attr.2, #Attr.3): @@ -66,6 +67,7 @@ procedure Str.48 (#Attr.2, #Attr.3, #Attr.4): procedure Str.9 (Str.79): let Str.305 : U64 = 0i64; + inc Str.79; let Str.306 : U64 = CallByName List.6 Str.79; let Str.80 : {U64, Str, Int1, U8} = CallByName Str.48 Str.79 Str.305 Str.306; let Str.302 : Int1 = StructAtIndex 2 Str.80; diff --git a/crates/compiler/test_mono/generated/encode_derived_tag_one_field_string.txt b/crates/compiler/test_mono/generated/encode_derived_tag_one_field_string.txt index 89fbe20807..55b23dd0a1 100644 --- a/crates/compiler/test_mono/generated/encode_derived_tag_one_field_string.txt +++ b/crates/compiler/test_mono/generated/encode_derived_tag_one_field_string.txt @@ -78,11 +78,11 @@ procedure Json.144 (Json.145, Json.486, #Attr.12): let Json.511 : I64 = 91i64; let Json.510 : U8 = CallByName Num.127 Json.511; let Json.147 : List U8 = CallByName List.4 Json.509 Json.510; + inc Json.143; let Json.508 : U64 = CallByName List.6 Json.143; let Json.496 : {List U8, U64} = Struct {Json.147, Json.508}; let Json.497 : {} = Struct {}; let Json.495 : {List U8, U64} = CallByName List.18 Json.143 Json.496 Json.497; - dec Json.143; let Json.149 : List U8 = StructAtIndex 0 Json.495; inc Json.149; dec Json.495; @@ -142,14 +142,17 @@ procedure List.4 (List.107, List.108): procedure List.6 (#Attr.2): let List.494 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.494; procedure List.6 (#Attr.2): let List.548 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.548; procedure List.66 (#Attr.2, #Attr.3): let List.544 : Str = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.544; procedure List.70 (#Attr.2, #Attr.3): @@ -168,18 +171,21 @@ procedure List.80 (List.560, List.561, List.562, List.563, List.564): joinpoint List.534 List.433 List.434 List.435 List.436 List.437: let List.536 : Int1 = CallByName Num.22 List.436 List.437; if List.536 then + inc List.433; let List.543 : Str = CallByName List.66 List.433 List.436; let List.537 : {List U8, U64} = CallByName List.139 List.434 List.543 List.435; let List.540 : U64 = 1i64; let List.539 : U64 = CallByName Num.19 List.436 List.540; jump List.534 List.433 List.537 List.435 List.539 List.437; else + dec List.433; ret List.434; in jump List.534 List.560 List.561 List.562 List.563 List.564; procedure List.92 (List.430, List.431, List.432): let List.532 : U64 = 0i64; + inc List.430; let List.533 : U64 = CallByName List.6 List.430; let List.531 : {List U8, U64} = CallByName List.80 List.430 List.431 List.432 List.532 List.533; ret List.531; @@ -214,6 +220,7 @@ procedure Str.48 (#Attr.2, #Attr.3, #Attr.4): procedure Str.9 (Str.79): let Str.305 : U64 = 0i64; + inc Str.79; let Str.306 : U64 = CallByName List.6 Str.79; let Str.80 : {U64, Str, Int1, U8} = CallByName Str.48 Str.79 Str.305 Str.306; let Str.302 : Int1 = StructAtIndex 2 Str.80; diff --git a/crates/compiler/test_mono/generated/encode_derived_tag_two_payloads_string.txt b/crates/compiler/test_mono/generated/encode_derived_tag_two_payloads_string.txt index 853b4e80e5..e33818035f 100644 --- a/crates/compiler/test_mono/generated/encode_derived_tag_two_payloads_string.txt +++ b/crates/compiler/test_mono/generated/encode_derived_tag_two_payloads_string.txt @@ -84,11 +84,11 @@ procedure Json.144 (Json.145, Json.486, #Attr.12): let Json.511 : I64 = 91i64; let Json.510 : U8 = CallByName Num.127 Json.511; let Json.147 : List U8 = CallByName List.4 Json.509 Json.510; + inc Json.143; let Json.508 : U64 = CallByName List.6 Json.143; let Json.496 : {List U8, U64} = Struct {Json.147, Json.508}; let Json.497 : {} = Struct {}; let Json.495 : {List U8, U64} = CallByName List.18 Json.143 Json.496 Json.497; - dec Json.143; let Json.149 : List U8 = StructAtIndex 0 Json.495; inc Json.149; dec Json.495; @@ -148,14 +148,17 @@ procedure List.4 (List.107, List.108): procedure List.6 (#Attr.2): let List.494 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.494; procedure List.6 (#Attr.2): let List.548 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.548; procedure List.66 (#Attr.2, #Attr.3): let List.544 : Str = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.544; procedure List.70 (#Attr.2, #Attr.3): @@ -174,18 +177,21 @@ procedure List.80 (List.560, List.561, List.562, List.563, List.564): joinpoint List.534 List.433 List.434 List.435 List.436 List.437: let List.536 : Int1 = CallByName Num.22 List.436 List.437; if List.536 then + inc List.433; let List.543 : Str = CallByName List.66 List.433 List.436; let List.537 : {List U8, U64} = CallByName List.139 List.434 List.543 List.435; let List.540 : U64 = 1i64; let List.539 : U64 = CallByName Num.19 List.436 List.540; jump List.534 List.433 List.537 List.435 List.539 List.437; else + dec List.433; ret List.434; in jump List.534 List.560 List.561 List.562 List.563 List.564; procedure List.92 (List.430, List.431, List.432): let List.532 : U64 = 0i64; + inc List.430; let List.533 : U64 = CallByName List.6 List.430; let List.531 : {List U8, U64} = CallByName List.80 List.430 List.431 List.432 List.532 List.533; ret List.531; @@ -220,6 +226,7 @@ procedure Str.48 (#Attr.2, #Attr.3, #Attr.4): procedure Str.9 (Str.79): let Str.305 : U64 = 0i64; + inc Str.79; let Str.306 : U64 = CallByName List.6 Str.79; let Str.80 : {U64, Str, Int1, U8} = CallByName Str.48 Str.79 Str.305 Str.306; let Str.302 : Int1 = StructAtIndex 2 Str.80; diff --git a/crates/compiler/test_mono/generated/fst.txt b/crates/compiler/test_mono/generated/fst.txt index c8c3da9a89..2372d81ee0 100644 --- a/crates/compiler/test_mono/generated/fst.txt +++ b/crates/compiler/test_mono/generated/fst.txt @@ -1,11 +1,9 @@ procedure Test.1 (Test.2, Test.3): - inc Test.2; + dec Test.3; ret Test.2; procedure Test.0 (): let Test.5 : List I64 = Array [1i64, 2i64, 3i64]; let Test.6 : List I64 = Array [3i64, 2i64, 1i64]; let Test.4 : List I64 = CallByName Test.1 Test.5 Test.6; - dec Test.6; - dec Test.5; ret Test.4; diff --git a/crates/compiler/test_mono/generated/ir_int_add.txt b/crates/compiler/test_mono/generated/ir_int_add.txt index dd14a05419..21ccd60def 100644 --- a/crates/compiler/test_mono/generated/ir_int_add.txt +++ b/crates/compiler/test_mono/generated/ir_int_add.txt @@ -1,5 +1,6 @@ procedure List.6 (#Attr.2): let List.494 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.494; procedure Num.19 (#Attr.2, #Attr.3): @@ -14,6 +15,5 @@ procedure Test.0 (): let Test.6 : U64 = 3i64; let Test.3 : U64 = CallByName Num.19 Test.5 Test.6; let Test.4 : U64 = CallByName List.6 Test.1; - dec Test.1; let Test.2 : U64 = CallByName Num.19 Test.3 Test.4; ret Test.2; diff --git a/crates/compiler/test_mono/generated/is_nil.txt b/crates/compiler/test_mono/generated/is_nil.txt index e130f31ad5..46747c03c4 100644 --- a/crates/compiler/test_mono/generated/is_nil.txt +++ b/crates/compiler/test_mono/generated/is_nil.txt @@ -9,6 +9,7 @@ procedure Bool.2 (): procedure Test.2 (Test.4): let Test.11 : U8 = 1i64; let Test.12 : U8 = GetTagId Test.4; + dec Test.4; let Test.13 : Int1 = lowlevel Eq Test.11 Test.12; if Test.13 then let Test.9 : Int1 = CallByName Bool.2; @@ -22,5 +23,4 @@ procedure Test.0 (): let Test.15 : [, C I64 *self] = TagId(1) ; let Test.8 : [, C I64 *self] = TagId(0) Test.14 Test.15; let Test.7 : Int1 = CallByName Test.2 Test.8; - dec Test.8; ret Test.7; diff --git a/crates/compiler/test_mono/generated/issue_2583_specialize_errors_behind_unified_branches.txt b/crates/compiler/test_mono/generated/issue_2583_specialize_errors_behind_unified_branches.txt index a274aba23a..73c05e7e15 100644 --- a/crates/compiler/test_mono/generated/issue_2583_specialize_errors_behind_unified_branches.txt +++ b/crates/compiler/test_mono/generated/issue_2583_specialize_errors_behind_unified_branches.txt @@ -7,6 +7,7 @@ procedure Bool.2 (): ret Bool.23; procedure List.2 (List.96, List.97): + inc List.96; let List.508 : U64 = CallByName List.6 List.96; let List.504 : Int1 = CallByName Num.22 List.97 List.508; if List.504 then @@ -14,16 +15,19 @@ procedure List.2 (List.96, List.97): let List.505 : [C {}, C I64] = TagId(1) List.506; ret List.505; else + dec List.96; let List.503 : {} = Struct {}; let List.502 : [C {}, C I64] = TagId(0) List.503; ret List.502; procedure List.6 (#Attr.2): let List.509 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.509; procedure List.66 (#Attr.2, #Attr.3): let List.507 : I64 = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.507; procedure List.9 (List.287): @@ -51,6 +55,7 @@ procedure Str.27 (Str.99): procedure Str.47 (#Attr.2): let Str.306 : {I64, U8} = lowlevel StrToNum #Attr.2; + dec #Attr.2; ret Str.306; procedure Str.72 (Str.244): @@ -72,10 +77,8 @@ procedure Test.0 (): if Test.3 then let Test.5 : List I64 = Array []; let Test.4 : [C Int1, C I64] = CallByName List.9 Test.5; - dec Test.5; ret Test.4; else let Test.2 : Str = ""; let Test.1 : [C Int1, C I64] = CallByName Str.27 Test.2; - dec Test.2; ret Test.1; diff --git a/crates/compiler/test_mono/generated/issue_3669.txt b/crates/compiler/test_mono/generated/issue_3669.txt index 3f50a60607..fc442370d7 100644 --- a/crates/compiler/test_mono/generated/issue_3669.txt +++ b/crates/compiler/test_mono/generated/issue_3669.txt @@ -8,10 +8,13 @@ procedure Test.2 (Test.19): let Test.17 : U8 = GetTagId Test.7; let Test.18 : Int1 = lowlevel Eq Test.16 Test.17; if Test.18 then + dec Test.7; let Test.14 : {} = Struct {}; ret Test.14; else let Test.5 : [, C *self] = UnionAtIndex (Id 0) (Index 0) Test.7; + inc Test.5; + dec Test.7; jump Test.13 Test.5; in jump Test.13 Test.19; @@ -19,7 +22,6 @@ procedure Test.2 (Test.19): procedure Test.0 (): let Test.12 : [, C *self] = TagId(1) ; let Test.10 : {} = CallByName Test.2 Test.12; - dec Test.12; let Test.11 : {} = Struct {}; let Test.8 : Int1 = CallByName Bool.11 Test.10 Test.11; let Test.9 : Str = ""; diff --git a/crates/compiler/test_mono/generated/issue_4557.txt b/crates/compiler/test_mono/generated/issue_4557.txt index ac27c966f7..2a05a7b188 100644 --- a/crates/compiler/test_mono/generated/issue_4557.txt +++ b/crates/compiler/test_mono/generated/issue_4557.txt @@ -1,5 +1,7 @@ procedure Bool.11 (#Attr.2, #Attr.3): let Bool.24 : Int1 = lowlevel Eq #Attr.2 #Attr.3; + dec #Attr.3; + dec #Attr.2; ret Bool.24; procedure Bool.4 (#Attr.2, #Attr.3): @@ -16,8 +18,6 @@ procedure Test.1 (Test.2, Test.3): let Test.23 : {} = Struct {}; joinpoint Test.24 Test.22: let Test.20 : Int1 = CallByName Bool.11 Test.21 Test.22; - dec Test.22; - dec Test.21; let Test.18 : Int1 = CallByName Bool.4 Test.19 Test.20; ret Test.18; in diff --git a/crates/compiler/test_mono/generated/issue_4749.txt b/crates/compiler/test_mono/generated/issue_4749.txt index 229de40439..05e2aef54d 100644 --- a/crates/compiler/test_mono/generated/issue_4749.txt +++ b/crates/compiler/test_mono/generated/issue_4749.txt @@ -10,6 +10,8 @@ procedure Bool.11 (#Attr.2, #Attr.3): procedure Bool.11 (#Attr.2, #Attr.3): let Bool.39 : Int1 = lowlevel Eq #Attr.2 #Attr.3; + dec #Attr.3; + dec #Attr.2; ret Bool.39; procedure Bool.11 (#Attr.2, #Attr.3): @@ -47,6 +49,7 @@ procedure Decode.27 (Decode.107, Decode.108): let Decode.109 : [C {}, C Str] = StructAtIndex 1 Decode.122; inc Decode.109; dec Decode.122; + inc Decode.110; let Decode.125 : Int1 = CallByName List.1 Decode.110; if Decode.125 then dec Decode.110; @@ -207,8 +210,6 @@ procedure Json.42 (Json.298): let Json.562 : U8 = 34i64; let Json.561 : List U8 = Array [Json.562]; let Json.491 : Int1 = CallByName Bool.11 Json.299 Json.561; - dec Json.561; - dec Json.299; if Json.491 then dec Json.298; let Json.504 : {} = Struct {}; @@ -259,6 +260,7 @@ procedure List.1 (List.95): ret List.494; procedure List.29 (List.298, List.299): + inc List.298; let List.549 : U64 = CallByName List.6 List.298; let List.300 : U64 = CallByName Num.77 List.549 List.299; let List.544 : List U8 = CallByName List.43 List.298 List.300; @@ -280,6 +282,7 @@ procedure List.4 (List.107, List.108): ret List.536; procedure List.43 (List.296, List.297): + inc List.296; let List.548 : U64 = CallByName List.6 List.296; let List.547 : U64 = CallByName Num.77 List.548 List.297; let List.546 : {U64, U64} = Struct {List.297, List.547}; @@ -301,6 +304,7 @@ procedure List.49 (List.370, List.371): ret List.502; procedure List.52 (List.385, List.386): + inc List.385; let List.387 : U64 = CallByName List.6 List.385; joinpoint List.523 List.388: let List.521 : U64 = 0i64; @@ -321,6 +325,7 @@ procedure List.52 (List.385, List.386): procedure List.6 (#Attr.2): let List.571 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.571; procedure List.70 (#Attr.2, #Attr.3): @@ -353,6 +358,7 @@ procedure Str.48 (#Attr.2, #Attr.3, #Attr.4): procedure Str.9 (Str.79): let Str.305 : U64 = 0i64; + inc Str.79; let Str.306 : U64 = CallByName List.6 Str.79; let Str.80 : {U64, Str, Int1, U8} = CallByName Str.48 Str.79 Str.305 Str.306; let Str.302 : Int1 = StructAtIndex 2 Str.80; diff --git a/crates/compiler/test_mono/generated/issue_4772_weakened_monomorphic_destructure.txt b/crates/compiler/test_mono/generated/issue_4772_weakened_monomorphic_destructure.txt index 47d7ec1a69..bf76bd08a1 100644 --- a/crates/compiler/test_mono/generated/issue_4772_weakened_monomorphic_destructure.txt +++ b/crates/compiler/test_mono/generated/issue_4772_weakened_monomorphic_destructure.txt @@ -14,6 +14,8 @@ procedure Bool.11 (#Attr.2, #Attr.3): procedure Bool.11 (#Attr.2, #Attr.3): let Bool.39 : Int1 = lowlevel Eq #Attr.2 #Attr.3; + dec #Attr.3; + dec #Attr.2; ret Bool.39; procedure Bool.11 (#Attr.2, #Attr.3): @@ -181,8 +183,6 @@ procedure Json.42 (Json.298): let Json.562 : U8 = 34i64; let Json.561 : List U8 = Array [Json.562]; let Json.491 : Int1 = CallByName Bool.11 Json.299 Json.561; - dec Json.561; - dec Json.299; if Json.491 then dec Json.298; let Json.504 : {} = Struct {}; @@ -227,6 +227,7 @@ procedure Json.43 (): ret Json.484; procedure List.29 (List.298, List.299): + inc List.298; let List.543 : U64 = CallByName List.6 List.298; let List.300 : U64 = CallByName Num.77 List.543 List.299; let List.538 : List U8 = CallByName List.43 List.298 List.300; @@ -248,6 +249,7 @@ procedure List.4 (List.107, List.108): ret List.530; procedure List.43 (List.296, List.297): + inc List.296; let List.542 : U64 = CallByName List.6 List.296; let List.541 : U64 = CallByName Num.77 List.542 List.297; let List.540 : {U64, U64} = Struct {List.297, List.541}; @@ -269,6 +271,7 @@ procedure List.49 (List.370, List.371): ret List.496; procedure List.52 (List.385, List.386): + inc List.385; let List.387 : U64 = CallByName List.6 List.385; joinpoint List.517 List.388: let List.515 : U64 = 0i64; @@ -289,6 +292,7 @@ procedure List.52 (List.385, List.386): procedure List.6 (#Attr.2): let List.565 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.565; procedure List.70 (#Attr.2, #Attr.3): @@ -325,6 +329,7 @@ procedure Str.27 (Str.99): procedure Str.47 (#Attr.2): let Str.306 : {I64, U8} = lowlevel StrToNum #Attr.2; + dec #Attr.2; ret Str.306; procedure Str.48 (#Attr.2, #Attr.3, #Attr.4): @@ -347,6 +352,7 @@ procedure Str.72 (Str.244): procedure Str.9 (Str.79): let Str.319 : U64 = 0i64; + inc Str.79; let Str.320 : U64 = CallByName List.6 Str.79; let Str.80 : {U64, Str, Int1, U8} = CallByName Str.48 Str.79 Str.319 Str.320; let Str.316 : Int1 = StructAtIndex 2 Str.80; @@ -382,7 +388,6 @@ procedure Test.0 (): inc Test.3; dec Test.1; let Test.19 : [C {}, C I64] = CallByName Str.27 Test.3; - dec Test.3; let Test.25 : U8 = 1i64; let Test.26 : U8 = GetTagId Test.19; let Test.27 : Int1 = lowlevel Eq Test.25 Test.26; diff --git a/crates/compiler/test_mono/generated/lambda_capture_niches_have_captured_function_in_closure.txt b/crates/compiler/test_mono/generated/lambda_capture_niches_have_captured_function_in_closure.txt index 87fadf120d..f38ff09581 100644 --- a/crates/compiler/test_mono/generated/lambda_capture_niches_have_captured_function_in_closure.txt +++ b/crates/compiler/test_mono/generated/lambda_capture_niches_have_captured_function_in_closure.txt @@ -22,11 +22,11 @@ procedure Test.2 (Test.7, Test.8): ret Test.41; procedure Test.3 (Test.17): + dec Test.17; let Test.33 : {} = Struct {}; ret Test.33; procedure Test.4 (Test.18): - inc Test.18; ret Test.18; procedure Test.9 (Test.26, #Attr.12): @@ -35,7 +35,6 @@ procedure Test.9 (Test.26, #Attr.12): let Test.46 : {} = Struct {}; let Test.45 : Str = CallByName Test.16 Test.46; let Test.42 : Str = CallByName Test.4 Test.45; - dec Test.45; let Test.44 : {} = Struct {}; let Test.43 : Str = CallByName Test.13 Test.44 Test.42; ret Test.43; @@ -46,7 +45,6 @@ procedure Test.9 (Test.26, #Attr.12): let Test.32 : {} = Struct {}; let Test.31 : Str = CallByName Test.15 Test.32; let Test.28 : {} = CallByName Test.3 Test.31; - dec Test.31; let Test.30 : {} = Struct {}; let Test.29 : Str = CallByName Test.11 Test.30; ret Test.29; diff --git a/crates/compiler/test_mono/generated/lambda_set_niche_same_layout_different_constructor.txt b/crates/compiler/test_mono/generated/lambda_set_niche_same_layout_different_constructor.txt index b551973cf8..0a73923923 100644 --- a/crates/compiler/test_mono/generated/lambda_set_niche_same_layout_different_constructor.txt +++ b/crates/compiler/test_mono/generated/lambda_set_niche_same_layout_different_constructor.txt @@ -1,5 +1,4 @@ procedure Test.1 (Test.4): - inc Test.4; ret Test.4; procedure Test.21 (Test.23, #Attr.12): @@ -21,10 +20,8 @@ procedure Test.0 (): if Test.20 then let Test.15 : Str = ""; let Test.10 : Str = CallByName Test.1 Test.15; - dec Test.15; jump Test.9 Test.10; else let Test.18 : Str = ""; let Test.16 : Str = CallByName Test.1 Test.18; - dec Test.18; jump Test.9 Test.16; diff --git a/crates/compiler/test_mono/generated/layout_cache_structure_with_multiple_recursive_structures.txt b/crates/compiler/test_mono/generated/layout_cache_structure_with_multiple_recursive_structures.txt index a6764739d2..e9b9b4b54f 100644 --- a/crates/compiler/test_mono/generated/layout_cache_structure_with_multiple_recursive_structures.txt +++ b/crates/compiler/test_mono/generated/layout_cache_structure_with_multiple_recursive_structures.txt @@ -8,28 +8,33 @@ procedure List.18 (List.136, List.137, List.138): procedure List.6 (#Attr.2): let List.511 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.511; procedure List.66 (#Attr.2, #Attr.3): let List.510 : [C *self, ] = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.510; procedure List.80 (List.517, List.518, List.519, List.520, List.521): joinpoint List.500 List.433 List.434 List.435 List.436 List.437: let List.502 : Int1 = CallByName Num.22 List.436 List.437; if List.502 then + inc List.433; let List.509 : [C *self, ] = CallByName List.66 List.433 List.436; let List.503 : [, C {[C *self, ], *self}] = CallByName List.139 List.434 List.509 List.435; let List.506 : U64 = 1i64; let List.505 : U64 = CallByName Num.19 List.436 List.506; jump List.500 List.433 List.503 List.435 List.505 List.437; else + dec List.433; ret List.434; in jump List.500 List.517 List.518 List.519 List.520 List.521; procedure List.92 (List.430, List.431, List.432): let List.498 : U64 = 0i64; + inc List.430; let List.499 : U64 = CallByName List.6 List.430; let List.497 : [, C {[C *self, ], *self}] = CallByName List.80 List.430 List.431 List.432 List.498 List.499; ret List.497; @@ -52,5 +57,4 @@ procedure Test.0 (): let Test.8 : List [C *self, ] = Array []; let Test.15 : {} = Struct {}; let Test.9 : [, C {[C *self, ], *self}] = CallByName List.18 Test.8 Test.6 Test.15; - dec Test.8; ret Test.9; diff --git a/crates/compiler/test_mono/generated/list_cannot_update_inplace.txt b/crates/compiler/test_mono/generated/list_cannot_update_inplace.txt index f585b00608..e64a3b10ac 100644 --- a/crates/compiler/test_mono/generated/list_cannot_update_inplace.txt +++ b/crates/compiler/test_mono/generated/list_cannot_update_inplace.txt @@ -7,9 +7,11 @@ procedure List.3 (List.104, List.105, List.106): procedure List.6 (#Attr.2): let List.495 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.495; procedure List.64 (List.101, List.102, List.103): + inc List.101; let List.502 : U64 = CallByName List.6 List.101; let List.499 : Int1 = CallByName Num.22 List.102 List.502; if List.499 then @@ -45,9 +47,7 @@ procedure Test.0 (): let Test.10 : List I64 = CallByName Test.1; let Test.9 : List I64 = CallByName Test.2 Test.10; let Test.5 : U64 = CallByName List.6 Test.9; - dec Test.9; let Test.7 : List I64 = CallByName Test.1; let Test.6 : U64 = CallByName List.6 Test.7; - dec Test.7; let Test.4 : U64 = CallByName Num.19 Test.5 Test.6; ret Test.4; diff --git a/crates/compiler/test_mono/generated/list_get.txt b/crates/compiler/test_mono/generated/list_get.txt index 83729335b2..529f969100 100644 --- a/crates/compiler/test_mono/generated/list_get.txt +++ b/crates/compiler/test_mono/generated/list_get.txt @@ -1,4 +1,5 @@ procedure List.2 (List.96, List.97): + inc List.96; let List.500 : U64 = CallByName List.6 List.96; let List.496 : Int1 = CallByName Num.22 List.97 List.500; if List.496 then @@ -6,16 +7,19 @@ procedure List.2 (List.96, List.97): let List.497 : [C {}, C I64] = TagId(1) List.498; ret List.497; else + dec List.96; let List.495 : {} = Struct {}; let List.494 : [C {}, C I64] = TagId(0) List.495; ret List.494; procedure List.6 (#Attr.2): let List.501 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.501; procedure List.66 (#Attr.2, #Attr.3): let List.499 : I64 = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.499; procedure Num.22 (#Attr.2, #Attr.3): @@ -26,7 +30,6 @@ procedure Test.1 (Test.2): let Test.6 : List I64 = Array [1i64, 2i64, 3i64]; let Test.7 : U64 = 0i64; let Test.5 : [C {}, C I64] = CallByName List.2 Test.6 Test.7; - dec Test.6; ret Test.5; procedure Test.0 (): diff --git a/crates/compiler/test_mono/generated/list_len.txt b/crates/compiler/test_mono/generated/list_len.txt index 2c9b2a0743..a5236c7e80 100644 --- a/crates/compiler/test_mono/generated/list_len.txt +++ b/crates/compiler/test_mono/generated/list_len.txt @@ -1,9 +1,11 @@ procedure List.6 (#Attr.2): let List.494 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.494; procedure List.6 (#Attr.2): let List.495 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.495; procedure Num.19 (#Attr.2, #Attr.3): @@ -14,8 +16,6 @@ procedure Test.0 (): let Test.1 : List I64 = Array [1i64, 2i64, 3i64]; let Test.2 : List Float64 = Array [1f64]; let Test.4 : U64 = CallByName List.6 Test.1; - dec Test.1; let Test.5 : U64 = CallByName List.6 Test.2; - dec Test.2; let Test.3 : U64 = CallByName Num.19 Test.4 Test.5; ret Test.3; diff --git a/crates/compiler/test_mono/generated/list_map_closure_borrows.txt b/crates/compiler/test_mono/generated/list_map_closure_borrows.txt index 8e45cea015..5899f17233 100644 --- a/crates/compiler/test_mono/generated/list_map_closure_borrows.txt +++ b/crates/compiler/test_mono/generated/list_map_closure_borrows.txt @@ -1,4 +1,5 @@ procedure List.2 (List.96, List.97): + inc List.96; let List.500 : U64 = CallByName List.6 List.96; let List.496 : Int1 = CallByName Num.22 List.97 List.500; if List.496 then @@ -6,20 +7,24 @@ procedure List.2 (List.96, List.97): let List.497 : [C {}, C Str] = TagId(1) List.498; ret List.497; else + dec List.96; let List.495 : {} = Struct {}; let List.494 : [C {}, C Str] = TagId(0) List.495; ret List.494; procedure List.5 (#Attr.2, #Attr.3): let List.502 : List Str = lowlevel ListMap { xs: `#Attr.#arg1` } #Attr.2 Test.3 #Attr.3; + decref #Attr.2; ret List.502; procedure List.6 (#Attr.2): let List.501 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.501; procedure List.66 (#Attr.2, #Attr.3): let List.499 : Str = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.499; procedure Num.22 (#Attr.2, #Attr.3): @@ -28,17 +33,18 @@ procedure Num.22 (#Attr.2, #Attr.3): procedure Str.16 (#Attr.2, #Attr.3): let Str.298 : Str = lowlevel StrRepeat #Attr.2 #Attr.3; + dec #Attr.2; ret Str.298; procedure Str.3 (#Attr.2, #Attr.3): let Str.299 : Str = lowlevel StrConcat #Attr.2 #Attr.3; + dec #Attr.3; ret Str.299; procedure Test.1 (): let Test.21 : Str = "lllllllllllllllllllllooooooooooong"; let Test.22 : Str = "g"; let Test.20 : Str = CallByName Str.3 Test.21 Test.22; - dec Test.22; let Test.19 : List Str = Array [Test.20]; ret Test.19; @@ -46,7 +52,6 @@ procedure Test.2 (): let Test.15 : List Str = CallByName Test.1; let Test.16 : {} = Struct {}; let Test.14 : List Str = CallByName List.5 Test.15 Test.16; - dec Test.15; ret Test.14; procedure Test.3 (Test.4): @@ -58,7 +63,6 @@ procedure Test.0 (): let Test.12 : List Str = CallByName Test.2; let Test.13 : U64 = 0i64; let Test.6 : [C {}, C Str] = CallByName List.2 Test.12 Test.13; - dec Test.12; let Test.9 : U8 = 1i64; let Test.10 : U8 = GetTagId Test.6; let Test.11 : Int1 = lowlevel Eq Test.9 Test.10; diff --git a/crates/compiler/test_mono/generated/list_map_closure_owns.txt b/crates/compiler/test_mono/generated/list_map_closure_owns.txt index 1d8118561d..2c69cb5b9a 100644 --- a/crates/compiler/test_mono/generated/list_map_closure_owns.txt +++ b/crates/compiler/test_mono/generated/list_map_closure_owns.txt @@ -1,4 +1,5 @@ procedure List.2 (List.96, List.97): + inc List.96; let List.500 : U64 = CallByName List.6 List.96; let List.496 : Int1 = CallByName Num.22 List.97 List.500; if List.496 then @@ -6,6 +7,7 @@ procedure List.2 (List.96, List.97): let List.497 : [C {}, C Str] = TagId(1) List.498; ret List.497; else + dec List.96; let List.495 : {} = Struct {}; let List.494 : [C {}, C Str] = TagId(0) List.495; ret List.494; @@ -17,10 +19,12 @@ procedure List.5 (#Attr.2, #Attr.3): procedure List.6 (#Attr.2): let List.501 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.501; procedure List.66 (#Attr.2, #Attr.3): let List.499 : Str = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.499; procedure Num.22 (#Attr.2, #Attr.3): @@ -29,13 +33,13 @@ procedure Num.22 (#Attr.2, #Attr.3): procedure Str.3 (#Attr.2, #Attr.3): let Str.299 : Str = lowlevel StrConcat #Attr.2 #Attr.3; + dec #Attr.3; ret Str.299; procedure Test.1 (): let Test.21 : Str = "lllllllllllllllllllllooooooooooong"; let Test.22 : Str = "g"; let Test.20 : Str = CallByName Str.3 Test.21 Test.22; - dec Test.22; let Test.19 : List Str = Array [Test.20]; ret Test.19; @@ -48,14 +52,12 @@ procedure Test.2 (): procedure Test.3 (Test.4): let Test.18 : Str = "!"; let Test.17 : Str = CallByName Str.3 Test.4 Test.18; - dec Test.18; ret Test.17; procedure Test.0 (): let Test.12 : List Str = CallByName Test.2; let Test.13 : U64 = 0i64; let Test.6 : [C {}, C Str] = CallByName List.2 Test.12 Test.13; - dec Test.12; let Test.9 : U8 = 1i64; let Test.10 : U8 = GetTagId Test.6; let Test.11 : Int1 = lowlevel Eq Test.9 Test.10; diff --git a/crates/compiler/test_mono/generated/list_map_take_capturing_or_noncapturing.txt b/crates/compiler/test_mono/generated/list_map_take_capturing_or_noncapturing.txt index 2b19c495ea..bc2a3687f7 100644 --- a/crates/compiler/test_mono/generated/list_map_take_capturing_or_noncapturing.txt +++ b/crates/compiler/test_mono/generated/list_map_take_capturing_or_noncapturing.txt @@ -1,7 +1,6 @@ procedure List.5 (#Attr.2, #Attr.3): let List.495 : U8 = GetTagId #Attr.3; joinpoint List.496 List.494: - inc List.494; ret List.494; in switch List.495: @@ -58,8 +57,8 @@ procedure Test.0 (): else let Test.20 : Str = "B"; let Test.21 : Int1 = lowlevel Eq Test.20 Test.12; - dec Test.12; dec Test.20; + dec Test.12; if Test.21 then let Test.16 : [C U8, C U8, C ] = TagId(1) Test.2; jump Test.13 Test.16; diff --git a/crates/compiler/test_mono/generated/list_pass_to_function.txt b/crates/compiler/test_mono/generated/list_pass_to_function.txt index 4b9b7112ec..06c39b7591 100644 --- a/crates/compiler/test_mono/generated/list_pass_to_function.txt +++ b/crates/compiler/test_mono/generated/list_pass_to_function.txt @@ -7,9 +7,11 @@ procedure List.3 (List.104, List.105, List.106): procedure List.6 (#Attr.2): let List.501 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.501; procedure List.64 (List.101, List.102, List.103): + inc List.101; let List.500 : U64 = CallByName List.6 List.101; let List.497 : Int1 = CallByName Num.22 List.102 List.500; if List.497 then diff --git a/crates/compiler/test_mono/generated/list_sort_asc.txt b/crates/compiler/test_mono/generated/list_sort_asc.txt index b32b58ccc6..8ac7ce082d 100644 --- a/crates/compiler/test_mono/generated/list_sort_asc.txt +++ b/crates/compiler/test_mono/generated/list_sort_asc.txt @@ -1,11 +1,6 @@ procedure List.28 (#Attr.2, #Attr.3): let List.496 : List I64 = lowlevel ListSortWith { xs: `#Attr.#arg1` } #Attr.2 Num.46 #Attr.3; - let #Derived_gen.0 : Int1 = lowlevel ListIsUnique #Attr.2; - if #Derived_gen.0 then - ret List.496; - else - decref #Attr.2; - ret List.496; + ret List.496; procedure List.59 (List.282): let List.495 : {} = Struct {}; diff --git a/crates/compiler/test_mono/generated/monomorphized_list.txt b/crates/compiler/test_mono/generated/monomorphized_list.txt index a48816e97e..e3f0a2256c 100644 --- a/crates/compiler/test_mono/generated/monomorphized_list.txt +++ b/crates/compiler/test_mono/generated/monomorphized_list.txt @@ -7,6 +7,8 @@ procedure Test.1 (Test.3): ret Test.13; procedure Test.2 (Test.4, Test.5): + dec Test.5; + dec Test.4; let Test.9 : U64 = 18i64; ret Test.9; @@ -16,6 +18,4 @@ procedure Test.0 (): let Test.10 : {} = Struct {}; let Test.8 : List U16 = CallByName Test.1 Test.10; let Test.6 : U64 = CallByName Test.2 Test.7 Test.8; - dec Test.8; - dec Test.7; ret Test.6; diff --git a/crates/compiler/test_mono/generated/nullable_wrapped_with_non_nullable_singleton_tags.txt b/crates/compiler/test_mono/generated/nullable_wrapped_with_non_nullable_singleton_tags.txt index ef6424b1c5..2d33ae6ad6 100644 --- a/crates/compiler/test_mono/generated/nullable_wrapped_with_non_nullable_singleton_tags.txt +++ b/crates/compiler/test_mono/generated/nullable_wrapped_with_non_nullable_singleton_tags.txt @@ -1,9 +1,11 @@ procedure Str.3 (#Attr.2, #Attr.3): let Str.299 : Str = lowlevel StrConcat #Attr.2 #Attr.3; + dec #Attr.3; ret Str.299; procedure Test.2 (Test.4): let Test.16 : U8 = GetTagId Test.4; + dec Test.4; switch Test.16: case 0: let Test.13 : Str = "A"; @@ -22,15 +24,10 @@ procedure Test.0 (): let Test.21 : [C *self, , C ] = TagId(1) ; let Test.20 : [C *self, , C ] = TagId(0) Test.21; let Test.17 : Str = CallByName Test.2 Test.20; - dec Test.20; let Test.19 : [C *self, , C ] = TagId(1) ; let Test.18 : Str = CallByName Test.2 Test.19; - dec Test.19; let Test.10 : Str = CallByName Str.3 Test.17 Test.18; - dec Test.18; let Test.12 : [C *self, , C ] = TagId(2) ; let Test.11 : Str = CallByName Test.2 Test.12; - dec Test.12; let Test.9 : Str = CallByName Str.3 Test.10 Test.11; - dec Test.11; ret Test.9; diff --git a/crates/compiler/test_mono/generated/nullable_wrapped_with_nullable_not_last_index.txt b/crates/compiler/test_mono/generated/nullable_wrapped_with_nullable_not_last_index.txt index d573e18d1c..b76f23e35b 100644 --- a/crates/compiler/test_mono/generated/nullable_wrapped_with_nullable_not_last_index.txt +++ b/crates/compiler/test_mono/generated/nullable_wrapped_with_nullable_not_last_index.txt @@ -1,9 +1,12 @@ procedure Bool.11 (#Attr.2, #Attr.3): let Bool.23 : Int1 = lowlevel Eq #Attr.2 #Attr.3; + dec #Attr.3; + dec #Attr.2; ret Bool.23; procedure Test.2 (Test.5): let Test.14 : U8 = GetTagId Test.5; + dec Test.5; switch Test.14: case 2: let Test.11 : Str = "a"; @@ -21,9 +24,6 @@ procedure Test.2 (Test.5): procedure Test.0 (): let Test.10 : [, C Str, C *self] = TagId(0) ; let Test.8 : Str = CallByName Test.2 Test.10; - dec Test.10; let Test.9 : Str = "c"; let Test.7 : Int1 = CallByName Bool.11 Test.8 Test.9; - dec Test.9; - dec Test.8; ret Test.7; diff --git a/crates/compiler/test_mono/generated/pattern_as_of_symbol.txt b/crates/compiler/test_mono/generated/pattern_as_of_symbol.txt index 0d2da6bbd1..e1a8cbcd6f 100644 --- a/crates/compiler/test_mono/generated/pattern_as_of_symbol.txt +++ b/crates/compiler/test_mono/generated/pattern_as_of_symbol.txt @@ -1,9 +1,11 @@ procedure Bool.11 (#Attr.2, #Attr.3): let Bool.23 : Int1 = lowlevel Eq #Attr.2 #Attr.3; + dec #Attr.3; + dec #Attr.2; ret Bool.23; procedure Test.0 (): let Test.3 : Str = "foo"; + inc Test.3; let Test.4 : Int1 = CallByName Bool.11 Test.3 Test.3; - dec Test.3; ret Test.4; diff --git a/crates/compiler/test_mono/generated/polymorphic_expression_unification.txt b/crates/compiler/test_mono/generated/polymorphic_expression_unification.txt index a84391b0ba..1c71aa6a2a 100644 --- a/crates/compiler/test_mono/generated/polymorphic_expression_unification.txt +++ b/crates/compiler/test_mono/generated/polymorphic_expression_unification.txt @@ -1,18 +1,19 @@ procedure Bool.11 (#Attr.2, #Attr.3): let Bool.23 : Int1 = lowlevel Eq #Attr.2 #Attr.3; + dec #Attr.3; + dec #Attr.2; ret Bool.23; procedure Str.3 (#Attr.2, #Attr.3): let Str.299 : Str = lowlevel StrConcat #Attr.2 #Attr.3; + dec #Attr.3; ret Str.299; procedure Test.2 (Test.7): let Test.24 : Str = ".trace(\""; let Test.26 : Str = "\")"; let Test.25 : Str = CallByName Str.3 Test.7 Test.26; - dec Test.26; let Test.23 : Str = CallByName Str.3 Test.24 Test.25; - dec Test.25; let Test.22 : [C List *self, C Str] = TagId(1) Test.23; let Test.21 : List [C List *self, C Str] = Array [Test.22]; let Test.8 : [C List *self, C Str] = TagId(0) Test.21; @@ -30,6 +31,4 @@ procedure Test.0 (): let Test.16 : Str = ""; let Test.15 : [C List *self, C Str] = TagId(1) Test.16; let Test.13 : Int1 = CallByName Bool.11 Test.14 Test.15; - dec Test.15; - dec Test.14; ret Test.13; diff --git a/crates/compiler/test_mono/generated/quicksort_swap.txt b/crates/compiler/test_mono/generated/quicksort_swap.txt index d471a039b6..b385d24a59 100644 --- a/crates/compiler/test_mono/generated/quicksort_swap.txt +++ b/crates/compiler/test_mono/generated/quicksort_swap.txt @@ -1,4 +1,5 @@ procedure List.2 (List.96, List.97): + inc List.96; let List.516 : U64 = CallByName List.6 List.96; let List.513 : Int1 = CallByName Num.22 List.97 List.516; if List.513 then @@ -6,6 +7,7 @@ procedure List.2 (List.96, List.97): let List.514 : [C {}, C I64] = TagId(1) List.515; ret List.514; else + dec List.96; let List.512 : {} = Struct {}; let List.511 : [C {}, C I64] = TagId(0) List.512; ret List.511; @@ -19,9 +21,11 @@ procedure List.3 (List.104, List.105, List.106): procedure List.6 (#Attr.2): let List.501 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.501; procedure List.64 (List.101, List.102, List.103): + inc List.101; let List.500 : U64 = CallByName List.6 List.101; let List.497 : Int1 = CallByName Num.22 List.102 List.500; if List.497 then @@ -33,6 +37,7 @@ procedure List.64 (List.101, List.102, List.103): procedure List.66 (#Attr.2, #Attr.3): let List.509 : I64 = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.509; procedure List.67 (#Attr.2, #Attr.3, #Attr.4): @@ -45,8 +50,10 @@ procedure Num.22 (#Attr.2, #Attr.3): procedure Test.1 (Test.2): let Test.28 : U64 = 0i64; + inc Test.2; let Test.26 : [C {}, C I64] = CallByName List.2 Test.2 Test.28; let Test.27 : U64 = 0i64; + inc Test.2; let Test.25 : [C {}, C I64] = CallByName List.2 Test.2 Test.27; let Test.8 : {[C {}, C I64], [C {}, C I64]} = Struct {Test.25, Test.26}; joinpoint Test.22: diff --git a/crates/compiler/test_mono/generated/recursive_function_and_union_with_inference_hole.txt b/crates/compiler/test_mono/generated/recursive_function_and_union_with_inference_hole.txt index c1e56de63c..d21d3df4cc 100644 --- a/crates/compiler/test_mono/generated/recursive_function_and_union_with_inference_hole.txt +++ b/crates/compiler/test_mono/generated/recursive_function_and_union_with_inference_hole.txt @@ -1,18 +1,21 @@ procedure List.5 (#Attr.2, #Attr.3): let List.494 : List [C List *self] = lowlevel ListMap { xs: `#Attr.#arg1` } #Attr.2 Test.2 #Attr.3; + decref #Attr.2; ret List.494; procedure Test.2 (Test.5): let Test.6 : List [C List *self] = UnionAtIndex (Id 0) (Index 0) Test.5; + inc Test.6; + let #Derived_gen.1 : [C List *self] = Reset { symbol: `#UserApp.after`, id: 1 }; let Test.15 : {} = Struct {}; let Test.7 : List [C List *self] = CallByName List.5 Test.6 Test.15; - let Test.14 : [C List *self] = TagId(0) Test.7; + let Test.14 : [C List *self] = Reuse #Derived_gen.1 UpdateModeId { id: 1 } TagId(0) Test.7; ret Test.14; procedure Test.0 (): let Test.16 : List [C List *self] = Array []; let Test.12 : [C List *self] = TagId(0) Test.16; let Test.10 : [C List *self] = CallByName Test.2 Test.12; - dec Test.12; + dec Test.10; let Test.11 : Str = ""; ret Test.11; diff --git a/crates/compiler/test_mono/generated/recursively_build_effect.txt b/crates/compiler/test_mono/generated/recursively_build_effect.txt index 9f77a8dae3..f1fe45daa8 100644 --- a/crates/compiler/test_mono/generated/recursively_build_effect.txt +++ b/crates/compiler/test_mono/generated/recursively_build_effect.txt @@ -4,6 +4,7 @@ procedure Num.20 (#Attr.2, #Attr.3): procedure Str.3 (#Attr.2, #Attr.3): let Str.300 : Str = lowlevel StrConcat #Attr.2 #Attr.3; + dec #Attr.3; ret Str.300; procedure Test.11 (Test.29, #Attr.12): @@ -41,11 +42,8 @@ procedure Test.2 (): let Test.21 : Str = ", "; let Test.23 : Str = "!"; let Test.22 : Str = CallByName Str.3 Test.7 Test.23; - dec Test.23; let Test.20 : Str = CallByName Str.3 Test.21 Test.22; - dec Test.22; let Test.19 : Str = CallByName Str.3 Test.6 Test.20; - dec Test.20; ret Test.19; procedure Test.3 (Test.8): @@ -81,5 +79,6 @@ procedure Test.9 (Test.44, Test.8): procedure Test.0 (): let Test.24 : I64 = 4i64; let Test.17 : [C {}, C I64 {}] = CallByName Test.3 Test.24; + dec Test.17; let Test.18 : Str = CallByName Test.2; ret Test.18; diff --git a/crates/compiler/test_mono/generated/rigids.txt b/crates/compiler/test_mono/generated/rigids.txt index 8988dfda03..eec577c7e6 100644 --- a/crates/compiler/test_mono/generated/rigids.txt +++ b/crates/compiler/test_mono/generated/rigids.txt @@ -1,4 +1,5 @@ procedure List.2 (List.96, List.97): + inc List.96; let List.516 : U64 = CallByName List.6 List.96; let List.513 : Int1 = CallByName Num.22 List.97 List.516; if List.513 then @@ -6,6 +7,7 @@ procedure List.2 (List.96, List.97): let List.514 : [C {}, C I64] = TagId(1) List.515; ret List.514; else + dec List.96; let List.512 : {} = Struct {}; let List.511 : [C {}, C I64] = TagId(0) List.512; ret List.511; @@ -19,9 +21,11 @@ procedure List.3 (List.104, List.105, List.106): procedure List.6 (#Attr.2): let List.501 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.501; procedure List.64 (List.101, List.102, List.103): + inc List.101; let List.500 : U64 = CallByName List.6 List.101; let List.497 : Int1 = CallByName Num.22 List.102 List.500; if List.497 then @@ -33,6 +37,7 @@ procedure List.64 (List.101, List.102, List.103): procedure List.66 (#Attr.2, #Attr.3): let List.509 : I64 = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.509; procedure List.67 (#Attr.2, #Attr.3, #Attr.4): @@ -44,7 +49,9 @@ procedure Num.22 (#Attr.2, #Attr.3): ret Num.277; procedure Test.1 (Test.2, Test.3, Test.4): + inc Test.4; let Test.29 : [C {}, C I64] = CallByName List.2 Test.4 Test.3; + inc Test.4; let Test.28 : [C {}, C I64] = CallByName List.2 Test.4 Test.2; let Test.13 : {[C {}, C I64], [C {}, C I64]} = Struct {Test.28, Test.29}; joinpoint Test.25: diff --git a/crates/compiler/test_mono/generated/unreachable_branch_is_eliminated_but_produces_lambda_specializations.txt b/crates/compiler/test_mono/generated/unreachable_branch_is_eliminated_but_produces_lambda_specializations.txt index 0ed3c650c9..1090190441 100644 --- a/crates/compiler/test_mono/generated/unreachable_branch_is_eliminated_but_produces_lambda_specializations.txt +++ b/crates/compiler/test_mono/generated/unreachable_branch_is_eliminated_but_produces_lambda_specializations.txt @@ -1,4 +1,5 @@ procedure Test.1 (Test.2): + dec Test.2; let Test.11 : Int1 = false; ret Test.11; @@ -13,7 +14,6 @@ procedure Test.4 (Test.13): procedure Test.0 (): let Test.16 : Str = "abc"; let Test.6 : Int1 = CallByName Test.1 Test.16; - dec Test.16; let Test.9 : {} = Struct {}; switch Test.6: case 0: diff --git a/crates/compiler/test_mono/generated/unspecialized_lambda_set_unification_does_not_duplicate_identical_concrete_types.txt b/crates/compiler/test_mono/generated/unspecialized_lambda_set_unification_does_not_duplicate_identical_concrete_types.txt index ec74465759..246bd1c366 100644 --- a/crates/compiler/test_mono/generated/unspecialized_lambda_set_unification_does_not_duplicate_identical_concrete_types.txt +++ b/crates/compiler/test_mono/generated/unspecialized_lambda_set_unification_does_not_duplicate_identical_concrete_types.txt @@ -67,11 +67,11 @@ procedure Json.144 (Json.145, Json.486, #Attr.12): let Json.511 : I64 = 91i64; let Json.510 : U8 = CallByName Num.127 Json.511; let Json.147 : List U8 = CallByName List.4 Json.509 Json.510; + inc Json.143; let Json.508 : U64 = CallByName List.6 Json.143; let Json.496 : {List U8, U64} = Struct {Json.147, Json.508}; let Json.497 : {} = Struct {}; let Json.495 : {List U8, U64} = CallByName List.18 Json.143 Json.496 Json.497; - dec Json.143; let Json.149 : List U8 = StructAtIndex 0 Json.495; inc Json.149; dec Json.495; @@ -131,10 +131,12 @@ procedure List.4 (List.107, List.108): procedure List.6 (#Attr.2): let List.546 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.546; procedure List.66 (#Attr.2, #Attr.3): let List.542 : Str = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.542; procedure List.70 (#Attr.2, #Attr.3): @@ -153,18 +155,21 @@ procedure List.80 (List.558, List.559, List.560, List.561, List.562): joinpoint List.532 List.433 List.434 List.435 List.436 List.437: let List.534 : Int1 = CallByName Num.22 List.436 List.437; if List.534 then + inc List.433; let List.541 : Str = CallByName List.66 List.433 List.436; let List.535 : {List U8, U64} = CallByName List.139 List.434 List.541 List.435; let List.538 : U64 = 1i64; let List.537 : U64 = CallByName Num.19 List.436 List.538; jump List.532 List.433 List.535 List.435 List.537 List.437; else + dec List.433; ret List.434; in jump List.532 List.558 List.559 List.560 List.561 List.562; procedure List.92 (List.430, List.431, List.432): let List.530 : U64 = 0i64; + inc List.430; let List.531 : U64 = CallByName List.6 List.430; let List.529 : {List U8, U64} = CallByName List.80 List.430 List.431 List.432 List.530 List.531; ret List.529; diff --git a/crates/compiler/test_mono/generated/unspecialized_lambda_set_unification_keeps_all_concrete_types_without_unification.txt b/crates/compiler/test_mono/generated/unspecialized_lambda_set_unification_keeps_all_concrete_types_without_unification.txt index adc95cb888..05d7619ecf 100644 --- a/crates/compiler/test_mono/generated/unspecialized_lambda_set_unification_keeps_all_concrete_types_without_unification.txt +++ b/crates/compiler/test_mono/generated/unspecialized_lambda_set_unification_keeps_all_concrete_types_without_unification.txt @@ -19,6 +19,7 @@ procedure Test.15 (Test.49): ret Test.70; procedure Test.16 (Test.48): + dec Test.48; let Test.79 : {} = Struct {}; let Test.78 : Int1 = CallByName Test.13 Test.79; ret Test.78; @@ -27,11 +28,9 @@ procedure Test.17 (Test.47): ret Test.47; procedure Test.35 (Test.36, Test.73): - inc Test.36; ret Test.36; procedure Test.37 (Test.38, Test.81): - inc Test.38; ret Test.38; procedure Test.40 (Test.41, Test.65, Test.39): @@ -50,7 +49,6 @@ procedure Test.43 (Test.44, Test.42): joinpoint Test.62 Test.60: let Test.59 : List U8 = Array []; let Test.58 : List U8 = CallByName Test.40 Test.59 Test.44 Test.60; - dec Test.59; ret Test.58; in let Test.75 : Int1 = CallByName Bool.2; @@ -59,7 +57,6 @@ procedure Test.43 (Test.44, Test.42): inc Test.77; dec Test.42; let Test.76 : Int1 = CallByName Test.16 Test.77; - dec Test.77; let Test.61 : Int1 = CallByName Test.14 Test.76; jump Test.62 Test.61; else diff --git a/crates/compiler/test_mono/generated/unspecialized_lambda_set_unification_keeps_all_concrete_types_without_unification_of_unifiable.txt b/crates/compiler/test_mono/generated/unspecialized_lambda_set_unification_keeps_all_concrete_types_without_unification_of_unifiable.txt index 3f26b43337..61989190e4 100644 --- a/crates/compiler/test_mono/generated/unspecialized_lambda_set_unification_keeps_all_concrete_types_without_unification_of_unifiable.txt +++ b/crates/compiler/test_mono/generated/unspecialized_lambda_set_unification_keeps_all_concrete_types_without_unification_of_unifiable.txt @@ -46,6 +46,11 @@ procedure Encode.23 (Encode.98): procedure Encode.23 (Encode.98): ret Encode.98; +procedure Encode.24 (Encode.99, Encode.107, Encode.101): + dec Encode.99; + let Encode.138 : Str = "a Lambda Set is empty. Most likely there is a type error in your program."; + Crash Encode.138 + procedure Encode.24 (Encode.99, Encode.107, Encode.101): let Encode.111 : List U8 = CallByName Test.5 Encode.99 Encode.101 Encode.107; ret Encode.111; @@ -70,10 +75,6 @@ procedure Encode.24 (Encode.99, Encode.107, Encode.101): let Encode.134 : List U8 = CallByName Json.144 Encode.99 Encode.101 Encode.107; ret Encode.134; -procedure Encode.24 (Encode.99, Encode.107, Encode.101): - let Encode.138 : Str = "a Lambda Set is empty. Most likely there is a type error in your program."; - Crash Encode.138 - procedure Encode.26 (Encode.105, Encode.106): let Encode.109 : List U8 = Array []; let Encode.110 : {{}, {}} = CallByName Test.2 Encode.105; @@ -107,11 +108,11 @@ procedure Json.144 (Json.145, Json.486, #Attr.12): let Json.511 : I64 = 91i64; let Json.510 : U8 = CallByName Num.127 Json.511; let Json.147 : List U8 = CallByName List.4 Json.509 Json.510; + inc Json.143; let Json.508 : U64 = CallByName List.6 Json.143; let Json.496 : {List U8, U64} = Struct {Json.147, Json.508}; let Json.497 : {} = Struct {}; let Json.495 : {List U8, U64} = CallByName List.18 Json.143 Json.496 Json.497; - dec Json.143; let Json.149 : List U8 = StructAtIndex 0 Json.495; inc Json.149; dec Json.495; @@ -146,11 +147,11 @@ procedure Json.144 (Json.145, Json.486, #Attr.12): let Json.561 : I64 = 91i64; let Json.560 : U8 = CallByName Num.127 Json.561; let Json.147 : List U8 = CallByName List.4 Json.559 Json.560; + inc Json.143; let Json.558 : U64 = CallByName List.6 Json.143; let Json.546 : {List U8, U64} = Struct {Json.147, Json.558}; let Json.547 : {} = Struct {}; let Json.545 : {List U8, U64} = CallByName List.18 Json.143 Json.546 Json.547; - dec Json.143; let Json.149 : List U8 = StructAtIndex 0 Json.545; inc Json.149; dec Json.545; @@ -192,7 +193,6 @@ procedure Json.146 (Json.488, Json.152): dec Json.488; let Json.557 : {} = Struct {}; let Json.153 : List U8 = CallByName Encode.24 Json.150 Json.152 Json.557; - dec Json.150; joinpoint Json.552 Json.154: let Json.550 : U64 = 1i64; let Json.549 : U64 = CallByName Num.20 Json.151 Json.550; @@ -243,18 +243,22 @@ procedure List.4 (List.107, List.108): procedure List.6 (#Attr.2): let List.540 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.540; procedure List.6 (#Attr.2): let List.613 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.613; procedure List.66 (#Attr.2, #Attr.3): let List.536 : [C {}, C {}] = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.536; procedure List.66 (#Attr.2, #Attr.3): let List.609 : [] = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.609; procedure List.70 (#Attr.2, #Attr.3): @@ -273,12 +277,14 @@ procedure List.80 (List.551, List.552, List.553, List.554, List.555): joinpoint List.526 List.433 List.434 List.435 List.436 List.437: let List.528 : Int1 = CallByName Num.22 List.436 List.437; if List.528 then + inc List.433; let List.535 : [C {}, C {}] = CallByName List.66 List.433 List.436; let List.529 : {List U8, U64} = CallByName List.139 List.434 List.535 List.435; let List.532 : U64 = 1i64; let List.531 : U64 = CallByName Num.19 List.436 List.532; jump List.526 List.433 List.529 List.435 List.531 List.437; else + dec List.433; ret List.434; in jump List.526 List.551 List.552 List.553 List.554 List.555; @@ -287,24 +293,28 @@ procedure List.80 (List.624, List.625, List.626, List.627, List.628): joinpoint List.599 List.433 List.434 List.435 List.436 List.437: let List.601 : Int1 = CallByName Num.22 List.436 List.437; if List.601 then + inc List.433; let List.608 : [] = CallByName List.66 List.433 List.436; let List.602 : {List U8, U64} = CallByName List.139 List.434 List.608 List.435; let List.605 : U64 = 1i64; let List.604 : U64 = CallByName Num.19 List.436 List.605; jump List.599 List.433 List.602 List.435 List.604 List.437; else + dec List.433; ret List.434; in jump List.599 List.624 List.625 List.626 List.627 List.628; procedure List.92 (List.430, List.431, List.432): let List.524 : U64 = 0i64; + inc List.430; let List.525 : U64 = CallByName List.6 List.430; let List.523 : {List U8, U64} = CallByName List.80 List.430 List.431 List.432 List.524 List.525; ret List.523; procedure List.92 (List.430, List.431, List.432): let List.597 : U64 = 0i64; + inc List.430; let List.598 : U64 = CallByName List.6 List.430; let List.596 : {List U8, U64} = CallByName List.80 List.430 List.431 List.432 List.597 List.598; ret List.596; diff --git a/crates/compiler/test_mono/generated/weakening_avoids_overspecialization.txt b/crates/compiler/test_mono/generated/weakening_avoids_overspecialization.txt index be27c33390..26f507b0f5 100644 --- a/crates/compiler/test_mono/generated/weakening_avoids_overspecialization.txt +++ b/crates/compiler/test_mono/generated/weakening_avoids_overspecialization.txt @@ -15,12 +15,14 @@ procedure List.26 (List.153, List.154, List.155): ret List.157; procedure List.29 (List.298, List.299): + inc List.298; let List.508 : U64 = CallByName List.6 List.298; let List.300 : U64 = CallByName Num.77 List.508 List.299; let List.494 : List U8 = CallByName List.43 List.298 List.300; ret List.494; procedure List.43 (List.296, List.297): + inc List.296; let List.506 : U64 = CallByName List.6 List.296; let List.505 : U64 = CallByName Num.77 List.506 List.297; let List.496 : {U64, U64} = Struct {List.297, List.505}; @@ -43,10 +45,12 @@ procedure List.49 (List.370, List.371): procedure List.6 (#Attr.2): let List.507 : U64 = lowlevel ListLen #Attr.2; + dec #Attr.2; ret List.507; procedure List.66 (#Attr.2, #Attr.3): let List.530 : U8 = lowlevel ListGetUnsafe #Attr.2 #Attr.3; + dec #Attr.2; ret List.530; procedure List.72 (#Attr.2, #Attr.3, #Attr.4): @@ -57,6 +61,7 @@ procedure List.80 (List.544, List.545, List.546, List.547, List.548): joinpoint List.518 List.433 List.434 List.435 List.436 List.437: let List.520 : Int1 = CallByName Num.22 List.436 List.437; if List.520 then + inc List.433; let List.529 : U8 = CallByName List.66 List.433 List.436; let List.521 : [C U64, C U64] = CallByName Test.3 List.434 List.529; let List.526 : U8 = 1i64; @@ -68,10 +73,12 @@ procedure List.80 (List.544, List.545, List.546, List.547, List.548): let List.523 : U64 = CallByName Num.19 List.436 List.524; jump List.518 List.433 List.438 List.435 List.523 List.437; else + dec List.433; let List.439 : U64 = UnionAtIndex (Id 0) (Index 0) List.521; let List.525 : [C U64, C U64] = TagId(0) List.439; ret List.525; else + dec List.433; let List.519 : [C U64, C U64] = TagId(1) List.434; ret List.519; in @@ -79,6 +86,7 @@ procedure List.80 (List.544, List.545, List.546, List.547, List.548): procedure List.92 (List.430, List.431, List.432): let List.516 : U64 = 0i64; + inc List.430; let List.517 : U64 = CallByName List.6 List.430; let List.515 : [C U64, C U64] = CallByName List.80 List.430 List.431 List.432 List.516 List.517; ret List.515; @@ -102,6 +110,7 @@ procedure Test.3 (Test.4, Test.12): procedure Test.0 (Test.1): let Test.10 : U64 = 0i64; let Test.11 : {} = Struct {}; + inc Test.1; let Test.2 : U64 = CallByName List.26 Test.1 Test.10 Test.11; let Test.9 : U64 = 0i64; let Test.7 : Int1 = CallByName Bool.11 Test.2 Test.9;