-
Notifications
You must be signed in to change notification settings - Fork 5.4k
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
Optimization pipeline: switch order of fndedup and inlining #6024
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Without function deduplication, the heuristic that we have for inlining "if a function is called only once, inline it" isn't good enough because identical functions, after they're combined into one will have multiple callers, which wouldn't be so without fndedup.
Benchmark for 1b882daClick to view benchmark
|
Benchmark for a6f14c0Click to view benchmark
|
This is because it relies on contract-id, which changes with the build profile
Benchmark for 3384e60Click to view benchmark
|
Benchmark for 9167d09Click to view benchmark
|
Benchmark for 2125336Click to view benchmark
|
Benchmark for b571d41Click to view benchmark
|
Benchmark for c6b515fClick to view benchmark
|
Benchmark for ee6e7bfClick to view benchmark
|
Benchmark for 715f067Click to view benchmark
|
… into vaivaswatha/fndedup_inline
Benchmark for 1dfaaecClick to view benchmark
|
Code size impact on our testsuite: Click here for the numbers
|
IGI-111
added
the
breaking
May cause existing user code to break. Requires a minor or major release.
label
May 22, 2024
IGI-111
approved these changes
May 22, 2024
jjcnn
approved these changes
May 22, 2024
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nothing to report - LGTM.
IGI-111
pushed a commit
that referenced
this pull request
May 29, 2024
## Description After changes to the pipeline sequence in #6024, there were some regressions. This change mitigates that to an extent. Closes #6047 <details> <summary>Click here for the numbers</summary> test | before | after | %reduction -- | -- | -- | -- should_pass/return_in_strange_positions | 768 | 280 | 63.5416666666667 should_pass/payable_non_zero_coins | 1584 | 1584 | 0 should_pass/superabi_contract_calls | 4512 | 4512 | 0 should_pass/superabi_supertrait_same_methods | 4736 | 4736 | 0 should_pass/stdlib/vec | 107304 | 107096 | 0.193841795273242 should_pass/stdlib/alloc_test | 928 | 824 | 11.2068965517241 should_pass/stdlib/vec_swap | 25680 | 23792 | 7.35202492211838 should_pass/stdlib/intrinsics | 896 | 272 | 69.6428571428571 should_pass/stdlib/ge_test | 560 | 560 | 0 should_pass/stdlib/assert_ne_revert | 560 | 560 | 0 should_pass/stdlib/assert_eq | 7784 | 6416 | 17.5745118191161 should_pass/stdlib/u128_log_test | 4768 | 4568 | 4.19463087248322 should_pass/stdlib/u128_root_test | 4488 | 4400 | 1.96078431372549 should_pass/stdlib/raw_ptr | 5000 | 4512 | 9.76 should_pass/stdlib/identity_eq | 2456 | 2424 | 1.30293159609121 should_pass/stdlib/eq_custom_type | 672 | 672 | 0 should_pass/stdlib/contract_id_type | 648 | 592 | 8.64197530864197 should_pass/stdlib/option_eq | 11704 | 12240 | -4.57963089542037 should_pass/stdlib/option | 24000 | 22912 | 4.53333333333333 should_pass/stdlib/eq_generic | 176 | 176 | 0 should_pass/stdlib/u128_div_test | 2800 | 2720 | 2.85714285714286 should_pass/stdlib/generic_empty_struct_with_constraint | 176 | 176 | 0 should_pass/stdlib/u128_test | 6744 | 6512 | 3.44009489916963 should_pass/stdlib/assert_test | 512 | 272 | 46.875 should_pass/stdlib/result | 9720 | 8944 | 7.98353909465021 should_pass/stdlib/contract_id_test | 648 | 592 | 8.64197530864197 should_pass/stdlib/assert_ne | 6352 | 6120 | 3.65239294710327 should_pass/stdlib/address_test | 4320 | 4144 | 4.07407407407407 should_pass/stdlib/storage_vec_insert | 9000 | 9000 | 0 should_pass/stdlib/block_height | 312 | 312 | 0 should_pass/stdlib/u128_mul_test | 1536 | 1448 | 5.72916666666667 should_pass/stdlib/if_type_revert | 32 | 32 | 0 should_pass/stdlib/b512_test | 3472 | 3352 | 3.45622119815668 should_pass/stdlib/sha256 | 3184 | 2168 | 31.9095477386935 should_pass/stdlib/assert_eq_revert | 568 | 568 | 0 should_pass/stdlib/chess | 2048 | 2048 | 0 should_pass/stdlib/require | 1256 | 1168 | 7.00636942675159 should_pass/stdlib/b512_struct_alignment | 728 | 728 | 0 should_pass/stdlib/iterator | 2872 | 2640 | 8.07799442896936 should_pass/stdlib/raw_slice | 1056 | 960 | 9.09090909090909 should_pass/test_contracts/nested_struct_args_contract | 1352 | 1352 | 0 should_pass/test_contracts/abi_with_generic_types | 4240 | 4240 | 0 should_pass/test_contracts/basic_storage | 41312 | 33744 | 18.3191324554609 should_pass/test_contracts/storage_access_contract | 37696 | 34136 | 9.44397283531409 should_pass/test_contracts/return_struct | 4584 | 3328 | 27.3996509598604 should_pass/test_contracts/array_of_structs_contract | 4200 | 3680 | 12.3809523809524 should_pass/test_contracts/auth_testing_contract | 952 | 952 | 0 should_pass/test_contracts/issue_1512_repro | 2704 | 2528 | 6.50887573964497 should_pass/test_contracts/abi_with_same_name_types | 1504 | 1416 | 5.85106382978723 should_pass/test_contracts/context_testing_contract | 4672 | 4240 | 9.24657534246575 should_pass/test_contracts/storage_namespace | 41312 | 33744 | 18.3191324554609 should_pass/test_contracts/increment_contract | 4504 | 4248 | 5.68383658969805 should_pass/test_contracts/multiple_impl | 1512 | 1240 | 17.989417989418 should_pass/test_contracts/abi_with_tuples_contract | 1936 | 1936 | 0 should_pass/test_contracts/contract_with_type_aliases | 4032 | 4032 | 0 should_pass/test_contracts/test_fuel_coin_contract | 4144 | 3400 | 17.953667953668 should_pass/test_contracts/storage_enum_contract | 24560 | 20744 | 15.5374592833876 should_pass/test_contracts/balance_test_contract | 952 | 952 | 0 should_pass/evm/evm_basic | 176 | 176 | 0 should_pass/blanket_impl_u16 | 288 | 288 | 0 should_pass/empty_fields_in_storage_struct | 31224 | 31224 | 0 should_pass/forc/dependency_package_field | 272 | 272 | 0 should_pass/forc/workspace_building | 24 | 24 | 0 should_pass/forc/parent_pkg_manifest/contract_a | 960 | 960 | 0 should_pass/forc/dependency_patching | 272 | 272 | 0 should_pass/forc/contract_dependencies/contract_c | 960 | 960 | 0 should_pass/forc/contract_dependencies/contract_b | 960 | 960 | 0 should_pass/forc/contract_dependencies/contract_a | 1104 | 1104 | 0 should_pass/conditional_compilation/run | 288 | 288 | 0 should_pass/language/where_clause_functions | 2216 | 2072 | 6.49819494584837 should_pass/language/basic_func_decl | 272 | 272 | 0 should_pass/language/associated_const_trait_impl_method | 296 | 296 | 0 should_pass/language/left_to_right_func_args_evaluation | 304 | 304 | 0 should_pass/language/out_of_order_decl | 280 | 280 | 0 should_pass/language/where_clause_traits | 264 | 264 | 0 should_pass/language/references/reassigning_via_references_passed_and_returned_to_and_from_functions | 41144 | 39816 | 3.22768811977445 should_pass/language/references/reassigning_via_references_in_aggregates | 5696 | 5176 | 9.12921348314607 should_pass/language/references/referencing_function_parameters | 4584 | 3936 | 14.1361256544503 should_pass/language/references/referencing_expressions | 8840 | 7960 | 9.95475113122172 should_pass/language/references/references_and_type_aliases | 792 | 712 | 10.1010101010101 should_pass/language/references/references_in_asm_blocks | 2592 | 2192 | 15.4320987654321 should_pass/language/references/mutability_of_references | 1392 | 904 | 35.0574712643678 should_pass/language/references/dereferencing_operator_dot_on_tuples | 135552 | 125072 | 7.73135033050047 should_pass/language/references/passing_and_returning_references_to_and_from_functions | 19224 | 15968 | 16.9371618809821 should_pass/language/references/type_unification_of_references | 3984 | 3432 | 13.855421686747 should_pass/language/references/dereferencing_control_flow_expressions | 1672 | 1168 | 30.1435406698565 should_pass/language/references/referencing_parts_of_aggregates | 7144 | 6928 | 3.02351623740202 should_pass/language/references/dereferencing_operator_index | 99032 | 92480 | 6.61604329913563 should_pass/language/references/dereferencing_operator_star | 173776 | 151312 | 12.9269864653347 should_pass/language/references/reassigning_via_references_to_values | 14840 | 14184 | 4.42048517520216 should_pass/language/references/referencing_references | 1512 | 1104 | 26.984126984127 should_pass/language/references/references_in_aggregates | 4504 | 3904 | 13.3214920071048 should_pass/language/references/referencing_control_flow_expressions | 1080 | 792 | 26.6666666666667 should_pass/language/references/references_and_generics | 3744 | 3560 | 4.91452991452992 should_pass/language/references/reassigning_via_references_to_expressions | 42600 | 37352 | 12.3192488262911 should_pass/language/references/dereferencing_operator_dot_on_structs | 135552 | 125072 | 7.73135033050047 should_pass/language/references/impl_reference_types | 8264 | 7896 | 4.45304937076476 should_pass/language/references/referencing_local_vars_and_values | 40104 | 36456 | 9.09634949132256 should_pass/language/integer_type_inference | 1512 | 1512 | 0 should_pass/language/numeric_constants | 632 | 272 | 56.9620253164557 should_pass/language/mutable_arrays_struct | 288 | 288 | 0 should_pass/language/same_const_name_lib | 24 | 24 | 0 should_pass/language/associated_type_iterator | 2152 | 1960 | 8.92193308550186 should_pass/language/match_expressions_unreachable_last_arm | 2968 | 2968 | 0 should_pass/language/multi_item_import | 264 | 264 | 0 should_pass/language/ref_mutable_arrays_inline | 288 | 288 | 0 should_pass/language/u256/u256_abi | 1072 | 768 | 28.3582089552239 should_pass/language/u256/u256_operators | 6008 | 6008 | 0 should_pass/language/module_dep | 24 | 24 | 0 should_pass/language/generic_inside_generic | 376 | 376 | 0 should_pass/language/associated_const_trait_method | 296 | 296 | 0 should_pass/language/struct_instantiation | 2536 | 2320 | 8.51735015772871 should_pass/language/module_dep_multiple | 24 | 24 | 0 should_pass/language/method_indirect_inference | 552 | 552 | 0 should_pass/language/where_clause_generic_tuple | 280 | 280 | 0 should_pass/language/generic_impl_self | 2848 | 2688 | 5.61797752808989 should_pass/language/retd_struct | 728 | 728 | 0 should_pass/language/fallback_only | 2256 | 1672 | 25.886524822695 should_pass/language/generic_impl_self_where | 2544 | 2392 | 5.9748427672956 should_pass/language/chained_if_let | 400 | 400 | 0 should_pass/language/test_multiple_attributes | 24 | 24 | 0 should_pass/language/generic_type_inference | 4024 | 3408 | 15.3081510934394 should_pass/language/blanket_trait | 272 | 272 | 0 should_pass/language/retd_zero_len_array | 176 | 176 | 0 should_pass/language/asm_expr_basic | 496 | 416 | 16.1290322580645 should_pass/language/associated_const_impl_local_same_name | 296 | 296 | 0 should_pass/language/unit_type_variants | 624 | 624 | 0 should_pass/language/generic_struct | 288 | 288 | 0 should_pass/language/binary_and_hex_literals | 272 | 272 | 0 should_pass/language/trait_method_qualified | 488 | 272 | 44.2622950819672 should_pass/language/ops | 6072 | 376 | 93.8076416337286 should_pass/language/generic_result_method | 720 | 656 | 8.88888888888889 should_pass/language/tuple_field_reassignment | 488 | 488 | 0 should_pass/language/associated_const_impl_self | 296 | 296 | 0 should_pass/language/predicate_while | 80 | 80 | 0 should_pass/language/retd_small_array | 384 | 384 | 0 should_pass/language/insert_element_reg_reuse | 3336 | 2464 | 26.1390887290168 should_pass/language/args_on_stack | 1656 | 1600 | 3.38164251207729 should_pass/language/where_clause_methods | 2264 | 2104 | 7.06713780918728 should_pass/language/tuple_trait | 368 | 368 | 0 should_pass/language/ref_mutable_fn_args_struct_assign | 280 | 280 | 0 should_pass/language/for_loops | 5104 | 4456 | 12.6959247648903 should_pass/language/zero_field_types | 288 | 288 | 0 should_pass/language/method_on_empty_struct | 272 | 272 | 0 should_pass/language/largeint_sroa | 776 | 776 | 0 should_pass/language/nested_while_and_if | 400 | 400 | 0 should_pass/language/generic_functions | 272 | 272 | 0 should_pass/language/configurable_consts | 15128 | 13448 | 11.1052353252248 should_pass/language/associated_const_trait | 296 | 296 | 0 should_pass/language/eq_intrinsic | 816 | 288 | 64.7058823529412 should_pass/language/match_expressions_unreachable_middle_arm | 3376 | 3376 | 0 should_pass/language/use_full_path_names | 296 | 296 | 0 should_pass/language/associated_const_abi_default | 296 | 296 | 0 should_pass/language/struct_field_reassignment | 272 | 272 | 0 should_pass/language/builtin_type_method_call | 288 | 288 | 0 should_pass/language/far_jumps/single_blob | 1048896 | 1048896 | 0 should_pass/language/far_jumps/many_blobs | 11640520 | 11640520 | 0 should_pass/language/gtf_intrinsic | 696 | 624 | 10.3448275862069 should_pass/language/diverging_exprs | 1944 | 1104 | 43.2098765432099 should_pass/language/mut_ref_empty_type | 880 | 712 | 19.0909090909091 should_pass/language/nested_struct_destructuring | 272 | 272 | 0 should_pass/language/trait_nested | 832 | 832 | 0 should_pass/language/many_stack_variables | 936 | 936 | 0 should_pass/language/abort_control_flow_good | 48 | 48 | 0 should_pass/language/test_attribute | 24 | 24 | 0 should_pass/language/use_absolute_path | 272 | 272 | 0 should_pass/language/import_with_different_callpaths | 2856 | 2696 | 5.60224089635854 should_pass/language/raw_ptr/vec_ret | 1072 | 1072 | 0 should_pass/language/raw_ptr/raw_ptr_ret ... | | | #DIV/0! should_pass/language/where_clause_structs | 608 | 536 | 11.8421052631579 should_pass/language/aliased_imports | 328 | 328 | 0 should_pass/language/prelude_access | 176 | 176 | 0 should_pass/language/match_expressions_nested | 1912 | 1744 | 8.78661087866109 should_pass/language/b256_bitwise_ops | 6320 | 6800 | -7.59493670886076 should_pass/language/empty_method_initializer | 936 | 936 | 0 should_pass/language/main_args/main_args_ref | 296 | 296 | 0 should_pass/language/main_args/main_args_various_types | 2424 | 2352 | 2.97029702970297 should_pass/language/main_args/main_args_empty | 288 | 288 | 0 should_pass/language/main_args/main_args_two_u64 | 416 | 416 | 0 should_pass/language/main_args/main_args_generics | 968 | 968 | 0 should_pass/language/main_args/main_args_one_u64 | 288 | 288 | 0 should_pass/language/main_args/main_args_ref_ref | 528 | 464 | 12.1212121212121 should_pass/language/main_args/main_args_ref_copy | 432 | 432 | 0 should_pass/language/enum_padding | 1560 | 1560 | 0 should_pass/language/associated_const_abi | 296 | 296 | 0 should_pass/language/local_impl_for_ord | 272 | 272 | 0 should_pass/language/associated_const_trait_default | 304 | 304 | 0 should_pass/language/enum_init_fn_call | 616 | 544 | 11.6883116883117 should_pass/language/diagnose_unknown_annotations | 1480 | 1480 | 0 should_pass/language/import_method_from_other_file | 720 | 656 | 8.88888888888889 should_pass/language/match_expressions_or | 10424 | 9528 | 8.59554873369148 should_pass/language/struct_destructuring | 400 | 400 | 0 should_pass/language/import_star_name_clash | 2656 | 2544 | 4.21686746987952 should_pass/language/mutable_arrays_multiple_nested | 272 | 272 | 0 should_pass/language/logging | 3480 | 3344 | 3.90804597701149 should_pass/language/is_reference_type | 800 | 272 | 66 should_pass/language/non_literal_const_decl | 288 | 288 | 0 should_pass/language/array_basics | 800 | 800 | 0 should_pass/language/generic_where_in_impl_self | 464 | 464 | 0 should_pass/language/supertraits_with_trait_methods | 352 | 352 | 0 should_pass/language/tuple_in_struct | 792 | 680 | 14.1414141414141 should_pass/language/impl_self_method | 304 | 304 | 0 should_pass/language/match_expressions_rest | 1888 | 1768 | 6.35593220338983 should_pass/language/tuple_types | 304 | 304 | 0 should_pass/language/impl_self_method_order | 304 | 304 | 0 should_pass/language/enum_if_let | 808 | 728 | 9.9009900990099 should_pass/language/match_expressions | 1120 | 872 | 22.1428571428571 should_pass/language/basic_predicate | 48 | 48 | 0 should_pass/language/new_allocator_test | 960 | 824 | 14.1666666666667 should_pass/language/op_precedence | 264 | 264 | 0 should_pass/language/enum_if_let_large_type | 672 | 672 | 0 should_pass/language/is_prime | 1280 | 1168 | 8.75 should_pass/language/method_unambiguous | 576 | 512 | 11.1111111111111 should_pass/language/match_expressions_structs | 392 | 392 | 0 should_pass/language/match_expressions_with_self | 480 | 416 | 13.3333333333333 should_pass/language/ref_mutable_fn_args_call | 296 | 296 | 0 should_pass/language/array_generics | 352 | 352 | 0 should_pass/language/smo | 1880 | 1880 | 0 should_pass/language/typeinfo_custom_callpath2 | 224 | 224 | 0 should_pass/language/where_clause_generic_traits | 1144 | 872 | 23.7762237762238 should_pass/language/mutable_arrays_enum | 344 | 344 | 0 should_pass/language/ref_mutable_fn_args_bool | 296 | 296 | 0 should_pass/language/supertraits | 8168 | 7224 | 11.5572967678746 should_pass/language/const_inits | 2592 | 1832 | 29.320987654321 should_pass/language/tuple_access | 424 | 424 | 0 should_pass/language/trait_method_generic_qualified | 392 | 392 | 0 should_pass/language/associated_type_parameter | 296 | 296 | 0 should_pass/language/tuple_single_element | 320 | 320 | 0 should_pass/language/bool_and_or | 328 | 328 | 0 should_pass/language/associated_type_fully_qualified | 1288 | 552 | 57.1428571428571 should_pass/language/associated_type_container | 2064 | 1872 | 9.30232558139535 should_pass/language/contract_caller_dynamic_address | 1760 | 1760 | 0 should_pass/language/module_dep_self | 24 | 24 | 0 should_pass/language/name_resolution_after_monomorphization | 320 | 320 | 0 should_pass/language/associated_type_container_in_library | 2064 | 1872 | 9.30232558139535 should_pass/language/type_alias | 3920 | 3768 | 3.87755102040816 should_pass/language/mutable_arrays_swap | 288 | 288 | 0 should_pass/language/break_and_continue_block_ret | 40 | 40 | 0 should_pass/language/main_returns_unit | 176 | 176 | 0 should_pass/language/unary_not_basic_2 | 272 | 272 | 0 should_pass/language/mutable_and_initd | 376 | 376 | 0 should_pass/language/method_type_args | 176 | 176 | 0 should_pass/language/raw_identifiers | 400 | 400 | 0 should_pass/language/mega_example | 10624 | 9712 | 8.58433734939759 should_pass/language/match_expressions_constants | 744 | 424 | 43.010752688172 should_pass/language/generic_structs | 568 | 568 | 0 should_pass/language/predicate_while_dep | 80 | 80 | 0 should_pass/language/unary_not_basic | 272 | 272 | 0 should_pass/language/b256_ops | 4312 | 3792 | 12.0593692022263 should_pass/language/const_decl_with_call_path | 528 | 488 | 7.57575757575758 should_pass/language/generic_where_in_impl_self2 | 464 | 464 | 0 should_pass/language/const_decl_literal | 288 | 288 | 0 should_pass/language/reassignment_operators | 496 | 272 | 45.1612903225806 should_pass/language/attributes_warnings | 176 | 176 | 0 should_pass/language/mutable_arrays | 288 | 288 | 0 should_pass/language/match_expressions_unreachable_catch_all_last_arm | 2184 | 2184 | 0 should_pass/language/memcpy | 424 | 424 | 0 should_pass/language/deprecated | 24 | 24 | 0 should_pass/language/ret_string_in_struct | 344 | 344 | 0 should_pass/language/enum_destructuring | 344 | 344 | 0 should_pass/language/associated_type_and_associated_const | 296 | 296 | 0 should_pass/language/associated_type_method | 296 | 296 | 0 should_pass/language/implicit_casting | 288 | 288 | 0 should_pass/language/where_clause_enums | 768 | 696 | 9.375 should_pass/language/valid_impurity | 1024 | 960 | 6.25 should_pass/language/contract_caller_as_ret | 960 | 960 | 0 should_pass/language/associated_type_ascription | 296 | 296 | 0 should_pass/language/match_expressions_inside_generic_functions | 816 | 488 | 40.1960784313726 should_pass/language/str_slice | 360 | 360 | 0 should_pass/language/match_expressions_explicit_rets | 272 | 272 | 0 should_pass/language/binop_intrinsics | 1344 | 288 | 78.5714285714286 should_pass/language/match_expressions_mismatched | 344 | 344 | 0 should_pass/language/funcs_with_generic_types | 272 | 272 | 0 should_pass/language/trait_import_with_star | 184 | 184 | 0 should_pass/language/match_expressions_unreachable_catch_all_middle_arm | 1840 | 1832 | 0.434782608695652 should_pass/language/if_let_no_side_effects | 496 | 432 | 12.9032258064516 should_pass/language/b256_bad_jumps | 272 | 272 | 0 should_pass/language/bitwise_not | 440 | 272 | 38.1818181818182 should_pass/language/dummy_method_issue | 448 | 448 | 0 should_pass/language/prelude_access2 | 176 | 176 | 0 should_pass/language/enum_in_fn_decl | 368 | 368 | 0 should_pass/language/enum_type_inference | 288 | 288 | 0 should_pass/language/size_of | 496 | 272 | 45.1612903225806 should_pass/language/associated_const_impl_self_order | 296 | 296 | 0 should_pass/language/const_decl_and_use_in_library | 288 | 288 | 0 should_pass/language/typeinfo_custom_callpath | 224 | 224 | 0 should_pass/language/struct_init_reorder | 280 | 280 | 0 should_pass/language/tuple_desugaring | 360 | 360 | 0 should_pass/language/match_expressions_simple | 432 | 400 | 7.40740740740741 should_pass/language/inline_if_expr_const | 176 | 176 | 0 should_pass/language/associated_const_impl_multiple | 296 | 296 | 0 should_pass/language/enum_variant_imports | 472 | 392 | 16.9491525423729 should_pass/language/if_elseif_enum | 720 | 720 | 0 should_pass/language/where_clause_impls | 736 | 560 | 23.9130434782609 should_pass/language/generic_tuple_trait | 912 | 808 | 11.4035087719298 should_pass/language/mutable_arrays_nested | 272 | 272 | 0 should_pass/language/generic_traits | 1488 | 1416 | 4.83870967741936 should_pass/language/associated_const_impl | 296 | 296 | 0 should_pass/language/modulo_uint_test | 536 | 272 | 49.2537313432836 should_pass/language/implicit_return | 288 | 288 | 0 should_pass/language/fqp_in_lib | 296 | 296 | 0 should_pass/language/retd_b256 | 360 | 360 | 0 should_pass/language/generic_transpose | 928 | 864 | 6.89655172413793 should_pass/language/complex_cfg | 912 | 912 | 0 should_pass/language/struct_field_access | 280 | 280 | 0 should_pass/language/redundant_return | 272 | 272 | 0 should_pass/language/asm_without_return | 184 | 184 | 0 should_pass/language/associated_const_abi_multiple | 296 | 296 | 0 should_pass/language/while_loops | 624 | 552 | 11.5384615384615 should_pass/language/same_const_name | 848 | 248 | 70.7547169811321 should_pass/language/self_impl_reassignment | 1040 | 960 | 7.69230769230769 should_pass/language/reassignment_rhs_lhs_evaluation_order | 1240 | 872 | 29.6774193548387 should_pass/language/associated_const_trait_const | 272 | 272 | 0 should_pass/language/match_expressions_enums | 3728 | 3488 | 6.43776824034335 should_pass/language/smo_opcode | 352 | 352 | 0 should_pass/language/import_trailing_comma | 280 | 280 | 0 should_pass/language/enum_instantiation | 4368 | 3744 | 14.2857142857143 should_pass/language/trait_method_ascription_disambiguate | 392 | 392 | 0 should_pass/language/eq_and_neq | 2648 | 2008 | 24.1691842900302 should_pass/language/tuple_indexing | 296 | 296 | 0 should_pass/language/ref_mutable_fn_args_struct | 288 | 288 | 0 should_pass/language/revert_in_first_if_branch | 48 | 48 | 0 should_pass/language/ref_mutable_arrays | 288 | 288 | 0 should_pass/language/nested_structs | 1416 | 1240 | 12.4293785310734 should_pass/language/typeinfo_custom_callpath_with_import | 240 | 240 | 0 should_pass/language/multi_impl_self | 288 | 288 | 0 should_pass/language/generic_struct_instantiation | 272 | 272 | 0 should_pass/language/generic_trait_constraints | 1264 | 1064 | 15.8227848101266 should_pass/language/primitive_type_argument | 288 | 288 | 0 should_pass/language/fix_opcode_bug | 288 | 288 | 0 should_pass/language/arg_demotion_inline | 1152 | 1152 | 0 should_pass/language/ret_small_string | 304 | 304 | 0 should_pass/language/doc_comments | 952 | 952 | 0 should_pass/language/match_expressions_empty_enums | 288 | 288 | 0 should_pass/language/const_decl_in_library | 312 | 304 | 2.56410256410256 should_pass/language/generics_in_contract | 4688 | 3608 | 23.037542662116 should_pass/language/if_implicit_unit | 176 | 176 | 0 should_pass/language/impure_ifs | 1312 | 1080 | 17.6829268292683 should_pass/language/break_and_continue | 960 | 888 | 7.5 should_pass/language/ref_mutable_fn_args_u32 | 320 | 320 | 0 should_pass/storage_into | 2256 | 1704 | 24.468085106383 should_pass/resolve_local_items_that_shadow_imports | 320 | 320 | 0 should_pass/break_in_strange_positions | 1184 | 768 | 35.1351351351351 should_pass/multiple_supertraits_for_abis | 2048 | 1864 | 8.984375 should_pass/continue_in_strange_positions | 1472 | 1344 | 8.69565217391304 should_pass/supertraits_for_abis_diamond | 2072 | 1888 | 8.88030888030888 should_pass/superabi_diamond | 2064 | 1880 | 8.91472868217054 should_pass/supertraits_via_self | 160 | 160 | 0 should_pass/supertraits_for_abis | 1800 | 1616 | 10.2222222222222 should_pass/dca/alias_type_ascription | 176 | 176 | 0 should_pass/dca/alias_type_ascription_generic | 176 | 176 | 0 should_pass/dca/constant_decl_expr | 288 | 288 | 0 should_pass/dca/impl_unused_fn | 296 | 296 | 0 should_pass/dca/log_stdlib | 752 | 752 | 0 should_pass/dca/unused_trait | 176 | 176 | 0 should_pass/dca/impl_self_alias | 176 | 176 | 0 should_pass/dca/impl_trait_single | 272 | 272 | 0 should_pass/dca/trait_method | 176 | 176 | 0 should_pass/dca/unused_free_fn | 176 | 176 | 0 should_pass/dca/unused_variable_in_free_fn | 176 | 176 | 0 should_pass/dca/revert | 32 | 32 | 0 should_pass/dca/unused_variable | 176 | 176 | 0 should_pass/dca/impl_trait_multiple | 272 | 272 | 0 should_pass/dca/contract/superabi_contract_calls | 2648 | 1872 | 29.3051359516616 should_pass/dca/contract/unused_struct_field | 1216 | 1216 | 0 should_pass/dca/contract/unused_struct_field_enum | 1472 | 1472 | 0 should_pass/dca/contract/abi_fn_params | 1712 | 1440 | 15.8878504672897 should_pass/dca/contract/unused_struct_field_array | 1296 | 1296 | 0 should_pass/dca/contract/unused_struct_field_tuple | 1216 | 1216 | 0 should_pass/dca/unused_struct | 176 | 176 | 0 should_pass/dca/func_param | 176 | 176 | 0 should_pass/dca/alias_unused | 176 | 176 | 0 should_pass/dca/multiple_fns_same_name | 176 | 176 | 0 should_pass/dca/allow_dead_code | 176 | 176 | 0 should_pass/dca/trait_method_neq | 368 | 368 | 0 should_pass/dca/all_paths_return | 272 | 272 | 0 should_pass/dca/unused_fields | 272 | 272 | 0 should_pass/dca/impl_self_alias2 | 176 | 176 | 0 should_pass/dca/alias_lib | 232 | 232 | 0 should_pass/dca/multiple_enums_same_name | 176 | 176 | 0 should_pass/dca/generic_fn_trait_constraint | 176 | 176 | 0 should_pass/dca/library/fn_params_impl | 24 | 24 | 0 should_pass/dca/library/fn_params_free | 24 | 24 | 0 should_pass/dca/library/unused_priv_free_fn | 24 | 24 | 0 should_pass/dca/library/unused_pub_free_fn | 24 | 24 | 0 should_pass/dca/library/fn_params_trait | 24 | 24 | 0 should_pass/dca/reassignment_lhs | 200 | 200 | 0 should_pass/dca/constant_while | 176 | 176 | 0 should_pass/dca/constant_struct | 288 | 288 | 0 should_pass/dca/unused_enum | 176 | 176 | 0 should_pass/dca/impl_self | 176 | 176 | 0 should_pass/dca/log_intrinsic | 752 | 752 | 0 should_pass/dca/struct_field_no_warning | 296 | 296 | 0 should_pass/dca/trait_method_lib | 24 | 24 | 0 should_pass/supertraits_for_abis_ownable | 9968 | 8184 | 17.8972712680578 should_pass/return_into | 1352 | 880 | 34.9112426035503 should_pass/unit_tests/script_multi_test | 728 | 728 | 0 should_pass/unit_tests/nested_libs | 1248 | 1248 | 0 should_pass/unit_tests/contract_multi_test | 4480 | 4480 | 0 should_pass/unit_tests/script-contract-calls | 1424 | 1424 | 0 should_pass/unit_tests/lib_single_test | 112 | 112 | 0 should_pass/unit_tests/aggr_indexing | 7728 | 7728 | 0 should_pass/unit_tests/log_decode | 1048 | 1048 | 0 should_pass/unit_tests/workspace_test | 728 | 728 | 0 should_pass/unit_tests/predicate_with_nested_libs | 608 | 608 | 0 should_pass/unit_tests/script_with_nested_libs | 1376 | 1376 | 0 should_pass/unit_tests/should_revert | 160 | 160 | 0 should_pass/unit_tests/contract_with_nested_libs | 2480 | 2480 | 0 should_pass/unit_tests/stack_indexing_overflow | 5096 | 5096 | 0 should_pass/unit_tests/lib_multi_test | 1080 | 1080 | 0 should_pass/unit_tests/contract-multi-contract-calls | 1424 | 1424 | 0 should_pass/unit_tests/predicate_multi_test | 264 | 264 | 0 should_pass/unit_tests/regalloc_spill | 672 | 672 | 0 should_pass/blanket_impl | 288 | 288 | 0 should_pass/non_payable_implicit_zero_coins | 1864 | 1864 | 0 should_pass/test_abis/abi_impl_methods_in_json_abi | 1576 | 1392 | 11.6751269035533 should_pass/test_abis/abi_impl_methods_callable | 2856 | 2856 | 0 should_pass/static_analysis/cei_pattern_violation_in_struct | 4216 | 2816 | 33.2068311195446 should_pass/static_analysis/cei_pattern_violation | 3688 | 2520 | 31.6702819956616 should_pass/static_analysis/cei_pattern_violation_in_match_statement-1 | 4696 | 3168 | 32.5383304940375 should_pass/static_analysis/cei_pattern_violation_in_if_statement-2 | 4216 | 2816 | 33.2068311195446 should_pass/static_analysis/cei_pattern_violation_in_while_loop-1 | 4048 | 2648 | 34.5849802371541 should_pass/static_analysis/cei_pattern_violation_in_while_loop-3 | 4048 | 2648 | 34.5849802371541 should_pass/static_analysis/cei_pattern_violation_storage_var_read | 4480 | 3000 | 33.0357142857143 should_pass/static_analysis/cei_pattern_violation_in_codeblocks_other_than_in_functions | 4216 | 2816 | 33.2068311195446 should_pass/static_analysis/cei_pattern_violation_in_func_app-3 | 4216 | 2816 | 33.2068311195446 should_pass/static_analysis/cei_pattern_violation_in_func_app-1 | 4216 | 2816 | 33.2068311195446 should_pass/static_analysis/storage_annotations_unused_write | 944 | 944 | 0 should_pass/static_analysis/cei_pattern_violation_in_asm_block_smo | 3000 | 2168 | 27.7333333333333 should_pass/static_analysis/cei_pattern_violation_in_asm_block | 3024 | 2192 | 27.5132275132275 should_pass/static_analysis/cei_pattern_violation_in_intrinsic_call | 4216 | 2816 | 33.2068311195446 should_pass/static_analysis/storage_annotations_unused_read | 944 | 944 | 0 should_pass/static_analysis/cei_pattern_violation_storage_map_and_vec | 11136 | 7760 | 30.316091954023 should_pass/static_analysis/cei_pattern_violation_in_asm_block_tro | 4544 | 3328 | 26.7605633802817 should_pass/static_analysis/cei_pattern_violation_in_while_loop-2 | 4048 | 2648 | 34.5849802371541 should_pass/static_analysis/cei_pattern_violation_smo_intrinsic | 3176 | 2256 | 28.9672544080605 should_pass/static_analysis/storage_annotations_unused_read_and_write | 944 | 944 | 0 should_pass/static_analysis/cei_pattern_violation_in_standalone_function | 3752 | 2520 | 32.8358208955224 should_pass/static_analysis/cei_pattern_violation_in_asm_block_read | 3272 | 2352 | 28.1173594132029 should_pass/static_analysis/cei_pattern_violation_in_while_loop-4 | 4048 | 2648 | 34.5849802371541 should_pass/static_analysis/cei_pattern_violation_in_asm_block_tr | 4544 | 3328 | 26.7605633802817 should_pass/static_analysis/cei_pattern_violation_in_tuple | 4216 | 2816 | 33.2068311195446 should_pass/static_analysis/cei_pattern_violation_in_asm_block_bal | 2976 | 2152 | 27.6881720430107 should_pass/static_analysis/cei_pattern_violation_more_complex_logic | 21008 | 17000 | 19.0784463061691 should_pass/static_analysis/cei_pattern_violation_storage_struct_read | 4280 | 2760 | 35.5140186915888 should_pass/static_analysis/cei_pattern_violation_storage_var_update | 3952 | 2672 | 32.3886639676113 should_pass/static_analysis/cei_pattern_violation_in_if_statement-1 | 4240 | 2840 | 33.0188679245283 should_pass/static_analysis/cei_pattern_violation_in_func_app-2 | 4216 | 2816 | 33.2068311195446 should_pass/superabi | 1576 | 1392 | 11.6751269035533 should_pass/non_payable_zero_coins_let_binding | 1864 | 1864 | 0 should_pass/superabi_diamond_impl | 2064 | 1880 | 8.91472868217054 </details>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Without function deduplication, the heuristic that we have for inlining "if a function is called only once, inline it" isn't good enough because identical functions, after they're combined into one will have multiple callers, which wouldn't be so without fndedup.