aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2012-02-20 21:08:48 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2012-02-20 21:08:48 +0000
commitd6f90f03e09a55424ed8c784cfed92b83dc2a345 (patch)
tree80430dd0b825a4c46e9bdefba291ea5c5988b4b7 /libstdc++-v3
parent63b08143d6c6f74ce8ed3f5a83adc070cddc8e6b (diff)
downloadgcc-d6f90f03e09a55424ed8c784cfed92b83dc2a345.zip
gcc-d6f90f03e09a55424ed8c784cfed92b83dc2a345.tar.gz
gcc-d6f90f03e09a55424ed8c784cfed92b83dc2a345.tar.bz2
re PR libstdc++/52241 (Performance degradation of 447.dealII on corei7 at spec2006_base32.)
2012-02-20 Paolo Carlini <paolo.carlini@oracle.com> PR libstdc++/52241 * src/c++98/tree.cc (local_Rb_tree_increment, local_Rb_tree_decrement): Add. (_Rb_tree_increment(const _Rb_tree_node_base*), _Rb_tree_decrement(const _Rb_tree_node_base*)): Use the latter. (_Rb_tree_increment(_Rb_tree_node_base*), _Rb_tree_decrement(_Rb_tree_node_base*)): New. From-SVN: r184404
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog10
-rw-r--r--libstdc++-v3/src/c++98/tree.cc26
2 files changed, 29 insertions, 7 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index b301599..01679dc 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,15 @@
2012-02-20 Paolo Carlini <paolo.carlini@oracle.com>
+ PR libstdc++/52241
+ * src/c++98/tree.cc (local_Rb_tree_increment,
+ local_Rb_tree_decrement): Add.
+ (_Rb_tree_increment(const _Rb_tree_node_base*),
+ _Rb_tree_decrement(const _Rb_tree_node_base*)): Use the latter.
+ (_Rb_tree_increment(_Rb_tree_node_base*),
+ _Rb_tree_decrement(_Rb_tree_node_base*)): New.
+
+2012-02-20 Paolo Carlini <paolo.carlini@oracle.com>
+
PR libstdc++/52309
* include/bits/hashtable_policy.h (_Equality_base<, true,>::
_M_equal(const _Hashtable&)): Compare values with operator==.
diff --git a/libstdc++-v3/src/c++98/tree.cc b/libstdc++-v3/src/c++98/tree.cc
index 0a7f6f9..731ce36 100644
--- a/libstdc++-v3/src/c++98/tree.cc
+++ b/libstdc++-v3/src/c++98/tree.cc
@@ -1,6 +1,6 @@
// RB tree utilities implementation -*- C++ -*-
-// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2005, 2009, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -56,8 +56,8 @@ namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
- _Rb_tree_node_base*
- _Rb_tree_increment(_Rb_tree_node_base* __x) throw ()
+ static _Rb_tree_node_base*
+ local_Rb_tree_increment(_Rb_tree_node_base* __x) throw ()
{
if (__x->_M_right != 0)
{
@@ -79,14 +79,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __x;
}
+ _Rb_tree_node_base*
+ _Rb_tree_increment(_Rb_tree_node_base* __x) throw ()
+ {
+ return local_Rb_tree_increment(__x);
+ }
+
const _Rb_tree_node_base*
_Rb_tree_increment(const _Rb_tree_node_base* __x) throw ()
{
- return _Rb_tree_increment(const_cast<_Rb_tree_node_base*>(__x));
+ return local_Rb_tree_increment(const_cast<_Rb_tree_node_base*>(__x));
}
- _Rb_tree_node_base*
- _Rb_tree_decrement(_Rb_tree_node_base* __x) throw ()
+ static _Rb_tree_node_base*
+ local_Rb_tree_decrement(_Rb_tree_node_base* __x) throw ()
{
if (__x->_M_color == _S_red
&& __x->_M_parent->_M_parent == __x)
@@ -111,10 +117,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __x;
}
+ _Rb_tree_node_base*
+ _Rb_tree_decrement(_Rb_tree_node_base* __x) throw ()
+ {
+ return local_Rb_tree_decrement(__x);
+ }
+
const _Rb_tree_node_base*
_Rb_tree_decrement(const _Rb_tree_node_base* __x) throw ()
{
- return _Rb_tree_decrement(const_cast<_Rb_tree_node_base*>(__x));
+ return local_Rb_tree_decrement(const_cast<_Rb_tree_node_base*>(__x));
}
static void