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

Improve copy-propagation and DCE for memory operations #4592

Merged
merged 27 commits into from
May 31, 2023

Conversation

vaivaswatha
Copy link
Contributor

@vaivaswatha vaivaswatha commented May 29, 2023

Description

This PR adds a new copy-propagation for memory operations and also enhances the DCE pass to eliminate dead stores and memcpys.

Closes #4345. This doesn't do a full data-flow analysis for the function as mentioned in the Issue description (that would be quite compile-time heavy). Instead it tracks data-flow (available memcpys per block and optimizes when safe).

This does not remove the existing ad-hoc copy-propagation for memory operations (which is now called local_copy_prop_prememcpy) yet. More testing and benchmarking needs to be done before that is removed.

This PR introduces an escaped symbols analysis pass (also used by DCE now) to figure out symbols (locals / args) that escape out of our purview, and hence deemed unsafe to touch for any optimization.

Code size reduction with this PR is tabulated below. (note that the gtf intrinsic test code size has increased, that's because the test itself has been modified to ensure that code isn't DCE'd).

Table
tests before/master with optimization / this PR percentage reduction
Testing should_pass/evm/evm_basic 28 28 0
Testing should_pass/payable_non_zero_coins 196 196 0
Testing should_pass/dca/log_intrinsic 52 52 0
Testing should_pass/dca/constant_struct 56 56 0
Testing should_pass/dca/unused_enum 44 28 36.3636363636364
Testing should_pass/dca/unused_variable 28 28 0
Testing should_pass/dca/unused_free_fn 28 28 0
Testing should_pass/dca/log_stdlib 52 52 0
Testing should_pass/dca/multiple_fns_same_name 28 28 0
Testing should_pass/dca/alias_type_ascription_generic 28 28 0
Testing should_pass/dca/trait_method 28 28 0
Testing should_pass/dca/generic_fn_trait_contraint 28 28 0
Testing should_pass/dca/impl_self_alias 28 28 0
Testing should_pass/dca/unused_variable_in_free_fn 28 28 0
Testing should_pass/dca/allow_dead_code 68 28 58.8235294117647
Testing should_pass/dca/contract/unused_struct_field_array 100 100 0
Testing should_pass/dca/contract/unused_struct_field 68 68 0
Testing should_pass/dca/contract/unused_struct_field_enum 92 92 0
Testing should_pass/dca/contract/unused_struct_field_tuple 68 68 0
Testing should_pass/dca/contract/abi_fn_params 100 100 0
Testing should_pass/dca/impl_self_alias2 28 28 0
Testing should_pass/dca/multiple_enums_same_name 52 28 46.1538461538462
Testing should_pass/dca/trait_method_lib 28 28 0
Testing should_pass/dca/func_param 60 28 53.3333333333333
Testing should_pass/dca/unused_fields 52 28 46.1538461538462
Testing should_pass/dca/impl_self 28 28 0
Testing should_pass/dca/constant_decl_expr 44 44 0
Testing should_pass/dca/impl_trait_single 52 28 46.1538461538462
Testing should_pass/dca/unused_trait 28 28 0
Testing should_pass/dca/impl_unused_fn 60 60 0
Testing should_pass/dca/all_paths_return 28 28 0
Testing should_pass/dca/unused_struct 28 28 0
Testing should_pass/dca/alias_unused 28 28 0
Testing should_pass/dca/trait_method_neq 116 116 0
Testing should_pass/dca/struct_field_no_warning 36 36 0
Testing should_pass/dca/alias_type_ascription 28 28 0
Testing should_pass/dca/impl_trait_multiple 76 28 63.1578947368421
Testing should_pass/dca/alias_lib 108 84 22.2222222222222
Testing should_pass/dca/constant_while 28 28 0
Testing should_pass/dca/library/unused_priv_free_fn 28 28 0
Testing should_pass/dca/library/fn_params_impl 28 28 0
Testing should_pass/dca/library/unused_pub_free_fn 28 28 0
Testing should_pass/dca/library/fn_params_trait 28 28 0
Testing should_pass/dca/library/fn_params_free 28 28 0
Testing should_pass/supertraits_via_self 36 36 0
Testing should_pass/midenvm/midenvm_trivial ...Testing should_pass/static_analysis/cei_pattern_violation_storage_var_update 460 460 0
Testing should_pass/static_analysis/cei_pattern_violation_in_struct 380 340 10.5263157894737
Testing should_pass/static_analysis/cei_pattern_violation 340 340 0
Testing should_pass/static_analysis/cei_pattern_violation_in_asm_block_bal 212 212 0
Testing should_pass/static_analysis/cei_pattern_violation_in_tuple 380 340 10.5263157894737
Testing should_pass/static_analysis/cei_pattern_violation_in_if_statement-2 340 340 0
Testing should_pass/static_analysis/cei_pattern_violation_in_asm_block_tr 332 332 0
Testing should_pass/static_analysis/storage_annotations_unused_read_and_write 60 60 0
Testing should_pass/static_analysis/cei_pattern_violation_smo_intrinsic 704 720 -2.27272727272727
Testing should_pass/static_analysis/cei_pattern_violation_in_while_loop-2 340 340 0
Testing should_pass/static_analysis/cei_pattern_violation_in_while_loop-3 340 340 0
Testing should_pass/static_analysis/cei_pattern_violation_storage_struct_read 548 524 4.37956204379562
Testing should_pass/static_analysis/cei_pattern_violation_in_asm_block_read 224 224 0
Testing should_pass/static_analysis/cei_pattern_violation_in_intrinsic_call 340 340 0
Testing should_pass/static_analysis/cei_pattern_violation_storage_map_and_vec 2224 2060 7.37410071942446
Testing should_pass/static_analysis/cei_pattern_violation_in_func_app-3 340 340 0
Testing should_pass/static_analysis/cei_pattern_violation_in_func_app-1 340 340 0
Testing should_pass/static_analysis/cei_pattern_violation_in_func_app-2 340 340 0
Testing should_pass/static_analysis/cei_pattern_violation_in_asm_block_smo 220 220 0
Testing should_pass/static_analysis/cei_pattern_violation_in_while_loop-4 340 340 0
Testing should_pass/static_analysis/cei_pattern_violation_storage_var_read 532 524 1.50375939849624
Testing should_pass/static_analysis/storage_annotations_unused_read 60 60 0
Testing should_pass/static_analysis/cei_pattern_violation_in_asm_block 240 240 0
Testing should_pass/static_analysis/cei_pattern_violation_in_codeblocks_other_than_in_functions 340 340 0
Testing should_pass/static_analysis/storage_annotations_unused_write 60 60 0
Testing should_pass/static_analysis/cei_pattern_violation_in_asm_block_tro 1332 1340 -0.600600600600601
Testing should_pass/static_analysis/cei_pattern_violation_in_while_loop-1 340 340 0
Testing should_pass/static_analysis/cei_pattern_violation_in_standalone_function 340 340 0
Testing should_pass/static_analysis/cei_pattern_violation_in_if_statement-1 364 364 0
Testing should_pass/static_analysis/cei_pattern_violation_in_match_statement-1 588 588 0
Testing should_pass/static_analysis/cei_pattern_violation_more_complex_logic 8196 7880 3.8555392874573
Testing should_pass/non_payable_zero_coins_let_binding 240 240 0
Testing should_pass/forc/contract_dependencies/contract_a 188 60 68.0851063829787
Testing should_pass/forc/contract_dependencies/contract_b 60 60 0
Testing should_pass/forc/contract_dependencies/contract_c 60 60 0
Testing should_pass/forc/parent_pkg_manifest/contract_a 60 60 0
Testing should_pass/forc/dependency_package_field 28 28 0
Testing should_pass/forc/workspace_building 28 28 0
Testing should_pass/forc/dependency_patching 28 28 0
Testing should_pass/supertraits_for_abis 84 84 0
Testing should_pass/non_payable_implicit_zero_coins 240 240 0
Testing should_pass/language/smo 1052 1052 0
Testing should_pass/language/generic_impl_self 2348 2308 1.70357751277683
Testing should_pass/language/configurable_consts 4084 4084 0
Testing should_pass/language/const_decl_in_library 68 68 0
Testing should_pass/language/tuple_single_element 124 108 12.9032258064516
Testing should_pass/language/gtf_intrinsic 60 92 -53.3333333333333
Testing should_pass/language/is_prime 844 844 0
Testing should_pass/language/asm_without_return 52 52 0
Testing should_pass/language/const_decl_and_use_in_library 60 60 0
Testing should_pass/language/generic_result_method 588 580 1.36054421768707
Testing should_pass/language/mutable_arrays_swap 220 116 47.2727272727273
Testing should_pass/language/insert_element_reg_reuse 5380 5108 5.05576208178439
Testing should_pass/language/mutable_arrays_enum 276 156 43.4782608695652
Testing should_pass/language/contract_caller_as_ret 60 60 0
Testing should_pass/language/left_to_right_func_args_evaluation 188 188 0
Testing should_pass/language/builtin_type_method_call 44 44 0
Testing should_pass/language/binary_and_hex_literals 28 28 0
Testing should_pass/language/predicate_while_dep 60 60 0
Testing should_pass/language/generic_enum 132 28 78.7878787878788
Testing should_pass/language/method_on_empty_struct 28 28 0
Testing should_pass/language/prelude_access2 28 28 0
Testing should_pass/language/ret_small_string 56 56 0
Testing should_pass/language/eq_and_neq 1532 1172 23.4986945169713
Testing should_pass/language/match_expressions_with_self 364 364 0
Testing should_pass/language/nested_while_and_if 156 156 0
Testing should_pass/language/multi_item_import 100 28 72
Testing should_pass/language/binop_intrinsics 1484 1484 0
Testing should_pass/language/mutable_arrays_multiple_nested 172 172 0
Testing should_pass/language/far_jumps/many_blobs 1064120 1064120 0
Testing should_pass/language/far_jumps/single_blob 1048648 1048648 0
Testing should_pass/language/nested_struct_destructuring 472 52 88.9830508474576
Testing should_pass/language/associated_const_abi_multiple 28 28 0
Testing should_pass/language/struct_field_access 116 92 20.6896551724138
Testing should_pass/language/out_of_order_decl 132 52 60.6060606060606
Testing should_pass/language/diagnose_unknown_annotations 84 84 0
Testing should_pass/language/associated_const_trait 28 28 0
Testing should_pass/language/typeinfo_custom_callpath2 100 100 0
Testing should_pass/language/mutable_arrays 116 116 0
Testing should_pass/language/prelude_access 28 28 0
Testing should_pass/language/match_expressions_empty_enums 44 44 0
Testing should_pass/language/implicit_casting 84 44 47.6190476190476
Testing should_pass/language/generic_type_inference 4116 3972 3.49854227405248
Testing should_pass/language/tuple_in_struct 804 804 0
Testing should_pass/language/associated_const_impl_local_same_name 28 28 0
Testing should_pass/language/where_clause_functions 1364 1332 2.34604105571848
Testing should_pass/language/revert_in_first_if_branch 44 44 0
Testing should_pass/language/mutable_arrays_nested 196 196 0
Testing should_pass/language/if_elseif_enum 1324 756 42.9003021148036
Testing should_pass/language/logging 472 472 0
Testing should_pass/language/enum_if_let_large_type 436 436 0
Testing should_pass/language/type_alias 6048 5552 8.2010582010582
Testing should_pass/language/import_method_from_other_file 452 452 0
Testing should_pass/language/enum_in_fn_decl 116 116 0
Testing should_pass/language/where_clause_impls 572 572 0
Testing should_pass/language/generic_impl_self_where 2580 2068 19.8449612403101
Testing should_pass/language/shadowing/shadowed_glob_imports 28 28 0
Testing should_pass/language/tuple_field_reassignment 1188 1188 0
Testing should_pass/language/enum_if_let 600 600 0
Testing should_pass/language/match_expressions_enums 156 148 5.12820512820513
Testing should_pass/language/ref_mutable_arrays 116 116 0
Testing should_pass/language/array_basics 1428 964 32.4929971988796
Testing should_pass/language/associated_const_abi 28 28 0
Testing should_pass/language/mutable_arrays_struct 156 156 0
Testing should_pass/language/numeric_constants 252 252 0
Testing should_pass/language/use_full_path_names 76 28 63.1578947368421
Testing should_pass/language/match_expressions_simple 340 340 0
Testing should_pass/language/associated_const_impl_self 28 28 0
Testing should_pass/language/enum_destructuring 124 124 0
Testing should_pass/language/zero_field_types 44 44 0
Testing should_pass/language/typeinfo_custom_callpath_with_import 164 164 0
Testing should_pass/language/generic_structs 140 52 62.8571428571429
Testing should_pass/language/where_clause_methods 1364 1332 2.34604105571848
Testing should_pass/language/valid_impurity 60 60 0
Testing should_pass/language/abort_control_flow_good 44 44 0
Testing should_pass/language/const_inits 2644 2668 -0.907715582450832
Testing should_pass/language/tuple_indexing 68 68 0
Testing should_pass/language/match_expressions_rest 236 156 33.8983050847458
Testing should_pass/language/ref_mutable_fn_args_u32 60 60 0
Testing should_pass/language/method_type_args 28 28 0
Testing should_pass/language/array_generics 404 84 79.2079207920792
Testing should_pass/language/tuple_types 84 44 47.6190476190476
Testing should_pass/language/reassignment_operators 356 356 0
Testing should_pass/language/match_expressions_constants 84 84 0
Testing should_pass/language/match_expressions_inside_generic_functions 428 428 0
Testing should_pass/language/if_implicit_unit 28 28 0
Testing should_pass/language/enum_variant_imports 716 716 0
Testing should_pass/language/where_clause_structs 244 244 0
Testing should_pass/language/eq_intrinsic 412 412 0
Testing should_pass/language/match_expressions_nested 172 164 4.65116279069768
Testing should_pass/language/match_expressions_explicit_rets 28 28 0
Testing should_pass/language/while_loops 364 364 0
Testing should_pass/language/supertraits_with_trait_methods 148 148 0
Testing should_pass/language/const_decl_with_call_path 340 324 4.70588235294118
Testing should_pass/language/break_and_continue_block_ret 28 28 0
Testing should_pass/language/main_args/main_args_ref_ref 52 52 0
Testing should_pass/language/main_args/main_args_ref_copy 52 52 0
Testing should_pass/language/main_args/main_args_copy 44 44 0
Testing should_pass/language/main_args/main_args_empty 44 44 0
Testing should_pass/language/main_args/main_args_ref 44 44 0
Testing should_pass/language/main_args/main_args_various_types 452 452 0
Testing should_pass/language/main_args/main_args_copy_copy 44 44 0
Testing should_pass/language/smo_opcode 112 112 0
Testing should_pass/language/match_expressions_structs 220 212 3.63636363636364
Testing should_pass/language/same_const_name 732 732 0
Testing should_pass/language/retd_b256 120 120 0
Testing should_pass/language/bool_and_or 76 76 0
Testing should_pass/language/local_impl_for_ord 52 28 46.1538461538462
Testing should_pass/language/import_trailing_comma 84 84 0
Testing should_pass/language/modulo_uint_test 420 420 0
Testing should_pass/language/struct_field_reassignment 160 28 82.5
Testing should_pass/language/complex_cfg 420 340 19.047619047619
Testing should_pass/language/nested_structs 1740 1700 2.29885057471264
Testing should_pass/language/generics_in_contract 680 584 14.1176470588235
Testing should_pass/language/match_expressions_or 660 660 0
Testing should_pass/language/match_expressions 44 44 0
Testing should_pass/language/same_const_name_lib 28 28 0
Testing should_pass/language/associated_const_trait_default 44 44 0
Testing should_pass/language/retd_struct 120 120 0
Testing should_pass/language/b256_bitwise_ops 30144 30128 0.0530785562632696
Testing should_pass/language/ref_mutable_fn_args_call 60 60 0
Testing should_pass/language/generic_transpose 852 828 2.8169014084507
Testing should_pass/language/struct_destructuring 220 188 14.5454545454545
Testing should_pass/language/trait_import_with_star 52 52 0
Testing should_pass/language/arg_demotion_inline 164 60 63.4146341463415
Testing should_pass/language/typeinfo_custom_callpath 100 100 0
Testing should_pass/language/diverging_exprs 1604 1572 1.99501246882793
Testing should_pass/language/empty_method_initializer 440 416 5.45454545454545
Testing should_pass/language/raw_identifiers 140 140 0
Testing should_pass/language/generic_struct 68 44 35.2941176470588
Testing should_pass/language/doc_comments 132 76 42.4242424242424
Testing should_pass/language/basic_func_decl 108 28 74.0740740740741
Testing should_pass/language/retd_small_array 60 60 0
Testing should_pass/language/b256_bad_jumps 28 28 0
Testing should_pass/language/ref_mutable_fn_args_bool 52 52 0
Testing should_pass/language/chained_if_let 212 204 3.77358490566038
Testing should_pass/language/self_impl_reassignment 1140 1132 0.701754385964912
Testing should_pass/language/generic_inside_generic 196 196 0
Testing should_pass/language/test_multiple_attributes 28 28 0
Testing should_pass/language/ref_mutable_fn_args_struct_assign 92 92 0
Testing should_pass/language/tuple_trait 164 140 14.6341463414634
Testing should_pass/language/redundant_return 28 28 0
Testing should_pass/language/predicate_while 60 60 0
Testing should_pass/language/basic_predicate 28 28 0
Testing should_pass/language/ops 7452 7452 0
Testing should_pass/language/multi_impl_self 44 44 0
Testing should_pass/language/new_allocator_test 684 684 0
Testing should_pass/language/mutable_and_initd 156 156 0
Testing should_pass/language/unit_type_variants 60 60 0
Testing should_pass/language/tuple_desugaring 212 228 -7.54716981132076
Testing should_pass/language/unary_not_basic 28 28 0
Testing should_pass/language/main_returns_unit 28 28 0
Testing should_pass/language/match_expressions_mismatched 180 116 35.5555555555556
Testing should_pass/language/asm_expr_basic 252 228 9.52380952380952
Testing should_pass/language/many_stack_variables 484 484 0
Testing should_pass/language/size_of 324 180 44.4444444444444
Testing should_pass/language/test_attribute 28 28 0
Testing should_pass/language/bitwise_not 308 308 0
Testing should_pass/language/primitive_type_argument 168 44 73.8095238095238
Testing should_pass/language/associated_const_impl 28 28 0
Testing should_pass/language/associated_const_trait_impl_method 28 28 0
Testing should_pass/language/generic_functions 28 28 0
Testing should_pass/language/is_reference_type 532 340 36.0902255639098
Testing should_pass/language/integer_type_inference 28 28 0
Testing should_pass/language/import_with_different_callpaths 2588 2460 4.94590417310665
Testing should_pass/language/funcs_with_generic_types 28 28 0
Testing should_pass/language/enum_init_fn_call 740 740 0
Testing should_pass/language/tuple_access 296 144 51.3513513513514
Testing should_pass/language/impure_ifs 692 692 0
Testing should_pass/language/associated_const_impl_multiple 28 28 0
Testing should_pass/language/enum_type_inference 152 44 71.0526315789474
Testing should_pass/language/inline_if_expr_const 28 28 0
Testing should_pass/language/attributes_warnings 28 28 0
Testing should_pass/language/contract_caller_dynamic_address 144 144 0
Testing should_pass/language/ret_string_in_struct 80 80 0
Testing should_pass/language/associated_const_trait_method 28 28 0
Testing should_pass/language/where_clause_enums 396 372 6.06060606060606
Testing should_pass/language/non_literal_const_decl 44 44 0
Testing should_pass/language/supertraits 3708 3708 0
Testing should_pass/language/struct_init_reorder 116 116 0
Testing should_pass/language/generic_traits 1092 1020 6.59340659340659
Testing should_pass/language/where_clause_traits 44 28 36.3636363636364
Testing should_pass/language/implicit_return 44 44 0
Testing should_pass/language/raw_ptr/raw_ptr_ret 364 356 2.1978021978022
Testing should_pass/language/raw_ptr/vec_ret 828 828 0
Testing should_pass/language/break_and_continue 700 700 0
Testing should_pass/language/aliased_imports 60 60 0
Testing should_pass/language/enum_padding 116 116 0
Testing should_pass/language/fix_opcode_bug 148 148 0
Testing should_pass/language/unary_not_basic_2 28 28 0
Testing should_pass/language/associated_const_trait_const 28 28 0
Testing should_pass/language/associated_const_abi_default 28 28 0
Testing should_pass/language/ref_mutable_arrays_inline 116 116 0
Testing should_pass/language/b256_ops 1072 1064 0.746268656716418
Testing should_pass/language/retd_zero_len_array 36 36 0
Testing should_pass/language/ref_mutable_fn_args_struct 84 84 0
Testing should_pass/language/op_precedence 28 28 0
Testing should_pass/language/const_decl 44 44 0
Testing should_pass/unit_tests/nested_libs 212 212 0
Testing should_pass/unit_tests/script_multi_test 128 128 0
Testing should_pass/unit_tests/predicate_multi_test 188 188 0
Testing should_pass/unit_tests/contract_multi_test 396 396 0
Testing should_pass/unit_tests/script_with_nested_libs 220 220 0
Testing should_pass/unit_tests/lib_single_test 100 100 0
Testing should_pass/unit_tests/contract-multi-contract-calls 60 60 0
Testing should_pass/unit_tests/workspace_test 128 128 0
Testing should_pass/unit_tests/script-contract-calls 60 60 0
Testing should_pass/unit_tests/stack_indexing_overflow 4196 4116 1.90657769304099
Testing should_pass/unit_tests/contract_with_nested_libs 252 252 0
Testing should_pass/unit_tests/should_revert 52 52 0
Testing should_pass/unit_tests/lib_multi_test 236 236 0
Testing should_pass/unit_tests/predicate_with_nested_libs 180 180 0
Testing should_pass/test_contracts/context_testing_contract 364 364 0
Testing should_pass/test_contracts/increment_contract 844 844 0
Testing should_pass/test_contracts/storage_configurable 60 60 0
Testing should_pass/test_contracts/issue_1512_repro 228 228 0
Testing should_pass/test_contracts/abi_with_same_name_types 104 104 0
Testing should_pass/test_contracts/abi_with_tuples_contract 92 92 0
Testing should_pass/test_contracts/array_of_structs_contract 188 188 0
Testing should_pass/test_contracts/storage_access_contract 11084 11084 0
Testing should_pass/test_contracts/test_fuel_coin_contract 172 172 0
Testing should_pass/test_contracts/balance_test_contract 76 76 0
Testing should_pass/test_contracts/nested_struct_args_contract 92 92 0
Testing should_pass/test_contracts/multiple_impl 84 84 0
Testing should_pass/test_contracts/contract_with_type_aliases 172 172 0
Testing should_pass/test_contracts/basic_storage 12708 12476 1.82562165564998
Testing should_pass/test_contracts/return_struct 388 304 21.6494845360825
Testing should_pass/test_contracts/auth_testing_contract 68 68 0
Testing should_pass/test_contracts/abi_with_generic_types 168 168 0
Testing should_pass/supertraits_for_abis_diamond 60 60 0
Testing should_pass/multiple_supertraits_for_abis 84 84 0
Testing should_pass/conditional_compilation/run 44 44 0
Testing should_pass/conditional_compilation/compile ...Testing should_pass/supertraits_for_abis_ownable 2044 2020 1.17416829745597
Testing should_pass/empty_fields_in_storage_struct 11176 10688 4.36649964209019
Testing should_pass/stdlib/eq_generic 28 28 0
Testing should_pass/stdlib/if_type_revert 28 28 0
Testing should_pass/stdlib/exponentiation_test 2436 2436 0
Testing should_pass/stdlib/u256_test 5444 4540 16.6054371785452
Testing should_pass/stdlib/b512_struct_alignment 360 328 8.88888888888889
Testing should_pass/stdlib/u128_root_test 38716 33356 13.8444054137824
Testing should_pass/stdlib/u128_div_test 5092 4236 16.8106834249804
Testing should_pass/stdlib/ge_test 316 316 0
Testing should_pass/stdlib/eq_custom_type 804 772 3.98009950248756
Testing should_pass/stdlib/identity_eq 6540 6484 0.856269113149847
Testing should_pass/stdlib/u128_test 7644 6804 10.989010989011
Testing should_pass/stdlib/require 176 92 47.7272727272727
Testing should_pass/stdlib/u256_mul_test 44612 33508 24.8901640814131
Testing should_pass/stdlib/b512_test 3488 2704 22.4770642201835
Testing should_pass/stdlib/block_height 68 68 0
Testing should_pass/stdlib/assert_test 212 212 0
Testing should_pass/stdlib/assert_eq 3252 2764 15.0061500615006
Testing should_pass/stdlib/intrinsics 600 388 35.3333333333333
Testing should_pass/stdlib/storage_vec_insert 2352 2320 1.36054421768707
Testing should_pass/stdlib/option 22680 21144 6.77248677248677
Testing should_pass/stdlib/u128_log_test 38492 32764 14.8810142367245
Testing should_pass/stdlib/chess 2084 2084 0
Testing should_pass/stdlib/contract_id_test 296 264 10.8108108108108
Testing should_pass/stdlib/assert_eq_revert 60 60 0
Testing should_pass/stdlib/vec_swap 29332 26940 8.15491613255148
Testing should_pass/stdlib/u256_div_test 50796 37892 25.4035750846523
Testing should_pass/stdlib/u128_mul_test 1740 1356 22.0689655172414
Testing should_pass/stdlib/address_test 2344 1928 17.7474402730375
Testing should_pass/stdlib/raw_ptr 1732 1732 0
Testing should_pass/stdlib/u256_ops_test 42980 31156 27.51046998604
Testing should_pass/stdlib/result 7176 6200 13.6008918617614
Testing should_pass/stdlib/raw_slice 596 532 10.738255033557
Testing should_pass/stdlib/vec 152352 139208 8.62738920394875
Testing should_pass/stdlib/contract_id_type 380 340 10.5263157894737
Testing should_pass/stdlib/logarithmic_test 1348 1348 0

Checklist

  • I have linked to any relevant issues.
  • I have commented my code, particularly in hard-to-understand areas.
  • I have updated the documentation where relevant (API docs, the reference, and the Sway book).
  • I have added tests that prove my fix is effective or that my feature works.
  • I have added (or requested a maintainer to add) the necessary Breaking* or New Feature labels where relevant.
  • I have done my best to ensure that my PR adheres to the Fuel Labs Code Review Standards.
  • I have requested a review from the relevant team or maintainers.

@vaivaswatha vaivaswatha self-assigned this May 29, 2023
@vaivaswatha vaivaswatha marked this pull request as ready for review May 30, 2023 05:45
@vaivaswatha vaivaswatha requested a review from a team May 30, 2023 05:46
@IGI-111
Copy link
Contributor

IGI-111 commented May 31, 2023

I just want to say I really appreciate having a table detailing the size improvements. 👍

IGI-111
IGI-111 previously approved these changes May 31, 2023
@IGI-111 IGI-111 requested a review from a team May 31, 2023 07:25
@vaivaswatha vaivaswatha enabled auto-merge (squash) May 31, 2023 08:04
tritao
tritao previously approved these changes May 31, 2023
@vaivaswatha vaivaswatha dismissed stale reviews from tritao and IGI-111 via c3866f4 May 31, 2023 09:38
@IGI-111 IGI-111 requested a review from tritao May 31, 2023 09:48
@vaivaswatha vaivaswatha merged commit 84e3855 into master May 31, 2023
28 checks passed
@vaivaswatha vaivaswatha deleted the vaivaswatha/copy_prop branch May 31, 2023 10:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Improve IR copy propagation using data flow analysis.
3 participants