mirror of
https://github.com/python/cpython.git
synced 2025-08-22 09:45:06 +00:00
GH-115819: Eliminate Boolean guards when value is known (GH-116355)
This commit is contained in:
parent
c91bdf86ef
commit
0c81ce1360
6 changed files with 102 additions and 2 deletions
|
@ -21,6 +21,7 @@ typedef struct _Py_UOpsAbstractFrame _Py_UOpsAbstractFrame;
|
|||
#define sym_new_const _Py_uop_sym_new_const
|
||||
#define sym_new_null _Py_uop_sym_new_null
|
||||
#define sym_matches_type _Py_uop_sym_matches_type
|
||||
#define sym_has_type _Py_uop_sym_has_type
|
||||
#define sym_set_null _Py_uop_sym_set_null
|
||||
#define sym_set_non_null _Py_uop_sym_set_non_null
|
||||
#define sym_set_type _Py_uop_sym_set_type
|
||||
|
@ -36,6 +37,8 @@ optimize_to_bool(
|
|||
_Py_UopsSymbol *value,
|
||||
_Py_UopsSymbol **result_ptr);
|
||||
|
||||
extern void
|
||||
eliminate_pop_guard(_PyUOpInstruction *this_instr, bool exit)
|
||||
|
||||
static int
|
||||
dummy_func(void) {
|
||||
|
@ -557,7 +560,45 @@ dummy_func(void) {
|
|||
(void)iter;
|
||||
}
|
||||
|
||||
op(_GUARD_IS_TRUE_POP, (flag -- )) {
|
||||
if (sym_is_const(flag)) {
|
||||
PyObject *value = sym_get_const(flag);
|
||||
assert(value != NULL);
|
||||
eliminate_pop_guard(this_instr, value != Py_True);
|
||||
}
|
||||
}
|
||||
|
||||
op(_GUARD_IS_FALSE_POP, (flag -- )) {
|
||||
if (sym_is_const(flag)) {
|
||||
PyObject *value = sym_get_const(flag);
|
||||
assert(value != NULL);
|
||||
eliminate_pop_guard(this_instr, value != Py_False);
|
||||
}
|
||||
}
|
||||
|
||||
op(_GUARD_IS_NONE_POP, (flag -- )) {
|
||||
if (sym_is_const(flag)) {
|
||||
PyObject *value = sym_get_const(flag);
|
||||
assert(value != NULL);
|
||||
eliminate_pop_guard(this_instr, !Py_IsNone(value));
|
||||
}
|
||||
else if (sym_has_type(flag)) {
|
||||
assert(!sym_matches_type(flag, &_PyNone_Type));
|
||||
eliminate_pop_guard(this_instr, true);
|
||||
}
|
||||
}
|
||||
|
||||
op(_GUARD_IS_NOT_NONE_POP, (flag -- )) {
|
||||
if (sym_is_const(flag)) {
|
||||
PyObject *value = sym_get_const(flag);
|
||||
assert(value != NULL);
|
||||
eliminate_pop_guard(this_instr, Py_IsNone(value));
|
||||
}
|
||||
else if (sym_has_type(flag)) {
|
||||
assert(!sym_matches_type(flag, &_PyNone_Type));
|
||||
eliminate_pop_guard(this_instr, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// END BYTECODES //
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue