mirror of
https://github.com/python/cpython.git
synced 2025-11-24 20:30:18 +00:00
GH-131798: Remove JIT guards for dict, frozenset, list, set, and tuple (GH-132289)
This commit is contained in:
parent
d47584aae6
commit
20926c73b5
10 changed files with 942 additions and 543 deletions
74
Python/optimizer_cases.c.h
generated
74
Python/optimizer_cases.c.h
generated
|
|
@ -195,13 +195,32 @@
|
|||
break;
|
||||
}
|
||||
|
||||
case _GUARD_NOS_LIST: {
|
||||
JitOptSymbol *nos;
|
||||
nos = stack_pointer[-2];
|
||||
if (sym_matches_type(nos, &PyList_Type)) {
|
||||
REPLACE_OP(this_instr, _NOP, 0, 0);
|
||||
}
|
||||
sym_set_type(nos, &PyList_Type);
|
||||
break;
|
||||
}
|
||||
|
||||
case _GUARD_TOS_LIST: {
|
||||
JitOptSymbol *tos;
|
||||
tos = stack_pointer[-1];
|
||||
if (sym_matches_type(tos, &PyList_Type)) {
|
||||
REPLACE_OP(this_instr, _NOP, 0, 0);
|
||||
}
|
||||
sym_set_type(tos, &PyList_Type);
|
||||
break;
|
||||
}
|
||||
|
||||
case _TO_BOOL_LIST: {
|
||||
JitOptSymbol *value;
|
||||
JitOptSymbol *res;
|
||||
value = stack_pointer[-1];
|
||||
int already_bool = optimize_to_bool(this_instr, ctx, value, &res);
|
||||
if (!already_bool) {
|
||||
sym_set_type(value, &PyList_Type);
|
||||
res = sym_new_type(ctx, &PyBool_Type);
|
||||
}
|
||||
stack_pointer[-1] = res;
|
||||
|
|
@ -576,6 +595,26 @@
|
|||
break;
|
||||
}
|
||||
|
||||
case _GUARD_NOS_TUPLE: {
|
||||
JitOptSymbol *nos;
|
||||
nos = stack_pointer[-2];
|
||||
if (sym_matches_type(nos, &PyTuple_Type)) {
|
||||
REPLACE_OP(this_instr, _NOP, 0, 0);
|
||||
}
|
||||
sym_set_type(nos, &PyTuple_Type);
|
||||
break;
|
||||
}
|
||||
|
||||
case _GUARD_TOS_TUPLE: {
|
||||
JitOptSymbol *tos;
|
||||
tos = stack_pointer[-1];
|
||||
if (sym_matches_type(tos, &PyTuple_Type)) {
|
||||
REPLACE_OP(this_instr, _NOP, 0, 0);
|
||||
}
|
||||
sym_set_type(tos, &PyTuple_Type);
|
||||
break;
|
||||
}
|
||||
|
||||
case _BINARY_OP_SUBSCR_TUPLE_INT: {
|
||||
JitOptSymbol *res;
|
||||
res = sym_new_not_null(ctx);
|
||||
|
|
@ -585,6 +624,26 @@
|
|||
break;
|
||||
}
|
||||
|
||||
case _GUARD_NOS_DICT: {
|
||||
JitOptSymbol *nos;
|
||||
nos = stack_pointer[-2];
|
||||
if (sym_matches_type(nos, &PyDict_Type)) {
|
||||
REPLACE_OP(this_instr, _NOP, 0, 0);
|
||||
}
|
||||
sym_set_type(nos, &PyDict_Type);
|
||||
break;
|
||||
}
|
||||
|
||||
case _GUARD_TOS_DICT: {
|
||||
JitOptSymbol *tos;
|
||||
tos = stack_pointer[-1];
|
||||
if (sym_matches_type(tos, &PyDict_Type)) {
|
||||
REPLACE_OP(this_instr, _NOP, 0, 0);
|
||||
}
|
||||
sym_set_type(tos, &PyDict_Type);
|
||||
break;
|
||||
}
|
||||
|
||||
case _BINARY_OP_SUBSCR_DICT: {
|
||||
JitOptSymbol *res;
|
||||
res = sym_new_not_null(ctx);
|
||||
|
|
@ -794,7 +853,7 @@
|
|||
seq = stack_pointer[-1];
|
||||
values = &stack_pointer[-1];
|
||||
for (int i = 0; i < oparg; i++) {
|
||||
values[i] = sym_tuple_getitem(ctx, seq, i);
|
||||
values[i] = sym_tuple_getitem(ctx, seq, oparg - i - 1);
|
||||
}
|
||||
stack_pointer += -1 + oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
|
|
@ -1282,6 +1341,17 @@
|
|||
break;
|
||||
}
|
||||
|
||||
case _GUARD_TOS_ANY_SET: {
|
||||
JitOptSymbol *tos;
|
||||
tos = stack_pointer[-1];
|
||||
if (sym_matches_type(tos, &PySet_Type) ||
|
||||
sym_matches_type(tos, &PyFrozenSet_Type))
|
||||
{
|
||||
REPLACE_OP(this_instr, _NOP, 0, 0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case _CONTAINS_OP_SET: {
|
||||
JitOptSymbol *res;
|
||||
res = sym_new_type(ctx, &PyBool_Type);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue