diff options
Diffstat (limited to 'Python/optimizer_cases.c.h')
-rw-r--r-- | Python/optimizer_cases.c.h | 74 |
1 files changed, 72 insertions, 2 deletions
diff --git a/Python/optimizer_cases.c.h b/Python/optimizer_cases.c.h index 0df52e65443..0c617137a88 100644 --- a/Python/optimizer_cases.c.h +++ b/Python/optimizer_cases.c.h @@ -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); |