Add pg_attribute_always_inline.

Sometimes it is useful to be able to insist that the compiler inline a
function that its normal cost analysis would not normally choose to inline.
This can be useful for instantiating different variants of a function that
remove branches of code by constant folding.

Author: Thomas Munro
Reviewed-By: Andres Freund
Discussion: https://postgr.es/m/CAEepm=09rr65VN+cAV5FgyM_z=D77Xy8Fuc9CDDDYbq3pQUezg@mail.gmail.com
This commit is contained in:
Andres Freund 2017-12-13 15:34:20 -08:00
parent 923e8dee88
commit dbb3d6f010
1 changed files with 10 additions and 0 deletions

View File

@ -146,6 +146,16 @@
#define pg_attribute_noreturn()
#endif
/* GCC, Sunpro and XLC support always_inline via __attribute__ */
#if defined(__GNUC__)
#define pg_attribute_always_inline __attribute__((always_inline))
/* msvc via a special keyword */
#elif defined(_MSC_VER)
#define pg_attribute_always_inline __forceinline
#else
#define pg_attribute_always_inline
#endif
/*
* Forcing a function not to be inlined can be useful if it's the slow path of
* a performance-critical function, or should be visible in profiles to allow