@@ -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 ( & 99 u) ;
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