Skip to content

Commit 09bf5de

Browse files
committed
auto merge of #10918 : eddyb/rust/inline-finally-dtor, r=thestinger
* fixes the vec::from_elem regression caused by #8780 * added 5 benchmarks for allocating a 1KB `~[u8]` and zeroing it * closes #7136
2 parents fbbadae + 331c6ef commit 09bf5de

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

src/libstd/unstable/finally.rs

+1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ struct Finallyalizer<'a> {
6262

6363
#[unsafe_destructor]
6464
impl<'a> Drop for Finallyalizer<'a> {
65+
#[inline]
6566
fn drop(&mut self) {
6667
(self.dtor)();
6768
}

src/libstd/vec.rs

+55
Original file line numberDiff line numberDiff line change
@@ -4217,6 +4217,7 @@ mod bench {
42174217
use vec;
42184218
use vec::VectorVector;
42194219
use option::*;
4220+
use ptr;
42204221

42214222
#[bench]
42224223
fn iterator(bh: &mut BenchHarness) {
@@ -4339,4 +4340,58 @@ mod bench {
43394340
vec.contains(&99u);
43404341
})
43414342
}
4343+
4344+
#[bench]
4345+
fn zero_1kb_from_elem(bh: &mut BenchHarness) {
4346+
bh.iter(|| {
4347+
let _v: ~[u8] = vec::from_elem(1024, 0u8);
4348+
});
4349+
}
4350+
4351+
#[bench]
4352+
fn zero_1kb_set_memory(bh: &mut BenchHarness) {
4353+
bh.iter(|| {
4354+
let mut v: ~[u8] = vec::with_capacity(1024);
4355+
unsafe {
4356+
let vp = vec::raw::to_mut_ptr(v);
4357+
ptr::set_memory(vp, 0, 1024);
4358+
vec::raw::set_len(&mut v, 1024);
4359+
}
4360+
});
4361+
}
4362+
4363+
#[bench]
4364+
fn zero_1kb_fixed_repeat(bh: &mut BenchHarness) {
4365+
bh.iter(|| {
4366+
let _v: ~[u8] = ~[0u8, ..1024];
4367+
});
4368+
}
4369+
4370+
#[bench]
4371+
fn zero_1kb_loop_set(bh: &mut BenchHarness) {
4372+
// Slower because the { len, cap, [0 x T] }* repr allows a pointer to the length
4373+
// field to be aliased (in theory) and prevents LLVM from optimizing loads away.
4374+
bh.iter(|| {
4375+
let mut v: ~[u8] = vec::with_capacity(1024);
4376+
unsafe {
4377+
vec::raw::set_len(&mut v, 1024);
4378+
}
4379+
for i in range(0, 1024) {
4380+
v[i] = 0;
4381+
}
4382+
});
4383+
}
4384+
4385+
#[bench]
4386+
fn zero_1kb_mut_iter(bh: &mut BenchHarness) {
4387+
bh.iter(|| {
4388+
let mut v: ~[u8] = vec::with_capacity(1024);
4389+
unsafe {
4390+
vec::raw::set_len(&mut v, 1024);
4391+
}
4392+
for x in v.mut_iter() {
4393+
*x = 0;
4394+
}
4395+
});
4396+
}
43424397
}

0 commit comments

Comments
 (0)