Commit b6a182f2 by Paolo Carlini Committed by Paolo Carlini

re PR libstdc++/41763 (valarray_array.h seems to overuse __restrict__)

2009-10-20  Paolo Carlini  <paolo.carlini@oracle.com>

	PR libstdc++/41763
	* include/bits/valarray_array.h (__valarray_default_construct,
	__valarray_fill_construct, __valarray_copy_construct, __valarray_sum
	__valarray_destroy_elements, __valarray_product): Do not qualify with
	__restrict__ pointers accessing data also accessed by other pointers.

From-SVN: r153039
parent ddd0c781
2009-10-20 Paolo Carlini <paolo.carlini@oracle.com> 2009-10-20 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/41763
* include/bits/valarray_array.h (__valarray_default_construct,
__valarray_fill_construct, __valarray_copy_construct, __valarray_sum
__valarray_destroy_elements, __valarray_product): Do not qualify with
__restrict__ pointers accessing data also accessed by other pointers.
2009-10-20 Paolo Carlini <paolo.carlini@oracle.com>
* include/bits/basic_string.h (_S_construct(const _CharT*, size_type, * include/bits/basic_string.h (_S_construct(const _CharT*, size_type,
const _Alloc&)): New, declare. const _Alloc&)): New, declare.
(_S_construct(_CharT*, _CharT*, const _Alloc&), (_S_construct(_CharT*, _CharT*, const _Alloc&),
......
// The template and inlines for the -*- C++ -*- internal _Array helper class. // The template and inlines for the -*- C++ -*- internal _Array helper class.
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
// 2006, 2007, 2009 // 2006, 2007, 2008, 2009
// Free Software Foundation, Inc. // Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // This file is part of the GNU ISO C++ Library. This library is free
...@@ -73,7 +73,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -73,7 +73,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// Please note that this isn't exception safe. But // Please note that this isn't exception safe. But
// valarrays aren't required to be exception safe. // valarrays aren't required to be exception safe.
inline static void inline static void
_S_do_it(_Tp* __restrict__ __b, _Tp* __restrict__ __e) _S_do_it(_Tp* __b, _Tp* __e)
{ {
while (__b != __e) while (__b != __e)
new(__b++) _Tp(); new(__b++) _Tp();
...@@ -85,13 +85,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -85,13 +85,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{ {
// For fundamental types, it suffices to say 'memset()' // For fundamental types, it suffices to say 'memset()'
inline static void inline static void
_S_do_it(_Tp* __restrict__ __b, _Tp* __restrict__ __e) _S_do_it(_Tp* __b, _Tp* __e)
{ __builtin_memset(__b, 0, (__e - __b) * sizeof(_Tp)); } { __builtin_memset(__b, 0, (__e - __b) * sizeof(_Tp)); }
}; };
template<typename _Tp> template<typename _Tp>
inline void inline void
__valarray_default_construct(_Tp* __restrict__ __b, _Tp* __restrict__ __e) __valarray_default_construct(_Tp* __b, _Tp* __e)
{ {
_Array_default_ctor<_Tp, __is_scalar<_Tp>::__value>::_S_do_it(__b, __e); _Array_default_ctor<_Tp, __is_scalar<_Tp>::__value>::_S_do_it(__b, __e);
} }
...@@ -105,7 +105,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -105,7 +105,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// Please note that this isn't exception safe. But // Please note that this isn't exception safe. But
// valarrays aren't required to be exception safe. // valarrays aren't required to be exception safe.
inline static void inline static void
_S_do_it(_Tp* __restrict__ __b, _Tp* __restrict__ __e, const _Tp __t) _S_do_it(_Tp* __b, _Tp* __e, const _Tp __t)
{ {
while (__b != __e) while (__b != __e)
new(__b++) _Tp(__t); new(__b++) _Tp(__t);
...@@ -116,7 +116,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -116,7 +116,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
struct _Array_init_ctor<_Tp, true> struct _Array_init_ctor<_Tp, true>
{ {
inline static void inline static void
_S_do_it(_Tp* __restrict__ __b, _Tp* __restrict__ __e, const _Tp __t) _S_do_it(_Tp* __b, _Tp* __e, const _Tp __t)
{ {
while (__b != __e) while (__b != __e)
*__b++ = __t; *__b++ = __t;
...@@ -125,8 +125,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -125,8 +125,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
template<typename _Tp> template<typename _Tp>
inline void inline void
__valarray_fill_construct(_Tp* __restrict__ __b, _Tp* __restrict__ __e, __valarray_fill_construct(_Tp* __b, _Tp* __e, const _Tp __t)
const _Tp __t)
{ {
_Array_init_ctor<_Tp, __is_pod(_Tp)>::_S_do_it(__b, __e, __t); _Array_init_ctor<_Tp, __is_pod(_Tp)>::_S_do_it(__b, __e, __t);
} }
...@@ -141,8 +140,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -141,8 +140,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// Please note that this isn't exception safe. But // Please note that this isn't exception safe. But
// valarrays aren't required to be exception safe. // valarrays aren't required to be exception safe.
inline static void inline static void
_S_do_it(const _Tp* __restrict__ __b, const _Tp* __restrict__ __e, _S_do_it(const _Tp* __b, const _Tp* __e, _Tp* __restrict__ __o)
_Tp* __restrict__ __o)
{ {
while (__b != __e) while (__b != __e)
new(__o++) _Tp(*__b++); new(__o++) _Tp(*__b++);
...@@ -153,15 +151,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -153,15 +151,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
struct _Array_copy_ctor<_Tp, true> struct _Array_copy_ctor<_Tp, true>
{ {
inline static void inline static void
_S_do_it(const _Tp* __restrict__ __b, const _Tp* __restrict__ __e, _S_do_it(const _Tp* __b, const _Tp* __e, _Tp* __restrict__ __o)
_Tp* __restrict__ __o)
{ __builtin_memcpy(__o, __b, (__e - __b) * sizeof(_Tp)); } { __builtin_memcpy(__o, __b, (__e - __b) * sizeof(_Tp)); }
}; };
template<typename _Tp> template<typename _Tp>
inline void inline void
__valarray_copy_construct(const _Tp* __restrict__ __b, __valarray_copy_construct(const _Tp* __b, const _Tp* __e,
const _Tp* __restrict__ __e,
_Tp* __restrict__ __o) _Tp* __restrict__ __o)
{ {
_Array_copy_ctor<_Tp, __is_pod(_Tp)>::_S_do_it(__b, __e, __o); _Array_copy_ctor<_Tp, __is_pod(_Tp)>::_S_do_it(__b, __e, __o);
...@@ -205,7 +201,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -205,7 +201,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// Do the necessary cleanup when we're done with arrays. // Do the necessary cleanup when we're done with arrays.
template<typename _Tp> template<typename _Tp>
inline void inline void
__valarray_destroy_elements(_Tp* __restrict__ __b, _Tp* __restrict__ __e) __valarray_destroy_elements(_Tp* __b, _Tp* __e)
{ {
if (!__is_pod(_Tp)) if (!__is_pod(_Tp))
while (__b != __e) while (__b != __e)
...@@ -347,7 +343,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -347,7 +343,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// //
template<typename _Tp> template<typename _Tp>
inline _Tp inline _Tp
__valarray_sum(const _Tp* __restrict__ __f, const _Tp* __restrict__ __l) __valarray_sum(const _Tp* __f, const _Tp* __l)
{ {
_Tp __r = _Tp(); _Tp __r = _Tp();
while (__f != __l) while (__f != __l)
...@@ -358,8 +354,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -358,8 +354,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// Compute the product of all elements in range [__f, __l) // Compute the product of all elements in range [__f, __l)
template<typename _Tp> template<typename _Tp>
inline _Tp inline _Tp
__valarray_product(const _Tp* __restrict__ __f, __valarray_product(const _Tp* __f, const _Tp* __l)
const _Tp* __restrict__ __l)
{ {
_Tp __r = _Tp(1); _Tp __r = _Tp(1);
while (__f != __l) while (__f != __l)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment