>           gcc              clang
>     mbuiter mbuiterf  mbuiter mbuiterf
> a    0.990   0.205     1.225   1.038
> b    1.032   0.207     1.232   1.054
> c    2.323   1.212     2.607   2.345
> d    2.036   0.905     2.358   2.076
> e    2.120   0.953     2.358   2.083
> f   15.335  15.036    15.307  15.496
> g   10.402   9.726    10.636  10.382
> h   11.082  10.223    11.324  10.899
> i    4.846   4.713     4.882   4.922
> j    5.151   4.919     5.097   5.137

The clang timings are suboptimal. The reason is that clang does not inline
the functions mbuiter_multi_next and mbuiterf_next. The following patch
fixes that, and produces good timings with clang:

          gcc              clang        clang always_inline
    mbuiter mbuiterf  mbuiter mbuiterf  mbuiter mbuiterf
a    0.990   0.205     1.225   1.038     0.853   0.204
b    1.032   0.207     1.232   1.054     0.793   0.205
c    2.323   1.212     2.607   2.345     2.046   1.261
d    2.036   0.905     2.358   2.076     1.810   0.933
e    2.120   0.953     2.358   2.083     1.748   0.979
f   15.335  15.036    15.307  15.496    14.649  15.996
g   10.402   9.726    10.636  10.382     9.883   9.646
h   11.082  10.223    11.324  10.899    10.373  10.083
i    4.846   4.713     4.882   4.922     4.822   4.682
j    5.151   4.919     5.097   5.137     5.052   4.923


2023-07-18  Bruno Haible  <[email protected]>

        mbiter, mbiterf, mbuiter, mbuiterf: Force inlining with clang.
        * lib/mbiter.h (MBITER_INLINE): Use _GL_ATTRIBUTE_ALWAYS_INLINE.
        * lib/mbiterf.h (MBITERF_INLINE): Likewise.
        * lib/mbuiter.h (MBUITER_INLINE): Likewise.
        * lib/mbuiterf.h (MBUITERF_INLINE): Likewise.

diff --git a/lib/mbiter.h b/lib/mbiter.h
index c9c18df05d..b9222fcc3a 100644
--- a/lib/mbiter.h
+++ b/lib/mbiter.h
@@ -82,7 +82,8 @@
 #ifndef _MBITER_H
 #define _MBITER_H 1
 
-/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE.  */
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE,
+   _GL_ATTRIBUTE_ALWAYS_INLINE.  */
 #if !_GL_CONFIG_H_INCLUDED
  #error "Please include config.h first."
 #endif
@@ -97,7 +98,7 @@
 
 _GL_INLINE_HEADER_BEGIN
 #ifndef MBITER_INLINE
-# define MBITER_INLINE _GL_INLINE
+# define MBITER_INLINE _GL_INLINE _GL_ATTRIBUTE_ALWAYS_INLINE
 #endif
 
 struct mbiter_multi
diff --git a/lib/mbiterf.h b/lib/mbiterf.h
index f5a817dbed..4ea1500210 100644
--- a/lib/mbiterf.h
+++ b/lib/mbiterf.h
@@ -73,7 +73,8 @@
 #ifndef _MBITERF_H
 #define _MBITERF_H 1
 
-/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE.  */
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE,
+   _GL_ATTRIBUTE_ALWAYS_INLINE.  */
 #if !_GL_CONFIG_H_INCLUDED
  #error "Please include config.h first."
 #endif
@@ -88,7 +89,7 @@
 
 _GL_INLINE_HEADER_BEGIN
 #ifndef MBITERF_INLINE
-# define MBITERF_INLINE _GL_INLINE
+# define MBITERF_INLINE _GL_INLINE _GL_ATTRIBUTE_ALWAYS_INLINE
 #endif
 
 struct mbif_state
diff --git a/lib/mbuiter.h b/lib/mbuiter.h
index 9e2e90a235..862efa3dbe 100644
--- a/lib/mbuiter.h
+++ b/lib/mbuiter.h
@@ -89,7 +89,8 @@
 #ifndef _MBUITER_H
 #define _MBUITER_H 1
 
-/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE.  */
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE,
+   _GL_ATTRIBUTE_ALWAYS_INLINE.  */
 #if !_GL_CONFIG_H_INCLUDED
  #error "Please include config.h first."
 #endif
@@ -106,7 +107,7 @@
 
 _GL_INLINE_HEADER_BEGIN
 #ifndef MBUITER_INLINE
-# define MBUITER_INLINE _GL_INLINE
+# define MBUITER_INLINE _GL_INLINE _GL_ATTRIBUTE_ALWAYS_INLINE
 #endif
 
 struct mbuiter_multi
diff --git a/lib/mbuiterf.h b/lib/mbuiterf.h
index e74f9e16c1..43d257e549 100644
--- a/lib/mbuiterf.h
+++ b/lib/mbuiterf.h
@@ -80,7 +80,8 @@
 #ifndef _MBUITERF_H
 #define _MBUITERF_H 1
 
-/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE.  */
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE,
+   _GL_ATTRIBUTE_ALWAYS_INLINE.  */
 #if !_GL_CONFIG_H_INCLUDED
  #error "Please include config.h first."
 #endif
@@ -97,7 +98,7 @@
 
 _GL_INLINE_HEADER_BEGIN
 #ifndef MBUITERF_INLINE
-# define MBUITERF_INLINE _GL_INLINE
+# define MBUITERF_INLINE _GL_INLINE _GL_ATTRIBUTE_ALWAYS_INLINE
 #endif
 
 struct mbuif_state




Reply via email to