]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Collect stats for UNPACK_SEQUENCE. (GH-31105)
authorMark Shannon <mark@hotpy.org>
Thu, 3 Feb 2022 18:40:56 +0000 (18:40 +0000)
committerGitHub <noreply@github.com>
Thu, 3 Feb 2022 18:40:56 +0000 (18:40 +0000)
Python/ceval.c
Python/specialize.c

index 3197fe8eebb569af9d52a72a9fdb174adbafb070..b4029d1081dcbca097f127f7045bc212e5254f22 100644 (file)
@@ -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;
index 214f29751f3886c137f20a482652fc9fdcd75233..4070d6a6a0be4a03de0d451b8f19f8076495aaed 100644 (file)
@@ -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;
+}