Auto merge of #3083 - saethlin:gc-history, r=oli-obk
GC the Stacked Borrows allocation history This handles the biggest contributor to https://github.com/rust-lang/miri/issues/3080 The benchmark that this adds demonstrates the memory improvement here, but our benchmark setup doesn't record memory usage, and `hyperfine` doesn't support emitting memory usage stats. I ran this benchmark manually with `/usr/bin/time -v cargo +miri miri run` 🤷
This commit is contained in:
commit
32c0afb880
5 changed files with 27 additions and 0 deletions
7
src/tools/miri/bench-cargo-miri/invalidate/Cargo.lock
Normal file
7
src/tools/miri/bench-cargo-miri/invalidate/Cargo.lock
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "invalidate"
|
||||
version = "0.1.0"
|
||||
8
src/tools/miri/bench-cargo-miri/invalidate/Cargo.toml
Normal file
8
src/tools/miri/bench-cargo-miri/invalidate/Cargo.toml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
[package]
|
||||
name = "invalidate"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
4
src/tools/miri/bench-cargo-miri/invalidate/src/main.rs
Normal file
4
src/tools/miri/bench-cargo-miri/invalidate/src/main.rs
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
fn main() {
|
||||
// The end of the range is just chosen to make the benchmark run for a few seconds.
|
||||
for _ in 0..200_000 {}
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
use smallvec::SmallVec;
|
||||
use std::fmt;
|
||||
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_middle::mir::interpret::{alloc_range, AllocId, AllocRange, InterpError};
|
||||
use rustc_span::{Span, SpanData};
|
||||
use rustc_target::abi::Size;
|
||||
|
|
@ -233,6 +234,12 @@ impl AllocHistory {
|
|||
protectors: SmallVec::new(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn retain(&mut self, live_tags: &FxHashSet<BorTag>) {
|
||||
self.invalidations.retain(|event| live_tags.contains(&event.tag));
|
||||
self.creations.retain(|event| live_tags.contains(&event.retag.new_tag));
|
||||
self.protectors.retain(|event| live_tags.contains(&event.tag));
|
||||
}
|
||||
}
|
||||
|
||||
impl<'history, 'ecx, 'mir, 'tcx> DiagnosticCx<'history, 'ecx, 'mir, 'tcx> {
|
||||
|
|
|
|||
|
|
@ -456,6 +456,7 @@ impl Stacks {
|
|||
stack.retain(live_tags);
|
||||
}
|
||||
}
|
||||
self.history.retain(live_tags);
|
||||
self.modified_since_last_gc = false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue