From: Andres Freund Date: Wed, 13 Dec 2017 23:34:20 +0000 (-0800) Subject: Add pg_attribute_always_inline. X-Git-Tag: REL_11_BETA1~1072 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dbb3d6f0102e0aca7575ff864450fca57ac85517;p=postgresql 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 --- diff --git a/src/include/c.h b/src/include/c.h index a61428843a..11fcffbae3 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -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