[ET Trac] [Einstein Toolkit] #1379: Rename autoconfigured CCTK_BUILTIN functions to __builtin

Einstein Toolkit trac-noreply at einsteintoolkit.org
Sun Jun 9 22:06:37 CDT 2013


#1379: Rename autoconfigured CCTK_BUILTIN functions to __builtin
--------------------------+-------------------------------------------------
  Reporter:  eschnett     |       Owner:                     
      Type:  enhancement  |      Status:  review             
  Priority:  major        |   Milestone:                     
 Component:  Cactus       |     Version:  development version
Resolution:               |    Keywords:                     
--------------------------+-------------------------------------------------
Description changed by eschnett:

Old description:

> With autoconf, it is common to define a work-around if a tested feature
> does not exist. For example, when the "inline" keyword does not exist,
> then there is a #define that allows code to still use "inline", instead
> of requiring all code to use CCTK_INLINE. This keeps code more readable.
>
> Cactus tests for various __builtin_* features (__builtin_expect,
> __builtin_unreachable). If these are not present, it defines CCTK_BUILTIN
> work-around that one can use instead. I suggest to provide instead the
> respective __builtin_* functions.
>
> We would keep the current CCTK_BUILTIN_* variants for backward
> compatibility (at least for some time), but would not define them for new
> builtins that we autoconfigure.
>
> $ svn diff cctk_Config.h.in
> Index: cctk_Config.h.in
> ===================================================================
> --- cctk_Config.h.in    (revision 5021)
> +++ cctk_Config.h.in    (working copy)
> @@ -376,6 +376,7 @@
>  #  define CCTK_BUILTIN_EXPECT(x,y) __builtin_expect(x,y)
>  #else
>  #  define CCTK_BUILTIN_EXPECT(x,y) (x)
> +#  define __builtin_expect(x,y) CCTK_BUILTIN_EXPECT(x,y)
>  #endif
>
>  /* Whether __builtin_unreachable exists. */
> @@ -384,8 +385,15 @@
>  #  define CCTK_BUILTIN_UNREACHABLE() __builtin_unreachable()
>  #else
>  #  define CCTK_BUILTIN_UNREACHABLE() CCTK_Abort(0, 1)
> +#  define __builtin_unreachable() CCTK_BUILTIN_UNREACHABLE()
>  #endif
>
>  /* OpenMP collapse clause */
>  #if (defined CCTK_DISABLE_OMP_COLLAPSE ||
> \
>       (defined __IBMC__ && defined _ARCH_450D) ||
> \
> @@ -585,6 +593,7 @@
>  #  define CCTK_BUILTIN_EXPECT(x,y) __builtin_expect(x,y)
>  #else
>  #  define CCTK_BUILTIN_EXPECT(x,y) (x)
> +#  define __builtin_expect(x,y) CCTK_BUILTIN_EXPECT(x,y)
>  #endif
>
>  /* Whether __builtin_unreachable exists. */
> @@ -593,8 +602,15 @@
>  #  define CCTK_BUILTIN_UNREACHABLE() __builtin_unreachable()
>  #else
>  #  define CCTK_BUILTIN_UNREACHABLE() CCTK_Abort(0, 1)
> +#  define __builtin_unreachable() CCTK_BUILTIN_UNREACHABLE()
>  #endif
>
>  /* Whether static_assert exists. */
>  #undef HAVE_CCTK_CXX_STATIC_ASSERT
>  #ifdef HAVE_CCTK_CXX_STATIC_ASSERT

New description:

 With autoconf, it is common to define a work-around if a tested feature
 does not exist. For example, when the "inline" keyword does not exist,
 then there is a #define that allows code to still use "inline", instead of
 requiring all code to use CCTK_INLINE. This keeps code more readable.

 Cactus tests for various __builtin_* features (__builtin_expect,
 __builtin_unreachable). If these are not present, it defines CCTK_BUILTIN
 work-around that one can use instead. I suggest to provide instead the
 respective __builtin_* functions.

 We would keep the current CCTK_BUILTIN_* variants for backward
 compatibility (at least for some time), but would not define them for new
 builtins that we autoconfigure.

 {{{
 $ svn diff cctk_Config.h.in
 Index: cctk_Config.h.in
 ===================================================================
 --- cctk_Config.h.in    (revision 5021)
 +++ cctk_Config.h.in    (working copy)
 @@ -376,6 +376,7 @@
  #  define CCTK_BUILTIN_EXPECT(x,y) __builtin_expect(x,y)
  #else
  #  define CCTK_BUILTIN_EXPECT(x,y) (x)
 +#  define __builtin_expect(x,y) CCTK_BUILTIN_EXPECT(x,y)
  #endif

  /* Whether __builtin_unreachable exists. */
 @@ -384,8 +385,15 @@
  #  define CCTK_BUILTIN_UNREACHABLE() __builtin_unreachable()
  #else
  #  define CCTK_BUILTIN_UNREACHABLE() CCTK_Abort(0, 1)
 +#  define __builtin_unreachable() CCTK_BUILTIN_UNREACHABLE()
  #endif

  /* OpenMP collapse clause */
  #if (defined CCTK_DISABLE_OMP_COLLAPSE ||                               \
       (defined __IBMC__ && defined _ARCH_450D) ||                        \
 @@ -585,6 +593,7 @@
  #  define CCTK_BUILTIN_EXPECT(x,y) __builtin_expect(x,y)
  #else
  #  define CCTK_BUILTIN_EXPECT(x,y) (x)
 +#  define __builtin_expect(x,y) CCTK_BUILTIN_EXPECT(x,y)
  #endif

  /* Whether __builtin_unreachable exists. */
 @@ -593,8 +602,15 @@
  #  define CCTK_BUILTIN_UNREACHABLE() __builtin_unreachable()
  #else
  #  define CCTK_BUILTIN_UNREACHABLE() CCTK_Abort(0, 1)
 +#  define __builtin_unreachable() CCTK_BUILTIN_UNREACHABLE()
  #endif

  /* Whether static_assert exists. */
  #undef HAVE_CCTK_CXX_STATIC_ASSERT
  #ifdef HAVE_CCTK_CXX_STATIC_ASSERT

 }}}

--

-- 
Ticket URL: <https://trac.einsteintoolkit.org/ticket/1379#comment:2>
Einstein Toolkit <http://einsteintoolkit.org>
The Einstein Toolkit


More information about the Trac mailing list