mirror of
https://github.com/python/cpython.git
synced 2025-11-01 14:11:41 +00:00
gh-116381: Specialize CONTAINS_OP (GH-116385)
* Specialize CONTAINS_OP * 📜🤖 Added by blurb_it. * Add PyAPI_FUNC for JIT --------- Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
This commit is contained in:
parent
73807eb634
commit
7114cf20c0
21 changed files with 645 additions and 194 deletions
90
Python/executor_cases.c.h
generated
90
Python/executor_cases.c.h
generated
|
|
@ -2189,6 +2189,96 @@
|
|||
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;
|
||||
PyObject *b;
|
||||
oparg = CURRENT_OPARG();
|
||||
right = stack_pointer[-1];
|
||||
left = stack_pointer[-2];
|
||||
if (!PySet_CheckExact(right)) goto deoptimize;
|
||||
int res = _PySet_Contains((PySetObject *)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_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;
|
||||
PyObject *b;
|
||||
oparg = CURRENT_OPARG();
|
||||
right = stack_pointer[-1];
|
||||
left = stack_pointer[-2];
|
||||
if (!PyDict_CheckExact(right)) goto deoptimize;
|
||||
int res = PyDict_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_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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue