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

Split dead store elimination off dest prop #97158

Merged
merged 3 commits into from
May 28, 2022
Merged

Conversation

JakobDegen
Copy link
Contributor

This splits off a part of #96451 . I've added this in as its own pass for now, so that it actually runs, can be tested, etc. In the dest prop PR, I'll stop invoking this as its own pass, so that it doesn't get invoked twice.

r? @tmiasko

@rustbot rustbot added the T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. label May 18, 2022
@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label May 18, 2022
@tmiasko
Copy link
Contributor

tmiasko commented May 19, 2022

@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 May 19, 2022
@bors
Copy link
Contributor

bors commented May 19, 2022

⌛ Trying commit e54b7e0a6573ca8eb8a308363449835b27647cbd with merge edc0389da8df533107b33d6dba3ef7021209ede0...

@bors
Copy link
Contributor

bors commented May 19, 2022

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

@rust-timer
Copy link
Collaborator

Queued edc0389da8df533107b33d6dba3ef7021209ede0 with parent 67a9bcb, future comparison URL.

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (edc0389da8df533107b33d6dba3ef7021209ede0): comparison url.

Instruction count

  • Primary benchmarks: mixed results
  • Secondary benchmarks: mixed results
Regressions 😿
(primary)
Regressions 😿
(secondary)
Improvements 🎉
(primary)
Improvements 🎉
(secondary)
All 😿 🎉
(primary)
count1 12 10 36 16 48
mean2 0.4% 0.5% -0.5% -0.7% -0.3%
max 0.7% 2.1% -1.8% -1.8% -1.8%

Max RSS (memory usage)

Results
  • Primary benchmarks: 🎉 relevant improvements found
  • Secondary benchmarks: mixed results
Regressions 😿
(primary)
Regressions 😿
(secondary)
Improvements 🎉
(primary)
Improvements 🎉
(secondary)
All 😿 🎉
(primary)
count1 0 2 10 7 10
mean2 N/A 46.2% -2.9% -1.9% -2.9%
max N/A 49.5% -7.8% -3.3% -7.8%

Cycles

Results
  • Primary benchmarks: mixed results
  • Secondary benchmarks: 🎉 relevant improvement found
Regressions 😿
(primary)
Regressions 😿
(secondary)
Improvements 🎉
(primary)
Improvements 🎉
(secondary)
All 😿 🎉
(primary)
count1 1 0 2 1 3
mean2 1.9% N/A -2.3% -2.1% -0.9%
max 1.9% N/A -3.4% -2.1% -3.4%

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 may lead 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

Footnotes

  1. number of relevant changes 2 3

  2. the arithmetic mean of the percent change 2 3

@rustbot rustbot added perf-regression Performance regression. and removed S-waiting-on-perf Status: Waiting on a perf run to be completed. labels May 19, 2022
@tmiasko tmiasko added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels May 19, 2022
@JakobDegen
Copy link
Contributor Author

The update should address all the outstanding review comments. I've also added in a check that ensure we don't optimize out ptr2int casts. Once CI passes, I'll restart perf as well

@JakobDegen
Copy link
Contributor Author

@bors try @rust-timer queue

@rustbot ready

Oh also, I still need to add some actual tests. Kind of forgot to do that because of all the existing MIR opt tests this affects

@rust-timer
Copy link
Collaborator

Awaiting bors try build completion.

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

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. S-waiting-on-perf Status: Waiting on a perf run to be completed. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels May 21, 2022
@bors
Copy link
Contributor

bors commented May 21, 2022

⌛ Trying commit e17fcacd7035e80d6ceab06aee48da58a675c9e1 with merge ee288a61fe1e3c195eeadd3527ccf09eddf63506...

@bors
Copy link
Contributor

bors commented May 21, 2022

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

@rust-timer
Copy link
Collaborator

Queued ee288a61fe1e3c195eeadd3527ccf09eddf63506 with parent e6a4afc, future comparison URL.

@JakobDegen
Copy link
Contributor Author

Interesting. The test failed because bors turns off optimizations for tests. I've asked T-Infra on Zulip, also cc @cjgillot who answered questions about these tests last time I had one and may want to weigh in

@cjgillot
Copy link
Contributor

The simplest way would be to force either optimization or no-optimization on those tests.

@JakobDegen
Copy link
Contributor Author

For all incremental tests or just for those?

@cjgillot
Copy link
Contributor

All those in the hashes directory. Could you add make them optimized -O by default?
The no-optimization case can be tested by annotating for mir_for_ctfe (no need to do it in this PR, I'll file an issue).

@JakobDegen
Copy link
Contributor Author

@cjgillot done. There were two files (enum_constructors.rs and closure_expressions.rs) that were using -Zmir-opt-level=0 for presumably the same reason as I was considering it. I've also switched these, and removed the optimized_mir annotations as appropriate

@cjgillot
Copy link
Contributor

@bors r=tmiasko,cjgillot

@bors
Copy link
Contributor

bors commented May 28, 2022

📌 Commit 7a99da1 has been approved by tmiasko,cjgillot

@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 May 28, 2022
@bors
Copy link
Contributor

bors commented May 28, 2022

⌛ Testing commit 7a99da1 with merge 6831417...

@bors
Copy link
Contributor

bors commented May 28, 2022

☀️ Test successful - checks-actions
Approved by: tmiasko,cjgillot
Pushing 6831417 to master...

@bors bors added the merged-by-bors This PR was explicitly merged by bors. label May 28, 2022
@bors bors merged commit 6831417 into rust-lang:master May 28, 2022
@rustbot rustbot added this to the 1.63.0 milestone May 28, 2022
@rust-highfive
Copy link
Collaborator

📣 Toolstate changed by #97158!

Tested on commit 6831417.
Direct link to PR: #97158

💔 miri on windows: test-pass → test-fail (cc @oli-obk @eddyb @RalfJung).
💔 miri on linux: test-pass → test-fail (cc @oli-obk @eddyb @RalfJung).

rust-highfive added a commit to rust-lang-nursery/rust-toolstate that referenced this pull request May 28, 2022
Tested on commit rust-lang/rust@6831417.
Direct link to PR: <rust-lang/rust#97158>

💔 miri on windows: test-pass → test-fail (cc @oli-obk @eddyb @RalfJung).
💔 miri on linux: test-pass → test-fail (cc @oli-obk @eddyb @RalfJung).
@rust-timer
Copy link
Collaborator

Finished benchmarking commit (6831417): comparison url.

Instruction count

  • Primary benchmarks: mixed results
  • Secondary benchmarks: mixed results
mean1 max count2
Regressions 😿
(primary)
0.5% 1.3% 15
Regressions 😿
(secondary)
0.6% 2.3% 12
Improvements 🎉
(primary)
-0.4% -1.9% 50
Improvements 🎉
(secondary)
-0.6% -1.3% 33
All 😿🎉 (primary) -0.2% -1.9% 65

Max RSS (memory usage)

Results
  • Primary benchmarks: 🎉 relevant improvements found
  • Secondary benchmarks: mixed results
mean1 max count2
Regressions 😿
(primary)
N/A N/A 0
Regressions 😿
(secondary)
2.4% 2.4% 1
Improvements 🎉
(primary)
-2.0% -7.3% 6
Improvements 🎉
(secondary)
-1.8% -2.2% 4
All 😿🎉 (primary) -2.0% -7.3% 6

Cycles

Results
  • Primary benchmarks: 🎉 relevant improvements found
  • Secondary benchmarks: no relevant changes found
mean1 max count2
Regressions 😿
(primary)
N/A N/A 0
Regressions 😿
(secondary)
N/A N/A 0
Improvements 🎉
(primary)
-2.2% -2.4% 2
Improvements 🎉
(secondary)
N/A N/A 0
All 😿🎉 (primary) -2.2% -2.4% 2

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

Footnotes

  1. the arithmetic mean of the percent change 2 3

  2. number of relevant changes 2 3

@RalfJung RalfJung mentioned this pull request May 28, 2022
@JakobDegen
Copy link
Contributor Author

For perf triage:

In non-opt builds, things generally improved which means we are optimizing quite some things that LLVM doesn't catch. The only regressions are in bitmaps and some wg-grammar stuff. I checked with cachegrind, it points to try_mark_previous_green in DepGraph as being a possible culprit, but I have no idea why. Possibly LLVM noise?

For opt builds, some things slowed down. This is to be expected to some extent, since rustc is optimizing things it wasn't before and so doing more work. I ran cachegrind on a couple of the slower benchmarks and nothing stood out to me. The serde full one is reproduced below if anyone else wants to take a look. Likely the only way to improve upon the regressions is to make this pass faster. That is certainly desirable, but I don't know of any low hanging fruit there.

Serde Full Cachegrind
-71,093,539  ???:<rustc_mir_dataflow::move_paths::MoveData>::gather_moves
 70,396,361  ???:rustc_mir_dataflow::move_paths::builder::gather_moves
 25,079,029  ???:rustc_infer::infer::lexical_region_resolve::resolve
-24,646,889  ???:<rustc_infer::infer::lexical_region_resolve::LexicalResolver>::infer_variable_values
 16,357,213  ???:<rustc_mir_transform::dead_store_elimination::DeadStoreElimination as rustc_middle::mir::MirPass>::run_pass
 13,473,813  ???:<rustc_mir_dataflow::impls::liveness::MaybeTransitiveLiveLocals as rustc_mir_dataflow::framework::Analysis>::apply_statement_effect
 13,388,107  ???:<rustc_mir_dataflow::framework::direction::Backward as rustc_mir_dataflow::framework::direction::Direction>::join_state_into_successors_of::<rustc_mir_dataflow::impls::liveness::MaybeTransitiveLiveLocals, <rustc_mir_dataflow::framework::engine::Engine<rustc_mir_dataflow::impls::liveness::MaybeTransitiveLiveLocals>>::iterate_to_fixpoint::{closure#0}>
-10,671,487  ???:<&rustc_middle::ty::list::List<rustc_middle::ty::Predicate> as rustc_middle::ty::fold::TypeFoldable>::try_fold_with::<rustc_middle::ty::fold::BoundVarReplacer>
 10,671,487  ???: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>::try_super_fold_with<rustc_middle::ty::fold::BoundVarReplacer>::{closure#0}>
 -9,923,870  ???:<rustc_mir_dataflow::framework::engine::Engine<rustc_mir_dataflow::impls::MaybeInitializedPlaces>>::new_gen_kill
  9,910,702  ???:<rustc_mir_dataflow::impls::MaybeInitializedPlaces as rustc_mir_dataflow::framework::Analysis>::into_engine
  9,348,728  ???:<rustc_mir_dataflow::framework::engine::Engine<rustc_mir_dataflow::impls::liveness::MaybeTransitiveLiveLocals>>::iterate_to_fixpoint
 -8,528,264  ???:llvm::AnalysisUsage::setPreservesCFG()
  8,526,920  ???:llvm::PassRegistry::enumerateWith(llvm::PassRegistrationListener*)
  7,329,210  ???:<rustc_mir_transform::simplify::CfgSimplifier>::simplify
  7,168,966  ???:<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>>
 -6,921,105  ???:<&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::try_fold_with::<rustc_middle::ty::fold::BoundVarReplacer>
  6,325,596  ???:<rustc_middle::mir::traversal::Postorder as core::iter::traits::iterator::Iterator>::next
  6,228,009  ???:???
  5,789,048  ???:<rustc_middle::ty::subst::SubstFolder as rustc_middle::ty::fold::FallibleTypeFolder>::try_fold_ty
 -5,724,272  ???:<rustc_infer::infer::sub::Sub as rustc_middle::ty::relate::TypeRelation>::relate::<rustc_middle::ty::Ty>
  5,525,146  ???:<rustc_middle::mir::traversal::Preorder as core::iter::traits::iterator::Iterator>::next
 -5,429,505  ???:<rustc_infer::infer::combine::CombineFields>::instantiate
  4,792,974  ???:<rustc_middle::ty::Ty as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_middle::ty::fold::BoundVarReplacer>
  4,763,518  ???: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>::try_super_fold_with<rustc_infer::infer::canonical::canonicalizer::Canonicalizer>::{closure#0}>
  4,711,782  ???:<rustc_mir_dataflow::impls::MaybeUninitializedPlaces as rustc_mir_dataflow::framework::Analysis>::into_engine
 -4,708,278  ???:<rustc_mir_dataflow::framework::engine::Engine<rustc_mir_dataflow::impls::MaybeUninitializedPlaces>>::new_gen_kill
  4,523,699  ???:<rustc_infer::infer::sub::Sub as rustc_middle::ty::relate::TypeRelation>::relate_with_variance::<rustc_middle::ty::subst::GenericArg>
 -4,374,137  ???:<rustc_middle::ty::Ty as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_middle::ty::subst::SubstFolder>
 -4,317,895  ???:<rustc_infer::infer::InferCtxt>::resolve_regions_and_report_errors
 -4,142,844  ???:llvm::SimplifyCFGPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&)
  3,927,924  ???:simplifyFunctionCFG(llvm::Function&, llvm::TargetTransformInfo const&, llvm::DominatorTree*, llvm::SimplifyCFGOptions const&) [clone 
  3,894,729  ???:<rustc_infer::infer::equate::Equate as rustc_middle::ty::relate::TypeRelation>::tys
  3,590,876  ???:<rustc_mir_dataflow::impls::liveness::MaybeTransitiveLiveLocals as rustc_mir_dataflow::framework::Analysis>::apply_terminator_effect
 -3,568,431  ???:<alloc::rc::Rc<rustc_middle::traits::ObligationCauseCode> as core::ops::drop::Drop>::drop
  3,451,985  ???:<rustc_index::bit_set::ChunkedBitSet<rustc_mir_dataflow::move_paths::InitIndex>>::insert
  3,261,273  ???:<rustc_mir_transform::simplify::SimplifyCfg as rustc_middle::mir::MirPass>::run_pass
  3,231,830  ???:<rustc_middle::mir::tcx::PlaceTy>::projection_ty
  3,144,036  ???:<rustc_middle::ty::Ty as rustc_middle::ty::fold::TypeFoldable>::try_fold_with::<rustc_middle::ty::subst::SubstFolder>
 -3,094,406  ???:<rustc_middle::ty::subst::SubstFolder as rustc_middle::ty::fold::TypeFolder>::fold_ty
  3,071,092  ???:<rustc_infer::infer::equate::Equate as rustc_middle::ty::relate::TypeRelation>::relate::<rustc_middle::ty::Ty>
  2,791,368  ???:<alloc::vec::Vec<rustc_index::bit_set::ChunkedBitSet<rustc_middle::mir::Local>>>::extend_with::<alloc::vec::ExtendElement<rustc_index::bit_set::ChunkedBitSet<rustc_middle::mir::Local>>>
  2,756,022  ???:<rustc_middle::ty::subst::GenericArg as rustc_middle::ty::fold::TypeFoldable>::try_fold_with::<rustc_middle::ty::fold::BoundVarReplacer>
  2,740,564  ???:<alloc::vec::Vec<rustc_middle::ty::Predicate> as alloc::vec::spec_extend::SpecExtend<rustc_middle::ty::Predicate, core::iter::adapters::map::Map<core::slice::iter::Iter<(rustc_middle::ty::Predicate, rustc_span::span_encoding::Span)>, <rustc_middle::ty::generics::GenericPredicates>::instantiate_into::{closure#0}>>>::spec_extend
 -2,687,017  ???:<core::result::Result<rustc_middle::ty::subst::GenericArg, rustc_middle::ty::error::TypeError> as rustc_middle::ty::context::InternIteratorElement<rustc_middle::ty::subst::GenericArg, &rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg>>>::intern_with::<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_with_variances<rustc_infer::infer::sub::Sub>::{closure#0}>, <rustc_middle::ty::context::TyCtxt>::mk_substs<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_with_variances<rustc_infer::infer::sub::Sub>::{closure#0}>>::{closure#0}>
 -2,641,044  ???:rustc_mir_transform::simplify::simplify_locals
  2,499,888  ???:<rustc_middle::mir::Place>::is_indirect
  2,423,997  ???:<rustc_index::bit_set::ChunkedBitSet<rustc_middle::mir::Local> as rustc_mir_dataflow::framework::lattice::JoinSemiLattice>::join
  2,189,288  ???:<alloc::vec::Vec<(rustc_middle::ty::sty::RegionVid, rustc_middle::ty::sty::RegionVid)>>::retain::<<rustc_infer::infer::lexical_region_resolve::LexicalResolver>::expansion::{closure#0}>
  2,156,020  obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/jemalloc-sys-8de766d3318ac835/out/build/src/arena.c:_rjem_je_arena_cache_bin_fill_small
  2,104,508  ???:rustc_middle::ty::util::fold_list::<rustc_middle::ty::subst::SubstFolder, rustc_middle::ty::subst::GenericArg, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::try_super_fold_with<rustc_middle::ty::subst::SubstFolder>::{closure#0}>
 -1,961,292  ???:<&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::try_fold_with::<rustc_middle::ty::subst::SubstFolder>
  1,900,171  include/jemalloc/internal/rtree.h:free
  1,881,739  ???:<rustc_middle::ty::subst::GenericArg as rustc_middle::ty::fold::TypeFoldable>::visit_with::<rustc_privacy::DefIdVisitorSkeleton<rustc_privacy::TypePrivacyVisitor>>
  1,741,974  ???:<rustc_infer::infer::canonical::canonicalizer::Canonicalizer as rustc_middle::ty::fold::TypeFolder>::fold_region
  1,679,816  ???:core::ptr::drop_in_place::<rustc_middle::traits::ObligationCauseCode>
  1,600,900  include/jemalloc/internal/cache_bin.h:free
  1,496,993  ???:<rustc_middle::mir::patch::MirPatch>::patch_terminator
  1,403,293  include/jemalloc/internal/cache_bin.h:malloc
 -1,391,320  ???:rustc_data_structures::stable_hasher::stable_hash_reduce::<rustc_query_system::ich::hcx::StableHashingContext, (&rustc_hir::hir_id::ItemLocalId, &alloc::boxed::Box<[rustc_hir::hir::TraitCandidate]>), std::collections::hash::map::Iter<rustc_hir::hir_id::ItemLocalId, alloc::boxed::Box<[rustc_hir::hir::TraitCandidate]>>, <std::collections::hash::map::HashMap<rustc_hir::hir_id::ItemLocalId, alloc::boxed::Box<[rustc_hir::hir::TraitCandidate]>, core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as rustc_data_structures::stable_hasher::HashStable<rustc_query_system::ich::hcx::StableHashingContext>>::hash_stable::{closure#0}>
  1,378,935  ???:<rustc_span::symbol::Ident as rustc_serialize::serialize::Encodable<rustc_metadata::rmeta::encoder::EncodeContext>>::encode
  1,365,932  ???:rustc_data_structures::graph::dominators::dominators::<&rustc_middle::mir::Body>
 -1,263,548  ???:<rustc_infer::infer::combine::Generalizer as rustc_middle::ty::relate::TypeRelation>::tys
  1,194,180  ???:<rustc_middle::ty::fold::BoundVarReplacer as rustc_middle::ty::fold::FallibleTypeFolder>::try_fold_ty
 -1,173,404  ???:<rustc_span::span_encoding::Span as rustc_serialize::serialize::Encodable<rustc_metadata::rmeta::encoder::EncodeContext>>::encode
  1,168,441  obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/jemalloc-sys-8de766d3318ac835/out/build/src/jemalloc.c:free
  1,162,380  ???:<core::iter::adapters::map::Map<std::collections::hash::map::Iter<rustc_hir::hir_id::ItemLocalId, alloc::boxed::Box<[rustc_hir::hir::TraitCandidate]>>, rustc_data_structures::stable_hasher::stable_hash_reduce<rustc_query_system::ich::hcx::StableHashingContext, (&rustc_hir::hir_id::ItemLocalId, &alloc::boxed::Box<[rustc_hir::hir::TraitCandidate]>), std::collections::hash::map::Iter<rustc_hir::hir_id::ItemLocalId, alloc::boxed::Box<[rustc_hir::hir::TraitCandidate]>>, <std::collections::hash::map::HashMap<rustc_hir::hir_id::ItemLocalId, alloc::boxed::Box<[rustc_hir::hir::TraitCandidate]>, core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as rustc_data_structures::stable_hasher::HashStable<rustc_query_system::ich::hcx::StableHashingContext>>::hash_stable::{closure#0}>::{closure#0}> as core::iter::traits::iterator::Iterator>::fold::<u128, rustc_data_structures::stable_hasher::stable_hash_reduce<rustc_query_system::ich::hcx::StableHashingContext, (&rustc_hir::hir_id::ItemLocalId, &alloc::boxed::Box<[rustc_hir::hir::TraitCandidate]>), std::collections::hash::map::Iter<rustc_hir::hir_id::ItemLocalId, alloc::boxed::Box<[rustc_hir::hir::TraitCandidate]>>, <std::collections::hash::map::HashMap<rustc_hir::hir_id::ItemLocalId, alloc::boxed::Box<[rustc_hir::hir::TraitCandidate]>, core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as rustc_data_structures::stable_hasher::HashStable<rustc_query_system::ich::hcx::StableHashingContext>>::hash_stable::{closure#0}>::{closure#1}>
  1,077,379  ???:<rustc_borrowck::type_check::TypeChecker>::typeck_mir
 -1,075,995  ???:<rustc_middle::ty::subst::GenericArg as rustc_middle::ty::relate::Relate>::relate::<rustc_infer::infer::equate::Equate>
  1,075,410  ???:<&mut rustc_middle::ty::relate::relate_substs_with_variances<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
 -1,069,603  ???:<rustc_middle::ty::adt::AdtDef>::has_dtor
  1,064,806  ???:<rustc_middle::mir::terminator::Terminator>::successors_mut
 -1,043,182  ???:llvm::buildModuleSummaryIndex(llvm::Module const&, std::function<llvm::BlockFrequencyInfo* (llvm::Function const&)>, llvm::ProfileSummaryInfo*, std::function<llvm::StackSafetyInfo const* (llvm::Function const&)>)
  1,019,174  ???:<rustc_borrowck::type_check::TypeVerifier as rustc_middle::mir::visit::Visitor>::visit_body
  1,006,824  include/jemalloc/internal/jemalloc_internal_inlines_c.h:malloc
  1,001,664  ???:pthread_mutex_trylock
    928,944  ???:<rustc_middle::mir::terminator::Terminator>::successors
    893,268  ???:<rustc_infer::infer::sub::Sub as rustc_middle::ty::relate::TypeRelation>::relate_item_substs
    881,419  library/std/src/sys/unix/alloc.rs:__rdl_alloc
    873,952  ???:<core::iter::adapters::map::Map<std::collections::hash::map::Iter<rustc_span::def_id::LocalDefId, rustc_hir::hir_id::ItemLocalId>, rustc_data_structures::stable_hasher::stable_hash_reduce<rustc_query_system::ich::hcx::StableHashingContext, (&rustc_span::def_id::LocalDefId, &rustc_hir::hir_id::ItemLocalId), std::collections::hash::map::Iter<rustc_span::def_id::LocalDefId, rustc_hir::hir_id::ItemLocalId>, <std::collections::hash::map::HashMap<rustc_span::def_id::LocalDefId, rustc_hir::hir_id::ItemLocalId, core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as rustc_data_structures::stable_hasher::HashStable<rustc_query_system::ich::hcx::StableHashingContext>>::hash_stable::{closure#0}>::{closure#0}> as core::iter::traits::iterator::Iterator>::fold::<u128, rustc_data_structures::stable_hasher::stable_hash_reduce<rustc_query_system::ich::hcx::StableHashingContext, (&rustc_span::def_id::LocalDefId, &rustc_hir::hir_id::ItemLocalId), std::collections::hash::map::Iter<rustc_span::def_id::LocalDefId, rustc_hir::hir_id::ItemLocalId>, <std::collections::hash::map::HashMap<rustc_span::def_id::LocalDefId, rustc_hir::hir_id::ItemLocalId, core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as rustc_data_structures::stable_hasher::HashStable<rustc_query_system::ich::hcx::StableHashingContext>>::hash_stable::{closure#0}>::{closure#1}>
    835,813  ???:<rustc_data_structures::graph::implementation::Graph<(), rustc_infer::infer::region_constraints::Constraint>>::add_edge
   -796,440  ???:llvm::AnalysisManager<llvm::Function>::invalidate(llvm::Function&, llvm::PreservedAnalyses const&)
   -791,572  ???:<[(rustc_span::def_id::DefPathHash, &rustc_hir::hir::OwnerInfo)] as rustc_data_structures::stable_hasher::HashStable<rustc_query_system::ich::hcx::StableHashingContext>>::hash_stable
    774,203  ???:<rustc_index::bit_set::ChunkedBitSet<rustc_middle::mir::Local>>::remove
   -762,388  ???:<rustc_middle::ty::Ty>::fn_sig
    755,185  ???:llvm::FPPassManager::runOnFunction(llvm::Function&)
   -732,841  ???:<rustc_middle::ty::Predicate>::subst_supertrait
    713,622  ???:rustc_middle::mir::traversal::postorder
    704,365  ???:<rustc_infer::infer::free_regions::FreeRegionMap>::sub_free_regions
    697,578  obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/jemalloc-sys-8de766d3318ac835/out/build/src/jemalloc.c:calloc
    692,265  include/jemalloc/internal/rtree.h:_rjem_je_tcache_bin_flush_small
    691,850  library/core/src/slice/iter/macros.rs:core::slice::memchr::memrchr
   -691,173  ???:<rustc_infer::infer::InferCtxt>::commit_if_ok::<rustc_infer::infer::InferOk<rustc_middle::ty::Ty>, rustc_middle::ty::error::TypeError, <rustc_typeck::check::coercion::Coerce>::unify::{closure#0}>
    686,361  obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/jemalloc-sys-8de766d3318ac835/out/build/src/tcache.c:_rjem_je_tcache_bin_flush_small
   -675,345  ???:<arrayvec::arrayvec::ArrayVec<(rustc_middle::ty::Ty, core::result::Result<rustc_middle::ty::Ty, rustc_middle::ty::error::TypeError>), 8>>::as_mut_slice
    668,814  ???:<rustc_middle::ty::subst::SubstFolder as rustc_middle::ty::fold::FallibleTypeFolder>::try_fold_const
   -667,558  ???:<rustc_middle::mir::terminator::Terminator as rustc_serialize::serialize::Encodable<rustc_metadata::rmeta::encoder::EncodeContext>>::encode
    654,670  ???:<rustc_mir_transform::simplify_branches::SimplifyConstCondition as rustc_middle::mir::MirPass>::run_pass
    644,456  ???:<rustc_infer::infer::canonical::canonicalizer::Canonicalizer as rustc_middle::ty::fold::FallibleTypeFolder>::try_fold_region
    642,906  obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/jemalloc-sys-8de766d3318ac835/out/build/src/emap.c:emap_try_acquire_edata_neighbor_impl
    642,637  ???:<rustc_middle::mir::Statement>::make_nop
   -633,443  ???:<rustc_mir_transform::nrvo::RenameReturnPlace as rustc_middle::mir::MirPass>::run_pass
    627,955  include/jemalloc/internal/sz.h:malloc
   -624,925  ???:<rustc_data_structures::graph::scc::SccsConstruction<rustc_borrowck::constraints::graph::RegionGraph<rustc_borrowck::constraints::graph::Normal>, rustc_borrowck::constraints::ConstraintSccIndex>>::start_walk_from
    607,912  ???:<rustc_infer::infer::equate::Equate as rustc_middle::ty::relate::TypeRelation>::relate_with_variance::<rustc_middle::ty::subst::GenericArg>
    603,516  ???:<rustc_mir_dataflow::impls::liveness::MaybeTransitiveLiveLocals as rustc_mir_dataflow::framework::AnalysisDomain>::bottom_value
   -597,293  ???:<rustc_middle::ty::consts::Const as rustc_middle::ty::fold::TypeFoldable>::try_fold_with::<rustc_middle::ty::subst::SubstFolder>
   -560,496  ???:<&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_serialize::serialize::Encodable<rustc_metadata::rmeta::encoder::EncodeContext>>::encode
   -555,010  ???:<rustc_mir_transform::elaborate_drops::ElaborateDrops as rustc_middle::mir::MirPass>::run_pass
   -552,301  ???:rustc_middle::ty::util::fold_list::<rustc_middle::ty::fold::BoundVarReplacer, rustc_middle::ty::Ty, <&rustc_middle::ty::list::List<rustc_middle::ty::Ty> as rustc_middle::ty::fold::TypeFoldable>::try_super_fold_with<rustc_middle::ty::fold::BoundVarReplacer>::{closure#0}>
    550,366  ???:<rustc_infer::infer::sub::Sub as rustc_middle::ty::relate::TypeRelation>::tys
   -549,436  ???:<rustc_mir_transform::simplify::UsedLocals as rustc_middle::mir::visit::Visitor>::visit_statement
    538,791  ???:<rustc_middle::ty::context::TyCtxt>::intern_substs
   -514,685  ???:core::ptr::drop_in_place::<rustc_infer::infer::InferCtxtBuilder>
    510,141  ???:core::ptr::drop_in_place::<rustc_typeck::check::inherited::InheritedBuilder>
    509,163  ???:<rustc_infer::infer::combine::Generalizer as rustc_middle::ty::relate::TypeRelation>::relate_with_variance::<rustc_middle::ty::subst::GenericArg>
    504,470  ???:<rustc_typeck::check::coercion::Coerce>::unify_and::<rustc_typeck::check::coercion::identity>
   -500,785  ???:core::ptr::drop_in_place::<rustc_middle::mir::StatementKind>
    498,998  ???:<rustc_metadata::rmeta::encoder::EncodeContext as rustc_serialize::serialize::Encoder>::emit_enum_variant::<<rustc_middle::ty::subst::GenericArgKind as rustc_serialize::serialize::Encodable<rustc_metadata::rmeta::encoder::EncodeContext>>::encode::{closure#0}::{closure#1}>
    491,501  include/jemalloc/internal/tcache_inlines.h:_rjem_je_malloc_default
    490,806  ???:<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}>>
   -490,262  ???:<rustc_middle::ty::context::CtxtInterners>::intern_ty
   -485,119  ???:<rustc_middle::ty::adt::AdtDef>::uninhabited_from
    478,645  library/core/src/slice/memchr.rs:core::slice::memchr::memrchr
    475,049  ???:core::ptr::drop_in_place::<rustc_typeck::check::inherited::Inherited>
    472,696  ???:rustc_middle::ty::util::fold_list::<rustc_middle::ty::subst::SubstFolder, rustc_middle::ty::Ty, <&rustc_middle::ty::list::List<rustc_middle::ty::Ty> as rustc_middle::ty::fold::TypeFoldable>::try_super_fold_with<rustc_middle::ty::subst::SubstFolder>::{closure#0}>
    462,675  ???:<rustc_typeck::check::coercion::CoerceMany<&rustc_hir::hir::Expr>>::coerce_inner
   -461,082  ???:<alloc::vec::Vec<u64> as core::ops::deref::Deref>::deref
    459,753  ???:<alloc::vec::Vec<u32> as core::ops::deref::Deref>::deref
   -456,011  ???:<rustc_mir_dataflow::framework::engine::Engine<rustc_mir_dataflow::impls::storage_liveness::MaybeStorageLive>>::iterate_to_fixpoint
    450,761  obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/jemalloc-sys-8de766d3318ac835/out/build/src/extent.c:extent_try_coalesce_impl
    441,990  obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/jemalloc-sys-8de766d3318ac835/out/build/src/tcache.c:_rjem_je_tcache_bin_flush_stashed
    439,358  include/jemalloc/internal/bit_util.h:_rjem_je_arena_cache_bin_fill_small
    438,026  include/jemalloc/internal/rtree.h:_rjem_je_emap_update_edata_state
    428,214  obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/jemalloc-sys-8de766d3318ac835/out/build/src/emap.c:_rjem_je_emap_update_edata_state
   -409,732  ???:<rustc_middle::ty::context::CtxtInterners>::intern_predicate
    408,130  ???:<rustc_parse::parser::Parser>::parse_dot_or_call_expr
   -407,888  ???:<rustc_middle::ty::subst::GenericArg as rustc_middle::ty::relate::Relate>::relate::<rustc_infer::infer::combine::Generalizer>
    406,832  ???:<rustc_middle::ty::erase_regions::RegionEraserVisitor as rustc_middle::ty::fold::FallibleTypeFolder>::try_fold_binder::<rustc_middle::ty::PredicateKind>
   -403,734  ???:<alloc::vec::Vec<bool> as core::ops::deref::Deref>::deref
    402,701  ???:<rustc_middle::ty::sty::FnSig as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_middle::ty::fold::BoundVarReplacer>
    390,912  ???:<rustc_mir_dataflow::framework::Effect>::at_index
    389,880  ???:<rustc_mir_dataflow::framework::EffectIndex>::precedes_in_backward_order
    384,823  ???:(anonymous namespace)::LazyValueInfoImpl::getEdgeValue(llvm::Value*, llvm::BasicBlock*, llvm::BasicBlock*, llvm::Instruction*) [clone 
    372,754  ???:<rustc_infer::infer::canonical::canonicalizer::Canonicalizer>::universe_canonicalized_variables
   -372,324  ???:<rustc_typeck::check::coercion::CoerceMany<&rustc_hir::hir::Expr>>::coerce
    371,699  include/jemalloc/internal/emap.h:_rjem_je_tcache_bin_flush_small
    370,640  include/jemalloc/internal/edata.h:_rjem_je_tcache_bin_flush_small
    369,791  ???:<rustc_middle::ty::context::TyCtxt>::get_attrs
    363,476  ???:findRefEdges(llvm::ModuleSummaryIndex&, llvm::User const*, llvm::SetVector<llvm::ValueInfo, std::vector<llvm::ValueInfo, std::allocator<llvm::ValueInfo> >, llvm::DenseSet<llvm::ValueInfo, llvm::DenseMapInfo<llvm::ValueInfo, void> > >&, llvm::SmallPtrSet<llvm::User const*, 8u>&)
   -356,090  ???:rustc_middle::mir::traversal::reachable_as_bitset
    354,035  ???:memcpy
    353,496  obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/jemalloc-sys-8de766d3318ac835/out/build/src/tcache.c:_rjem_je_tcache_alloc_small_hard
    352,824  ???:<indexmap::map::core::VacantEntry<rustc_middle::ty::sty::Region, ()>>::insert
    343,194  ???:<rustc_middle::hir::map::Map>::walk_attributes::<rustc_lint::late::LateContextAndPass<rustc_lint::BuiltinCombinedLateLintPass>>
    343,179  ???:<rustc_middle::ty::subst::GenericArg as rustc_middle::ty::fold::TypeFoldable>::visit_with::<rustc_privacy::DefIdVisitorSkeleton<rustc_privacy::ReachEverythingInTheInterfaceVisitor>>
    342,960  include/jemalloc/internal/rtree.h:emap_try_acquire_edata_neighbor_impl
    341,361  ???:<rustc_middle::mir::Place as core::convert::From<rustc_middle::mir::Local>>::from
    338,755  include/jemalloc/internal/arena_inlines_b.h:_rjem_je_arena_cache_bin_fill_small
    336,084  include/jemalloc/internal/arena_inlines_b.h:_rjem_je_tcache_bin_flush_small
    334,732  ???:<&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::visit_with::<rustc_middle::ty::fold::LateBoundRegionsCollector>
   -331,741  ???:rustc_lint::late::late_lint_crate::<rustc_lint::BuiltinCombinedLateLintPass>
   -330,148  ???:(anonymous namespace)::LazyValueInfoImpl::solve() [clone 
    315,398  ???:llvm::AnalysisResolver::getAnalysisIfAvailable(void const*) const
   -313,704  ???:<rustc_metadata::rmeta::encoder::EncodeContext as rustc_serialize::serialize::Encoder>::emit_seq::<<[rustc_middle::mir::Statement] as rustc_serialize::serialize::Encodable<rustc_metadata::rmeta::encoder::EncodeContext>>::encode::{closure#0}>
    309,826  include/jemalloc/internal/jemalloc_internal_inlines_b.h:arena_choose
    309,309  include/jemalloc/internal/cache_bin.h:_rjem_je_arena_cache_bin_fill_small
    307,466  ???:<rustc_infer::infer::InferCtxt as rustc_typeck::outlives::outlives_bounds::InferCtxtExt>::implied_outlives_bounds
   -306,260  ???:<rustc_middle::ty::sty::Region as rustc_middle::ty::fold::TypeFoldable>::try_fold_with::<rustc_infer::infer::canonical::canonicalizer::Canonicalizer>
    305,604  obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/jemalloc-sys-8de766d3318ac835/out/build/src/arena.c:_rjem_je_arena_ralloc
   -304,672  ???:<rustc_middle::ty::Ty as rustc_middle::ty::fold::TypeFoldable>::visit_with::<rustc_privacy::DefIdVisitorSkeleton<rustc_privacy::TypePrivacyVisitor>>
   -304,638  ???:<rustc_middle::ty::Ty as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_middle::ty::fold::RegionFolder>
    301,758  ???:rustc_mir_transform::pass_manager::run_passes
   -299,763  ???:<rustc_mir_transform::required_consts::RequiredConstsVisitor as rustc_middle::mir::visit::Visitor>::visit_basic_block_data
    299,111  ???:<rustc_mir_dataflow::framework::engine::Engine<rustc_mir_dataflow::impls::liveness::MaybeTransitiveLiveLocals>>::new_generic
    298,127  ???:<rustc_middle::hir::map::Map>::deep_visit_all_item_likes::<rustc_mir_transform::mir_keys::GatherCtors>
   -296,656  ???:<rustc_middle::ty::Ty as rustc_serialize::serialize::Encodable<rustc_metadata::rmeta::encoder::EncodeContext>>::encode
    292,300  include/jemalloc/internal/sz.h:free
    287,985  ???:<rustc_infer::infer::canonical::canonicalizer::Canonicalizer as rustc_middle::ty::fold::TypeFolder>::fold_ty
    285,854  obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/jemalloc-sys-8de766d3318ac835/out/build/src/extent.c:_rjem_je_ecache_evict
    285,719  obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/jemalloc-sys-8de766d3318ac835/out/build/src/jemalloc.c:_rjem_je_malloc_default
    278,507  obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/jemalloc-sys-8de766d3318ac835/out/build/src/pac.c:pac_decay_to_limit
   -276,623  ???:rustc_mir_transform::mir_keys
    270,107  ???:llvm::SmallPtrSetImplBase::insert_imp_big(void const*)
    267,702  include/jemalloc/internal/extent.h:emap_try_acquire_edata_neighbor_impl
    266,889  include/jemalloc/internal/thread_event.h:calloc
   -262,717  ???:rustc_middle::mir::traversal::reverse_postorder
    262,589  ???:llvm::detail::PassModel<llvm::Function, llvm::SimplifyCFGPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&)
    261,120  ???: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>::try_super_fold_with<rustc_infer::infer::freshen::TypeFreshener>::{closure#0}>
    257,351  ???:<rustc_mir_transform::elaborate_drops::ElaborateDropsCtxt>::create_drop_flag
    251,834  library/std/src/alloc.rs:__rdl_alloc
    251,182  include/jemalloc/internal/thread_event.h:malloc
   -243,660  ???:<&mut <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_serialize::serialize::Decodable<rustc_metadata::rmeta::decoder::DecodeContext>>::decode::{closure#0} as core::ops::function::FnOnce<(usize,)>>::call_once
   -241,733  ???:<rustc_middle::mir::Body>::is_cfg_cyclic
    241,647  ???:<rustc_middle::ty::context::TyCtxt>::def_kind::<rustc_span::def_id::DefId>
    241,163  ???:<rustc_typeck::check::coercion::Coerce>::unify
   -236,868  ???:<hashbrown::map::HashMap<rustc_mir_dataflow::move_paths::MovePathIndex, rustc_middle::mir::Local, core::hash::BuildHasherDefault<rustc_hash::FxHasher>>>::rustc_entry
    229,922  ???:<rustc_middle::ty::Ty as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_infer::infer::resolve::OpportunisticVarResolver>
    225,558  obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/jemalloc-sys-8de766d3318ac835/out/build/src/extent.c:_rjem_je_extent_dalloc_wrapper
    224,445  ???:<rustc_typeck::check::coercion::Coerce>::coerce
    224,366  include/jemalloc/internal/ph.h:_rjem_je_edata_heap_remove_first
    224,316  obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/jemalloc-sys-8de766d3318ac835/out/build/src/jemalloc.c:do_rallocx
   -223,589  ???:<rustc_infer::infer::free_regions::FreeRegionMap>::relate_regions
    222,803  ???:<rustc_trait_selection::traits::fulfill::FulfillProcessor>::process_changed_obligations
    220,885  ???:<rustc_middle::ty::fold::RegionFolder as rustc_middle::ty::fold::FallibleTypeFolder>::try_fold_ty
    219,900  ???:<rustc_index::bit_set::ChunkedBitSet<rustc_middle::mir::Local> as core::clone::Clone>::clone
   -219,263  ???:<rustc_metadata::rmeta::encoder::EncodeContext as rustc_hir::intravisit::Visitor>::visit_item
    218,609  ???:<rustc_middle::ty::subst::GenericArg as rustc_middle::ty::relate::Relate>::relate::<rustc_infer::infer::sub::Sub>
   -218,101  ???:<rustc_middle::mir::Operand as rustc_serialize::serialize::Encodable<rustc_metadata::rmeta::encoder::EncodeContext>>::encode
    213,075  ???:<rustc_privacy::DefIdVisitorSkeleton<rustc_privacy::ReachEverythingInTheInterfaceVisitor> as rustc_middle::ty::fold::TypeVisitor>::visit_ty
    209,075  ???:<rustc_middle::ty::PredicateKind as rustc_middle::ty::fold::TypeFoldable>::has_escaping_bound_vars
   -208,631  ???:<ena::unify::UnificationTable<ena::unify::backing_vec::InPlace<rustc_infer::infer::type_variable::TyVidEqKey, &mut alloc::vec::Vec<ena::unify::VarValue<rustc_infer::infer::type_variable::TyVidEqKey>>, &mut rustc_infer::infer::undo_log::InferCtxtUndoLogs>>>::uninlined_get_root_key
    207,635  ???:<hashbrown::map::HashMap<rustc_middle::infer::canonical::Canonical<rustc_middle::ty::ParamEnvAnd<rustc_middle::ty::sty::ProjectionTy>>, (core::result::Result<&rustc_middle::infer::canonical::Canonical<rustc_middle::infer::canonical::QueryResponse<rustc_middle::traits::query::NormalizationResult>>, rustc_middle::traits::query::NoSolution>, rustc_query_system::dep_graph::graph::DepNodeIndex), core::hash::BuildHasherDefault<rustc_hash::FxHasher>>>::insert
   -207,461  ???:<rustc_index::bit_set::ChunkedBitSet<rustc_mir_dataflow::move_paths::MovePathIndex> as core::clone::Clone>::clone
    205,965  ???:<rustc_middle::ty::fold::RegionFolder as rustc_middle::ty::fold::FallibleTypeFolder>::try_fold_const
   -205,846  ???:rustc_mir_dataflow::drop_flag_effects::on_all_children_bits::on_all_children_bits::<rustc_mir_dataflow::drop_flag_effects::drop_flag_effects_for_location<<rustc_mir_dataflow::impls::MaybeUninitializedPlaces as rustc_mir_dataflow::framework::GenKillAnalysis>::statement_effect<rustc_index::bit_set::ChunkedBitSet<rustc_mir_dataflow::move_paths::MovePathIndex>>::{closure#0}>::{closure#0}>
    205,140  library/std/src/sys/unix/alloc.rs:__rdl_alloc_zeroed
   -200,306  ???:<rustc_middle::ty::Ty as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_infer::infer::freshen::TypeFreshener>
   -200,088  ???:<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::subst::GenericArg>> as core::iter::traits::iterator::Iterator>::try_fold::<(), core::iter::traits::iterator::Iterator::try_for_each::call<rustc_middle::ty::subst::GenericArg, core::ops::control_flow::ControlFlow<!>, <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::super_visit_with<rustc_middle::ty::fold::LateBoundRegionsCollector>::{closure#0}>::{closure#0}, core::ops::control_flow::ControlFlow<!>>
    197,295  ???:<smallvec::SmallVec<[rustc_middle::ty::Ty; 8]>>::insert_from_slice
   -196,823  ???:<&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> 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::list::List<rustc_middle::ty::subst::GenericArg>, <rustc_borrowck::constraint_generation::ConstraintGeneration>::add_regular_live_constraint<&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg>>::{closure#0}>::{closure#0}>>
   -194,682  ???:rustc_query_system::query::plumbing::try_get_cached::<rustc_middle::ty::context::TyCtxt, rustc_query_system::query::caches::ArenaCache<rustc_span::def_id::DefId, rustc_middle::ty::generics::Generics>, &rustc_middle::ty::generics::Generics, rustc_middle::ty::query::copy<&rustc_middle::ty::generics::Generics>>
    193,942  ???:<rustc_infer::infer::at::At as rustc_trait_selection::traits::query::dropck_outlives::AtExt>::dropck_outlives
    193,535  ???:<rustc_middle::ty::context::TyCtxt>::intern_type_list
    190,088  ???:llvm::DenseMap<llvm::GVNPass::Expression, unsigned int, llvm::DenseMapInfo<llvm::GVNPass::Expression, void>, llvm::detail::DenseMapPair<llvm::GVNPass::Expression, unsigned int> >::shrink_and_clear()
    188,630  ???:alloc::raw_vec::finish_grow::<alloc::alloc::Global>
   -188,298  ???:llvm::GVNPass::cleanupGlobalSets()
    186,936  ???:<rustc_middle::ty::sty::EarlyBinder<rustc_middle::ty::Predicate> as rustc_middle::ty::subst::Subst>::subst
    186,586  ???:<rustc_mir_dataflow::framework::engine::RustcMirAttrs>::parse
    186,307  ???:<rustc_typeck::variance::solve::SolveContext>::enforce_const_invariance
    184,854  include/jemalloc/internal/sz.h:calloc
    184,653  include/jemalloc/internal/tsd.h:calloc
    184,616  include/jemalloc/internal/cache_bin.h:calloc
    184,604  include/jemalloc/internal/bitmap.h:_rjem_je_tcache_bin_flush_small
   -184,233  ???:<rustc_middle::infer::canonical::Canonical<rustc_middle::ty::context::UserType>>::is_identity
    183,576  ???:llvm::PMDataManager::removeNotPreservedAnalysis(llvm::Pass*)
   -183,545  ???:<rustc_privacy::DefIdVisitorSkeleton<rustc_privacy::TypePrivacyVisitor> as rustc_middle::ty::fold::TypeVisitor>::visit_ty
   -182,401  ???:<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::FnSig> as rustc_middle::ty::fold::TypeFoldable>::super_fold_with::<rustc_middle::ty::subst::SubstFolder>
   -180,144  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]>>::extend_from_slice
    180,144  ???:<smallvec::SmallVec<[rustc_middle::ty::subst::GenericArg; 8]>>::insert_from_slice
    177,444  ???:<alloc::vec::Vec<rustc_index::bit_set::Chunk>>::into_boxed_slice
    175,170  ???:<rustc_span::symbol::Symbol>::intern
    172,694  ???:<rustc_mir_dataflow::framework::direction::Backward as rustc_mir_dataflow::framework::direction::Direction>::is_forward
    172,668  include/jemalloc/internal/thread_event.h:_rjem_je_malloc_default
   -171,455  ???:llvm::DenseMap<void const*, llvm::Pass*, llvm::DenseMapInfo<void const*, void>, llvm::detail::DenseMapPair<void const*, llvm::Pass*> >::grow(unsigned int)
   -170,628  ???:<rustc_mir_transform::add_call_guards::AddCallGuards as rustc_middle::mir::MirPass>::run_pass
   -167,955  ???:<rustc_const_eval::transform::validate::Validator as rustc_middle::mir::MirPass>::run_pass
    167,881  ???:<rustc_metadata::rmeta::encoder::EncodeContext as rustc_serialize::serialize::Encoder>::emit_enum_variant::<<rustc_middle::ty::subst::GenericArgKind as rustc_serialize::serialize::Encodable<rustc_metadata::rmeta::encoder::EncodeContext>>::encode::{closure#0}::{closure#0}>
    165,878  include/jemalloc/internal/tcache_inlines.h:calloc
   -165,362  ???:<rustc_middle::ty::fold::LateBoundRegionsCollector as rustc_middle::ty::fold::TypeVisitor>::visit_ty
    164,247  obj/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/build/jemalloc-sys-8de766d3318ac835/out/build/src/arena.c:_rjem_je_arena_ralloc_no_move
   -163,215  ???:<rustc_middle::ty::sty::Binder<rustc_middle::ty::PredicateKind>>::dummy
    162,432  ???:<rustc_infer::infer::sub::Sub as rustc_middle::ty::relate::TypeRelation>::relate::<&rustc_middle::ty::list::List<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::ExistentialPredicate>>>
   -162,432  ???:<&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::sub::Sub>
    162,170  ???:<rustc_middle::ty::subst::GenericArg as rustc_middle::ty::fold::TypeFoldable>::visit_with::<rustc_privacy::DefIdVisitorSkeleton<rustc_privacy::SearchInterfaceForPrivateItemsVisitor>>
    161,590  ???:<rustc_mir_dataflow::framework::EffectIndex>::next_in_backward_order
    161,476  ???:<rustc_typeck::check::fn_ctxt::FnCtxt>::instantiate_value_path
   -160,617  ???:<rustc_middle::ty::subst::GenericArg as rustc_middle::ty::fold::TypeFoldable>::try_fold_with::<rustc_middle::ty::fold::RegionFolder>
    159,130  include/jemalloc/internal/mutex.h:_rjem_je_arena_cache_bin_fill_small
   -157,702  ???:rustc_data_structures::sync::par_for_each_in::<&alloc::vec::Vec<rustc_hir::hir::MaybeOwner<&rustc_hir::hir::OwnerInfo>>, <rustc_middle::hir::map::Map>::par_visit_all_item_likes<rustc_typeck::check::wfcheck::CheckTypeWellFormedVisitor>::{closure#0}>
    157,406  ???:<rustc_infer::traits::util::Elaborator as core::iter::traits::iterator::Iterator>::next

In any case, this 1) is a performance improvement in most cases, 2) is a de-facto prerequisite for dest prop, and 3) causes the compiler to emit faster object code, so I generally think the regressions are justified.

Meta sidenote: What are the rules around applying the "perf-regression-triaged" label? If I am investigating compiler perf anyway, should I also be applying the label or is this something that should be reserved for wg-perf/people with r+ rights?

@JakobDegen JakobDegen deleted the dse branch May 30, 2022 00:13
@pnkfelix
Copy link
Member

  • The changes here were investigated by the PR author.
  • Marking as triaged based on their investigation.

@rustbot label: +perf-regression-triaged

@rustbot rustbot added the perf-regression-triaged The performance regression has been triaged. label May 31, 2022
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. perf-regression-triaged The performance regression has been triaged. 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.