diff options
author | Brandt Bucher <brandtbucher@microsoft.com> | 2025-04-09 14:32:21 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-09 14:32:21 -0700 |
commit | 20926c73b5cfebf954e16d79b5d683c95cfa61ad (patch) | |
tree | 3055b2e2b05b634e434b0f4ca54a0c45546133f0 /Python/optimizer_cases.c.h | |
parent | d47584aae6fab1b767e2d2ea6611b9c0c3ff36e2 (diff) | |
download | cpython-20926c73b5cfebf954e16d79b5d683c95cfa61ad.tar.gz cpython-20926c73b5cfebf954e16d79b5d683c95cfa61ad.zip |
GH-131798: Remove JIT guards for dict, frozenset, list, set, and tuple (GH-132289)
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); |