mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
GH-131798: Allow the JIT to remove more int/float/str guards (GH-131800)
This commit is contained in:
parent
cd69d55f64
commit
1a9d4a1fb3
10 changed files with 756 additions and 703 deletions
95
Python/executor_cases.c.h
generated
95
Python/executor_cases.c.h
generated
|
@ -760,6 +760,20 @@
|
|||
break;
|
||||
}
|
||||
|
||||
case _GUARD_NOS_UNICODE: {
|
||||
_PyStackRef tos;
|
||||
_PyStackRef nos;
|
||||
tos = stack_pointer[-1];
|
||||
nos = stack_pointer[-2];
|
||||
(void)tos;
|
||||
PyObject *o = PyStackRef_AsPyObjectBorrow(nos);
|
||||
if (!PyUnicode_CheckExact(o)) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case _GUARD_TOS_UNICODE: {
|
||||
_PyStackRef value;
|
||||
value = stack_pointer[-1];
|
||||
|
@ -834,27 +848,12 @@
|
|||
break;
|
||||
}
|
||||
|
||||
case _GUARD_BOTH_INT: {
|
||||
case _GUARD_NOS_INT: {
|
||||
_PyStackRef right;
|
||||
_PyStackRef left;
|
||||
right = stack_pointer[-1];
|
||||
left = stack_pointer[-2];
|
||||
PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
|
||||
PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
|
||||
if (!PyLong_CheckExact(left_o)) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
if (!PyLong_CheckExact(right_o)) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case _GUARD_NOS_INT: {
|
||||
_PyStackRef left;
|
||||
left = stack_pointer[-2];
|
||||
(void)right;
|
||||
PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
|
||||
if (!PyLong_CheckExact(left_o)) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
|
@ -958,27 +957,12 @@
|
|||
break;
|
||||
}
|
||||
|
||||
case _GUARD_BOTH_FLOAT: {
|
||||
case _GUARD_NOS_FLOAT: {
|
||||
_PyStackRef right;
|
||||
_PyStackRef left;
|
||||
right = stack_pointer[-1];
|
||||
left = stack_pointer[-2];
|
||||
PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
|
||||
PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
|
||||
if (!PyFloat_CheckExact(left_o)) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
if (!PyFloat_CheckExact(right_o)) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case _GUARD_NOS_FLOAT: {
|
||||
_PyStackRef left;
|
||||
left = stack_pointer[-2];
|
||||
(void)right;
|
||||
PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
|
||||
if (!PyFloat_CheckExact(left_o)) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
|
@ -1079,24 +1063,6 @@
|
|||
break;
|
||||
}
|
||||
|
||||
case _GUARD_BOTH_UNICODE: {
|
||||
_PyStackRef right;
|
||||
_PyStackRef left;
|
||||
right = stack_pointer[-1];
|
||||
left = stack_pointer[-2];
|
||||
PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
|
||||
PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
|
||||
if (!PyUnicode_CheckExact(left_o)) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
if (!PyUnicode_CheckExact(right_o)) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case _BINARY_OP_ADD_UNICODE: {
|
||||
_PyStackRef right;
|
||||
_PyStackRef left;
|
||||
|
@ -1332,10 +1298,7 @@
|
|||
list_st = stack_pointer[-2];
|
||||
PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st);
|
||||
PyObject *list = PyStackRef_AsPyObjectBorrow(list_st);
|
||||
if (!PyLong_CheckExact(sub)) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
assert(PyLong_CheckExact(sub));
|
||||
if (!PyList_CheckExact(list)) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
|
@ -1390,14 +1353,8 @@
|
|||
str_st = stack_pointer[-2];
|
||||
PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st);
|
||||
PyObject *str = PyStackRef_AsPyObjectBorrow(str_st);
|
||||
if (!PyLong_CheckExact(sub)) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
if (!PyUnicode_CheckExact(str)) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
assert(PyLong_CheckExact(sub));
|
||||
assert(PyUnicode_CheckExact(str));
|
||||
if (!_PyLong_IsNonNegativeCompact((PyLongObject *)sub)) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
|
@ -1436,10 +1393,7 @@
|
|||
tuple_st = stack_pointer[-2];
|
||||
PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st);
|
||||
PyObject *tuple = PyStackRef_AsPyObjectBorrow(tuple_st);
|
||||
if (!PyLong_CheckExact(sub)) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
assert(PyLong_CheckExact(sub));
|
||||
if (!PyTuple_CheckExact(tuple)) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
|
@ -1646,10 +1600,7 @@
|
|||
value = stack_pointer[-3];
|
||||
PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st);
|
||||
PyObject *list = PyStackRef_AsPyObjectBorrow(list_st);
|
||||
if (!PyLong_CheckExact(sub)) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
assert(PyLong_CheckExact(sub));
|
||||
if (!PyList_CheckExact(list)) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue