Skip to content
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

Fold CMP and CBR instructions #2615

Merged
merged 7 commits into from
Aug 24, 2022
Merged

Fold CMP and CBR instructions #2615

merged 7 commits into from
Aug 24, 2022

Conversation

vaivaswatha
Copy link
Contributor

@vaivaswatha vaivaswatha commented Aug 24, 2022

This enables more opportunities for simplify-cfg, which in-turn enables more cmp and cbr folding (as some intermediate PHIs get removed by simplify-cfg).

I haven't yet done a full benchmarking, but for the basic_storage test, which uses a lot of code from std::storage, which in-turn has code of the form if !is_reference_type... (which is statically evaluatable), I saw the bytecode size reduce from 20k to about 11.7k.

edit: numbers on the full testsuite is added as comment down below.

@vaivaswatha vaivaswatha marked this pull request as draft August 24, 2022 05:33
@vaivaswatha vaivaswatha self-assigned this Aug 24, 2022
Comment on lines +483 to +484
// TODO: Experiment with putting combine-constants and simplify-cfg
// in a loop, but per function.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Or really, we need to create a pass manager in sway-ir. It could initially just call all the passes consecutively and repeatedly until nothing changes (if that isn't too expensive) but it doesn't belong here in lib.rs any more.

sway-ir/src/block.rs Show resolved Hide resolved
sway-ir/src/optimize/constants.rs Outdated Show resolved Hide resolved
sway-ir/src/optimize/constants.rs Outdated Show resolved Hide resolved
sway-ir/src/optimize/simplify_cfg.rs Outdated Show resolved Hide resolved
sway-ir/tests/constants/cbr_cmp_fold.ir Outdated Show resolved Hide resolved
@otrho
Copy link
Contributor

otrho commented Aug 24, 2022

Apart from the nits, all good! I'm glad it's already making a difference.

@vaivaswatha vaivaswatha marked this pull request as ready for review August 24, 2022 07:23
@vaivaswatha vaivaswatha requested a review from otrho August 24, 2022 07:23
@otrho otrho requested a review from a team August 24, 2022 08:29
@vaivaswatha
Copy link
Contributor Author

This change also replaces expressions such as the one below

v34 = asm(r1: v33, r2) -> bool r2, !20 {
    eq     r2 r1 zero, !21
}

with

v34 = const bool false, !16
v35 = cmp eq v33 v34, !20

and it looks like, when there are no further removal of dead blocks in that program, the code size actually increases a little bit. There are no other changes apart from these in the IR that I inspected, for the tests which have a slight code size increase.

Full results:

test master PR #2615 Reduction
test/src/e2e_vm_tests/test_programs/should_pass/forc/dependency_package_field 84 44 47.6190476190476
test/src/e2e_vm_tests/test_programs/should_pass/forc/dependency_patching 44 44 0
test/src/e2e_vm_tests/test_programs/should_pass/language/basic_func_decl 532 508 4.51127819548872
test/src/e2e_vm_tests/test_programs/should_pass/language/const_decl_in_library 156 116 25.6410256410256
test/src/e2e_vm_tests/test_programs/should_pass/language/dependencies 168 168 0
test/src/e2e_vm_tests/test_programs/should_pass/language/generic-type-inference 144 28 80.5555555555556
test/src/e2e_vm_tests/test_programs/should_pass/language/unary_not_basic 140 172 -22.8571428571429
test/src/e2e_vm_tests/test_programs/should_pass/language/import_trailing_comma 180 180 0
test/src/e2e_vm_tests/test_programs/should_pass/language/addrof_intrinsic 884 700 20.8144796380091
test/src/e2e_vm_tests/test_programs/should_pass/language/struct_field_access 140 140 0
test/src/e2e_vm_tests/test_programs/should_pass/language/array_generics 540 540 0
test/src/e2e_vm_tests/test_programs/should_pass/language/is_prime 3788 3476 8.23653643083421
test/src/e2e_vm_tests/test_programs/should_pass/language/out_of_order_decl 300 300 0
test/src/e2e_vm_tests/test_programs/should_pass/language/chained_if_let 316 316 0
test/src/e2e_vm_tests/test_programs/should_pass/language/builtin_type_method_call 100 100 0
test/src/e2e_vm_tests/test_programs/should_pass/language/match_expressions_nested 228 228 0
test/src/e2e_vm_tests/test_programs/should_pass/language/raw_identifiers 636 636 0
test/src/e2e_vm_tests/test_programs/should_pass/language/ref_mutable_fn_args_struct_assign 116 116 0
test/src/e2e_vm_tests/test_programs/should_pass/language/generic_enum 140 140 0
test/src/e2e_vm_tests/test_programs/should_pass/language/op_precedence 100 100 0
test/src/e2e_vm_tests/test_programs/should_pass/language/retd_struct 120 120 0
test/src/e2e_vm_tests/test_programs/should_pass/language/retd_small_array 108 108 0
test/src/e2e_vm_tests/test_programs/should_pass/language/many_stack_variables 96020 96020 0
test/src/e2e_vm_tests/test_programs/should_pass/language/multi_item_import 196 196 0
test/src/e2e_vm_tests/test_programs/should_pass/language/ref_mutable_fn_args_struct 108 108 0
test/src/e2e_vm_tests/test_programs/should_pass/language/inline_if_expr_const 156 28 82.051282051282
test/src/e2e_vm_tests/test_programs/should_pass/language/contract_caller_as_ret 68 68 0
test/src/e2e_vm_tests/test_programs/should_pass/language/u64_ops 3612 3852 -6.64451827242525
test/src/e2e_vm_tests/test_programs/should_pass/language/tuple_in_struct 940 996 -5.95744680851064
test/src/e2e_vm_tests/test_programs/should_pass/language/doc_comments 140 140 0
test/src/e2e_vm_tests/test_programs/should_pass/language/unary_not_basic_2 212 268 -26.4150943396226
test/src/e2e_vm_tests/test_programs/should_pass/language/match_expressions_simple 796 796 0
test/src/e2e_vm_tests/test_programs/should_pass/language/gtf_intrinsic 100 100 0
test/src/e2e_vm_tests/test_programs/should_pass/language/modulo_uint_test 676 716 -5.91715976331361
test/src/e2e_vm_tests/test_programs/should_pass/language/ret_string_in_struct 88 88 0
test/src/e2e_vm_tests/test_programs/should_pass/language/smo_opcode 112 112 0
test/src/e2e_vm_tests/test_programs/should_pass/language/ret_small_string 64 64 0
test/src/e2e_vm_tests/test_programs/should_pass/language/match_expressions_rest 516 516 0
test/src/e2e_vm_tests/test_programs/should_pass/language/b256_bad_jumps 144 112 22.2222222222222
test/src/e2e_vm_tests/test_programs/should_pass/language/tuple_single_element 196 204 -4.08163265306122
test/src/e2e_vm_tests/test_programs/should_pass/language/match_expressions_mismatched 268 268 0
test/src/e2e_vm_tests/test_programs/should_pass/language/basic_predicate 44 44 0
test/src/e2e_vm_tests/test_programs/should_pass/language/if_elseif_enum 1188 1188 0
test/src/e2e_vm_tests/test_programs/should_pass/language/implicit_return 68 44 35.2941176470588
test/src/e2e_vm_tests/test_programs/should_pass/language/config_time_constants 144 112 22.2222222222222
test/src/e2e_vm_tests/test_programs/should_pass/language/trait_override_bug 100 100 0
test/src/e2e_vm_tests/test_programs/should_pass/language/match_expressions_with_self 364 364 0
test/src/e2e_vm_tests/test_programs/should_pass/language/enum_type_inference 192 192 0
test/src/e2e_vm_tests/test_programs/should_pass/language/abort_control_flow_good 284 228 19.7183098591549
test/src/e2e_vm_tests/test_programs/should_pass/language/match_expressions_structs 372 372 0
test/src/e2e_vm_tests/test_programs/should_pass/language/funcs_with_generic_types 44 44 0
test/src/e2e_vm_tests/test_programs/should_pass/language/bool_and_or 180 116 35.5555555555556
test/src/e2e_vm_tests/test_programs/should_pass/language/eq_and_neq 1964 1260 35.8452138492872
test/src/e2e_vm_tests/test_programs/should_pass/language/unit_type_variants 68 68 0
test/src/e2e_vm_tests/test_programs/should_pass/language/ref_mutable_fn_args_call 84 84 0
test/src/e2e_vm_tests/test_programs/should_pass/language/size_of 564 284 49.645390070922
test/src/e2e_vm_tests/test_programs/should_pass/language/zero_field_types 44 44 0
test/src/e2e_vm_tests/test_programs/should_pass/language/asm_without_return 52 52 0
test/src/e2e_vm_tests/test_programs/should_pass/language/struct_destructuring 268 268 0
test/src/e2e_vm_tests/test_programs/should_pass/language/is_reference_type 956 196 79.4979079497908
test/src/e2e_vm_tests/test_programs/should_pass/language/reassignment_operators 596 628 -5.36912751677852
test/src/e2e_vm_tests/test_programs/should_pass/language/enum_if_let_large_type 420 420 0
test/src/e2e_vm_tests/test_programs/should_pass/language/match_expressions_enums 252 252 0
test/src/e2e_vm_tests/test_programs/should_pass/language/asm_expr_basic 500 524 -4.8
test/src/e2e_vm_tests/test_programs/should_pass/language/nested_structs 2108 2228 -5.69259962049336
test/src/e2e_vm_tests/test_programs/should_pass/language/retd_b256 140 140 0
test/src/e2e_vm_tests/test_programs/should_pass/language/array_dynamic_oob 220 220 0
test/src/e2e_vm_tests/test_programs/should_pass/language/tuple_types 196 196 0
test/src/e2e_vm_tests/test_programs/should_pass/language/enum_if_let 648 544 16.0493827160494
test/src/e2e_vm_tests/test_programs/should_pass/language/main_returns_unit 28 28 0
test/src/e2e_vm_tests/test_programs/should_pass/language/tuple_indexing 100 100 0
test/src/e2e_vm_tests/test_programs/should_pass/language/contract_caller_as_type 44 44 0
test/src/e2e_vm_tests/test_programs/should_pass/language/eq_intrinsic 1156 868 24.9134948096886
test/src/e2e_vm_tests/test_programs/should_pass/language/struct_field_reassignment 176 176 0
test/src/e2e_vm_tests/test_programs/should_pass/language/generic_structs 212 212 0
test/src/e2e_vm_tests/test_programs/should_pass/language/use_full_path_names 172 172 0
test/src/e2e_vm_tests/test_programs/should_pass/language/retd_zero_len_array 52 52 0
test/src/e2e_vm_tests/test_programs/should_pass/language/generic_functions 188 188 0
test/src/e2e_vm_tests/test_programs/should_pass/language/b256_bitwise_ops 130372 130956 -0.447948946092719
test/src/e2e_vm_tests/test_programs/should_pass/language/enum_in_fn_decl 156 156 0
test/src/e2e_vm_tests/test_programs/should_pass/language/valid_impurity 140 140 0
test/src/e2e_vm_tests/test_programs/should_pass/language/nested_while_and_if 316 324 -2.53164556962025
test/src/e2e_vm_tests/test_programs/should_pass/language/supertraits 5228 5476 -4.74368783473604
test/src/e2e_vm_tests/test_programs/should_pass/language/tuple_field_reassignment 1028 1028 0
test/src/e2e_vm_tests/test_programs/should_pass/language/enum_destructuring 172 172 0
test/src/e2e_vm_tests/test_programs/should_pass/language/xos_opcode 44 44 0
test/src/e2e_vm_tests/test_programs/should_pass/language/ref_mutable_fn_args_bool 84 84 0
test/src/e2e_vm_tests/test_programs/should_pass/language/diagnose_unknown_annotations 100 100 0
test/src/e2e_vm_tests/test_programs/should_pass/language/generic_struct 116 116 0
test/src/e2e_vm_tests/test_programs/should_pass/language/primitive_type_argument 200 200 0
test/src/e2e_vm_tests/test_programs/should_pass/language/fix_opcode_bug 300 300 0
test/src/e2e_vm_tests/test_programs/should_pass/language/fixing_generic_type 828 516 37.6811594202899
test/src/e2e_vm_tests/test_programs/should_pass/language/import_method_from_other_file 84 84 0
test/src/e2e_vm_tests/test_programs/should_pass/language/aliased_imports 84 84 0
test/src/e2e_vm_tests/test_programs/should_pass/language/break_and_continue 1260 1220 3.17460317460317
test/src/e2e_vm_tests/test_programs/should_pass/language/empty_method_initializer 452 460 -1.76991150442478
test/src/e2e_vm_tests/test_programs/should_pass/language/const_inits 2932 2524 13.9154160982265
test/src/e2e_vm_tests/test_programs/should_pass/language/if_implicit_unit 28 28 0
test/src/e2e_vm_tests/test_programs/should_pass/language/enum_init_fn_call 636 620 2.51572327044025
test/src/e2e_vm_tests/test_programs/should_pass/language/enum_padding 124 124 0
test/src/e2e_vm_tests/test_programs/should_pass/language/method_on_empty_struct 52 52 0
test/src/e2e_vm_tests/test_programs/should_pass/language/const_decl 84 84 0
test/src/e2e_vm_tests/test_programs/should_pass/language/tuple_access 552 552 0
test/src/e2e_vm_tests/test_programs/should_pass/language/impure_ifs 1388 900 35.1585014409222
test/src/e2e_vm_tests/test_programs/should_pass/language/ref_mutable_fn_args_u32 84 84 0
test/src/e2e_vm_tests/test_programs/should_pass/language/trait_import_with_star 84 84 0
test/src/e2e_vm_tests/test_programs/should_pass/language/while_loops 676 692 -2.36686390532544
test/src/e2e_vm_tests/test_programs/should_pass/language/local_impl_for_ord 44 44 0
test/src/e2e_vm_tests/test_programs/should_pass/language/match_expressions_inside_generic_functions 1732 1724 0.46189376443418
test/src/e2e_vm_tests/test_programs/should_pass/language/numeric_constants 644 44 93.167701863354
test/src/e2e_vm_tests/test_programs/should_pass/language/generic_impl_self 1164 1100 5.49828178694158
test/src/e2e_vm_tests/test_programs/should_pass/language/generic_inside_generic 316 316 0
test/src/e2e_vm_tests/test_programs/should_pass/language/match_expressions 380 380 0
test/src/e2e_vm_tests/test_programs/should_pass/language/self_impl_reassignment 1324 1356 -2.41691842900302
test/src/e2e_vm_tests/test_programs/should_pass/language/b256_ops 1296 1104 14.8148148148148
test/src/e2e_vm_tests/test_programs/should_pass/language/multi_impl_self 44 44 0
test/src/e2e_vm_tests/test_programs/should_pass/language/array_basics 1492 1492 0
test/src/e2e_vm_tests/test_programs/should_pass/language/tuple_desugaring 332 332 0
test/src/e2e_vm_tests/test_programs/should_pass/language/non_literal_const_decl 60 60 0
test/src/e2e_vm_tests/test_programs/should_pass/language/redundant_return 76 44 42.1052631578947
test/src/e2e_vm_tests/test_programs/should_pass/language/nested_struct_destructuring 736 736 0
test/src/e2e_vm_tests/test_programs/should_pass/language/new_allocator_test 892 804 9.86547085201794
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/evm_ecr 1376 1240 9.88372093023256
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/u256_div_test 54508 54532 -0.0440302340940779
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/mem 3452 2372 31.2862108922364
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/result 604 620 -2.64900662251656
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/u128_mul_test 5228 5196 0.612088752869166
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/require 924 520 43.7229437229437
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/address_test 4440 2696 39.2792792792793
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/alloc 1060 1108 -4.52830188679245
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/u256_ops_test 66900 67468 -0.849028400597907
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/u256_test 3964 4052 -2.21997981836529
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/b512_test 2772 2852 -2.88600288600289
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/option 604 620 -2.64900662251656
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/exponentiation_test 2148 2300 -7.07635009310987
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/vec 190064 178032 6.33049920026938
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/vec_swap 38708 35060 9.42440839103028
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/assert_test 412 172 58.252427184466
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/intrinsics 1500 516 65.6
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/ge_test 252 236 6.34920634920635
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/u128_test 9252 9396 -1.55642023346304
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/ec_recover_test 3028 2932 3.17040951122853
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/contract_id_test 288 304 -5.55555555555556
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/contract_id_type 492 372 24.390243902439
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/block_height 140 156 -11.4285714285714
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/u256_mul_test 80316 80604 -0.358583594800538
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/u128_div_test 4380 4340 0.91324200913242
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/identity_eq 8060 5884 26.9975186104218
test/src/e2e_vm_tests/test_programs/should_pass/stdlib/b512_struct_alignment 340 340 0
test/src/e2e_vm_tests/test_programs/should_pass/dca/contract/abi_fn_params 116 116 0
test/src/e2e_vm_tests/test_programs/should_pass/dca/unused_struct 28 28 0
test/src/e2e_vm_tests/test_programs/should_pass/dca/unused_free_fn 28 28 0
test/src/e2e_vm_tests/test_programs/should_pass/dca/library/fn_params_free 0 0 #DIV/0!
test/src/e2e_vm_tests/test_programs/should_pass/dca/library/fn_params_impl 0 0 #DIV/0!
test/src/e2e_vm_tests/test_programs/should_pass/dca/library/unused_pub_free_fn 0 0 #DIV/0!
test/src/e2e_vm_tests/test_programs/should_pass/dca/library/fn_params_trait 0 0 #DIV/0!
test/src/e2e_vm_tests/test_programs/should_pass/dca/constant_decl_expr 68 68 0
test/src/e2e_vm_tests/test_programs/should_pass/require_contract_deployment/call_abi_with_tuples 508 524 -3.1496062992126
test/src/e2e_vm_tests/test_programs/should_pass/require_contract_deployment/call_increment_contract 444 452 -1.8018018018018
test/src/e2e_vm_tests/test_programs/should_pass/require_contract_deployment/bal_opcode 392 408 -4.08163265306122
test/src/e2e_vm_tests/test_programs/should_pass/require_contract_deployment/array_of_structs_caller 1136 1044 8.09859154929578
test/src/e2e_vm_tests/test_programs/should_pass/require_contract_deployment/nested_struct_args_caller 372 380 -2.1505376344086
test/src/e2e_vm_tests/test_programs/should_pass/require_contract_deployment/caller_context_test 780 804 -3.07692307692308
test/src/e2e_vm_tests/test_programs/should_pass/require_contract_deployment/storage_access_caller 11084 11180 -0.866113316492241
test/src/e2e_vm_tests/test_programs/should_pass/require_contract_deployment/caller_auth_test 252 268 -6.34920634920635
test/src/e2e_vm_tests/test_programs/should_pass/require_contract_deployment/get_storage_key_caller 1668 1756 -5.2757793764988
test/src/e2e_vm_tests/test_programs/should_pass/require_contract_deployment/call_basic_storage 1344 1368 -1.78571428571429
test/src/e2e_vm_tests/test_programs/should_pass/require_contract_deployment/token_ops_test 952 984 -3.36134453781513
test/src/e2e_vm_tests/test_programs/should_pass/test_abis/get_storage_key_abi 0 0 #DIV/0!
test/src/e2e_vm_tests/test_programs/should_pass/test_abis/abi_with_tuples 0 0 #DIV/0!
test/src/e2e_vm_tests/test_programs/should_pass/test_abis/test_fuel_coin_abi 0 0 #DIV/0!
test/src/e2e_vm_tests/test_programs/should_pass/test_abis/context_testing_abi 0 0 #DIV/0!
test/src/e2e_vm_tests/test_programs/should_pass/test_abis/basic_storage_abi 0 0 #DIV/0!
test/src/e2e_vm_tests/test_programs/should_pass/test_abis/storage_access_abi 0 0 #DIV/0!
test/src/e2e_vm_tests/test_programs/should_pass/test_abis/auth_testing_abi 0 0 #DIV/0!
test/src/e2e_vm_tests/test_programs/should_pass/test_abis/increment_abi 0 0 #DIV/0!
test/src/e2e_vm_tests/test_programs/should_pass/test_abis/balance_test_abi 0 0 #DIV/0!
test/src/e2e_vm_tests/test_programs/should_pass/test_abis/array_of_structs_abi 0 0 #DIV/0!
test/src/e2e_vm_tests/test_programs/should_pass/test_abis/nested_struct_args_abi 0 0 #DIV/0!
test/src/e2e_vm_tests/test_programs/should_pass/test_contracts/context_testing_contract 332 332 0
test/src/e2e_vm_tests/test_programs/should_pass/test_contracts/basic_storage 19732 11760 40.4013784715183
test/src/e2e_vm_tests/test_programs/should_pass/test_contracts/storage_access_contract 5956 5956 0
test/src/e2e_vm_tests/test_programs/should_pass/test_contracts/auth_testing_contract 60 60 0
test/src/e2e_vm_tests/test_programs/should_pass/test_contracts/nested_struct_args_contract 124 124 0
test/src/e2e_vm_tests/test_programs/should_pass/test_contracts/abi_with_tuples_contract 108 108 0
test/src/e2e_vm_tests/test_programs/should_pass/test_contracts/test_fuel_coin_contract 148 148 0
test/src/e2e_vm_tests/test_programs/should_pass/test_contracts/array_of_structs_contract 180 180 0
test/src/e2e_vm_tests/test_programs/should_pass/test_contracts/abi_with_generic_types 152 152 0
test/src/e2e_vm_tests/test_programs/should_pass/test_contracts/get_storage_key_contract 452 452 0
test/src/e2e_vm_tests/test_programs/should_pass/test_contracts/balance_test_contract 68 68 0
test/src/e2e_vm_tests/test_programs/should_pass/test_contracts/multiple_impl 212 100 52.8301886792453
test/src/e2e_vm_tests/test_programs/should_pass/test_contracts/issue_1512_repro 564 564 0
test/src/e2e_vm_tests/test_programs/should_pass/test_contracts/increment_contract 256 256 0

@vaivaswatha vaivaswatha enabled auto-merge (squash) August 24, 2022 10:30
@otrho
Copy link
Contributor

otrho commented Aug 24, 2022

So the files that are larger are just because __eq() is slightly larger than the asm blocks? (Because it's using a const false rather than just the zero register, which is an optimisation we can make with another pass one day?)

@vaivaswatha
Copy link
Contributor Author

So the files that are larger are just because __eq() is slightly larger than the asm blocks? (Because it's using a const false rather than just the zero register, which is an optimisation we can make with another pass one day?)

I didn't check them all, but the ones I manually inspected, yes. And yes, we should do this optimization at some point.

Copy link
Contributor

@sezna sezna left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome metrics!

@vaivaswatha vaivaswatha merged commit 8f5d88c into master Aug 24, 2022
@vaivaswatha vaivaswatha deleted the vaivaswatha/some_dce branch August 24, 2022 19:05
@mohammadfawaz mohammadfawaz added compiler: ir IRgen and sway-ir including optimization passes compiler: optimization IR Optimization Passes labels Dec 9, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
compiler: ir IRgen and sway-ir including optimization passes compiler: optimization IR Optimization Passes
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants