This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.17-832-g85c2e61


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  85c2e6110c9a01ec817c30f1b7e20549d7229987 (commit)
      from  b8c792af85fe3ff65c0cd68e2f291072a60cd953 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=85c2e6110c9a01ec817c30f1b7e20549d7229987

commit 85c2e6110c9a01ec817c30f1b7e20549d7229987
Author: Adhemerval Zanella <azanella@linux.vnet.ibm.com>
Date:   Thu Jun 20 19:40:55 2013 -0500

    Fix loop construction to functions calls
    
    Check wheter the compiler has the option -fno-tree-loop-distribute-patterns
    to inhibit loop transformation to library calls and uses it on memset
    and memmove default implementation to avoid recursive calls.

diff --git a/ChangeLog b/ChangeLog
index 314a563..6c65453 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2013-06-20  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
+
+	* config.h.in (HAVE_CC_INHIBIT_LOOP_TO_LIBCALL): New define.
+	* configure.in (libc_cv_cc_loop_to_function): Check if compiler
+	accepts -fno-tree-loop-distribute-patterns.
+	* include/libc-symbols.h (inhibit_loop_to_libcall): New macro.
+	* string/memmove.c (MEMMOVE): Disable loop transformation to avoid
+	recursive call.
+	* string/memset.c (memset): Likewise.
+	* string/test-memmove.c (simple_memmove): Disable loop transformation
+	to library calls.
+	* string/test-memset.c (simple_memset): Likewise.
+	* benchtests/bench-memmove.c (simple_memmove): Likewise.
+	* benchtests/bench-memset.c (simple_memset): Likewise.
+	* configure: Regenerated.
+
 2013-06-20  Joseph Myers  <joseph@codesourcery.com>
 
 	* math/test-misc.c (main): Ignore fesetround failure when failures
diff --git a/benchtests/bench-memmove.c b/benchtests/bench-memmove.c
index dccde5d..8925606 100644
--- a/benchtests/bench-memmove.c
+++ b/benchtests/bench-memmove.c
@@ -46,6 +46,7 @@ IMPL (memmove, 1)
 #endif
 
 char *
+inhibit_loop_to_libcall
 simple_memmove (char *dst, const char *src, size_t n)
 {
   char *ret = dst;
diff --git a/benchtests/bench-memset.c b/benchtests/bench-memset.c
index 92e34f0..ea29cf3 100644
--- a/benchtests/bench-memset.c
+++ b/benchtests/bench-memset.c
@@ -63,6 +63,7 @@ builtin_memset (char *s, int c, size_t n)
 #endif
 
 char *
+inhibit_loop_to_libcall
 simple_memset (char *s, int c, size_t n)
 {
   char *r = s, *end = s + n;
diff --git a/config.h.in b/config.h.in
index 8c2479e..b5c6f16 100644
--- a/config.h.in
+++ b/config.h.in
@@ -69,6 +69,9 @@
 /* Define if the compiler supports __builtin_memset.  */
 #undef	HAVE_BUILTIN_MEMSET
 
+/* Define if compiler accepts -ftree-loop-distribute-patterns.  */
+#undef  HAVE_CC_INHIBIT_LOOP_TO_LIBCALL
+
 /* Define if the regparm attribute shall be used for local functions
    (gcc on ix86 only).  */
 #undef	USE_REGPARMS
diff --git a/configure b/configure
index 09d8336..14bff72 100755
--- a/configure
+++ b/configure
@@ -598,6 +598,7 @@ have_selinux
 have_libcap
 have_libaudit
 LIBGD
+libc_cv_cc_loop_to_function
 libc_cv_cc_submachine
 libc_cv_cc_nofma
 exceptions
@@ -6933,6 +6934,38 @@ $as_echo "$libc_cv_cc_submachine" >&6; }
 fi
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC accepts -fno-tree-loop-distribute-patterns with \
+__attribute__ ((__optimize__))" >&5
+$as_echo_n "checking if $CC accepts -fno-tree-loop-distribute-patterns with \
+__attribute__ ((__optimize__))... " >&6; }
+if ${libc_cv_cc_loop_to_function+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat > conftest.c <<EOF
+void
+__attribute__ ((__optimize__ ("-fno-tree-loop-distribute-patterns")))
+foo (void) {}
+EOF
+libc_cv_cc_loop_to_function=no
+if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }
+then
+  libc_cv_cc_loop_to_function=yes
+fi
+rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_loop_to_function" >&5
+$as_echo "$libc_cv_cc_loop_to_function" >&6; }
+if test $libc_cv_cc_loop_to_function = yes; then
+  $as_echo "#define HAVE_CC_INHIBIT_LOOP_TO_LIBCALL 1" >>confdefs.h
+
+fi
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libgd" >&5
 $as_echo_n "checking for libgd... " >&6; }
 if test "$with_gd" != "no"; then
diff --git a/configure.in b/configure.in
index 8b11081..56cd61c 100644
--- a/configure.in
+++ b/configure.in
@@ -1964,6 +1964,24 @@ if test -n "$submachine"; then
 fi
 AC_SUBST(libc_cv_cc_submachine)
 
+AC_CACHE_CHECK(if $CC accepts -fno-tree-loop-distribute-patterns with \
+__attribute__ ((__optimize__)), libc_cv_cc_loop_to_function, [dnl
+cat > conftest.c <<EOF
+void
+__attribute__ ((__optimize__ ("-fno-tree-loop-distribute-patterns")))
+foo (void) {}
+EOF
+libc_cv_cc_loop_to_function=no
+if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c])
+then
+  libc_cv_cc_loop_to_function=yes
+fi
+rm -f conftest*])
+if test $libc_cv_cc_loop_to_function = yes; then
+  AC_DEFINE(HAVE_CC_INHIBIT_LOOP_TO_LIBCALL)
+fi
+AC_SUBST(libc_cv_cc_loop_to_function)
+
 dnl Check whether we have the gd library available.
 AC_MSG_CHECKING(for libgd)
 if test "$with_gd" != "no"; then
diff --git a/include/libc-symbols.h b/include/libc-symbols.h
index f043ce0..a3b6274 100644
--- a/include/libc-symbols.h
+++ b/include/libc-symbols.h
@@ -782,4 +782,14 @@ for linking")
 #define libc_ifunc_hidden_def(name) \
   libc_ifunc_hidden_def1 (__GI_##name, name)
 
+/* Add the compiler optimization to inhibit loop transformation to library
+   calls.  This is used to avoid recursive calls in memset and memmove
+   default implementations.  */
+#ifdef HAVE_CC_INHIBIT_LOOP_TO_LIBCALL
+# define inhibit_loop_to_libcall \
+    __attribute__ ((__optimize__ ("-fno-tree-loop-distribute-patterns")))
+#else
+# define inhibit_loop_to_libcall
+#endif
+
 #endif /* libc-symbols.h */
diff --git a/string/memmove.c b/string/memmove.c
index 9dcd2f1..ec61e28 100644
--- a/string/memmove.c
+++ b/string/memmove.c
@@ -41,6 +41,7 @@
 #endif
 
 rettype
+inhibit_loop_to_libcall
 MEMMOVE (a1, a2, len)
      a1const void *a1;
      a2const void *a2;
diff --git a/string/memset.c b/string/memset.c
index 868be53..74b5409 100644
--- a/string/memset.c
+++ b/string/memset.c
@@ -21,6 +21,7 @@
 #undef memset
 
 void *
+inhibit_loop_to_libcall
 memset (dstpp, c, len)
      void *dstpp;
      int c;
diff --git a/string/test-memmove.c b/string/test-memmove.c
index 4ec55b2..94576a2 100644
--- a/string/test-memmove.c
+++ b/string/test-memmove.c
@@ -47,6 +47,7 @@ IMPL (memmove, 1)
 #endif
 
 char *
+inhibit_loop_to_libcall
 simple_memmove (char *dst, const char *src, size_t n)
 {
   char *ret = dst;
diff --git a/string/test-memset.c b/string/test-memset.c
index 9981fce..72a390e 100644
--- a/string/test-memset.c
+++ b/string/test-memset.c
@@ -64,6 +64,7 @@ builtin_memset (char *s, int c, size_t n)
 #endif
 
 char *
+inhibit_loop_to_libcall
 simple_memset (char *s, int c, size_t n)
 {
   char *r = s, *end = s + n;

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                  |   16 ++++++++++++++++
 benchtests/bench-memmove.c |    1 +
 benchtests/bench-memset.c  |    1 +
 config.h.in                |    3 +++
 configure                  |   33 +++++++++++++++++++++++++++++++++
 configure.in               |   18 ++++++++++++++++++
 include/libc-symbols.h     |   10 ++++++++++
 string/memmove.c           |    1 +
 string/memset.c            |    1 +
 string/test-memmove.c      |    1 +
 string/test-memset.c       |    1 +
 11 files changed, 86 insertions(+), 0 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]