mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-01 03:03:40 +00:00
Rollup merge of #91266 - jam1garner:fmt-ptr-fix, r=dtolnay
Use non-generic inner function for pointer formatting Previously, despite the implementation being type-unaware, `fmt::Pointer`'s implementation for `*const T` in monomorphized. This affects: * `fmt::Debug` for `*const T` * `fmt::Debug` for `*mut T` * `fmt::Pointer` for `*const T` * `fmt::Pointer` for `*mut T` And since the implementation is non-trivial, this results in a large amount of LLVM bitcode being generated. For example, with a large bindgen project with Debug implementations enabled, it will generate a lot of calls to `fmt::Debug for *const T`, which in turn will perform codegen for a copy of this function for every type. For example, in a real-world bindgen'd header I've been testing with (4,189,245 lines of bindgen Rust with layout tests disabled) the difference between a slightly old nightly (`rustc 1.58.0-nightly (e249ce6b2
2021-10-30)`) and this PR: <details> <summary>Nightly (Click to Expand)</summary> ``` Lines Copies Function name ----- ------ ------------- 7256000 (100%) 216544 (100%) (TOTAL) 1815449 (25.0%) 24206 (11.2%) <*const T as core::fmt::Pointer>::fmt 300248 (4.1%) 29579 (13.7%) <&T as core::fmt::Debug>::fmt 290328 (4.0%) 24194 (11.2%) <*mut T as core::fmt::Pointer>::fmt 217746 (3.0%) 24194 (11.2%) <*mut T as core::fmt::Debug>::fmt 123329 (1.7%) 1486 (0.7%) core::fmt::builders::DebugList::entries 72790 (1.0%) 1486 (0.7%) core::slice::iter::Iter<T>::post_inc_start 71313 (1.0%) 1486 (0.7%) core::slice::iter::Iter<T>::new 68329 (0.9%) 1486 (0.7%) <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next 38636 (0.5%) 1486 (0.7%) <[T] as core::fmt::Debug>::fmt 26874 (0.4%) 1493 (0.7%) core::array::<impl core::fmt::Debug for [T; N]>::fmt 22290 (0.3%) 1486 (0.7%) core::slice::index::<impl core::ops::index::Index<I> for [T]>::index 19407 (0.3%) 1493 (0.7%) core::array::<impl core::ops::index::Index<I> for [T; N]>::index 19318 (0.3%) 1486 (0.7%) core::slice::<impl [T]>::iter 17832 (0.2%) 1486 (0.7%) core::ptr::const_ptr::<impl *const T>::offset 17832 (0.2%) 1486 (0.7%) core::ptr::mut_ptr::<impl *mut T>::offset 16346 (0.2%) 1486 (0.7%) <core::ops::range::RangeFull as core::slice::index::SliceIndex<[T]>>::index 13374 (0.2%) 1486 (0.7%) <I as core::iter::traits::collect::IntoIterator>::into_iter 13374 (0.2%) 1486 (0.7%) core::ptr::const_ptr::<impl *const T>::add 13371 (0.2%) 1486 (0.7%) core::ptr::const_ptr::<impl *const T>::is_null 13371 (0.2%) 1486 (0.7%) core::ptr::mut_ptr::<impl *mut T>::is_null 11888 (0.2%) 1486 (0.7%) core::slice::<impl [T]>::as_ptr 11879 (0.2%) 1486 (0.7%) core::ptr::non_null::NonNull<T>::new_unchecked 7421 (0.1%) 1486 (0.7%) core::ptr::non_null::NonNull<T>::as_ptr ``` </details> <details> <summary>This PR (Click to Expand)</summary> ``` Lines Copies Function name ----- ------ ------------- 5684504 (100%) 216542 (100%) (TOTAL) 300248 (5.3%) 29579 (13.7%) <&T as core::fmt::Debug>::fmt 290328 (5.1%) 24194 (11.2%) <*mut T as core::fmt::Pointer>::fmt 266265 (4.7%) 24206 (11.2%) <*const T as core::fmt::Pointer>::fmt 217746 (3.8%) 24194 (11.2%) <*mut T as core::fmt::Debug>::fmt 101039 (1.8%) 1486 (0.7%) core::fmt::builders::DebugList::entries 72790 (1.3%) 1486 (0.7%) core::slice::iter::Iter<T>::post_inc_start 71313 (1.3%) 1486 (0.7%) core::slice::iter::Iter<T>::new 68329 (1.2%) 1486 (0.7%) <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next 38636 (0.7%) 1486 (0.7%) <[T] as core::fmt::Debug>::fmt 26874 (0.5%) 1493 (0.7%) core::array::<impl core::fmt::Debug for [T; N]>::fmt 22290 (0.4%) 1486 (0.7%) core::slice::index::<impl core::ops::index::Index<I> for [T]>::index 19407 (0.3%) 1493 (0.7%) core::array::<impl core::ops::index::Index<I> for [T; N]>::index 19318 (0.3%) 1486 (0.7%) core::slice::<impl [T]>::iter 17832 (0.3%) 1486 (0.7%) core::ptr::const_ptr::<impl *const T>::offset 17832 (0.3%) 1486 (0.7%) core::ptr::mut_ptr::<impl *mut T>::offset 16346 (0.3%) 1486 (0.7%) <core::ops::range::RangeFull as core::slice::index::SliceIndex<[T]>>::index 13374 (0.2%) 1486 (0.7%) <I as core::iter::traits::collect::IntoIterator>::into_iter 13374 (0.2%) 1486 (0.7%) core::ptr::const_ptr::<impl *const T>::add 13371 (0.2%) 1486 (0.7%) core::ptr::const_ptr::<impl *const T>::is_null 13371 (0.2%) 1486 (0.7%) core::ptr::mut_ptr::<impl *mut T>::is_null 11888 (0.2%) 1486 (0.7%) core::slice::<impl [T]>::as_ptr 11879 (0.2%) 1486 (0.7%) core::ptr::non_null::NonNull<T>::new_unchecked 7421 (0.1%) 1486 (0.7%) core::ptr::non_null::NonNull<T>::as_ptr ``` </details> Output generated using `cargo llvm-lines` version 0.4.12. Summary of differences: | rustc Version | Total LLVM line count | `*const T as fmt::Pointer` LLVM lines | Compilation Time | |-|-|-|-| | `nightly` | 7256000 | 1815449 (25.0% of binary) | 537.014 | | PR | 5684504 (-21.65%) | 266265 (4.7% of binary) (-85.3% from nightly) | 502.990 | This results in a pretty noticeable as the majority of rustc's time is spent in either codegen or LLVM, in this case, and is significantly improved by disabling derives for `fmt::Debug`, as it prevents generating all this LLVM IR to be handled. Here's a run time comparison with nightly on the same codebase (commit454cc5fb
built from source vs37c8f25
from my PR built from source): <details> <summary>nightly (Click to Expand)</summary> ``` time: 2.370; rss: 56MB -> 1118MB (+1062MB) parse_crate time: 0.000; rss: 1118MB -> 1118MB ( +0MB) attributes_injection time: 0.000; rss: 1118MB -> 1118MB ( +0MB) incr_comp_prepare_session_directory time: 0.000; rss: 1118MB -> 1118MB ( +0MB) incr_comp_garbage_collect_session_directories time: 0.000; rss: 1120MB -> 1120MB ( +0MB) plugin_loading time: 0.000; rss: 1120MB -> 1120MB ( +0MB) plugin_registration time: 0.000; rss: 1120MB -> 1120MB ( +0MB) crate_injection time: 13.897; rss: 1120MB -> 3147MB (+2027MB) expand_crate time: 0.002; rss: 3147MB -> 3147MB ( +0MB) check_unused_macros time: 13.900; rss: 1120MB -> 3147MB (+2027MB) macro_expand_crate time: 0.002; rss: 3147MB -> 3147MB ( +0MB) maybe_building_test_harness time: 0.503; rss: 3147MB -> 3147MB ( +0MB) AST_validation time: 0.000; rss: 3147MB -> 3147MB ( +0MB) maybe_create_a_macro_crate time: 0.002; rss: 3147MB -> 3147MB ( +0MB) finalize_imports time: 0.502; rss: 3147MB -> 3153MB ( +6MB) finalize_macro_resolutions time: 4.478; rss: 3153MB -> 3574MB ( +420MB) late_resolve_crate time: 0.000; rss: 3574MB -> 3574MB ( +0MB) resolve_main time: 0.332; rss: 3574MB -> 3574MB ( +0MB) resolve_check_unused time: 0.000; rss: 3574MB -> 3574MB ( +0MB) resolve_report_errors time: 0.279; rss: 3574MB -> 3574MB ( +0MB) resolve_postprocess time: 5.595; rss: 3147MB -> 3574MB ( +427MB) resolve_crate time: 0.382; rss: 3574MB -> 3574MB ( +0MB) complete_gated_feature_checking time: 20.526; rss: 1120MB -> 3574MB (+2454MB) configure_and_expand time: 0.000; rss: 3574MB -> 3574MB ( +0MB) prepare_outputs time: 0.000; rss: 3574MB -> 3574MB ( +0MB) blocked_on_dep_graph_loading time: 65.992; rss: 3574MB -> 6317MB (+2743MB) hir_lowering time: 1.117; rss: 6317MB -> 6323MB ( +6MB) early_lint_checks time: 1.447; rss: 6323MB -> 6271MB ( -52MB) drop_ast time: 0.002; rss: 5838MB -> 5838MB ( +0MB) setup_global_ctxt time: 0.000; rss: 5843MB -> 5843MB ( +0MB) looking_for_entry_point time: 0.313; rss: 5843MB -> 5844MB ( +1MB) looking_for_derive_registrar time: 9.652; rss: 5843MB -> 6065MB ( +222MB) misc_checking_1 time: 9.713; rss: 6065MB -> 6769MB ( +704MB) type_collecting time: 0.665; rss: 6769MB -> 6769MB ( +0MB) impl_wf_inference time: 0.064; rss: 6769MB -> 6769MB ( +0MB) unsafety_checking time: 3.095; rss: 6769MB -> 6792MB ( +23MB) coherence_checking time: 21.282; rss: 6792MB -> 7546MB ( +754MB) wf_checking time: 5.404; rss: 7546MB -> 7681MB ( +135MB) item_types_checking time: 79.665; rss: 7681MB -> 8075MB ( +394MB) item_bodies_checking time: 120.166; rss: 6065MB -> 8081MB (+2016MB) type_check_crate time: 2.038; rss: 8081MB -> 8085MB ( +4MB) match_checking time: 1.300; rss: 8085MB -> 8113MB ( +28MB) liveness_and_intrinsic_checking time: 3.338; rss: 8081MB -> 8113MB ( +32MB) misc_checking_2 time: 68.612; rss: 8113MB -> 9285MB (+1172MB) MIR_borrow_checking time: 0.622; rss: 9285MB -> 9301MB ( +17MB) MIR_effect_checking time: 0.000; rss: 9301MB -> 9301MB ( +0MB) layout_testing time: 4.331; rss: 9383MB -> 9510MB ( +127MB) death_checking time: 0.032; rss: 9510MB -> 9510MB ( +0MB) unused_lib_feature_checking time: 4.444; rss: 9510MB -> 9568MB ( +58MB) crate_lints time: 59.563; rss: 9568MB -> 9576MB ( +8MB) module_lints time: 64.006; rss: 9510MB -> 9576MB ( +66MB) lint_checking time: 4.127; rss: 9576MB -> 9639MB ( +62MB) privacy_checking_modules time: 77.984; rss: 9301MB -> 9639MB ( +337MB) misc_checking_3 time: 0.311; rss: 10357MB -> 10357MB ( +0MB) monomorphization_collector_root_collections time: 14.051; rss: 10357MB -> 10573MB ( +217MB) monomorphization_collector_graph_walk time: 1.759; rss: 10573MB -> 10652MB ( +79MB) partition_and_assert_distinct_symbols time: 28.518; rss: 9639MB -> 10711MB (+1072MB) generate_crate_metadata time: 0.000; rss: 10711MB -> 10711MB ( +0MB) find_cgu_reuse time: 63.408; rss: 10711MB -> 12272MB (+1560MB) codegen_to_LLVM_IR time: 64.916; rss: 10711MB -> 12267MB (+1556MB) codegen_crate time: 0.000; rss: 12261MB -> 12261MB ( +0MB) assert_dep_graph time: 0.000; rss: 12261MB -> 12261MB ( +0MB) check_dirty_clean time: 0.664; rss: 12230MB -> 12210MB ( -20MB) encode_query_results_for(rustc_query_impl::queries::type_of) time: 2.111; rss: 12210MB -> 12043MB ( -167MB) encode_query_results_for(rustc_query_impl::queries::generics_of) time: 0.108; rss: 12043MB -> 12057MB ( +14MB) encode_query_results_for(rustc_query_impl::queries::predicates_of) time: 0.004; rss: 12057MB -> 12059MB ( +2MB) encode_query_results_for(rustc_query_impl::queries::mir_const_qualif) time: 0.665; rss: 12059MB -> 12121MB ( +62MB) encode_query_results_for(rustc_query_impl::queries::mir_for_ctfe) time: 16.149; rss: 12121MB -> 12148MB ( +28MB) encode_query_results_for(rustc_query_impl::queries::optimized_mir) time: 0.000; rss: 12148MB -> 12148MB ( +0MB) encode_query_results_for(rustc_query_impl::queries::covered_file_name) time: 0.000; rss: 12148MB -> 12148MB ( +0MB) encode_query_results_for(rustc_query_impl::queries::covered_code_regions) time: 0.010; rss: 12148MB -> 12150MB ( +2MB) encode_query_results_for(rustc_query_impl::queries::promoted_mir) time: 0.052; rss: 12150MB -> 12155MB ( +4MB) encode_query_results_for(rustc_query_impl::queries::unsafety_check_result) time: 0.003; rss: 12155MB -> 12156MB ( +1MB) encode_query_results_for(rustc_query_impl::queries::thir_check_unsafety) time: 11.428; rss: 12156MB -> 11748MB ( -408MB) encode_query_results_for(rustc_query_impl::queries::typeck) time: 0.000; rss: 11748MB -> 11748MB ( +0MB) encode_query_results_for(rustc_query_impl::queries::diagnostic_only_typeck) time: 0.094; rss: 11748MB -> 11756MB ( +8MB) encode_query_results_for(rustc_query_impl::queries::used_trait_imports) time: 0.272; rss: 11756MB -> 11778MB ( +22MB) encode_query_results_for(rustc_query_impl::queries::mir_borrowck) time: 0.054; rss: 11778MB -> 11778MB ( +0MB) encode_query_results_for(rustc_query_impl::queries::eval_to_allocation_raw) time: 0.005; rss: 11778MB -> 11779MB ( +1MB) encode_query_results_for(rustc_query_impl::queries::eval_to_const_value_raw) time: 0.021; rss: 11779MB -> 11784MB ( +5MB) encode_query_results_for(rustc_query_impl::queries::check_match) time: 0.041; rss: 11784MB -> 11786MB ( +2MB) encode_query_results_for(rustc_query_impl::queries::symbol_name) time: 0.743; rss: 11786MB -> 11815MB ( +29MB) encode_query_results_for(rustc_query_impl::queries::codegen_fn_attrs) time: 0.043; rss: 11815MB -> 11816MB ( +1MB) encode_query_results_for(rustc_query_impl::queries::codegen_fulfill_obligation) time: 0.674; rss: 11816MB -> 11840MB ( +25MB) encode_query_results_for(rustc_query_impl::queries::specialization_graph_of) time: 0.000; rss: 11840MB -> 11840MB ( +0MB) encode_query_results_for(rustc_query_impl::queries::adt_drop_tys) time: 0.000; rss: 11840MB -> 11840MB ( +0MB) encode_query_results_for(rustc_query_impl::queries::adt_significant_drop_tys) time: 0.005; rss: 11840MB -> 11841MB ( +1MB) encode_query_results_for(rustc_query_impl::queries::unused_generic_params) time: 33.153; rss: 12232MB -> 11841MB ( -390MB) encode_query_results time: 88.943; rss: 11955MB -> 11783MB ( -173MB) LLVM_passes(crate) time: 38.854; rss: 12259MB -> 10095MB (-2164MB) incr_comp_serialize_result_cache time: 39.030; rss: 12261MB -> 10095MB (-2166MB) incr_comp_persist_result_cache time: 0.000; rss: 10095MB -> 10095MB ( +0MB) incr_comp_persist_dep_graph time: 39.064; rss: 12257MB -> 10095MB (-2162MB) serialize_dep_graph time: 19.047; rss: 10095MB -> 10307MB ( +212MB) free_global_ctxt time: 0.000; rss: 10307MB -> 10307MB ( +0MB) join_worker_thread time: 0.519; rss: 10307MB -> 10307MB ( +0MB) copy_all_cgu_workproducts_to_incr_comp_cache_dir time: 0.522; rss: 10307MB -> 10307MB ( +0MB) finish_ongoing_codegen time: 0.000; rss: 10307MB -> 10307MB ( +0MB) llvm_dump_timing_file time: 0.002; rss: 10307MB -> 10307MB ( +0MB) serialize_work_products time: 0.001; rss: 9542MB -> 9542MB ( +0MB) incr_comp_finalize_session_directory time: 0.000; rss: 9542MB -> 9542MB ( +0MB) link_binary_check_files_are_writeable time: 7.835; rss: 9542MB -> 9544MB ( +2MB) link_rlib time: 0.000; rss: 9544MB -> 9544MB ( +0MB) link_binary_remove_temps time: 7.872; rss: 9542MB -> 9544MB ( +2MB) link_binary time: 7.944; rss: 9542MB -> 9201MB ( -341MB) link_crate time: 8.495; rss: 10307MB -> 9201MB (-1106MB) link time: 537.014; rss: 33MB -> 3715MB (+3682MB) total ``` </details> <details> <summary>This PR (Click to Expand)</summary> ``` time: 2.379; rss: 51MB -> 1116MB (+1064MB) parse_crate time: 0.003; rss: 1116MB -> 1116MB ( +0MB) attributes_injection time: 0.002; rss: 1116MB -> 1116MB ( +0MB) incr_comp_prepare_session_directory time: 0.000; rss: 1116MB -> 1116MB ( +0MB) incr_comp_garbage_collect_session_directories time: 0.000; rss: 1116MB -> 1116MB ( +0MB) plugin_loading time: 0.000; rss: 1116MB -> 1116MB ( +0MB) plugin_registration time: 0.003; rss: 1118MB -> 1118MB ( +0MB) crate_injection time: 13.376; rss: 1118MB -> 3143MB (+2025MB) expand_crate time: 0.002; rss: 3143MB -> 3143MB ( +0MB) check_unused_macros time: 13.379; rss: 1118MB -> 3143MB (+2025MB) macro_expand_crate time: 0.002; rss: 3143MB -> 3143MB ( +0MB) maybe_building_test_harness time: 0.479; rss: 3143MB -> 3143MB ( +0MB) AST_validation time: 0.002; rss: 3143MB -> 3143MB ( +0MB) maybe_create_a_macro_crate time: 0.005; rss: 3143MB -> 3143MB ( +0MB) finalize_imports time: 0.520; rss: 3143MB -> 3125MB ( -18MB) finalize_macro_resolutions time: 4.446; rss: 3125MB -> 3577MB ( +453MB) late_resolve_crate time: 0.000; rss: 3577MB -> 3577MB ( +0MB) resolve_main time: 0.336; rss: 3577MB -> 3577MB ( +0MB) resolve_check_unused time: 0.000; rss: 3577MB -> 3577MB ( +0MB) resolve_report_errors time: 0.295; rss: 3577MB -> 3578MB ( +0MB) resolve_postprocess time: 5.602; rss: 3143MB -> 3578MB ( +435MB) resolve_crate time: 0.388; rss: 3578MB -> 3578MB ( +0MB) complete_gated_feature_checking time: 20.014; rss: 1116MB -> 3578MB (+2462MB) configure_and_expand time: 0.000; rss: 3578MB -> 3578MB ( +0MB) prepare_outputs time: 0.000; rss: 3578MB -> 3578MB ( +0MB) blocked_on_dep_graph_loading time: 64.219; rss: 3578MB -> 6313MB (+2736MB) hir_lowering time: 1.102; rss: 6313MB -> 6319MB ( +6MB) early_lint_checks time: 1.426; rss: 6319MB -> 6268MB ( -52MB) drop_ast time: 0.005; rss: 5834MB -> 5836MB ( +2MB) setup_global_ctxt time: 0.000; rss: 5838MB -> 5838MB ( +0MB) looking_for_entry_point time: 0.292; rss: 5838MB -> 5840MB ( +1MB) looking_for_derive_registrar time: 9.553; rss: 5838MB -> 6060MB ( +222MB) misc_checking_1 time: 9.949; rss: 6060MB -> 6764MB ( +704MB) type_collecting time: 0.630; rss: 6764MB -> 6764MB ( +0MB) impl_wf_inference time: 0.060; rss: 6764MB -> 6764MB ( +0MB) unsafety_checking time: 3.054; rss: 6764MB -> 6787MB ( +23MB) coherence_checking time: 20.702; rss: 6787MB -> 7533MB ( +746MB) wf_checking time: 5.194; rss: 7533MB -> 7668MB ( +135MB) item_types_checking time: 74.677; rss: 7668MB -> 8062MB ( +394MB) item_bodies_checking time: 114.497; rss: 6060MB -> 8068MB (+2008MB) type_check_crate time: 1.891; rss: 8068MB -> 8072MB ( +4MB) match_checking time: 1.292; rss: 8072MB -> 8100MB ( +28MB) liveness_and_intrinsic_checking time: 3.183; rss: 8068MB -> 8100MB ( +32MB) misc_checking_2 time: 68.845; rss: 8100MB -> 9279MB (+1179MB) MIR_borrow_checking time: 0.587; rss: 9279MB -> 9295MB ( +17MB) MIR_effect_checking time: 0.000; rss: 9295MB -> 9295MB ( +0MB) layout_testing time: 4.443; rss: 9377MB -> 9504MB ( +127MB) death_checking time: 0.034; rss: 9504MB -> 9504MB ( +0MB) unused_lib_feature_checking time: 4.409; rss: 9504MB -> 9562MB ( +58MB) crate_lints time: 56.490; rss: 9562MB -> 9571MB ( +8MB) module_lints time: 60.900; rss: 9504MB -> 9571MB ( +66MB) lint_checking time: 4.147; rss: 9571MB -> 9633MB ( +62MB) privacy_checking_modules time: 75.094; rss: 9295MB -> 9633MB ( +337MB) misc_checking_3 time: 0.315; rss: 10357MB -> 10357MB ( +0MB) monomorphization_collector_root_collections time: 14.501; rss: 10357MB -> 10571MB ( +215MB) monomorphization_collector_graph_walk time: 1.763; rss: 10571MB -> 10661MB ( +89MB) partition_and_assert_distinct_symbols time: 29.035; rss: 9633MB -> 10706MB (+1073MB) generate_crate_metadata time: 0.000; rss: 10706MB -> 10706MB ( +0MB) find_cgu_reuse time: 30.913; rss: 10706MB -> 12150MB (+1444MB) codegen_to_LLVM_IR time: 31.108; rss: 10706MB -> 12150MB (+1444MB) codegen_crate time: 0.000; rss: 12150MB -> 12150MB ( +0MB) assert_dep_graph time: 0.000; rss: 12150MB -> 12150MB ( +0MB) check_dirty_clean time: 0.416; rss: 12152MB -> 12199MB ( +46MB) encode_query_results_for(rustc_query_impl::queries::type_of) time: 1.259; rss: 12199MB -> 12211MB ( +12MB) encode_query_results_for(rustc_query_impl::queries::generics_of) time: 0.095; rss: 12211MB -> 12193MB ( -18MB) encode_query_results_for(rustc_query_impl::queries::predicates_of) time: 0.005; rss: 12193MB -> 12195MB ( +2MB) encode_query_results_for(rustc_query_impl::queries::mir_const_qualif) time: 0.828; rss: 12195MB -> 12208MB ( +14MB) encode_query_results_for(rustc_query_impl::queries::mir_for_ctfe) time: 17.880; rss: 12208MB -> 11987MB ( -222MB) encode_query_results_for(rustc_query_impl::queries::optimized_mir) time: 0.000; rss: 11987MB -> 11987MB ( +0MB) encode_query_results_for(rustc_query_impl::queries::covered_file_name) time: 0.000; rss: 11987MB -> 11987MB ( +0MB) encode_query_results_for(rustc_query_impl::queries::covered_code_regions) time: 0.007; rss: 11987MB -> 11988MB ( +1MB) encode_query_results_for(rustc_query_impl::queries::promoted_mir) time: 0.049; rss: 11988MB -> 11992MB ( +4MB) encode_query_results_for(rustc_query_impl::queries::unsafety_check_result) time: 0.002; rss: 11992MB -> 11994MB ( +1MB) encode_query_results_for(rustc_query_impl::queries::thir_check_unsafety) time: 38.049; rss: 11994MB -> 12093MB ( +99MB) encode_query_results_for(rustc_query_impl::queries::typeck) time: 0.000; rss: 12093MB -> 12093MB ( +0MB) encode_query_results_for(rustc_query_impl::queries::diagnostic_only_typeck) time: 0.024; rss: 12093MB -> 12095MB ( +2MB) encode_query_results_for(rustc_query_impl::queries::used_trait_imports) time: 0.372; rss: 12095MB -> 12053MB ( -42MB) encode_query_results_for(rustc_query_impl::queries::mir_borrowck) time: 0.015; rss: 12053MB -> 12053MB ( +0MB) encode_query_results_for(rustc_query_impl::queries::eval_to_allocation_raw) time: 0.005; rss: 12053MB -> 12054MB ( +1MB) encode_query_results_for(rustc_query_impl::queries::eval_to_const_value_raw) time: 0.003; rss: 12054MB -> 12056MB ( +2MB) encode_query_results_for(rustc_query_impl::queries::check_match) time: 0.037; rss: 12056MB -> 11899MB ( -157MB) encode_query_results_for(rustc_query_impl::queries::symbol_name) time: 0.667; rss: 11899MB -> 11708MB ( -191MB) encode_query_results_for(rustc_query_impl::queries::codegen_fn_attrs) time: 0.045; rss: 11708MB -> 11709MB ( +1MB) encode_query_results_for(rustc_query_impl::queries::codegen_fulfill_obligation) time: 0.295; rss: 11709MB -> 11734MB ( +25MB) encode_query_results_for(rustc_query_impl::queries::specialization_graph_of) time: 0.000; rss: 11734MB -> 11734MB ( +0MB) encode_query_results_for(rustc_query_impl::queries::adt_drop_tys) time: 0.000; rss: 11734MB -> 11734MB ( +0MB) encode_query_results_for(rustc_query_impl::queries::adt_significant_drop_tys) time: 0.005; rss: 11734MB -> 11734MB ( +1MB) encode_query_results_for(rustc_query_impl::queries::unused_generic_params) time: 60.063; rss: 12152MB -> 11734MB ( -418MB) encode_query_results time: 76.745; rss: 12007MB -> 11699MB ( -308MB) LLVM_passes(crate) time: 61.634; rss: 12150MB -> 10557MB (-1593MB) incr_comp_serialize_result_cache time: 61.637; rss: 12150MB -> 10557MB (-1593MB) incr_comp_persist_result_cache time: 0.001; rss: 10557MB -> 10557MB ( +0MB) incr_comp_persist_dep_graph time: 61.641; rss: 12150MB -> 10557MB (-1593MB) serialize_dep_graph time: 15.601; rss: 10557MB -> 10242MB ( -315MB) free_global_ctxt time: 0.000; rss: 10242MB -> 10242MB ( +0MB) join_worker_thread time: 0.368; rss: 10242MB -> 10242MB ( +0MB) copy_all_cgu_workproducts_to_incr_comp_cache_dir time: 0.375; rss: 10242MB -> 10242MB ( +0MB) finish_ongoing_codegen time: 0.000; rss: 10242MB -> 10242MB ( +0MB) llvm_dump_timing_file time: 0.002; rss: 10242MB -> 10242MB ( +0MB) serialize_work_products time: 0.001; rss: 9668MB -> 9668MB ( +0MB) incr_comp_finalize_session_directory time: 0.000; rss: 9668MB -> 9668MB ( +0MB) link_binary_check_files_are_writeable time: 1.469; rss: 9668MB -> 9671MB ( +3MB) link_rlib time: 0.000; rss: 9671MB -> 9671MB ( +0MB) link_binary_remove_temps time: 1.506; rss: 9668MB -> 9671MB ( +3MB) link_binary time: 1.622; rss: 9668MB -> 9329MB ( -339MB) link_crate time: 2.037; rss: 10242MB -> 9329MB ( -913MB) link time: 502.990; rss: 32MB -> 5888MB (+5855MB) total ``` </details> (6.34% decrease in runtime, results are consistent across multiple runs)
This commit is contained in:
commit
073b1208f0
@ -2186,28 +2186,34 @@ impl Display for char {
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T: ?Sized> Pointer for *const T {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> Result {
|
||||
let old_width = f.width;
|
||||
let old_flags = f.flags;
|
||||
/// Since the formatting will be identical for all pointer types, use a non-monomorphized
|
||||
/// implementation for the actual formatting to reduce the amount of codegen work needed
|
||||
fn inner(ptr: *const (), f: &mut Formatter<'_>) -> Result {
|
||||
let old_width = f.width;
|
||||
let old_flags = f.flags;
|
||||
|
||||
// The alternate flag is already treated by LowerHex as being special-
|
||||
// it denotes whether to prefix with 0x. We use it to work out whether
|
||||
// or not to zero extend, and then unconditionally set it to get the
|
||||
// prefix.
|
||||
if f.alternate() {
|
||||
f.flags |= 1 << (FlagV1::SignAwareZeroPad as u32);
|
||||
// The alternate flag is already treated by LowerHex as being special-
|
||||
// it denotes whether to prefix with 0x. We use it to work out whether
|
||||
// or not to zero extend, and then unconditionally set it to get the
|
||||
// prefix.
|
||||
if f.alternate() {
|
||||
f.flags |= 1 << (FlagV1::SignAwareZeroPad as u32);
|
||||
|
||||
if f.width.is_none() {
|
||||
f.width = Some((usize::BITS / 4) as usize + 2);
|
||||
if f.width.is_none() {
|
||||
f.width = Some((usize::BITS / 4) as usize + 2);
|
||||
}
|
||||
}
|
||||
f.flags |= 1 << (FlagV1::Alternate as u32);
|
||||
|
||||
let ret = LowerHex::fmt(&(ptr as usize), f);
|
||||
|
||||
f.width = old_width;
|
||||
f.flags = old_flags;
|
||||
|
||||
ret
|
||||
}
|
||||
f.flags |= 1 << (FlagV1::Alternate as u32);
|
||||
|
||||
let ret = LowerHex::fmt(&(*self as *const () as usize), f);
|
||||
|
||||
f.width = old_width;
|
||||
f.flags = old_flags;
|
||||
|
||||
ret
|
||||
inner(*self as *const (), f)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user