mirror of https://github.com/python/cpython
Collect stats for UNPACK_SEQUENCE. (GH-31105)
This commit is contained in:
parent
da4d4ec185
commit
a0401d8372
|
@ -2792,6 +2792,12 @@ handle_eval_breaker:
|
|||
TARGET(UNPACK_SEQUENCE) {
|
||||
PREDICTED(UNPACK_SEQUENCE);
|
||||
PyObject *seq = POP(), *item, **items;
|
||||
#ifdef Py_STATS
|
||||
extern int _PySpecialization_ClassifySequence(PyObject *);
|
||||
_py_stats.opcode_stats[UNPACK_SEQUENCE].specialization.failure++;
|
||||
_py_stats.opcode_stats[UNPACK_SEQUENCE].specialization.
|
||||
failure_kinds[_PySpecialization_ClassifySequence(seq)]++;
|
||||
#endif
|
||||
if (PyTuple_CheckExact(seq) &&
|
||||
PyTuple_GET_SIZE(seq) == oparg) {
|
||||
items = ((PyTupleObject *)seq)->ob_item;
|
||||
|
|
|
@ -572,6 +572,10 @@ initial_counter_value(void) {
|
|||
#define SPEC_FAIL_ITER_DICT_VALUES 22
|
||||
#define SPEC_FAIL_ITER_ENUMERATE 23
|
||||
|
||||
/* UNPACK_SEQUENCE */
|
||||
#define SPEC_FAIL_TUPLE 10
|
||||
#define SPEC_FAIL_LIST 11
|
||||
|
||||
|
||||
static int
|
||||
specialize_module_load_attr(
|
||||
|
@ -1880,7 +1884,6 @@ success:
|
|||
adaptive->counter = initial_counter_value();
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
_PySpecialization_ClassifyIterator(PyObject *iter)
|
||||
{
|
||||
|
@ -1930,3 +1933,15 @@ int
|
|||
}
|
||||
return SPEC_FAIL_OTHER;
|
||||
}
|
||||
|
||||
int
|
||||
_PySpecialization_ClassifySequence(PyObject *seq)
|
||||
{
|
||||
if (PyTuple_CheckExact(seq)) {
|
||||
return SPEC_FAIL_TUPLE;
|
||||
}
|
||||
if (PyList_CheckExact(seq)) {
|
||||
return SPEC_FAIL_LIST;
|
||||
}
|
||||
return SPEC_FAIL_OTHER;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue