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:
Ken Jin 2024-03-07 03:30:11 +08:00 committed by GitHub
parent 73807eb634
commit 7114cf20c0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
21 changed files with 645 additions and 194 deletions

View file

@ -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;