summaryrefslogtreecommitdiff
path: root/Include
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2017-01-11 01:07:03 +0100
committerVictor Stinner <victor.stinner@gmail.com>2017-01-11 01:07:03 +0100
commit3106ff9ad570b650a3afee6ebc4adc7430c5eca2 (patch)
treeb78004bdbca2c0ece350acc0510e9fd5529ffccc /Include
parent7ee4a773664fa60b93a008db32bb0e8609175215 (diff)
downloadcpython-3106ff9ad570b650a3afee6ebc4adc7430c5eca2.tar.gz
Disable _PyStack_AsTuple() inlining
Issue #29234: Inlining _PyStack_AsTuple() into callers increases their stack consumption, Disable inlining to optimize the stack consumption. Add _Py_NO_INLINE: use __attribute__((noinline)) of GCC and Clang. It reduces the stack consumption, bytes per call, before => after: test_python_call: 1040 => 976 (-64 B) test_python_getitem: 976 => 912 (-64 B) test_python_iterator: 1120 => 1056 (-64 B) => total: 3136 => 2944 (- 192 B)
Diffstat (limited to 'Include')
-rw-r--r--Include/pyport.h15
1 files changed, 14 insertions, 1 deletions
diff --git a/Include/pyport.h b/Include/pyport.h
index def2975d47..03c664f397 100644
--- a/Include/pyport.h
+++ b/Include/pyport.h
@@ -507,7 +507,7 @@ extern "C" {
* locality.
*
* Usage:
- * int _Py_HOT_FUNCTION x() { return 3; }
+ * int _Py_HOT_FUNCTION x(void) { return 3; }
*
* Issue #28618: This attribute must not be abused, otherwise it can have a
* negative effect on performance. Only the functions were Python spend most of
@@ -521,6 +521,19 @@ extern "C" {
#define _Py_HOT_FUNCTION
#endif
+/* _Py_NO_INLINE
+ * Disable inlining on a function. For example, it helps to reduce the C stack
+ * consumption.
+ *
+ * Usage:
+ * int _Py_NO_INLINE x(void) { return 3; }
+ */
+#if defined(__GNUC__) || defined(__clang__)
+# define _Py_NO_INLINE __attribute__((noinline))
+#else
+# define _Py_NO_INLINE
+#endif
+
/**************************************************************************
Prototypes that are missing from the standard include files on some systems
(and possibly only some versions of such systems.)