From: Irit Katriel <1055913+iritkatriel@users.noreply.github.com> Date: Tue, 8 Apr 2025 08:50:51 +0000 (+0100) Subject: gh-100239: more stats for BINARY_OP/SUBSCR specialization (#132230) X-Git-Tag: v3.14.0a7~6 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8c9ef8f1f8fff3403572d50e77043c4bdc3aaf27;p=thirdparty%2FPython%2Fcpython.git gh-100239: more stats for BINARY_OP/SUBSCR specialization (#132230) --- diff --git a/Include/cpython/pystats.h b/Include/cpython/pystats.h index f16391f8437e..7c1459bde8f1 100644 --- a/Include/cpython/pystats.h +++ b/Include/cpython/pystats.h @@ -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 diff --git a/Python/specialize.c b/Python/specialize.c index f73f322f0c97..498dcd3e4830 100644 --- a/Python/specialize.c +++ b/Python/specialize.c @@ -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; }