]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-100239: more stats for BINARY_OP/SUBSCR specialization (#132230)
authorIrit Katriel <1055913+iritkatriel@users.noreply.github.com>
Tue, 8 Apr 2025 08:50:51 +0000 (09:50 +0100)
committerGitHub <noreply@github.com>
Tue, 8 Apr 2025 08:50:51 +0000 (08:50 +0000)
Include/cpython/pystats.h
Python/specialize.c

index f16391f8437ec11ed3180fd539e74721c336801b..7c1459bde8f1cfe5e48c8e91c240b795f70c8458 100644 (file)
@@ -31,7 +31,7 @@
 
 #define PYSTATS_MAX_UOP_ID 512
 
-#define SPECIALIZATION_FAILURE_KINDS 44
+#define SPECIALIZATION_FAILURE_KINDS 50
 
 /* Stats for determining who is calling PyEval_EvalFrame */
 #define EVAL_CALL_TOTAL 0
index f73f322f0c97256f4c297d3058aa78502951599c..498dcd3e483058443149fd49f443791c1094e8cf 100644 (file)
@@ -604,6 +604,12 @@ _PyCode_Quicken(_Py_CODEUNIT *instructions, Py_ssize_t size, int enable_counters
 #define SPEC_FAIL_BINARY_OP_SUBSCR_DEQUE                42
 #define SPEC_FAIL_BINARY_OP_SUBSCR_ENUMDICT             43
 #define SPEC_FAIL_BINARY_OP_SUBSCR_STACKSUMMARY         44
+#define SPEC_FAIL_BINARY_OP_SUBSCR_DEFAULTDICT          45
+#define SPEC_FAIL_BINARY_OP_SUBSCR_COUNTER              46
+#define SPEC_FAIL_BINARY_OP_SUBSCR_ORDEREDDICT          47
+#define SPEC_FAIL_BINARY_OP_SUBSCR_BYTES                48
+#define SPEC_FAIL_BINARY_OP_SUBSCR_STRUCTTIME           49
+#define SPEC_FAIL_BINARY_OP_SUBSCR_RANGE                50
 
 /* Calls */
 
@@ -2370,6 +2376,14 @@ binary_op_fail_kind(int oparg, PyObject *lhs, PyObject *rhs)
                 return SPEC_FAIL_BINARY_OP_SUBSCR_MAPPINGPROXY;
             }
 
+            if (PyObject_TypeCheck(lhs, &PyBytes_Type)) {
+                return SPEC_FAIL_BINARY_OP_SUBSCR_BYTES;
+            }
+
+            if (PyObject_TypeCheck(lhs, &PyRange_Type)) {
+                return SPEC_FAIL_BINARY_OP_SUBSCR_RANGE;
+            }
+
             if (strcmp(container_type->tp_name, "array.array") == 0) {
                 return SPEC_FAIL_BINARY_OP_SUBSCR_ARRAY;
             }
@@ -2390,6 +2404,22 @@ binary_op_fail_kind(int oparg, PyObject *lhs, PyObject *rhs)
                 return SPEC_FAIL_BINARY_OP_SUBSCR_STACKSUMMARY;
             }
 
+            if (strcmp(container_type->tp_name, "collections.defaultdict") == 0) {
+                return SPEC_FAIL_BINARY_OP_SUBSCR_DEFAULTDICT;
+            }
+
+            if (strcmp(container_type->tp_name, "Counter") == 0) {
+                return SPEC_FAIL_BINARY_OP_SUBSCR_COUNTER;
+            }
+
+            if (strcmp(container_type->tp_name, "collections.OrderedDict") == 0) {
+                return SPEC_FAIL_BINARY_OP_SUBSCR_ORDEREDDICT;
+            }
+
+            if (strcmp(container_type->tp_name, "time.struct_time") == 0) {
+                return SPEC_FAIL_BINARY_OP_SUBSCR_STRUCTTIME;
+            }
+
             if (PySlice_Check(rhs)) {
                 return SPEC_FAIL_BINARY_OP_SUBSCR_OTHER_SLICE;
             }