Tweak vector::_M_realloc_insert for code size

2017-11-17  Marc Glisse  <marc.glisse@inria.fr>

	* include/bits/vector.tcc (vector::_M_realloc_insert): Cache old
	values before the allocation.

From-SVN: r254849
This commit is contained in:
Marc Glisse 2017-11-17 00:51:20 +01:00 committed by Marc Glisse
parent b1e35f49e8
commit c261ba2c8b
2 changed files with 12 additions and 6 deletions

View File

@ -1,3 +1,8 @@
2017-11-17 Marc Glisse <marc.glisse@inria.fr>
* include/bits/vector.tcc (vector::_M_realloc_insert): Cache old
values before the allocation.
2017-11-16 Jonathan Wakely <jwakely@redhat.com> 2017-11-16 Jonathan Wakely <jwakely@redhat.com>
* include/std/future (shared_future): Add noexcept to copy constructor * include/std/future (shared_future): Add noexcept to copy constructor

View File

@ -421,6 +421,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{ {
const size_type __len = const size_type __len =
_M_check_len(size_type(1), "vector::_M_realloc_insert"); _M_check_len(size_type(1), "vector::_M_realloc_insert");
pointer __old_start = this->_M_impl._M_start;
pointer __old_finish = this->_M_impl._M_finish;
const size_type __elems_before = __position - begin(); const size_type __elems_before = __position - begin();
pointer __new_start(this->_M_allocate(__len)); pointer __new_start(this->_M_allocate(__len));
pointer __new_finish(__new_start); pointer __new_finish(__new_start);
@ -442,14 +444,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
__new_finish __new_finish
= std::__uninitialized_move_if_noexcept_a = std::__uninitialized_move_if_noexcept_a
(this->_M_impl._M_start, __position.base(), (__old_start, __position.base(),
__new_start, _M_get_Tp_allocator()); __new_start, _M_get_Tp_allocator());
++__new_finish; ++__new_finish;
__new_finish __new_finish
= std::__uninitialized_move_if_noexcept_a = std::__uninitialized_move_if_noexcept_a
(__position.base(), this->_M_impl._M_finish, (__position.base(), __old_finish,
__new_finish, _M_get_Tp_allocator()); __new_finish, _M_get_Tp_allocator());
} }
__catch(...) __catch(...)
@ -463,10 +465,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
__throw_exception_again; __throw_exception_again;
} }
_GLIBCXX_ASAN_ANNOTATE_REINIT; _GLIBCXX_ASAN_ANNOTATE_REINIT;
std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, std::_Destroy(__old_start, __old_finish, _M_get_Tp_allocator());
_M_get_Tp_allocator()); _M_deallocate(__old_start,
_M_deallocate(this->_M_impl._M_start, this->_M_impl._M_end_of_storage - __old_start);
this->_M_impl._M_end_of_storage - this->_M_impl._M_start);
this->_M_impl._M_start = __new_start; this->_M_impl._M_start = __new_start;
this->_M_impl._M_finish = __new_finish; this->_M_impl._M_finish = __new_finish;
this->_M_impl._M_end_of_storage = __new_start + __len; this->_M_impl._M_end_of_storage = __new_start + __len;