diff options
| author | Oğuz Ağcayazı <ouz.agz@gmail.com> | 2023-10-09 12:58:41 +0300 |
|---|---|---|
| committer | Oğuz Ağcayazı <ouz.agz@gmail.com> | 2023-10-09 12:58:41 +0300 |
| commit | 5f079dd2ffd0d09a3f2f9250c7d302efff1df4d3 (patch) | |
| tree | 282e3034153b8421939c325a6a53218e9390efa9 | |
| parent | 0f27c1b5b550deef02c3916fa81ea3c6edf8145e (diff) | |
| download | rust-5f079dd2ffd0d09a3f2f9250c7d302efff1df4d3.tar.gz rust-5f079dd2ffd0d09a3f2f9250c7d302efff1df4d3.zip | |
alloc id is indexmapped
| -rw-r--r-- | compiler/rustc_smir/src/rustc_internal/mod.rs | 15 | ||||
| -rw-r--r-- | compiler/rustc_smir/src/rustc_smir/mod.rs | 2 |
2 files changed, 9 insertions, 8 deletions
diff --git a/compiler/rustc_smir/src/rustc_internal/mod.rs b/compiler/rustc_smir/src/rustc_internal/mod.rs index 2f4bc5a0499..d0515df9ad5 100644 --- a/compiler/rustc_smir/src/rustc_internal/mod.rs +++ b/compiler/rustc_smir/src/rustc_internal/mod.rs @@ -107,12 +107,13 @@ impl<'tcx> Tables<'tcx> { fn create_alloc_id(&mut self, aid: AllocId) -> stable_mir::AllocId { // FIXME: this becomes inefficient when we have too many ids - if let Some(i) = self.alloc_ids.iter().position(|a| *a == aid) { - return stable_mir::AllocId(i); - }; - let id = self.def_ids.len(); - self.alloc_ids.push(aid); - stable_mir::AllocId(id) + if let Some(i) = self.alloc_ids.get(&aid) { + return *i; + } else { + let id = self.def_ids.len(); + self.alloc_ids.insert(aid, stable_mir::AllocId(id)); + stable_mir::AllocId(id) + } } pub(crate) fn create_span(&mut self, span: Span) -> stable_mir::ty::Span { @@ -136,7 +137,7 @@ pub fn run(tcx: TyCtxt<'_>, f: impl FnOnce()) { Tables { tcx, def_ids: fx::FxIndexMap::default(), - alloc_ids: vec![], + alloc_ids: fx::FxIndexMap::default(), spans: vec![], types: vec![], }, diff --git a/compiler/rustc_smir/src/rustc_smir/mod.rs b/compiler/rustc_smir/src/rustc_smir/mod.rs index 144f1625b04..42688613a61 100644 --- a/compiler/rustc_smir/src/rustc_smir/mod.rs +++ b/compiler/rustc_smir/src/rustc_smir/mod.rs @@ -196,7 +196,7 @@ impl<S, R: PartialEq> PartialEq<R> for MaybeStable<S, R> { pub struct Tables<'tcx> { pub tcx: TyCtxt<'tcx>, pub def_ids: FxIndexMap<DefId, stable_mir::DefId>, - pub alloc_ids: Vec<AllocId>, + pub alloc_ids: FxIndexMap<AllocId, stable_mir::AllocId>, pub spans: Vec<rustc_span::Span>, pub types: Vec<MaybeStable<stable_mir::ty::TyKind, Ty<'tcx>>>, } |
