Commit c7a8f674 authored by Victor Stinner's avatar Victor Stinner

Issue #28618: Mark dict lookup functions as hot

It's common to see these functions in the top 3 of "perf report".
parent d5f599a3
...@@ -498,7 +498,7 @@ extern "C" { ...@@ -498,7 +498,7 @@ extern "C" {
#endif #endif
/* Py_HOT_FUNCTION /* _Py_HOT_FUNCTION
* The hot attribute on a function is used to inform the compiler that the * The hot attribute on a function is used to inform the compiler that the
* function is a hot spot of the compiled program. The function is optimized * function is a hot spot of the compiled program. The function is optimized
* more aggressively and on many target it is placed into special subsection of * more aggressively and on many target it is placed into special subsection of
...@@ -506,7 +506,7 @@ extern "C" { ...@@ -506,7 +506,7 @@ extern "C" {
* locality. * locality.
* *
* Usage: * Usage:
* int Py_HOT_FUNCTION x() { return 3; } * int _Py_HOT_FUNCTION x() { return 3; }
* *
* Issue #28618: This attribute must not be abused, otherwise it can have a * 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 * negative effect on performance. Only the functions were Python spend most of
......
...@@ -683,7 +683,7 @@ the <dummy> value. ...@@ -683,7 +683,7 @@ the <dummy> value.
For both, when the key isn't found a DKIX_EMPTY is returned. hashpos returns For both, when the key isn't found a DKIX_EMPTY is returned. hashpos returns
where the key index should be inserted. where the key index should be inserted.
*/ */
static Py_ssize_t static Py_ssize_t _Py_HOT_FUNCTION
lookdict(PyDictObject *mp, PyObject *key, lookdict(PyDictObject *mp, PyObject *key,
Py_hash_t hash, PyObject ***value_addr, Py_ssize_t *hashpos) Py_hash_t hash, PyObject ***value_addr, Py_ssize_t *hashpos)
{ {
...@@ -798,7 +798,7 @@ top: ...@@ -798,7 +798,7 @@ top:
} }
/* Specialized version for string-only keys */ /* Specialized version for string-only keys */
static Py_ssize_t static Py_ssize_t _Py_HOT_FUNCTION
lookdict_unicode(PyDictObject *mp, PyObject *key, lookdict_unicode(PyDictObject *mp, PyObject *key,
Py_hash_t hash, PyObject ***value_addr, Py_ssize_t *hashpos) Py_hash_t hash, PyObject ***value_addr, Py_ssize_t *hashpos)
{ {
...@@ -873,7 +873,7 @@ lookdict_unicode(PyDictObject *mp, PyObject *key, ...@@ -873,7 +873,7 @@ lookdict_unicode(PyDictObject *mp, PyObject *key,
/* Faster version of lookdict_unicode when it is known that no <dummy> keys /* Faster version of lookdict_unicode when it is known that no <dummy> keys
* will be present. */ * will be present. */
static Py_ssize_t static Py_ssize_t _Py_HOT_FUNCTION
lookdict_unicode_nodummy(PyDictObject *mp, PyObject *key, lookdict_unicode_nodummy(PyDictObject *mp, PyObject *key,
Py_hash_t hash, PyObject ***value_addr, Py_hash_t hash, PyObject ***value_addr,
Py_ssize_t *hashpos) Py_ssize_t *hashpos)
...@@ -941,7 +941,7 @@ lookdict_unicode_nodummy(PyDictObject *mp, PyObject *key, ...@@ -941,7 +941,7 @@ lookdict_unicode_nodummy(PyDictObject *mp, PyObject *key,
* Split tables only contain unicode keys and no dummy keys, * Split tables only contain unicode keys and no dummy keys,
* so algorithm is the same as lookdict_unicode_nodummy. * so algorithm is the same as lookdict_unicode_nodummy.
*/ */
static Py_ssize_t static Py_ssize_t _Py_HOT_FUNCTION
lookdict_split(PyDictObject *mp, PyObject *key, lookdict_split(PyDictObject *mp, PyObject *key,
Py_hash_t hash, PyObject ***value_addr, Py_ssize_t *hashpos) Py_hash_t hash, PyObject ***value_addr, Py_ssize_t *hashpos)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment