diff options
| author | Tomasz Miąsko <tomasz.miasko@gmail.com> | 2021-02-24 00:00:00 +0000 | 
|---|---|---|
| committer | Tomasz Miąsko <tomasz.miasko@gmail.com> | 2021-02-24 00:00:00 +0000 | 
| commit | ef731b31dbd5f1dccf4a863290c8286b9601e323 (patch) | |
| tree | 394ed0c5a8c044990fa631d0da805bc485d0bbfa /compiler/rustc_mir/src/transform/inline/cycle.rs | |
| parent | 6b56603e35b39c9f6cc76782330e5e415f9e43d5 (diff) | |
| download | rust-ef731b31dbd5f1dccf4a863290c8286b9601e323.tar.gz rust-ef731b31dbd5f1dccf4a863290c8286b9601e323.zip  | |
Use small hash set in `mir_inliner_callees`
Use small hash set in `mir_inliner_callees` to avoid temporary allocation when possible and quadratic behaviour for large number of callees.
Diffstat (limited to 'compiler/rustc_mir/src/transform/inline/cycle.rs')
| -rw-r--r-- | compiler/rustc_mir/src/transform/inline/cycle.rs | 11 | 
1 files changed, 4 insertions, 7 deletions
diff --git a/compiler/rustc_mir/src/transform/inline/cycle.rs b/compiler/rustc_mir/src/transform/inline/cycle.rs index 4c24bec0ce3..295f3ec70dc 100644 --- a/compiler/rustc_mir/src/transform/inline/cycle.rs +++ b/compiler/rustc_mir/src/transform/inline/cycle.rs @@ -1,4 +1,5 @@ use rustc_data_structures::fx::{FxHashMap, FxHashSet}; +use rustc_data_structures::sso::SsoHashSet; use rustc_data_structures::stack::ensure_sufficient_stack; use rustc_hir::def_id::{DefId, LocalDefId}; use rustc_middle::mir::TerminatorKind; @@ -140,7 +141,7 @@ crate fn mir_inliner_callees<'tcx>( // Functions from other crates and MIR shims _ => tcx.instance_mir(instance), }; - let mut calls = Vec::new(); + let mut calls = SsoHashSet::new(); for bb_data in body.basic_blocks() { let terminator = bb_data.terminator(); if let TerminatorKind::Call { func, .. } = &terminator.kind { @@ -149,12 +150,8 @@ crate fn mir_inliner_callees<'tcx>( ty::FnDef(def_id, substs) => (*def_id, *substs), _ => continue, }; - // We've seen this before - if calls.contains(&call) { - continue; - } - calls.push(call); + calls.insert(call); } } - tcx.arena.alloc_slice(&calls) + tcx.arena.alloc_from_iter(calls.iter().copied()) }  | 
