From 20926c73b5cfebf954e16d79b5d683c95cfa61ad Mon Sep 17 00:00:00 2001 From: Brandt Bucher Date: Wed, 9 Apr 2025 14:32:21 -0700 Subject: GH-131798: Remove JIT guards for dict, frozenset, list, set, and tuple (GH-132289) --- Python/optimizer_cases.c.h | 74 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 72 insertions(+), 2 deletions(-) (limited to 'Python/optimizer_cases.c.h') 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); -- cgit v1.2.3