diff options
Diffstat (limited to 'Include/pyport.h')
-rw-r--r-- | Include/pyport.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/Include/pyport.h b/Include/pyport.h index 0aaa4ee..af7fbe7 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -557,6 +557,28 @@ extern "C" { #define _Py_HOT_FUNCTION #endif +// Ask the compiler to always inline a static inline function. The compiler can +// ignore it and decides to not inline the function. +// +// It can be used to inline performance critical static inline functions when +// building Python in debug mode with function inlining disabled. For example, +// MSC disables function inlining when building in debug mode. +// +// Marking blindly a static inline function with Py_ALWAYS_INLINE can result in +// worse performances (due to increased code size for example). The compiler is +// usually smarter than the developer for the cost/benefit analysis. +// +// It must be specified before the function return type. Usage: +// +// static inline Py_ALWAYS_INLINE int random(void) { return 4; } +#if defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER) +# define Py_ALWAYS_INLINE __attribute__((always_inline)) +#elif defined(_MSC_VER) +# define Py_ALWAYS_INLINE __forceinline +#else +# define Py_ALWAYS_INLINE +#endif + // Py_NO_INLINE // Disable inlining on a function. For example, it reduces the C stack // consumption: useful on LTO+PGO builds which heavily inline code (see |