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

Make TypeFolder::fold_* return Result #91230

Merged
merged 9 commits into from
Nov 28, 2021
Merged

Conversation

eggyal
Copy link
Contributor

@eggyal eggyal commented Nov 25, 2021

Implements rust-lang/compiler-team#432.

Initially this is just a rebase of @LeSeulArtichaut's work in #85469 (abandoned; see #85485 (comment)). At that time, it caused a regression in performance that required some further exploration... with this rebased PR bors can hopefully report some perf analysis from which we can investigate further (if the regression is indeed still present).

r? @jackh726 cc @nikomatsakis

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Nov 25, 2021
@jackh726
Copy link
Member

@bors try @rust-timer queue

@rust-timer
Copy link
Collaborator

Awaiting bors try build completion.

@rustbot label: +S-waiting-on-perf

@rustbot rustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Nov 25, 2021
@bors
Copy link
Contributor

bors commented Nov 25, 2021

⌛ Trying commit 362320b3e16971f16544d13786bd4f6fcfb7465f with merge 045cf79edfbfad98d41a0fefbb824ac4306f2dbd...

@bors
Copy link
Contributor

bors commented Nov 25, 2021

☀️ Try build successful - checks-actions
Build commit: 045cf79edfbfad98d41a0fefbb824ac4306f2dbd (045cf79edfbfad98d41a0fefbb824ac4306f2dbd)

@rust-timer
Copy link
Collaborator

Queued 045cf79edfbfad98d41a0fefbb824ac4306f2dbd with parent 862962b, future comparison URL.

@camelid camelid added the T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. label Nov 25, 2021
@rust-timer
Copy link
Collaborator

Finished benchmarking commit (045cf79edfbfad98d41a0fefbb824ac4306f2dbd): comparison url.

Summary: This change led to large relevant mixed results 🤷 in compiler performance.

  • Moderate improvement in instruction counts (up to -1.3% on incr-unchanged builds of wg-grammar)
  • Large regression in instruction counts (up to 1.0% on full builds of diesel)

If you disagree with this performance assessment, please file an issue in rust-lang/rustc-perf.

Benchmarking this pull request likely means that it is perf-sensitive, so we're automatically marking it as not fit for rolling up. While you can manually mark this PR as fit for rollup, we strongly recommend not doing so since this PR led to changes in compiler perf.

Next Steps: If you can justify the regressions found in this try perf run, please indicate this with @rustbot label: +perf-regression-triaged along with sufficient written justification. If you cannot justify the regressions please fix the regressions and do another perf run. If the next run shows neutral or positive results, the label will be automatically removed.

@bors rollup=never
@rustbot label: +S-waiting-on-review -S-waiting-on-perf +perf-regression

@rustbot rustbot added perf-regression Performance regression. and removed S-waiting-on-perf Status: Waiting on a perf run to be completed. labels Nov 25, 2021
@jackh726
Copy link
Member

Perf is better than last time, but not neutral. It would be nice to look into it a bit, but I also think this is "landable" as-is.

@jackh726
Copy link
Member

(I still have to do an actual review)

@eggyal
Copy link
Contributor Author

eggyal commented Nov 26, 2021

Perf is better than last time, but not neutral. It would be nice to look into it a bit, but I also think this is "landable" as-is.

cachegrind diff for the worst scenario (diesel full check)
--------------------------------------------------------------------------------
Files compared:   results/cgout--diesel-Check-Full; results/cgout--diesel-Check-Full
Command:          /usr/local/rustup/toolchains//bin/rustc --crate-name diesel --edition=2018 diesel/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type lib --emit=dep-info,metadata -C embed-bitcode=no -C debuginfo=2 --cfg feature="32-column-tables" --cfg feature="default" -C metadata=a68161748e12f600 -C extra-filename=-a68161748e12f600 --out-dir /tmp/.tmpXW0Xl0/target/debug/deps -L dependency=/tmp/.tmpXW0Xl0/target/debug/deps --extern byteorder=/tmp/.tmpXW0Xl0/target/debug/deps/libbyteorder-2791c07d1f3de7a5.rmeta --extern diesel_derives=/tmp/.tmpXW0Xl0/target/debug/deps/libdiesel_derives-9870e21c7cbc8e51.so --extern itoa=/tmp/.tmpXW0Xl0/target/debug/deps/libitoa-60c3920563e7b349.rmeta -Adeprecated -Aunknown-lints; /usr/local/rustup/toolchains//bin/rustc --crate-name diesel --edition=2018 diesel/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type lib --emit=dep-info,metadata -C embed-bitcode=no -C debuginfo=2 --cfg feature="32-column-tables" --cfg feature="default" -C metadata=a68161748e12f600 -C extra-filename=-a68161748e12f600 --out-dir /tmp/.tmpqNJnV9/target/debug/deps -L dependency=/tmp/.tmpqNJnV9/target/debug/deps --extern byteorder=/tmp/.tmpqNJnV9/target/debug/deps/libbyteorder-2791c07d1f3de7a5.rmeta --extern diesel_derives=/tmp/.tmpqNJnV9/target/debug/deps/libdiesel_derives-9870e21c7cbc8e51.so --extern itoa=/tmp/.tmpqNJnV9/target/debug/deps/libitoa-60c3920563e7b349.rmeta -Adeprecated -Aunknown-lints
Data file:        /dev/stdin
Events recorded:  Ir
Events shown:     Ir
Event sort order: Ir
Thresholds:       0.1
Include dirs:     
User annotated:   
Auto-annotation:  on

--------------------------------------------------------------------------------
Ir                   
--------------------------------------------------------------------------------
700,959,936 (100.0%)  PROGRAM TOTALS

--------------------------------------------------------------------------------
Ir                       file:function
--------------------------------------------------------------------------------
 1,464,487,221 (208.9%)  ???:<rustc_infer::infer::at::At>::sup::<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::TraitRef>>
-1,272,016,760 (-181.5%)  ???:<rustc_infer::infer::InferCtxt>::commit_if_ok::<rustc_infer::infer::InferOk<()>, rustc_middle::ty::error::TypeError, <rustc_infer::infer::at::Trace>::sub<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::TraitRef>>::{closure#0}>
   652,763,704 (93.12%)  ???:<&rustc_middle::ty::list::List<rustc_middle::ty::Predicate> as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_infer::infer::canonical::canonicalizer::Canonicalizer>
  -562,115,396 (-80.2%)  ???:<smallvec::SmallVec<[rustc_middle::ty::Predicate; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::Predicate>>::extend::<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::Predicate>>, rustc_middle::ty::util::fold_list<rustc_infer::infer::canonical::canonicalizer::Canonicalizer, rustc_middle::ty::Predicate, <&rustc_middle::ty::list::List<rustc_middle::ty::Predicate> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::canonical::canonicalizer::Canonicalizer>::{closure#0}>::{closure#1}>>
  -438,786,888 (-62.6%)  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::subst::GenericArg>>::extend::<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::resolve::OpportunisticVarResolver>::{closure#0}>>
  -425,101,017 (-60.6%)  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::subst::GenericArg>>::extend::<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::canonical::canonicalizer::Canonicalizer>::{closure#0}>>
   376,541,292 (53.72%)  ???:core::iter::adapters::process_results::<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::resolve::OpportunisticVarResolver>::{closure#0}>, rustc_middle::ty::subst::GenericArg, !, <core::result::Result<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]>, !> as core::iter::traits::collect::FromIterator<core::result::Result<rustc_middle::ty::subst::GenericArg, !>>>::from_iter<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::resolve::OpportunisticVarResolver>::{closure#0}>>::{closure#0}, smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]>>
   248,391,646 (35.44%)  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::subst::GenericArg>>::extend::<core::iter::adapters::ResultShunt<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::canonical::canonicalizer::Canonicalizer>::{closure#0}>, !>>
   189,959,271 (27.10%)  ???:core::iter::adapters::process_results::<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::canonical::canonicalizer::Canonicalizer>::{closure#0}>, rustc_middle::ty::subst::GenericArg, !, <core::result::Result<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]>, !> as core::iter::traits::collect::FromIterator<core::result::Result<rustc_middle::ty::subst::GenericArg, !>>>::from_iter<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::canonical::canonicalizer::Canonicalizer>::{closure#0}>>::{closure#0}, smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]>>
  -159,196,742 (-22.7%)  ???:<rustc_trait_selection::traits::select::SelectionContext>::assemble_candidates
   145,146,709 (20.71%)  ???:<alloc::rc::Rc<rustc_middle::traits::ObligationCauseData> as core::ops::drop::Drop>::drop
   145,030,413 (20.69%)  ???:<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>> as core::iter::traits::iterator::Iterator>::try_fold::<(), core::iter::adapters::map::map_try_fold<rustc_middle::ty::subst::GenericArg, core::result::Result<rustc_middle::ty::subst::GenericArg, !>, (), core::ops::control_flow::ControlFlow<core::ops::control_flow::ControlFlow<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::canonical::canonicalizer::Canonicalizer>::{closure#0}, <core::iter::adapters::ResultShunt<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::canonical::canonicalizer::Canonicalizer>::{closure#0}>, !> as core::iter::traits::iterator::Iterator>::try_fold<(), core::iter::traits::iterator::Iterator::find::check<rustc_middle::ty::subst::GenericArg, <core::iter::adapters::ResultShunt<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::canonical::canonicalizer::Canonicalizer>::{closure#0}>, !> as core::iter::traits::iterator::Iterator>::next::{closure#0}>::{closure#0}, core::ops::control_flow::ControlFlow<rustc_middle::ty::subst::GenericArg>>::{closure#0}>::{closure#0}, core::ops::control_flow::ControlFlow<core::ops::control_flow::ControlFlow<rustc_middle::ty::subst::GenericArg>>>
   129,686,539 (18.50%)  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::subst::GenericArg>>::extend::<core::iter::adapters::ResultShunt<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_middle::ty::fold::BoundVarReplacer>::{closure#0}>, !>>
  -126,274,342 (-18.0%)  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::subst::GenericArg>>::extend::<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_middle::ty::fold::BoundVarReplacer>::{closure#0}>>
   -97,624,465 (-13.9%)  ???:<rustc_mir_dataflow::framework::direction::Forward as rustc_mir_dataflow::framework::direction::Direction>::visit_results_in_block::<rustc_borrowck::dataflow::BorrowckAnalyses<rustc_index::bit_set::BitSet<rustc_borrowck::dataflow::BorrowIndex>, rustc_index::bit_set::BitSet<rustc_mir_dataflow::move_paths::MovePathIndex>, rustc_index::bit_set::BitSet<rustc_mir_dataflow::move_paths::InitIndex>>, rustc_borrowck::dataflow::BorrowckAnalyses<rustc_mir_dataflow::framework::engine::Results<rustc_borrowck::dataflow::Borrows>, rustc_mir_dataflow::framework::engine::Results<rustc_mir_dataflow::impls::MaybeUninitializedPlaces>, rustc_mir_dataflow::framework::engine::Results<rustc_mir_dataflow::impls::EverInitializedPlaces>>, rustc_borrowck::MirBorrowckCtxt>
    96,582,119 (13.78%)  ???:rustc_mir_dataflow::framework::visitor::visit_results::<rustc_borrowck::dataflow::BorrowckAnalyses<rustc_index::bit_set::BitSet<rustc_borrowck::dataflow::BorrowIndex>, rustc_index::bit_set::BitSet<rustc_mir_dataflow::move_paths::MovePathIndex>, rustc_index::bit_set::BitSet<rustc_mir_dataflow::move_paths::InitIndex>>, rustc_borrowck::dataflow::BorrowckAnalyses<rustc_mir_dataflow::framework::engine::Results<rustc_borrowck::dataflow::Borrows>, rustc_mir_dataflow::framework::engine::Results<rustc_mir_dataflow::impls::MaybeUninitializedPlaces>, rustc_mir_dataflow::framework::engine::Results<rustc_mir_dataflow::impls::EverInitializedPlaces>>, core::iter::adapters::map::Map<rustc_middle::mir::traversal::ReversePostorder, rustc_borrowck::do_mir_borrowck::{closure#2}>, rustc_borrowck::MirBorrowckCtxt>
    95,592,411 (13.64%)  ???:<rustc_infer::infer::combine::CombineFields>::instantiate
    94,929,280 (13.54%)  ???:<rustc_infer::infer::InferCtxt>::commit_unconditionally::<rustc_middle::traits::ImplSourceUserDefinedData<rustc_infer::traits::Obligation<rustc_middle::ty::Predicate>>, <rustc_trait_selection::traits::select::SelectionContext>::confirm_impl_candidate::{closure#0}>
   -92,527,123 (-13.2%)  ???:<rustc_mir_dataflow::move_paths::MoveData>::gather_moves
    92,297,807 (13.17%)  ???:rustc_mir_dataflow::move_paths::builder::gather_moves
    87,388,113 (12.47%)  ???:<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>> as core::iter::traits::iterator::Iterator>::try_fold::<(), core::iter::adapters::map::map_try_fold<rustc_middle::ty::subst::GenericArg, core::result::Result<rustc_middle::ty::subst::GenericArg, !>, (), core::ops::control_flow::ControlFlow<core::ops::control_flow::ControlFlow<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_middle::ty::fold::BoundVarReplacer>::{closure#0}, <core::iter::adapters::ResultShunt<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_middle::ty::fold::BoundVarReplacer>::{closure#0}>, !> as core::iter::traits::iterator::Iterator>::try_fold<(), core::iter::traits::iterator::Iterator::find::check<rustc_middle::ty::subst::GenericArg, <core::iter::adapters::ResultShunt<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_middle::ty::fold::BoundVarReplacer>::{closure#0}>, !> as core::iter::traits::iterator::Iterator>::next::{closure#0}>::{closure#0}, core::ops::control_flow::ControlFlow<rustc_middle::ty::subst::GenericArg>>::{closure#0}>::{closure#0}, core::ops::control_flow::ControlFlow<core::ops::control_flow::ControlFlow<rustc_middle::ty::subst::GenericArg>>>
   -87,272,414 (-12.5%)  ???:rustc_data_structures::stack::ensure_sufficient_stack::<rustc_middle::traits::ImplSourceUserDefinedData<rustc_infer::traits::Obligation<rustc_middle::ty::Predicate>>, <rustc_trait_selection::traits::select::SelectionContext>::confirm_impl_candidate::{closure#0}::{closure#0}>
    81,457,253 (11.62%)  ???:<rustc_infer::infer::canonical::canonicalizer::Canonicalizer as rustc_middle::ty::fold::TypeFolder>::fold_ty
    75,609,137 (10.79%)  ???:<&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_infer::infer::resolve::OpportunisticVarResolver>
    64,527,306 ( 9.21%)  ???:<rustc_infer::infer::resolve::FullTypeResolver as rustc_middle::ty::fold::TypeFolder>::tcx
   -64,527,306 (-9.21%)  ???:<rustc_infer::infer::resolve::OpportunisticVarResolver as rustc_middle::ty::fold::TypeFolder>::tcx
   -62,879,261 (-8.97%)  ???:<rustc_infer::infer::equate::Equate as rustc_middle::ty::relate::TypeRelation>::relate::<&rustc_middle::ty::TyS>
   -56,805,794 (-8.10%)  ???:<rustc_infer::infer::equate::Equate as rustc_middle::ty::relate::TypeRelation>::regions
    55,538,644 ( 7.92%)  ???:<rustc_infer::infer::region_constraints::RegionConstraintCollector>::make_eqregion
   -51,639,321 (-7.37%)  ???:<&rustc_middle::ty::TyS as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_infer::infer::canonical::canonicalizer::Canonicalizer>
   -50,773,997 (-7.24%)  ???:<&rustc_middle::ty::TyS as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_middle::ty::subst::SubstFolder>
    43,504,397 ( 6.21%)  ???:<&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_middle::ty::subst::SubstFolder>
    42,405,466 ( 6.05%)  ???:<rustc_middle::ty::Predicate as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_infer::infer::resolve::OpportunisticVarResolver>
   -41,318,783 (-5.89%)  ???:<&rustc_middle::ty::TyS as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_infer::infer::resolve::OpportunisticVarResolver>
    36,750,762 ( 5.24%)  ???:<rustc_trait_selection::traits::select::SelectionContext>::select
   -32,471,440 (-4.63%)  ???:<rustc_infer::infer::equate::Equate as rustc_middle::ty::relate::TypeRelation>::tys
    32,344,602 ( 4.61%)  ???:<&rustc_middle::ty::TyS as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_middle::ty::subst::SubstFolder>
    30,194,793 ( 4.31%)  ???:<&rustc_middle::ty::list::List<rustc_middle::ty::Predicate> as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_middle::ty::fold::BoundVarReplacer>
    29,728,765 ( 4.24%)  ???:<rustc_infer::infer::InferCtxt>::commit_if_ok::<core::result::Result<core::option::Option<alloc::vec::Vec<rustc_infer::traits::Obligation<rustc_middle::ty::Predicate>>>, rustc_trait_selection::traits::project::InProgress>, rustc_infer::traits::project::MismatchedProjectionTypes, rustc_trait_selection::traits::project::poly_project_and_unify_type::{closure#0}>
    26,797,967 ( 3.82%)  ???:<rustc_mir_dataflow::framework::direction::Forward as rustc_mir_dataflow::framework::direction::Direction>::join_state_into_successors_of::<rustc_mir_dataflow::impls::EverInitializedPlaces, <rustc_mir_dataflow::framework::engine::Engine<rustc_mir_dataflow::impls::EverInitializedPlaces>>::iterate_to_fixpoint::{closure#0}>
    26,388,986 ( 3.76%)  ???:<rustc_mir_dataflow::framework::direction::Forward as rustc_mir_dataflow::framework::direction::Direction>::join_state_into_successors_of::<rustc_mir_dataflow::impls::MaybeUninitializedPlaces, <rustc_mir_dataflow::framework::engine::Engine<rustc_mir_dataflow::impls::MaybeUninitializedPlaces>>::iterate_to_fixpoint::{closure#0}>
    25,563,102 ( 3.65%)  ???:<rustc_mir_dataflow::framework::direction::Forward as rustc_mir_dataflow::framework::direction::Direction>::join_state_into_successors_of::<rustc_mir_dataflow::impls::MaybeInitializedPlaces, <rustc_mir_dataflow::framework::engine::Engine<rustc_mir_dataflow::impls::MaybeInitializedPlaces>>::iterate_to_fixpoint::{closure#0}>
   -24,028,995 (-3.43%)  ???:<rustc_infer::infer::InferCtxt>::region_constraints_added_in_snapshot
   -22,669,806 (-3.23%)  ???:<rustc_mir_dataflow::framework::engine::Engine<rustc_mir_dataflow::impls::EverInitializedPlaces>>::iterate_to_fixpoint
   -22,655,204 (-3.23%)  ???:<rustc_trait_selection::traits::select::SelectionContext>::confirm_candidate
   -21,836,955 (-3.12%)  ???:<rustc_mir_dataflow::framework::engine::Engine<rustc_mir_dataflow::impls::MaybeUninitializedPlaces>>::iterate_to_fixpoint
   -21,101,981 (-3.01%)  ???:<rustc_mir_dataflow::framework::engine::Engine<rustc_mir_dataflow::impls::MaybeInitializedPlaces>>::iterate_to_fixpoint
   -20,828,841 (-2.97%)  ???:<rustc_trait_selection::traits::fulfill::FulfillmentContext as rustc_infer::traits::engine::TraitEngine>::register_predicate_obligation
   -20,550,485 (-2.93%)  ???:rustc_trait_selection::traits::project::poly_project_and_unify_type
    19,047,511 ( 2.72%)  ???:<rustc_middle::ty::Predicate as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_infer::infer::canonical::canonicalizer::Canonicalizer>
   -17,633,492 (-2.52%)  ???:<rustc_middle::ty::Predicate as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_infer::infer::resolve::FullTypeResolver>
    17,090,342 ( 2.44%)  ???:rustc_middle::ty::util::fold_list::<rustc_middle::ty::fold::BoundVarReplacer, rustc_middle::ty::Predicate, <&rustc_middle::ty::list::List<rustc_middle::ty::Predicate> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_middle::ty::fold::BoundVarReplacer>::{closure#0}>
   -16,960,120 (-2.42%)  ???:<rustc_borrowck::constraint_generation::ConstraintGeneration as rustc_middle::mir::visit::Visitor>::visit_basic_block_data
    16,536,765 ( 2.36%)  ???:<rustc_infer::infer::sub::Sub as rustc_middle::ty::relate::TypeRelation>::tys
    16,219,092 ( 2.31%)  ???:<rustc_trait_selection::traits::project::AssocTypeNormalizer as rustc_middle::ty::fold::TypeFolder>::fold_ty
    15,662,199 ( 2.23%)  ???:<rustc_infer::infer::combine::CombineFields>::lub
   -15,662,199 (-2.23%)  ???:<rustc_infer::infer::combine::CombineFields>::sub
    15,140,356 ( 2.16%)  ???:rustc_borrowck::constraint_generation::generate_constraints
    14,360,828 ( 2.05%)  ???:<&rustc_middle::ty::TyS as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_infer::infer::freshen::TypeFreshener>
   -14,212,414 (-2.03%)  ???:rustc_borrowck::type_check::liveness::generate
    14,085,270 ( 2.01%)  ???:rustc_borrowck::type_check::type_check
    14,068,891 ( 2.01%)  ???:<rustc_infer::infer::InferCtxtBuilder>::enter::<core::result::Result<alloc::vec::Vec<rustc_middle::ty::Predicate>, rustc_errors::ErrorReported>, rustc_trait_selection::traits::do_normalize_predicates::{closure#0}>
   -14,016,541 (-2.00%)  ???:<smallvec::SmallVec<[rustc_middle::ty::Predicate; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::Predicate>>::extend::<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::Predicate>>, rustc_middle::ty::util::fold_list<rustc_middle::ty::fold::BoundVarReplacer, rustc_middle::ty::Predicate, <&rustc_middle::ty::list::List<rustc_middle::ty::Predicate> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_middle::ty::fold::BoundVarReplacer>::{closure#0}>::{closure#1}>>
    13,683,136 ( 1.95%)  ???:<rustc_infer::infer::nll_relate::TypeRelating<rustc_borrowck::type_check::relate_tys::NllTypeRelatingDelegate> as rustc_middle::ty::relate::TypeRelation>::tys
   -13,195,684 (-1.88%)  ???:rustc_middle::ty::relate::relate_substs::<rustc_infer::infer::combine::Generalizer>
    12,654,482 ( 1.81%)  ???:<rustc_trait_selection::traits::select::SelectionContext>::evaluate_trait_predicate_recursively
   -12,636,214 (-1.80%)  ???:rustc_trait_selection::traits::project::project_and_unify_type
   -12,625,412 (-1.80%)  ???:<rustc_borrowck::type_check::constraint_conversion::ConstraintConversion>::convert_all
    12,487,850 ( 1.78%)  ???:<rustc_mir_dataflow::framework::direction::Forward as rustc_mir_dataflow::framework::direction::Direction>::join_state_into_successors_of::<rustc_borrowck::dataflow::Borrows, <rustc_mir_dataflow::framework::engine::Engine<rustc_borrowck::dataflow::Borrows>>::iterate_to_fixpoint::{closure#0}>
   -12,284,814 (-1.75%)  ???:core::ptr::drop_in_place::<rustc_middle::traits::ObligationCauseCode>
   -11,869,313 (-1.69%)  ???:<&rustc_middle::ty::TyS as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_infer::infer::resolve::FullTypeResolver>
    11,652,703 ( 1.66%)  ???:<rustc_borrowck::type_check::TypeChecker>::typeck_mir
    11,400,650 ( 1.63%)  ???:<rustc_trait_selection::traits::fulfill::FulfillProcessor>::progress_changed_obligations
   -10,911,607 (-1.56%)  ???:<rustc_middle::ty::subst::GenericArg as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_infer::infer::canonical::canonicalizer::Canonicalizer>
    10,676,856 ( 1.52%)  ???:<rustc_infer::infer::combine::Generalizer as rustc_middle::ty::relate::TypeRelation>::relate_item_substs
   -10,611,527 (-1.51%)  ???:<hashbrown::raw::inner::RawTable<usize>>::insert::<indexmap::map::core::get_hash<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::TraitRef>, ()>::{closure#0}>
     9,926,813 ( 1.42%)  ???:<rustc_infer::infer::canonical::canonicalizer::Canonicalizer>::canonicalize::<rustc_middle::ty::ParamEnvAnd<rustc_middle::ty::Predicate>>
     9,754,142 ( 1.39%)  ???:<rustc_infer::infer::region_constraints::RegionConstraintCollector>::make_subregion
    -9,632,802 (-1.37%)  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::subst::GenericArg>>::extend::<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::freshen::TypeFreshener>::{closure#0}>>
    -9,419,405 (-1.34%)  ???:<alloc::collections::btree::map::entry::Entry<rustc_infer::infer::region_constraints::Constraint, rustc_infer::infer::SubregionOrigin>>::or_insert_with::<<rustc_infer::infer::region_constraints::RegionConstraintCollector>::add_constraint::{closure#0}>
     9,385,065 ( 1.34%)  ???:<rustc_infer::infer::at::At as rustc_trait_selection::traits::query::dropck_outlives::AtExt>::dropck_outlives
    -9,376,925 (-1.34%)  ???:<rustc_infer::infer::freshen::TypeFreshener as rustc_middle::ty::fold::TypeFolder>::fold_ty
     9,347,655 ( 1.33%)  ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_sse2_unaligned_erms
    -8,776,973 (-1.25%)  ???:<rustc_infer::infer::nll_relate::TypeRelating<rustc_borrowck::type_check::relate_tys::NllTypeRelatingDelegate> as rustc_middle::ty::relate::TypeRelation>::relate::<&rustc_middle::ty::TyS>
    -8,646,710 (-1.23%)  ???:<rustc_typeck::check::writeback::WritebackCx>::visit_node_id
    -8,610,025 (-1.23%)  ???:<rustc_middle::ty::sty::Binder<rustc_middle::ty::PredicateKind> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_middle::ty::fold::BoundVarReplacer>
    -8,581,707 (-1.22%)  ???:<rustc_infer::infer::InferCtxt>::rollback_to
     8,508,256 ( 1.21%)  ???:<rustc_infer::infer::resolve::OpportunisticVarResolver as rustc_middle::ty::fold::TypeFolder>::fold_ty
     8,424,236 ( 1.20%)  ???:<&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_infer::infer::resolve::FullTypeResolver>
    -8,312,380 (-1.19%)  ???:<rustc_infer::infer::sub::Sub as rustc_middle::ty::relate::TypeRelation>::relate_with_variance::<&rustc_middle::ty::sty::RegionKind>
    -7,999,829 (-1.14%)  ???:<rustc_mir_dataflow::framework::engine::Engine<rustc_borrowck::dataflow::Borrows>>::iterate_to_fixpoint
    -7,927,243 (-1.13%)  ???:<<rustc_middle::ty::context::TyCtxt>::any_free_region_meets::RegionVisitor<<rustc_middle::ty::context::TyCtxt>::for_each_free_region<&rustc_middle::ty::TyS, <rustc_borrowck::type_check::liveness::trace::LivenessContext>::make_all_regions_live<&rustc_middle::ty::TyS>::{closure#0}>::{closure#0}> as rustc_middle::ty::fold::TypeVisitor>::visit_region
     7,797,948 ( 1.11%)  ???:<&rustc_middle::ty::sty::RegionKind as rustc_middle::ty::fold::TypeFoldable>::visit_with::<<rustc_middle::ty::context::TyCtxt>::any_free_region_meets::RegionVisitor<<rustc_middle::ty::context::TyCtxt>::for_each_free_region<&rustc_middle::ty::TyS, <rustc_borrowck::type_check::liveness::trace::LivenessContext>::make_all_regions_live<&rustc_middle::ty::TyS>::{closure#0}>::{closure#0}>>
     7,728,711 ( 1.10%)  ???:<rustc_trait_selection::traits::select::SelectionContext>::evaluate_stack
     7,578,646 ( 1.08%)  ???:<rustc_typeck::check::writeback::WritebackCx as rustc_hir::intravisit::Visitor>::visit_pat
     7,532,044 ( 1.07%)  ???:<rustc_middle::ty::context::TyCtxt>::reuse_or_mk_predicate
     7,384,245 ( 1.05%)  ???:core::iter::adapters::process_results::<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::freshen::TypeFreshener>::{closure#0}>, rustc_middle::ty::subst::GenericArg, !, <core::result::Result<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]>, !> as core::iter::traits::collect::FromIterator<core::result::Result<rustc_middle::ty::subst::GenericArg, !>>>::from_iter<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::freshen::TypeFreshener>::{closure#0}>>::{closure#0}, smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]>>
     7,202,572 ( 1.03%)  ???:<indexmap::map::core::IndexMapCore<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::TraitRef>, ()>>::insert_full
    -7,017,775 (-1.00%)  ???:<rustc_data_structures::transitive_relation::TransitiveRelation<rustc_middle::ty::sty::RegionVid>>::add
     6,877,919 ( 0.98%)  ???:<std::collections::hash::map::HashMap<rustc_infer::traits::project::ProjectionCacheKey, rustc_infer::traits::project::ProjectionCacheEntry, core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as ena::undo_log::Rollback<rustc_data_structures::snapshot_map::UndoLog<rustc_infer::traits::project::ProjectionCacheKey, rustc_infer::traits::project::ProjectionCacheEntry>>>::reverse
    -6,699,840 (-0.96%)  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::subst::GenericArg>>::extend::<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_middle::ty::subst::SubstFolder>::{closure#0}>>
    -6,504,774 (-0.93%)  ???:<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::ExistentialPredicate> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_infer::infer::canonical::canonicalizer::Canonicalizer>
    -6,367,268 (-0.91%)  ???:<rustc_middle::ty::subst::GenericArg as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_middle::ty::fold::BoundVarReplacer>
     5,947,700 ( 0.85%)  ???:<rustc_typeck::check::method::confirm::ConfirmContext>::confirm
     5,880,923 ( 0.84%)  ???:core::iter::adapters::process_results::<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_middle::ty::subst::SubstFolder>::{closure#0}>, rustc_middle::ty::subst::GenericArg, !, <core::result::Result<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]>, !> as core::iter::traits::collect::FromIterator<core::result::Result<rustc_middle::ty::subst::GenericArg, !>>>::from_iter<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_middle::ty::subst::SubstFolder>::{closure#0}>>::{closure#0}, smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]>>
    -5,700,582 (-0.81%)  ???:<hashbrown::raw::RawIterHash<(rustc_span::def_id::DefId, (&rustc_middle::ty::list::List<rustc_middle::ty::Predicate>, rustc_query_system::dep_graph::graph::DepNodeIndex))> as core::iter::traits::iterator::Iterator>::next
    -5,666,969 (-0.81%)  ???:<rustc_middle::ty::sty::FnSig as rustc_middle::ty::subst::Subst>::subst
     5,560,787 ( 0.79%)  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::subst::GenericArg>>::extend::<core::iter::adapters::ResultShunt<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_middle::ty::fold::RegionFolder>::{closure#0}>, !>>
    -5,474,116 (-0.78%)  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::subst::GenericArg>>::extend::<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_trait_selection::traits::project::AssocTypeNormalizer>::{closure#0}>>
     5,329,483 ( 0.76%)  ???:<rustc_middle::ty::PredicateKind as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_middle::ty::fold::BoundVarReplacer>
     5,158,602 ( 0.74%)  ???:<rustc_typeck::check::wfcheck::CheckTypeWellFormedVisitor as rustc_hir::intravisit::Visitor>::visit_ty
     5,099,290 ( 0.73%)  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]>>::try_grow
     5,007,984 ( 0.71%)  ???:<rustc_infer::infer::InferCtxt as rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt>::predicate_must_hold_modulo_regions
     4,895,616 ( 0.70%)  ???:<&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_middle::ty::fold::BoundVarReplacer>
     4,838,914 ( 0.69%)  ???:core::iter::adapters::process_results::<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_trait_selection::traits::project::AssocTypeNormalizer>::{closure#0}>, rustc_middle::ty::subst::GenericArg, !, <core::result::Result<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]>, !> as core::iter::traits::collect::FromIterator<core::result::Result<rustc_middle::ty::subst::GenericArg, !>>>::from_iter<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_trait_selection::traits::project::AssocTypeNormalizer>::{closure#0}>>::{closure#0}, smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]>>
     4,825,124 ( 0.69%)  ???:<alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut, rustc_infer::infer::region_constraints::Constraint, rustc_infer::infer::SubregionOrigin, alloc::collections::btree::node::marker::Leaf>, alloc::collections::btree::node::marker::Edge>>::insert_recursing
    -4,638,611 (-0.66%)  ???:rustc_hir::intravisit::walk_ty::<rustc_typeck::collect::PlaceholderHirTyCollector>
    -4,624,466 (-0.66%)  ???:<rustc_infer::infer::sub::Sub as rustc_middle::ty::relate::TypeRelation>::relate_with_variance::<&rustc_middle::ty::TyS>
     4,329,272 ( 0.62%)  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/src/arena.c:_rjem_je_arena_ralloc
     4,233,007 ( 0.60%)  ???:rustc_borrowck::type_check::free_region_relations::create
    -4,153,411 (-0.59%)  ???:<rustc_data_structures::obligation_forest::ObligationForest<rustc_trait_selection::traits::fulfill::PendingPredicateObligation>>::compress::<<rustc_data_structures::obligation_forest::ObligationForest<rustc_trait_selection::traits::fulfill::PendingPredicateObligation>>::process_obligations<rustc_trait_selection::traits::fulfill::FulfillProcessor, rustc_data_structures::obligation_forest::Outcome<rustc_trait_selection::traits::fulfill::PendingPredicateObligation, rustc_infer::traits::FulfillmentErrorCode>>::{closure#0}>
    -4,138,383 (-0.59%)  ???:<rustc_borrowck::type_check::TypeVerifier as rustc_middle::mir::visit::Visitor>::visit_place
     4,075,423 ( 0.58%)  ???:<&rustc_middle::ty::TyS as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_middle::ty::fold::BoundVarReplacer>
     4,056,480 ( 0.58%)  ???:<rustc_middle::ty::Predicate as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_infer::infer::canonical::canonicalizer::Canonicalizer>
    -4,022,157 (-0.57%)  ???:<dyn rustc_typeck::astconv::AstConv>::create_substs_for_generic_args::<<rustc_typeck::check::method::confirm::ConfirmContext>::instantiate_method_substs::MethodSubstsCtxt>
     3,887,787 ( 0.55%)  ???:<rustc_middle::ty::subst::GenericArg as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_infer::infer::resolve::FullTypeResolver>
    -3,699,615 (-0.53%)  ???:<&rustc_middle::ty::consts::Const as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_middle::ty::fold::RegionFolder>
     3,601,910 ( 0.51%)  ???:<rustc_borrowck::type_check::TypeVerifier as rustc_middle::mir::visit::Visitor>::visit_body
    -3,536,852 (-0.50%)  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::subst::GenericArg>>::extend::<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_middle::ty::fold::RegionFolder>::{closure#0}>>
     3,455,535 ( 0.49%)  ???:<arrayvec::arrayvec::ArrayVec<(&rustc_middle::ty::TyS, core::result::Result<&rustc_middle::ty::TyS, rustc_middle::ty::error::TypeError>), 8>>::as_mut_slice
    -3,391,761 (-0.48%)  ???:rustc_hir::intravisit::walk_ty::<rustc_typeck::check::wfcheck::CheckTypeWellFormedVisitor>
    -3,389,578 (-0.48%)  ???:<&rustc_middle::ty::TyS as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_infer::infer::freshen::TypeFreshener>
    -3,374,756 (-0.48%)  ???:<rustc_infer::infer::combine::Generalizer as rustc_middle::ty::relate::TypeRelation>::binders::<rustc_middle::ty::sty::ExistentialTraitRef>
    -3,335,839 (-0.48%)  ???:<rustc_middle::ty::Predicate as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_middle::ty::fold::BoundVarReplacer>
    -3,331,960 (-0.48%)  ???:<rustc_data_structures::obligation_forest::ObligationForest<rustc_trait_selection::traits::fulfill::PendingPredicateObligation>>::process_obligations::<rustc_trait_selection::traits::fulfill::FulfillProcessor, rustc_data_structures::obligation_forest::Outcome<rustc_trait_selection::traits::fulfill::PendingPredicateObligation, rustc_infer::traits::FulfillmentErrorCode>>
    -3,166,238 (-0.45%)  ???:<smallvec::SmallVec<[rustc_middle::ty::Predicate; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::Predicate>>::extend::<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::Predicate>>, rustc_middle::ty::util::fold_list<rustc_middle::ty::subst::SubstFolder, rustc_middle::ty::Predicate, <&rustc_middle::ty::list::List<rustc_middle::ty::Predicate> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_middle::ty::subst::SubstFolder>::{closure#0}>::{closure#1}>>
    -3,067,028 (-0.44%)  ???:rustc_middle::ty::util::fold_list::<rustc_middle::ty::fold::RegionFolder, rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::ExistentialPredicate>, <&rustc_middle::ty::list::List<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::ExistentialPredicate>> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_middle::ty::fold::RegionFolder>::{closure#0}>
     2,896,670 ( 0.41%)  ???:rustc_middle::ty::relate::super_relate_tys::<rustc_infer::infer::equate::Equate>
     2,793,723 ( 0.40%)  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::subst::GenericArg>>::extend::<core::iter::adapters::ResultShunt<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::resolve::OpportunisticVarResolver>::{closure#0}>, !>>
     2,779,117 ( 0.40%)  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::subst::GenericArg>>::extend::<core::iter::adapters::ResultShunt<core::iter::adapters::map::Map<core::iter::adapters::enumerate::Enumerate<core::iter::adapters::zip::Zip<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>>>, rustc_middle::ty::relate::relate_substs<rustc_infer::infer::combine::Generalizer>::{closure#0}>, rustc_middle::ty::error::TypeError>>
    -2,756,799 (-0.39%)  ???:<&mut rustc_middle::ty::relate::relate_substs<rustc_infer::infer::sub::Sub>::{closure#0} as core::ops::function::FnOnce<((usize, (rustc_middle::ty::subst::GenericArg, rustc_middle::ty::subst::GenericArg)),)>>::call_once
    -2,709,726 (-0.39%)  ???:rustc_borrowck::do_mir_borrowck
     2,709,137 ( 0.39%)  ???:<rustc_typeck::check::method::probe::ProbeContext>::xform_self_ty
     2,703,326 ( 0.39%)  ???:<rustc_middle::ty::context::TyCtxt>::fold_regions::<&rustc_middle::ty::consts::Const, rustc_borrowck::renumber::renumber_regions<&rustc_middle::ty::consts::Const>::{closure#0}>
    -2,693,756 (-0.38%)  ???:rustc_trait_selection::traits::coherence::overlapping_impls::<<rustc_middle::traits::specialization_graph::Children as rustc_trait_selection::traits::specialize::specialization_graph::ChildrenExt>::insert::{closure#2}, <rustc_middle::traits::specialization_graph::Children as rustc_trait_selection::traits::specialize::specialization_graph::ChildrenExt>::insert::{closure#3}, core::result::Result<(bool, bool), rustc_trait_selection::traits::specialize::OverlapError>>
    -2,622,083 (-0.37%)  ???:<rustc_infer::infer::InferCtxt>::probe::<(), <rustc_trait_selection::traits::select::SelectionContext>::assemble_candidates_from_impls::{closure#0}::{closure#0}>
     2,618,913 ( 0.37%)  ???:<rustc_borrowck::type_check::TypeChecker>::prove_trait_ref
     2,584,640 ( 0.37%)  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/src/arena.c:_rjem_je_arena_ralloc_no_move
     2,467,667 ( 0.35%)  ???:<&rustc_middle::ty::list::List<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::ExistentialPredicate>> as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_middle::ty::fold::RegionFolder>
    -2,459,605 (-0.35%)  ???:<hashbrown::raw::inner::RawTable<usize>>::insert::<indexmap::map::core::get_hash<(rustc_middle::ty::Predicate, rustc_span::span_encoding::Span), ()>::{closure#0}>
    -2,446,544 (-0.35%)  ???:<smallvec::SmallVec<[rustc_middle::ty::Predicate; 8]>>::insert_from_slice
     2,446,544 ( 0.35%)  ???:<smallvec::SmallVec<[rustc_middle::ty::Predicate; 8]>>::extend_from_slice
     2,444,910 ( 0.35%)  ???:rustc_middle::ty::util::fold_list::<rustc_middle::ty::erase_regions::RegionEraserVisitor, rustc_middle::ty::Predicate, <&rustc_middle::ty::list::List<rustc_middle::ty::Predicate> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_middle::ty::erase_regions::RegionEraserVisitor>::{closure#0}>
     2,390,720 ( 0.34%)  ???:rustc_middle::ty::util::fold_list::<rustc_infer::infer::resolve::OpportunisticVarResolver, &rustc_middle::ty::TyS, <&rustc_middle::ty::list::List<&rustc_middle::ty::TyS> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::resolve::OpportunisticVarResolver>::{closure#0}>
    -2,374,948 (-0.34%)  ???:<rustc_middle::ty::TyS>::fn_sig
    -2,348,276 (-0.34%)  ???:<&rustc_middle::ty::TyS as rustc_middle::ty::fold::TypeFoldable>::super_visit_with::<rustc_typeck::constrained_generic_params::ParameterCollector>
     2,329,225 ( 0.33%)  ???:<rustc_borrowck::type_check::TypeChecker>::push_region_constraints
     2,319,537 ( 0.33%)  ???:<rustc_middle::traits::specialization_graph::Children as rustc_trait_selection::traits::specialize::specialization_graph::ChildrenExt>::insert
    -2,303,344 (-0.33%)  ???:<&rustc_middle::ty::TyS as rustc_middle::ty::fold::TypeFoldable>::visit_with::<rustc_typeck::check::wfcheck::check_where_clauses::{closure#2}::CountParams>
     2,298,667 ( 0.33%)  ???:<rustc_typeck::collect::PlaceholderHirTyCollector as rustc_hir::intravisit::Visitor>::visit_path
     2,275,839 ( 0.32%)  ???:<&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_infer::infer::freshen::TypeFreshener>
    -2,269,837 (-0.32%)  ???:<rustc_infer::infer::sub::Sub as rustc_middle::ty::relate::TypeRelation>::relate::<&rustc_middle::ty::TyS>
    -2,250,926 (-0.32%)  ???:<&rustc_middle::ty::sty::RegionKind as rustc_middle::ty::relate::Relate>::relate::<rustc_infer::infer::sub::Sub>
    -2,217,409 (-0.32%)  ???:<&rustc_middle::ty::list::List<&rustc_middle::ty::TyS> as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_middle::ty::fold::BoundVarReplacer>
     2,215,956 ( 0.32%)  ???:<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::Predicate>> as core::iter::traits::iterator::Iterator>::try_fold::<(), core::iter::adapters::filter_map::filter_map_try_fold<rustc_middle::ty::Predicate, rustc_middle::ty::sty::Binder<rustc_middle::ty::OutlivesPredicate<&rustc_middle::ty::TyS, &rustc_middle::ty::sty::RegionKind>>, (), core::ops::control_flow::ControlFlow<()>, <rustc_infer::infer::outlives::verify::VerifyBoundCx>::region_bounds_declared_on_associated_item::{closure#0}, core::iter::adapters::filter_map::filter_map_try_fold<rustc_middle::ty::sty::Binder<rustc_middle::ty::OutlivesPredicate<&rustc_middle::ty::TyS, &rustc_middle::ty::sty::RegionKind>>, rustc_middle::ty::OutlivesPredicate<&rustc_middle::ty::TyS, &rustc_middle::ty::sty::RegionKind>, (), core::ops::control_flow::ControlFlow<()>, <rustc_infer::infer::outlives::verify::VerifyBoundCx>::region_bounds_declared_on_associated_item::{closure#1}, core::iter::adapters::map::map_try_fold<rustc_middle::ty::OutlivesPredicate<&rustc_middle::ty::TyS, &rustc_middle::ty::sty::RegionKind>, &rustc_middle::ty::sty::RegionKind, (), core::ops::control_flow::ControlFlow<()>, <rustc_infer::infer::outlives::verify::VerifyBoundCx>::region_bounds_declared_on_associated_item::{closure#2}, core::iter::adapters::map::map_try_fold<&rustc_middle::ty::sty::RegionKind, &rustc_middle::ty::sty::RegionKind, (), core::ops::control_flow::ControlFlow<()>, <rustc_infer::infer::outlives::verify::VerifyBoundCx>::declared_projection_bounds_from_trait::{closure#0}, core::iter::traits::iterator::Iterator::all::check<&rustc_middle::ty::sty::RegionKind, <rustc_infer::infer::outlives::obligations::TypeOutlives<&mut rustc_borrowck::type_check::constraint_conversion::ConstraintConversion>>::projection_must_outlive::{closure#0}::{closure#0}>::{closure#0}>::{closure#0}>::{closure#0}>::{closure#0}>::{closure#0}, core::ops::control_flow::ControlFlow<()>>
    -2,197,723 (-0.31%)  ???:<core::iter::adapters::map::Map<core::iter::adapters::map::Map<core::iter::adapters::filter_map::FilterMap<core::iter::adapters::filter_map::FilterMap<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::Predicate>>, <rustc_infer::infer::outlives::verify::VerifyBoundCx>::region_bounds_declared_on_associated_item::{closure#0}>, <rustc_infer::infer::outlives::verify::VerifyBoundCx>::region_bounds_declared_on_associated_item::{closure#1}>, <rustc_infer::infer::outlives::verify::VerifyBoundCx>::region_bounds_declared_on_associated_item::{closure#2}>, <rustc_infer::infer::outlives::verify::VerifyBoundCx>::declared_projection_bounds_from_trait::{closure#0}> as core::iter::traits::iterator::Iterator>::try_fold::<(), core::iter::traits::iterator::Iterator::all::check<&rustc_middle::ty::sty::RegionKind, <rustc_infer::infer::outlives::obligations::TypeOutlives<&mut rustc_borrowck::type_check::constraint_conversion::ConstraintConversion>>::projection_must_outlive::{closure#0}::{closure#0}>::{closure#0}, core::ops::control_flow::ControlFlow<()>>
    -2,192,156 (-0.31%)  ???:<&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_infer::infer::canonical::canonicalizer::Canonicalizer>
    -2,166,244 (-0.31%)  ???:rustc_middle::ty::util::fold_list::<rustc_trait_selection::traits::project::AssocTypeNormalizer, &rustc_middle::ty::TyS, <&rustc_middle::ty::list::List<&rustc_middle::ty::TyS> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_trait_selection::traits::project::AssocTypeNormalizer>::{closure#0}>
     2,138,392 ( 0.31%)  ???:<rustc_borrowck::universal_regions::UniversalRegions>::to_region_vid
     2,132,328 ( 0.30%)  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/src/jemalloc.c:realloc
     2,129,887 ( 0.30%)  ???:<rustc_middle::ty::PredicateKind as rustc_middle::ty::fold::TypeFoldable>::has_escaping_bound_vars
    -2,126,615 (-0.30%)  ???:rustc_trait_selection::traits::project::opt_normalize_projection_type
    -2,113,964 (-0.30%)  ???:<rustc_middle::ty::context::TyCtxt>::replace_bound_vars::<rustc_middle::ty::sty::FnSig, <rustc_infer::infer::InferCtxt>::replace_bound_vars_with_fresh_vars<rustc_middle::ty::sty::FnSig>::{closure#0}, <rustc_infer::infer::InferCtxt>::replace_bound_vars_with_fresh_vars<rustc_middle::ty::sty::FnSig>::{closure#1}, <rustc_infer::infer::InferCtxt>::replace_bound_vars_with_fresh_vars<rustc_middle::ty::sty::FnSig>::{closure#2}>
     2,112,955 ( 0.30%)  ???:<rustc_trait_selection::traits::wf::WfPredicates>::nominal_obligations
    -2,068,942 (-0.30%)  ???:<rustc_typeck::check::wfcheck::CheckTypeWellFormedVisitor as rustc_hir::intravisit::Visitor>::visit_path
     2,067,712 ( 0.29%)  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/include/jemalloc/internal/sz.h:_rjem_je_arena_ralloc_no_move
     2,064,014 ( 0.29%)  ???:<dyn rustc_typeck::astconv::AstConv>::add_implicitly_sized
     1,995,496 ( 0.28%)  ???:<rustc_typeck::constrained_generic_params::ParameterCollector as rustc_middle::ty::fold::TypeVisitor>::visit_ty
    -1,981,892 (-0.28%)  ???:<hashbrown::map::HashMap<rustc_middle::mir::Local, (), core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as core::iter::traits::collect::Extend<(rustc_middle::mir::Local, ())>>::extend::<core::iter::adapters::map::Map<core::iter::adapters::filter::Filter<core::iter::adapters::filter_map::FilterMap<core::ops::range::Range<usize>, <rustc_middle::mir::Body>::mut_vars_iter::{closure#0}>, rustc_borrowck::do_mir_borrowck::{closure#5}>, <hashbrown::set::HashSet<rustc_middle::mir::Local, core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as core::iter::traits::collect::Extend<rustc_middle::mir::Local>>::extend<core::iter::adapters::filter::Filter<core::iter::adapters::filter_map::FilterMap<core::ops::range::Range<usize>, <rustc_middle::mir::Body>::mut_vars_iter::{closure#0}>, rustc_borrowck::do_mir_borrowck::{closure#5}>>::{closure#0}>>
     1,981,892 ( 0.28%)  ???:<core::iter::adapters::map::Map<core::iter::adapters::filter::Filter<core::iter::adapters::filter_map::FilterMap<core::ops::range::Range<usize>, <rustc_middle::mir::Body>::mut_vars_iter::{closure#0}>, rustc_borrowck::do_mir_borrowck::{closure#5}>, <hashbrown::set::HashSet<rustc_middle::mir::Local, core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as core::iter::traits::collect::Extend<rustc_middle::mir::Local>>::extend<core::iter::adapters::filter::Filter<core::iter::adapters::filter_map::FilterMap<core::ops::range::Range<usize>, <rustc_middle::mir::Body>::mut_vars_iter::{closure#0}>, rustc_borrowck::do_mir_borrowck::{closure#5}>>::{closure#0}> as core::iter::traits::iterator::Iterator>::fold::<(), core::iter::traits::iterator::Iterator::for_each::call<(rustc_middle::mir::Local, ()), <hashbrown::map::HashMap<rustc_middle::mir::Local, (), core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as core::iter::traits::collect::Extend<(rustc_middle::mir::Local, ())>>::extend<core::iter::adapters::map::Map<core::iter::adapters::filter::Filter<core::iter::adapters::filter_map::FilterMap<core::ops::range::Range<usize>, <rustc_middle::mir::Body>::mut_vars_iter::{closure#0}>, rustc_borrowck::do_mir_borrowck::{closure#5}>, <hashbrown::set::HashSet<rustc_middle::mir::Local, core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as core::iter::traits::collect::Extend<rustc_middle::mir::Local>>::extend<core::iter::adapters::filter::Filter<core::iter::adapters::filter_map::FilterMap<core::ops::range::Range<usize>, <rustc_middle::mir::Body>::mut_vars_iter::{closure#0}>, rustc_borrowck::do_mir_borrowck::{closure#5}>>::{closure#0}>>::{closure#0}>::{closure#0}>
    -1,968,156 (-0.28%)  ???:<rustc_middle::ty::inhabitedness::def_id_forest::DefIdForest>::union::<core::iter::adapters::map::Map<core::slice::iter::Iter<rustc_middle::ty::FieldDef>, <rustc_middle::ty::VariantDef>::uninhabited_from::{closure#0}>>
     1,958,347 ( 0.28%)  ???:<rustc_middle::ty::fold::RegionFolder as rustc_middle::ty::fold::TypeFolder>::fold_binder::<rustc_middle::ty::sty::ExistentialPredicate>
    -1,915,122 (-0.27%)  ???:<rustc_infer::infer::InferCtxt>::super_combine_tys::<rustc_infer::infer::sub::Sub>
    -1,872,404 (-0.27%)  ???:<rustc_trait_selection::traits::fulfill::FulfillmentContext as rustc_infer::traits::engine::TraitEngine>::register_bound
    -1,832,432 (-0.26%)  ???:<rustc_infer::infer::at::At>::eq::<&rustc_middle::ty::sty::RegionKind>
     1,822,838 ( 0.26%)  ???:<rustc_typeck::collect::PlaceholderHirTyCollector as rustc_hir::intravisit::Visitor>::visit_qpath
    -1,814,297 (-0.26%)  ???:<rustc_middle::ty::erase_regions::RegionEraserVisitor as rustc_middle::ty::fold::TypeFolder>::fold_ty
    -1,803,590 (-0.26%)  ???:rustc_borrowck::nll::compute_regions
    -1,797,186 (-0.26%)  ???:<rustc_typeck::check::writeback::WritebackCx as rustc_hir::intravisit::Visitor>::visit_expr
    -1,789,058 (-0.26%)  ???:<rustc_middle::ty::erase_regions::RegionEraserVisitor as rustc_middle::ty::fold::TypeFolder>::fold_binder::<rustc_middle::ty::PredicateKind>
    -1,786,969 (-0.25%)  ???:<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::ExistentialPredicate> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_middle::ty::fold::RegionFolder>
     1,776,354 ( 0.25%)  ???:<rustc_middle::ty::context::TyCtxt>::recursion_limit
    -1,751,229 (-0.25%)  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::subst::GenericArg>>::extend::<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::resolve::FullTypeResolver>::{closure#0}>>
     1,703,102 ( 0.24%)  ???:<rustc_infer::infer::resolve::FullTypeResolver as rustc_middle::ty::fold::TypeFolder>::fold_ty
     1,700,081 ( 0.24%)  ???:rustc_middle::ty::util::fold_list::<rustc_infer::infer::freshen::TypeFreshener, rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::ExistentialPredicate>, <&rustc_middle::ty::list::List<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::ExistentialPredicate>> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::freshen::TypeFreshener>::{closure#0}>
    -1,650,982 (-0.24%)  ???:<smallvec::SmallVec<[rustc_middle::ty::Predicate; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::Predicate>>::extend::<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::Predicate>>, rustc_middle::ty::util::fold_list<rustc_middle::ty::erase_regions::RegionEraserVisitor, rustc_middle::ty::Predicate, <&rustc_middle::ty::list::List<rustc_middle::ty::Predicate> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_middle::ty::erase_regions::RegionEraserVisitor>::{closure#0}>::{closure#1}>>
    -1,637,166 (-0.23%)  ???:<&rustc_middle::ty::sty::RegionKind as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_middle::ty::subst::SubstFolder>
    -1,620,864 (-0.23%)  ???:<rustc_infer::infer::InferCtxt>::commit_if_ok::<rustc_infer::infer::InferOk<&rustc_middle::ty::TyS>, rustc_middle::ty::error::TypeError, <rustc_typeck::check::coercion::Coerce>::unify::{closure#0}>
    -1,619,646 (-0.23%)  ???:<rustc_infer::infer::nll_relate::TypeRelating<rustc_infer::infer::canonical::query_response::QueryTypeRelatingDelegate> as rustc_middle::ty::relate::TypeRelation>::relate::<&rustc_middle::ty::TyS>
     1,618,375 ( 0.23%)  ???:<&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_typeck::check::writeback::Resolver>
     1,597,069 ( 0.23%)  ???:<rustc_infer::infer::nll_relate::TypeRelating<rustc_infer::infer::canonical::query_response::QueryTypeRelatingDelegate> as rustc_middle::ty::relate::TypeRelation>::tys
     1,593,775 ( 0.23%)  ???:<&rustc_middle::ty::sty::RegionKind as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_infer::infer::resolve::FullTypeResolver>
     1,573,105 ( 0.22%)  ???:<hashbrown::map::HashMap<u32, (), core::hash::BuildHasherDefault<rustc_hash::FxHasher>>>::insert
     1,570,820 ( 0.22%)  ???:<rustc_infer::infer::InferCtxt>::instantiate_query_response_and_region_obligations::<rustc_middle::traits::query::NormalizationResult>
     1,562,478 ( 0.22%)  ???:<core::iter::adapters::ResultShunt<core::iter::adapters::map::Map<core::iter::adapters::enumerate::Enumerate<core::iter::adapters::zip::Zip<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>>>, rustc_middle::ty::relate::relate_substs<rustc_infer::infer::equate::Equate>::{closure#0}>, rustc_middle::ty::error::TypeError> as core::iter::traits::iterator::Iterator>::next
     1,556,854 ( 0.22%)  ???:<&mut <rustc_middle::ty::adt::AdtDef>::uninhabited_from::{closure#0} as core::ops::function::FnOnce<(&rustc_middle::ty::VariantDef,)>>::call_once
     1,552,767 ( 0.22%)  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/include/jemalloc/internal/tcache_inlines.h:_rjem_je_arena_ralloc
    -1,533,090 (-0.22%)  ???:<rustc_query_system::cache::Cache<(rustc_middle::ty::ConstnessAnd<rustc_middle::ty::ParamEnvAnd<rustc_middle::ty::sty::TraitRef>>, rustc_middle::ty::ImplPolarity), core::result::Result<core::option::Option<rustc_middle::traits::select::SelectionCandidate>, rustc_middle::traits::SelectionError>>>::insert
    -1,521,087 (-0.22%)  ???:<rustc_middle::ty::inhabitedness::def_id_forest::DefIdForest>::intersection::<core::iter::adapters::map::Map<core::slice::iter::Iter<rustc_middle::ty::VariantDef>, <rustc_middle::ty::adt::AdtDef>::uninhabited_from::{closure#0}>>
    -1,510,987 (-0.22%)  ???:<rustc_infer::infer::at::At>::eq::<rustc_middle::ty::sty::ProjectionTy>
    -1,488,889 (-0.21%)  ???:<hashbrown::raw::RawIterHash<(rustc_span::def_id::DefId, (rustc_middle::ty::generics::GenericPredicates, rustc_query_system::dep_graph::graph::DepNodeIndex))> as core::iter::traits::iterator::Iterator>::next
    -1,479,486 (-0.21%)  ???:<rustc_middle::ty::Predicate>::subst_supertrait
     1,473,723 ( 0.21%)  ???:rustc_middle::ty::relate::super_relate_tys::<rustc_infer::infer::sub::Sub>
    -1,471,658 (-0.21%)  ???:<&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_middle::ty::fold::RegionFolder>
     1,428,802 ( 0.20%)  ???:<rustc_typeck::collect::PlaceholderHirTyCollector as rustc_hir::intravisit::Visitor>::visit_ty
    -1,422,170 (-0.20%)  ???:<&mut <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_middle::ty::subst::SubstFolder>::{closure#0} as core::ops::function::FnOnce<(rustc_middle::ty::subst::GenericArg,)>>::call_once
     1,421,422 ( 0.20%)  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/include/jemalloc/internal/sz.h:_rjem_je_arena_ralloc
    -1,414,319 (-0.20%)  ???:<&mut <rustc_infer::traits::util::Elaborator>::elaborate::{closure#1} as core::ops::function::FnMut<(&rustc_infer::traits::Obligation<rustc_middle::ty::Predicate>,)>>::call_mut
     1,410,969 ( 0.20%)  ???:<rustc_middle::ty::subst::GenericArg as rustc_middle::ty::fold::TypeFoldable>::visit_with::<rustc_typeck::check::wfcheck::check_where_clauses::{closure#2}::CountParams>
    -1,404,933 (-0.20%)  ???:<rustc_middle::ty::subst::GenericArg as rustc_middle::ty::fold::TypeFoldable>::visit_with::<rustc_middle::ty::fold::HasTypeFlagsVisitor>
     1,313,372 ( 0.19%)  ???:<rustc_middle::ty::subst::GenericArg as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_middle::ty::erase_regions::RegionEraserVisitor>
    -1,305,943 (-0.19%)  ???:<&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_middle::ty::erase_regions::RegionEraserVisitor>
    -1,298,308 (-0.19%)  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::subst::GenericArg>>::extend::<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_typeck::check::writeback::EraseEarlyRegions>::{closure#0}>>
    -1,296,932 (-0.19%)  ???:<&mut rustc_middle::ty::relate::relate_substs<rustc_infer::infer::nll_relate::TypeRelating<rustc_borrowck::type_check::relate_tys::NllTypeRelatingDelegate>>::{closure#0} as core::ops::function::FnOnce<((usize, (rustc_middle::ty::subst::GenericArg, rustc_middle::ty::subst::GenericArg)),)>>::call_once
     1,295,131 ( 0.18%)  ???:<&rustc_middle::ty::TyS as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_middle::ty::erase_regions::RegionEraserVisitor>
    -1,280,269 (-0.18%)  ???:<rustc_typeck::check::wfcheck::CheckTypeWellFormedVisitor as rustc_hir::intravisit::Visitor>::visit_generic_args
     1,264,218 ( 0.18%)  ???:rustc_const_eval::util::alignment::is_disaligned::<rustc_middle::mir::Body>
    -1,221,949 (-0.17%)  ???:<rustc_infer::infer::outlives::env::OutlivesEnvironment>::new
     1,172,072 ( 0.17%)  ???:<indexmap::map::core::IndexMapCore<(rustc_middle::ty::Predicate, rustc_span::span_encoding::Span), ()>>::insert_full
     1,163,088 ( 0.17%)  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/include/jemalloc/internal/rtree.h:_rjem_je_arena_ralloc_no_move
    -1,161,487 (-0.17%)  ???:<rustc_middle::ty::Predicate as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_middle::ty::subst::SubstFolder>
     1,158,371 ( 0.17%)  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/include/jemalloc/internal/cache_bin.h:_rjem_je_arena_ralloc
     1,155,054 ( 0.16%)  ???:<rustc_borrowck::type_check::TypeChecker>::normalize_and_prove_instantiated_predicates
     1,120,585 ( 0.16%)  ???:<rustc_trait_selection::traits::wf::WfPredicates>::compute
     1,109,137 ( 0.16%)  ???:<rustc_typeck::check::coercion::Coerce>::coerce
    -1,074,016 (-0.15%)  ???:<&mut <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::freshen::TypeFreshener>::{closure#0} as core::ops::function::FnOnce<(rustc_middle::ty::subst::GenericArg,)>>::call_once
     1,066,418 ( 0.15%)  ???:<&mut <rustc_middle::ty::VariantDef>::uninhabited_from::{closure#0} as core::ops::function::FnOnce<(&rustc_middle::ty::FieldDef,)>>::call_once
    -1,064,649 (-0.15%)  ???:rustc_infer::traits::util::elaborate_obligations
    -1,061,963 (-0.15%)  ???:<rustc_infer::infer::canonical::canonicalizer::CanonicalizeFreeRegionsOtherThanStatic as rustc_infer::infer::canonical::canonicalizer::CanonicalizeRegionMode>::canonicalize_free_region
     1,053,436 ( 0.15%)  ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:memcpy@GLIBC_2.2.5
     1,040,150 ( 0.15%)  ???:<rustc_middle::ty::sty::Binder<rustc_middle::ty::PredicateKind> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_middle::ty::erase_regions::RegionEraserVisitor>
     1,033,275 ( 0.15%)  ???:rustc_middle::ty::util::fold_list::<rustc_middle::ty::subst::SubstFolder, rustc_middle::ty::Predicate, <&rustc_middle::ty::list::List<rustc_middle::ty::Predicate> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_middle::ty::subst::SubstFolder>::{closure#0}>
     1,030,852 ( 0.15%)  ???:rustc_trait_selection::traits::project::confirm_param_env_candidate
     1,029,555 ( 0.15%)  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::subst::GenericArg>>::extend::<core::iter::adapters::ResultShunt<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_typeck::check::writeback::EraseEarlyRegions>::{closure#0}>, !>>
     1,029,495 ( 0.15%)  ???:<dyn rustc_typeck::astconv::AstConv>::res_to_ty
    -1,021,410 (-0.15%)  ???:<&rustc_middle::ty::TyS as rustc_middle::ty::context::InternIteratorElement<&rustc_middle::ty::TyS, &rustc_middle::ty::TyS>>::intern_with::<core::iter::adapters::map::Map<core::slice::iter::Iter<rustc_hir::hir::Ty>, <dyn rustc_typeck::astconv::AstConv>::ast_ty_to_ty_inner::{closure#0}>, <rustc_middle::ty::context::TyCtxt>::mk_tup<core::iter::adapters::map::Map<core::slice::iter::Iter<rustc_hir::hir::Ty>, <dyn rustc_typeck::astconv::AstConv>::ast_ty_to_ty_inner::{closure#0}>>::{closure#0}>
     1,021,410 ( 0.15%)  ???:<core::iter::adapters::map::Map<core::slice::iter::Iter<rustc_hir::hir::Ty>, <dyn rustc_typeck::astconv::AstConv>::ast_ty_to_ty_inner::{closure#0}> as rustc_middle::ty::context::InternAs<[&rustc_middle::ty::TyS], &rustc_middle::ty::TyS>>::intern_with::<<rustc_middle::ty::context::TyCtxt>::mk_tup<core::iter::adapters::map::Map<core::slice::iter::Iter<rustc_hir::hir::Ty>, <dyn rustc_typeck::astconv::AstConv>::ast_ty_to_ty_inner::{closure#0}>>::{closure#0}>
     1,019,283 ( 0.15%)  ???:<rustc_middle::ty::adt::AdtDef>::uninhabited_from
    -1,013,857 (-0.14%)  ???:<rustc_borrowck::type_check::MirTypeckRegionConstraints>::placeholder_region
     1,007,912 ( 0.14%)  ???:<rustc_borrowck::region_infer::RegionInferenceContext>::solve
    -1,006,500 (-0.14%)  ???:<rustc_middle::infer::canonical::Canonical<rustc_middle::infer::canonical::QueryResponse<rustc_middle::traits::query::NormalizationResult>> as rustc_infer::infer::canonical::substitute::CanonicalExt<rustc_middle::infer::canonical::QueryResponse<rustc_middle::traits::query::NormalizationResult>>>::substitute_projected::<rustc_middle::ty::subst::GenericArg, <rustc_infer::infer::InferCtxt>::unify_query_response_substitution_guess<rustc_middle::traits::query::NormalizationResult>::{closure#0}::{closure#0}>
      -997,539 (-0.14%)  ???:<rustc_data_structures::graph::scc::SccsConstruction<rustc_borrowck::constraints::graph::RegionGraph<rustc_borrowck::constraints::graph::Normal>, rustc_borrowck::constraints::ConstraintSccIndex>>::start_walk_from
      -951,825 (-0.14%)  ???:<rustc_infer::infer::InferCtxt>::commit_unconditionally::<core::result::Result<alloc::vec::Vec<rustc_infer::traits::Obligation<rustc_middle::ty::Predicate>>, rustc_middle::traits::SelectionError>, <rustc_trait_selection::traits::select::SelectionContext>::confirm_projection_candidate::{closure#0}>
       950,097 ( 0.14%)  ???:<rustc_infer::infer::outlives::verify::VerifyBoundCx>::projection_declared_bounds_from_trait
      -938,927 (-0.13%)  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::subst::GenericArg>>::extend::<core::iter::adapters::ResultShunt<core::iter::adapters::map::Map<core::iter::adapters::enumerate::Enumerate<core::iter::adapters::zip::Zip<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>>>, rustc_middle::ty::relate::relate_substs<rustc_infer::infer::equate::Equate>::{closure#0}>, rustc_middle::ty::error::TypeError>>
       930,219 ( 0.13%)  ???:<rustc_infer::infer::InferCtxt as rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt>::predicate_must_hold_considering_regions
       922,632 ( 0.13%)  ???:<core::result::Result<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::ExistentialPredicate>, rustc_middle::ty::error::TypeError> as rustc_middle::ty::context::InternIteratorElement<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::ExistentialPredicate>, &rustc_middle::ty::list::List<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::ExistentialPredicate>>>>::intern_with::<core::iter::adapters::map::Map<core::iter::adapters::zip::Zip<alloc::vec::into_iter::IntoIter<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::ExistentialPredicate>>, alloc::vec::into_iter::IntoIter<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::ExistentialPredicate>>>, <&rustc_middle::ty::list::List<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::ExistentialPredicate>> as rustc_middle::ty::relate::Relate>::relate<rustc_infer::infer::combine::Generalizer>::{closure#2}>, <rustc_middle::ty::context::TyCtxt>::mk_poly_existential_predicates<core::iter::adapters::map::Map<core::iter::adapters::zip::Zip<alloc::vec::into_iter::IntoIter<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::ExistentialPredicate>>, alloc::vec::into_iter::IntoIter<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::ExistentialPredicate>>>, <&rustc_middle::ty::list::List<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::ExistentialPredicate>> as rustc_middle::ty::relate::Relate>::relate<rustc_infer::infer::combine::Generalizer>::{closure#2}>>::{closure#0}>
       914,194 ( 0.13%)  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::subst::GenericArg>>::extend::<core::iter::adapters::ResultShunt<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::resolve::FullTypeResolver>::{closure#0}>, rustc_infer::infer::FixupError>>
       904,624 ( 0.13%)  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/include/jemalloc/internal/rtree.h:realloc
       901,853 ( 0.13%)  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/include/jemalloc/internal/arena_inlines_b.h:_rjem_je_arena_ralloc
      -901,725 (-0.13%)  ???:<rustc_middle::ty::ParamEnvAnd<rustc_middle::traits::query::type_op::ProvePredicate> as rustc_trait_selection::traits::query::type_op::TypeOp>::fully_perform
       895,096 ( 0.13%)  ???:rustc_middle::ty::util::fold_list::<rustc_middle::ty::fold::BoundVarReplacer, rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::ExistentialPredicate>, <&rustc_middle::ty::list::List<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::ExistentialPredicate>> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_middle::ty::fold::BoundVarReplacer>::{closure#0}>
       887,169 ( 0.13%)  ???:rustc_middle::ty::relate::relate_substs::<rustc_infer::infer::sub::Sub>
       844,748 ( 0.12%)  ???:<rustc_middle::ty::PredicateKind as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_middle::ty::erase_regions::RegionEraserVisitor>
       840,008 ( 0.12%)  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/include/jemalloc/internal/jemalloc_internal_inlines_c.h:realloc
       839,774 ( 0.12%)  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/src/hook.c:_rjem_je_hook_invoke_alloc
       839,774 ( 0.12%)  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/src/hook.c:_rjem_je_hook_invoke_dalloc
       837,922 ( 0.12%)  ???:<rustc_borrowck::region_infer::values::PlaceholderIndices>::insert
       826,261 ( 0.12%)  ???:<rustc_middle::ty::sty::ExistentialPredicate as rustc_middle::ty::fold::TypeFoldable>::visit_with::<rustc_middle::ty::fold::HasEscapingVarsVisitor>
      -823,411 (-0.12%)  ???:<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::ExistentialPredicate> as rustc_middle::ty::fold::TypeFoldable>::super_visit_with::<rustc_middle::ty::fold::HasEscapingVarsVisitor>
      -811,861 (-0.12%)  ???:<rustc_infer::infer::combine::Generalizer as rustc_middle::ty::relate::TypeRelation>::tys
       808,538 ( 0.12%)  ???:core::iter::adapters::process_results::<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::resolve::FullTypeResolver>::{closure#0}>, rustc_middle::ty::subst::GenericArg, rustc_infer::infer::FixupError, <core::result::Result<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]>, rustc_infer::infer::FixupError> as core::iter::traits::collect::FromIterator<core::result::Result<rustc_middle::ty::subst::GenericArg, rustc_infer::infer::FixupError>>>::from_iter<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_infer::infer::resolve::FullTypeResolver>::{closure#0}>>::{closure#0}, smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]>>
       808,500 ( 0.12%)  ???:rustc_infer::infer::canonical::substitute::substitute_value::<rustc_middle::ty::subst::GenericArg>
       805,526 ( 0.11%)  ???:<rustc_lint::BuiltinCombinedLateLintPass as rustc_lint::passes::LateLintPass>::check_expr
       804,398 ( 0.11%)  ???:rustc_borrowck::renumber::renumber_regions::<&rustc_middle::ty::TyS>::{closure#0}
      -804,398 (-0.11%)  ???:rustc_borrowck::renumber::renumber_regions::<&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg>>::{closure#0}
      -804,179 (-0.11%)  ???:<rustc_infer::infer::canonical::canonicalizer::CanonicalizeQueryResponse as rustc_infer::infer::canonical::canonicalizer::CanonicalizeRegionMode>::canonicalize_free_region
      -801,471 (-0.11%)  ???:<rustc_middle::ty::Predicate as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_trait_selection::traits::project::AssocTypeNormalizer>
       797,242 ( 0.11%)  ???:<rustc_typeck::check::fn_ctxt::FnCtxt>::check_struct_path
       775,392 ( 0.11%)  /rustc///library/std/src/sys/unix/alloc.rs:__rdl_realloc
      -773,610 (-0.11%)  ???:<rustc_trait_selection::traits::select::SelectionContext>::match_normalize_trait_ref
       769,986 ( 0.11%)  ???:<hashbrown::map::RawEntryBuilder<rustc_middle::infer::canonical::Canonical<rustc_middle::ty::ParamEnvAnd<rustc_middle::traits::query::type_op::AscribeUserType>>, (core::result::Result<&rustc_middle::infer::canonical::Canonical<rustc_middle::infer::canonical::QueryResponse<()>>, rustc_middle::traits::query::NoSolution>, rustc_query_system::dep_graph::graph::DepNodeIndex), core::hash::BuildHasherDefault<rustc_hash::FxHasher>>>::from_key_hashed_nocheck::<rustc_middle::infer::canonical::Canonical<rustc_middle::ty::ParamEnvAnd<rustc_middle::traits::query::type_op::AscribeUserType>>>
       740,150 ( 0.11%)  ???:<rustc_middle::ty::PredicateKind as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_middle::ty::subst::SubstFolder>
       739,848 ( 0.11%)  ???:<rustc_infer::traits::util::Elaborator as core::iter::traits::iterator::Iterator>::next
       731,829 ( 0.10%)  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]> as core::iter::traits::collect::Extend<rustc_middle::ty::subst::GenericArg>>::extend::<core::iter::adapters::ResultShunt<core::iter::adapters::map::Map<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with<rustc_typeck::check::writeback::Resolver>::{closure#0}>, !>>
       724,228 ( 0.10%)  ???:<&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_trait_selection::traits::query::normalize::QueryNormalizer>
       719,145 ( 0.10%)  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/src/arena.c:arena_dalloc_bin_locked_impl
      -712,878 (-0.10%)  ???:<hashbrown::raw::RawIterHash<(u32, ())> as core::iter::traits::iterator::Iterator>::next
      -712,022 (-0.10%)  ???:<rustc_trait_selection::traits::select::SelectionContext>::rematch_impl
       710,776 ( 0.10%)  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/include/jemalloc/internal/sz.h:realloc
      -710,149 (-0.10%)  ???:<rustc_typeck::check::fn_ctxt::FnCtxt>::write_user_type_annotation_from_substs
       705,158 ( 0.10%)  ???:<&rustc_middle::ty::list::List<&rustc_middle::ty::TyS> as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_infer::infer::canonical::canonicalizer::Canonicalizer>
       701,099 ( 0.10%)  ???:<rustc_middle::ty::fold::LateBoundRegionsCollector as rustc_middle::ty::fold::TypeVisitor>::visit_ty

--------------------------------------------------------------------------------
The following files chosen for auto-annotation could not be found:
--------------------------------------------------------------------------------
  ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S
  /rustc///library/std/src/sys/unix/alloc.rs
  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/include/jemalloc/internal/arena_inlines_b.h
  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/include/jemalloc/internal/cache_bin.h
  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/include/jemalloc/internal/jemalloc_internal_inlines_c.h
  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/include/jemalloc/internal/rtree.h
  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/include/jemalloc/internal/sz.h
  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/include/jemalloc/internal/tcache_inlines.h
  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/src/arena.c
  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/src/hook.c
  /rustc//obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/tikv-jemalloc-sys-fde45a9a697cc078/out/build/src/jemalloc.c

I haven't yet made sense of this result, but from a first glance I'm wondering if maybe a cache is no longer being used to the same degree. For example, the early/short-circuiting return in the event of error that is introduced just before this cache insertion:

})()?;
self.cache.insert(ty, res);

That said, I'm not convinced this is the actual source of the regression, so I'll keep digging... unless anything obvious jumps out at a more seasoned mind in the interim?

@eggyal
Copy link
Contributor Author

eggyal commented Nov 26, 2021

Per discussion on Zulip the perf regression here is suspected to be due LLVM's PGO decisions.

@rustbot label: +perf-regression-triaged

Marking ready for review.

@rustbot rustbot added the perf-regression-triaged The performance regression has been triaged. label Nov 26, 2021
@eggyal eggyal marked this pull request as ready for review November 26, 2021 14:10
Copy link
Member

@jackh726 jackh726 left a comment

Choose a reason for hiding this comment

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

A couple comments, but mostly good.

One thought I had while reading this is it does introduce quite a bit of boilerplate for the few fallible cases. I wonder if there is some way to encode this into the trait to make it nicer? That would be in a followup regardless.

compiler/rustc_data_structures/src/functor.rs Outdated Show resolved Hide resolved
compiler/rustc_data_structures/src/functor.rs Show resolved Hide resolved
compiler/rustc_infer/src/infer/fudge.rs Show resolved Hide resolved
compiler/rustc_middle/src/ty/subst.rs Outdated Show resolved Hide resolved
@eggyal
Copy link
Contributor Author

eggyal commented Nov 28, 2021

it does introduce quite a bit of boilerplate for the few fallible cases. I wonder if there is some way to encode this into the trait to make it nicer?

I pushed 9f714ef, which delegates from IdFunctor::map_id to IdFunctor::try_map_id—is this what you meant? Otherwise not sure what you have in mind: do you mean to expose an infallible TypeFolder API that (similar now with this commit to IdFunctor) delegates to the fallible version?

In fact, I wonder whether map_id is even needed anymore (all usages have been replaced with try_map_id): does the presence of IdFunctor in rustc_data_structures (aside: it isn't a data structure!) mandate any stability or generality that forces us to keep the infallible version?

@jackh726
Copy link
Member

I do mean altering the TypeFolder api, yes. But definitely for followup, if at all.

AFAIK, rustc_data_structures has no stability requirements. But removing map_id could be done in a followup PR.

This LGTM. @bors r+

@bors
Copy link
Contributor

bors commented Nov 28, 2021

📌 Commit afa6f92 has been approved by jackh726

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Nov 28, 2021
@LeSeulArtichaut
Copy link
Contributor

Thanks for picking this up @eggyal!

@bors
Copy link
Contributor

bors commented Nov 28, 2021

⌛ Testing commit afa6f92 with merge e6d2de9...

@bors
Copy link
Contributor

bors commented Nov 28, 2021

☀️ Test successful - checks-actions
Approved by: jackh726
Pushing e6d2de9 to master...

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (e6d2de9): comparison url.

Summary: This change led to large relevant mixed results 🤷 in compiler performance.

  • Large improvement in instruction counts (up to -1.0% on incr-full builds of deeply-nested-async)
  • Large regression in instruction counts (up to 4.0% on incr-unchanged builds of deep-vector)

If you disagree with this performance assessment, please file an issue in rust-lang/rustc-perf.

Next Steps: If you can justify the regressions found in this perf run, please indicate this with @rustbot label: +perf-regression-triaged along with sufficient written justification. If you cannot justify the regressions please open an issue or create a new PR that fixes the regressions, add a comment linking to the newly created issue or PR, and then add the perf-regression-triaged label to this PR.

@rustbot label: +perf-regression

bors added a commit to rust-lang-ci/rust that referenced this pull request Dec 2, 2021
…llible-folders, r=jackh726

Reduce boilerplate around infallible folders

Further to rust-lang#91230 (comment)

r? `@jackh726`
@eggyal
Copy link
Contributor Author

eggyal commented Dec 3, 2021

It's curious how the post-merge perf result is so different to the pre-merge result at #91230 (comment) (that was put down to LLVM/PGO optimisations). I don't think anything material changed in this PR between the two runs, so I guess something material was merged in the interim. Nevertheless:

cachegrind diff for the worst scenario (deep-vector incr-unchanged opt)
--------------------------------------------------------------------------------
Files compared:   results/cgfilt-58f9efd36de5669ab731ec7ebf565999ff17b159-deep-vector-Opt-IncrUnchanged; results/cgfilt-e6d2de9483a27f846f003fc745713339a9122473-deep-vector-Opt-IncrUnchanged
Command:          /usr/local/rustup/toolchains/58f9efd36de5669ab731ec7ebf565999ff17b159/bin/rustc --crate-name issue_20936_deep_vector src/main.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type bin --emit=dep-info,link -C opt-level=3 -C embed-bitcode=no -C incremental=/tmp/.tmpqTejpe/incremental-state -C metadata=25fd8fe3e189cc31 -C extra-filename=-25fd8fe3e189cc31 --out-dir /tmp/.tmpqTejpe/target/release/deps -L dependency=/tmp/.tmpqTejpe/target/release/deps -Adeprecated -Aunknown-lints; /usr/local/rustup/toolchains/e6d2de9483a27f846f003fc745713339a9122473/bin/rustc --crate-name issue_20936_deep_vector src/main.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type bin --emit=dep-info,link -C opt-level=3 -C embed-bitcode=no -C incremental=/tmp/.tmpnAqTP8/incremental-state -C metadata=25fd8fe3e189cc31 -C extra-filename=-25fd8fe3e189cc31 --out-dir /tmp/.tmpnAqTP8/target/release/deps -L dependency=/tmp/.tmpnAqTP8/target/release/deps -Adeprecated -Aunknown-lints
Data file:        results/cgdiff-58f9efd36de5669ab731ec7ebf565999ff17b159-e6d2de9483a27f846f003fc745713339a9122473-deep-vector-Opt-IncrUnchanged
Events recorded:  Ir
Events shown:     Ir
Event sort order: Ir
Thresholds:       0.1
Include dirs:     
User annotated:   
Auto-annotation:  on

--------------------------------------------------------------------------------
Ir                   
--------------------------------------------------------------------------------
112,838,555 (100.0%)  PROGRAM TOTALS

--------------------------------------------------------------------------------
Ir                   file:function
--------------------------------------------------------------------------------
31,658,256 (28.06%)  ???:<rustc_data_structures::sip128::SipHasher128>::short_write_process_buffer::<u64>
26,717,744 (23.68%)  ???:<rustc_data_structures::sip128::SipHasher128>::slice_write_process_buffer
14,993,707 (13.29%)  ???:<rustc_span::span_encoding::Span as rustc_data_structures::stable_hasher::HashStable<rustc_query_system::ich::hcx::StableHashingContext>>::hash_stable
11,579,095 (10.26%)  ???:<rustc_span::caching_source_map_view::CachingSourceMapView>::span_data_to_lines_and_cols
 9,808,597 ( 8.69%)  ???:<&rustc_middle::ty::consts::Const as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_middle::ty::subst::SubstFolder>
-7,767,094 (-6.88%)  ???:<rustc_middle::ty::subst::SubstFolder as rustc_middle::ty::fold::TypeFolder>::fold_const
 6,594,450 ( 5.84%)  ???:<rustc_middle::mir::interpret::value::ConstValue as rustc_data_structures::stable_hasher::HashStable<rustc_query_system::ich::hcx::StableHashingContext>>::hash_stable
-6,254,706 (-5.54%)  ???:<rustc_middle::mir::Operand as rustc_serialize::serialize::Decodable<rustc_query_impl::on_disk_cache::CacheDecoder>>::decode
 5,437,055 ( 4.82%)  ???:<rustc_middle::ty::sty::TyKind as rustc_data_structures::stable_hasher::HashStable<rustc_query_system::ich::hcx::StableHashingContext>>::hash_stable
 5,166,784 ( 4.58%)  ???:<rustc_middle::mir::Constant as rustc_data_structures::stable_hasher::HashStable<rustc_query_system::ich::hcx::StableHashingContext>>::hash_stable
 4,522,266 ( 4.01%)  ???:<rustc_data_structures::sip128::SipHasher128>::short_write_process_buffer::<u32>
 4,316,982 ( 3.83%)  ???:<&rustc_middle::ty::consts::Const as rustc_data_structures::stable_hasher::HashStable<rustc_query_system::ich::hcx::StableHashingContext>>::hash_stable
 3,399,174 ( 3.01%)  ???:<[rustc_middle::mir::Operand] as rustc_data_structures::stable_hasher::HashStable<rustc_query_system::ich::hcx::StableHashingContext>>::hash_stable
 2,855,457 ( 2.53%)  ???:<rustc_query_impl::on_disk_cache::CacheDecoder as rustc_serialize::serialize::Decoder>::read_seq::<alloc::vec::Vec<rustc_middle::mir::Operand>, <alloc::vec::Vec<rustc_middle::mir::Operand> as rustc_serialize::serialize::Decodable<rustc_query_impl::on_disk_cache::CacheDecoder>>::decode::{closure
  -815,908 (-0.72%)  ???:<rustc_middle::hir::map::Map>::attrs
   679,859 ( 0.60%)  ???:<rustc_lint::BuiltinCombinedLateLintPass as rustc_lint::passes::LateLintPass>::check_expr
   543,882 ( 0.48%)  ???:<rustc_middle::ty::context::TyCtxt>::subst_and_normalize_erasing_regions::<rustc_middle::mir::ConstantKind>
  -408,957 (-0.36%)  ???:rustc_middle::ty::context::tls::TLV::__getit
   135,981 ( 0.12%)  ???:<rustc_middle::ty::TyS as rustc_data_structures::stable_hasher::HashStable<rustc_query_system::ich::hcx::StableHashingContext>>::hash_stable
  -135,969 (-0.12%)  ???:<rustc_lint::early::EarlyContextAndPass<rustc_lint::BuiltinCombinedEarlyLintPass> as rustc_ast::visit::Visitor>::visit_expr

Some material differences there in hashing, perhaps indicating a difference in cache use—possibly around resolving consts?

Because I don't think this is due to PGO:
@rustbot label: -perf-regression-triaged

@rustbot
Copy link
Collaborator

rustbot commented Dec 3, 2021

Error: Label because can only be set by Rust team members

Please let @rust-lang/release know if you're having trouble with this bot.

@rustbot rustbot removed the perf-regression-triaged The performance regression has been triaged. label Dec 3, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
merged-by-bors This PR was explicitly merged by bors. perf-regression Performance regression. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants