changeset: 105122:cfc956f13ce2 user: Victor Stinner date: Tue Nov 15 15:13:40 2016 +0100 files: Include/pyport.h Objects/dictobject.c description: Issue #28618: Mark dict lookup functions as hot It's common to see these functions in the top 3 of "perf report". diff -r ac93d188ebd6 -r cfc956f13ce2 Include/pyport.h --- a/Include/pyport.h Tue Nov 15 09:12:36 2016 +0100 +++ b/Include/pyport.h Tue Nov 15 15:13:40 2016 +0100 @@ -498,7 +498,7 @@ #endif -/* Py_HOT_FUNCTION +/* _Py_HOT_FUNCTION * 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 * more aggressively and on many target it is placed into special subsection of @@ -506,7 +506,7 @@ * locality. * * 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 * negative effect on performance. Only the functions were Python spend most of diff -r ac93d188ebd6 -r cfc956f13ce2 Objects/dictobject.c --- a/Objects/dictobject.c Tue Nov 15 09:12:36 2016 +0100 +++ b/Objects/dictobject.c Tue Nov 15 15:13:40 2016 +0100 @@ -683,7 +683,7 @@ For both, when the key isn't found a DKIX_EMPTY is returned. hashpos returns where the key index should be inserted. */ -static Py_ssize_t +static Py_ssize_t _Py_HOT_FUNCTION lookdict(PyDictObject *mp, PyObject *key, Py_hash_t hash, PyObject ***value_addr, Py_ssize_t *hashpos) { @@ -798,7 +798,7 @@ } /* Specialized version for string-only keys */ -static Py_ssize_t +static Py_ssize_t _Py_HOT_FUNCTION lookdict_unicode(PyDictObject *mp, PyObject *key, Py_hash_t hash, PyObject ***value_addr, Py_ssize_t *hashpos) { @@ -873,7 +873,7 @@ /* Faster version of lookdict_unicode when it is known that no keys * will be present. */ -static Py_ssize_t +static Py_ssize_t _Py_HOT_FUNCTION lookdict_unicode_nodummy(PyDictObject *mp, PyObject *key, Py_hash_t hash, PyObject ***value_addr, Py_ssize_t *hashpos) @@ -941,7 +941,7 @@ * Split tables only contain unicode keys and no dummy keys, * 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, Py_hash_t hash, PyObject ***value_addr, Py_ssize_t *hashpos) {