diff options
author | Ken Jin <kenjin@python.org> | 2024-03-08 00:21:21 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-08 00:21:21 +0800 |
commit | 41457c7fdb04819d04a528b8dfa72c1aa5745cc9 (patch) | |
tree | 45a20bbed062946dae7b20c9fb616245b2751485 /Python/executor_cases.c.h | |
parent | 4298d69d4b2f7d0e9d93ad325238930bd6235dbf (diff) | |
download | cpython-41457c7fdb04819d04a528b8dfa72c1aa5745cc9.tar.gz cpython-41457c7fdb04819d04a528b8dfa72c1aa5745cc9.zip |
gh-116381: Remove bad specializations, add fail stats (GH-116464)
* Remove bad specializations, add fail stats
Diffstat (limited to 'Python/executor_cases.c.h')
-rw-r--r-- | Python/executor_cases.c.h | 59 |
1 files changed, 4 insertions, 55 deletions
diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index 2e7b970b4dd..26ac1593d53 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -2189,24 +2189,6 @@ break; } - case _CONTAINS_OP_LIST: { - PyObject *right; - PyObject *left; - PyObject *b; - oparg = CURRENT_OPARG(); - right = stack_pointer[-1]; - left = stack_pointer[-2]; - if (!PyList_CheckExact(right)) goto deoptimize; - int res = _PyList_Contains(right, left); - Py_DECREF(left); - Py_DECREF(right); - if (res < 0) goto pop_2_error_tier_two; - b = (res ^ oparg) ? Py_True : Py_False; - stack_pointer[-2] = b; - stack_pointer += -1; - break; - } - case _CONTAINS_OP_SET: { PyObject *right; PyObject *left; @@ -2214,7 +2196,9 @@ oparg = CURRENT_OPARG(); right = stack_pointer[-1]; left = stack_pointer[-2]; - if (!PySet_CheckExact(right)) goto deoptimize; + if (!(PySet_CheckExact(right) || PyFrozenSet_CheckExact(right))) goto deoptimize; + STAT_INC(CONTAINS_OP, hit); + // Note: both set and frozenset use the same seq_contains method! int res = _PySet_Contains((PySetObject *)right, left); Py_DECREF(left); Py_DECREF(right); @@ -2225,24 +2209,6 @@ break; } - case _CONTAINS_OP_TUPLE: { - PyObject *right; - PyObject *left; - PyObject *b; - oparg = CURRENT_OPARG(); - right = stack_pointer[-1]; - left = stack_pointer[-2]; - if (!PyTuple_CheckExact(right)) goto deoptimize; - int res = _PyTuple_Contains((PyTupleObject *)right, left); - Py_DECREF(left); - Py_DECREF(right); - if (res < 0) goto pop_2_error_tier_two; - b = (res ^ oparg) ? Py_True : Py_False; - stack_pointer[-2] = b; - stack_pointer += -1; - break; - } - case _CONTAINS_OP_DICT: { PyObject *right; PyObject *left; @@ -2251,6 +2217,7 @@ right = stack_pointer[-1]; left = stack_pointer[-2]; if (!PyDict_CheckExact(right)) goto deoptimize; + STAT_INC(CONTAINS_OP, hit); int res = PyDict_Contains(right, left); Py_DECREF(left); Py_DECREF(right); @@ -2261,24 +2228,6 @@ break; } - case _CONTAINS_OP_STR: { - PyObject *right; - PyObject *left; - PyObject *b; - oparg = CURRENT_OPARG(); - right = stack_pointer[-1]; - left = stack_pointer[-2]; - if (!PyUnicode_CheckExact(right)) goto deoptimize; - int res = PyUnicode_Contains(right, left); - Py_DECREF(left); - Py_DECREF(right); - if (res < 0) goto pop_2_error_tier_two; - b = (res ^ oparg) ? Py_True : Py_False; - stack_pointer[-2] = b; - stack_pointer += -1; - break; - } - case _CHECK_EG_MATCH: { PyObject *match_type; PyObject *exc_value; |