> clang supports expression statement syntax (a block inside parentheses) like
> GCC. This patch makes use of it.

Two further places where expression statements can be enabled in clang, for
better optimization:


2020-08-16  Bruno Haible  <br...@clisp.org>

        setenv: Use tree code also with clang.
        * lib/setenv.c (USE_TSEARCH): Treat clang like GCC.

2020-08-16  Bruno Haible  <br...@clisp.org>

        math: Optimize signbit also on clang.
        * lib/math.in.h (gl_signbitf, gl_signbitd, gl_signbitl): Optimize also
        on clang.

>From ad3f6af5cea05a6aa9d6bf8588ef024d24f3b6ef Mon Sep 17 00:00:00 2001
From: Bruno Haible <br...@clisp.org>
Date: Sun, 16 Aug 2020 18:39:29 +0200
Subject: [PATCH 1/2] math: Optimize signbit also on clang.

* lib/math.in.h (gl_signbitf, gl_signbitd, gl_signbitl): Optimize also
on clang.
---
 ChangeLog     | 6 ++++++
 lib/math.in.h | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index 81ed349..2e78c4f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2020-08-16  Bruno Haible  <br...@clisp.org>
 
+	math: Optimize signbit also on clang.
+	* lib/math.in.h (gl_signbitf, gl_signbitd, gl_signbitl): Optimize also
+	on clang.
+
+2020-08-16  Bruno Haible  <br...@clisp.org>
+
 	avltreehash-list, rbtreehash-list: Optimize also on clang.
 	* lib/gl_anytreehash_list1.h (add_nodes_to_buckets): Use
 	__builtin_expect also on clang.
diff --git a/lib/math.in.h b/lib/math.in.h
index 99b7e32..0f67127 100644
--- a/lib/math.in.h
+++ b/lib/math.in.h
@@ -2536,7 +2536,7 @@ _GL_WARN_REAL_FLOATING_DECL (isnan);
 _GL_EXTERN_C int gl_signbitf (float arg);
 _GL_EXTERN_C int gl_signbitd (double arg);
 _GL_EXTERN_C int gl_signbitl (long double arg);
-#  if __GNUC__ >= 2 && !defined __STRICT_ANSI__
+#  if (__GNUC__ >= 2 || defined __clang__) && !defined __STRICT_ANSI__
 #   define _GL_NUM_UINT_WORDS(type) \
       ((sizeof (type) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
 #   if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT && !defined gl_signbitf
-- 
2.7.4

>From 5a459e1cf0deb13b90313da377fe6cb2d8ccff73 Mon Sep 17 00:00:00 2001
From: Bruno Haible <br...@clisp.org>
Date: Sun, 16 Aug 2020 18:39:33 +0200
Subject: [PATCH 2/2] setenv: Use tree code also with clang.

* lib/setenv.c (USE_TSEARCH): Treat clang like GCC.
---
 ChangeLog    | 5 +++++
 lib/setenv.c | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index 2e78c4f..b750f34 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2020-08-16  Bruno Haible  <br...@clisp.org>
 
+	setenv: Use tree code also with clang.
+	* lib/setenv.c (USE_TSEARCH): Treat clang like GCC.
+
+2020-08-16  Bruno Haible  <br...@clisp.org>
+
 	math: Optimize signbit also on clang.
 	* lib/math.in.h (gl_signbitf, gl_signbitd, gl_signbitl): Optimize also
 	on clang.
diff --git a/lib/setenv.c b/lib/setenv.c
index d03bc5a..aede703 100644
--- a/lib/setenv.c
+++ b/lib/setenv.c
@@ -72,7 +72,7 @@ __libc_lock_define_initialized (static, envlock)
    values are from a small set.  Outside glibc this will eat up all
    memory after a while.  */
 #if defined _LIBC || (defined HAVE_SEARCH_H && defined HAVE_TSEARCH \
-                      && defined __GNUC__)
+                      && (defined __GNUC__ || defined __clang__))
 # define USE_TSEARCH    1
 # include <search.h>
 typedef int (*compar_fn_t) (const void *, const void *);
-- 
2.7.4

Reply via email to