From 351d84661bce09d4d700babcf42d511d2d60b6c5 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Mon, 11 Sep 2023 11:23:52 -0700 Subject: [PATCH 1/6] Rename SAVE_IP to _SET_IP --- Include/internal/pycore_opcode_metadata.h | 20 +++++------ Lib/test/test_capi/test_misc.py | 2 +- Python/abstract_interp_cases.c.h | 2 +- Python/bytecodes.c | 12 +++---- Python/executor_cases.c.h | 4 +-- Python/generated_cases.c.h | 8 ++--- Python/optimizer.c | 44 +++++++++++------------ Tools/cases_generator/analysis.py | 4 +-- Tools/cases_generator/generate_cases.py | 8 ++--- Tools/cases_generator/stacking.py | 2 +- 10 files changed, 53 insertions(+), 53 deletions(-) diff --git a/Include/internal/pycore_opcode_metadata.h b/Include/internal/pycore_opcode_metadata.h index f70b75a56c150c..081039fc735ef1 100644 --- a/Include/internal/pycore_opcode_metadata.h +++ b/Include/internal/pycore_opcode_metadata.h @@ -26,7 +26,7 @@ 0) #define EXIT_TRACE 300 -#define SAVE_IP 301 +#define _SET_IP 301 #define _GUARD_BOTH_INT 302 #define _BINARY_OP_MULTIPLY_INT 303 #define _BINARY_OP_ADD_INT 304 @@ -588,7 +588,7 @@ int _PyOpcode_num_popped(int opcode, int oparg, bool jump) { return 1; case JUMP_TO_TOP: return 0; - case SAVE_IP: + case _SET_IP: return 0; case SAVE_CURRENT_IP: return 0; @@ -1118,7 +1118,7 @@ int _PyOpcode_num_pushed(int opcode, int oparg, bool jump) { return 0; case JUMP_TO_TOP: return 0; - case SAVE_IP: + case _SET_IP: return 0; case SAVE_CURRENT_IP: return 0; @@ -1186,7 +1186,7 @@ struct opcode_macro_expansion { #define OPARG_CACHE_4 4 #define OPARG_TOP 5 #define OPARG_BOTTOM 6 -#define OPARG_SAVE_IP 7 +#define OPARG_SET_IP 7 #define OPCODE_METADATA_FMT(OP) (_PyOpcode_opcode_metadata[(OP)].instr_format) #define SAME_OPCODE_METADATA(OP1, OP2) \ @@ -1459,7 +1459,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[OPCODE_METADATA_SIZE] = { [_POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, [_POP_JUMP_IF_TRUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, [JUMP_TO_TOP] = { true, INSTR_FMT_IX, HAS_EVAL_BREAK_FLAG }, - [SAVE_IP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, + [_SET_IP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, [SAVE_CURRENT_IP] = { true, INSTR_FMT_IX, 0 }, [EXIT_TRACE] = { true, INSTR_FMT_IX, 0 }, [INSERT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, @@ -1515,8 +1515,8 @@ const struct opcode_macro_expansion _PyOpcode_macro_expansion[OPCODE_MACRO_EXPAN [DELETE_SUBSCR] = { .nuops = 1, .uops = { { DELETE_SUBSCR, 0, 0 } } }, [CALL_INTRINSIC_1] = { .nuops = 1, .uops = { { CALL_INTRINSIC_1, 0, 0 } } }, [CALL_INTRINSIC_2] = { .nuops = 1, .uops = { { CALL_INTRINSIC_2, 0, 0 } } }, - [RETURN_VALUE] = { .nuops = 3, .uops = { { SAVE_IP, 7, 0 }, { SAVE_CURRENT_IP, 0, 0 }, { _POP_FRAME, 0, 0 } } }, - [RETURN_CONST] = { .nuops = 4, .uops = { { LOAD_CONST, 0, 0 }, { SAVE_IP, 7, 0 }, { SAVE_CURRENT_IP, 0, 0 }, { _POP_FRAME, 0, 0 } } }, + [RETURN_VALUE] = { .nuops = 3, .uops = { { _SET_IP, 7, 0 }, { SAVE_CURRENT_IP, 0, 0 }, { _POP_FRAME, 0, 0 } } }, + [RETURN_CONST] = { .nuops = 4, .uops = { { LOAD_CONST, 0, 0 }, { _SET_IP, 7, 0 }, { SAVE_CURRENT_IP, 0, 0 }, { _POP_FRAME, 0, 0 } } }, [GET_AITER] = { .nuops = 1, .uops = { { GET_AITER, 0, 0 } } }, [GET_ANEXT] = { .nuops = 1, .uops = { { GET_ANEXT, 0, 0 } } }, [GET_AWAITABLE] = { .nuops = 1, .uops = { { GET_AWAITABLE, 0, 0 } } }, @@ -1579,8 +1579,8 @@ const struct opcode_macro_expansion _PyOpcode_macro_expansion[OPCODE_MACRO_EXPAN [GET_YIELD_FROM_ITER] = { .nuops = 1, .uops = { { GET_YIELD_FROM_ITER, 0, 0 } } }, [WITH_EXCEPT_START] = { .nuops = 1, .uops = { { WITH_EXCEPT_START, 0, 0 } } }, [PUSH_EXC_INFO] = { .nuops = 1, .uops = { { PUSH_EXC_INFO, 0, 0 } } }, - [CALL_BOUND_METHOD_EXACT_ARGS] = { .nuops = 9, .uops = { { _CHECK_PEP_523, 0, 0 }, { _CHECK_CALL_BOUND_METHOD_EXACT_ARGS, 0, 0 }, { _INIT_CALL_BOUND_METHOD_EXACT_ARGS, 0, 0 }, { _CHECK_FUNCTION_EXACT_ARGS, 2, 1 }, { _CHECK_STACK_SPACE, 0, 0 }, { _INIT_CALL_PY_EXACT_ARGS, 0, 0 }, { SAVE_IP, 7, 3 }, { SAVE_CURRENT_IP, 0, 0 }, { _PUSH_FRAME, 0, 0 } } }, - [CALL_PY_EXACT_ARGS] = { .nuops = 7, .uops = { { _CHECK_PEP_523, 0, 0 }, { _CHECK_FUNCTION_EXACT_ARGS, 2, 1 }, { _CHECK_STACK_SPACE, 0, 0 }, { _INIT_CALL_PY_EXACT_ARGS, 0, 0 }, { SAVE_IP, 7, 3 }, { SAVE_CURRENT_IP, 0, 0 }, { _PUSH_FRAME, 0, 0 } } }, + [CALL_BOUND_METHOD_EXACT_ARGS] = { .nuops = 9, .uops = { { _CHECK_PEP_523, 0, 0 }, { _CHECK_CALL_BOUND_METHOD_EXACT_ARGS, 0, 0 }, { _INIT_CALL_BOUND_METHOD_EXACT_ARGS, 0, 0 }, { _CHECK_FUNCTION_EXACT_ARGS, 2, 1 }, { _CHECK_STACK_SPACE, 0, 0 }, { _INIT_CALL_PY_EXACT_ARGS, 0, 0 }, { _SET_IP, 7, 3 }, { SAVE_CURRENT_IP, 0, 0 }, { _PUSH_FRAME, 0, 0 } } }, + [CALL_PY_EXACT_ARGS] = { .nuops = 7, .uops = { { _CHECK_PEP_523, 0, 0 }, { _CHECK_FUNCTION_EXACT_ARGS, 2, 1 }, { _CHECK_STACK_SPACE, 0, 0 }, { _INIT_CALL_PY_EXACT_ARGS, 0, 0 }, { _SET_IP, 7, 3 }, { SAVE_CURRENT_IP, 0, 0 }, { _PUSH_FRAME, 0, 0 } } }, [CALL_NO_KW_TYPE_1] = { .nuops = 1, .uops = { { CALL_NO_KW_TYPE_1, 0, 0 } } }, [CALL_NO_KW_STR_1] = { .nuops = 1, .uops = { { CALL_NO_KW_STR_1, 0, 0 } } }, [CALL_NO_KW_TUPLE_1] = { .nuops = 1, .uops = { { CALL_NO_KW_TUPLE_1, 0, 0 } } }, @@ -1608,7 +1608,7 @@ extern const char * const _PyOpcode_uop_name[OPCODE_UOP_NAME_SIZE]; #ifdef NEED_OPCODE_METADATA const char * const _PyOpcode_uop_name[OPCODE_UOP_NAME_SIZE] = { [EXIT_TRACE] = "EXIT_TRACE", - [SAVE_IP] = "SAVE_IP", + [_SET_IP] = "_SET_IP", [_GUARD_BOTH_INT] = "_GUARD_BOTH_INT", [_BINARY_OP_MULTIPLY_INT] = "_BINARY_OP_MULTIPLY_INT", [_BINARY_OP_ADD_INT] = "_BINARY_OP_ADD_INT", diff --git a/Lib/test/test_capi/test_misc.py b/Lib/test/test_capi/test_misc.py index 004ce397696556..527d3f09178b1d 100644 --- a/Lib/test/test_capi/test_misc.py +++ b/Lib/test/test_capi/test_misc.py @@ -2390,7 +2390,7 @@ def testfunc(x): ex = get_first_executor(testfunc) self.assertIsNotNone(ex) uops = {opname for opname, _, _ in ex} - self.assertIn("SAVE_IP", uops) + self.assertIn("_SET_IP", uops) self.assertIn("LOAD_FAST", uops) def test_extended_arg(self): diff --git a/Python/abstract_interp_cases.c.h b/Python/abstract_interp_cases.c.h index 398c04616bc091..8dae053f13d520 100644 --- a/Python/abstract_interp_cases.c.h +++ b/Python/abstract_interp_cases.c.h @@ -796,7 +796,7 @@ break; } - case SAVE_IP: { + case _SET_IP: { break; } diff --git a/Python/bytecodes.c b/Python/bytecodes.c index ff95f37b900da6..eed65cd48f2cb5 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -803,7 +803,7 @@ dummy_func( } macro(RETURN_VALUE) = - SAVE_IP + // Tier 2 only; special-cased oparg + _SET_IP + // Tier 2 only; special-cased oparg SAVE_CURRENT_IP + // Sets frame->prev_instr _POP_FRAME; @@ -828,7 +828,7 @@ dummy_func( macro(RETURN_CONST) = LOAD_CONST + - SAVE_IP + // Tier 2 only; special-cased oparg + _SET_IP + // Tier 2 only; special-cased oparg SAVE_CURRENT_IP + // Sets frame->prev_instr _POP_FRAME; @@ -3061,7 +3061,7 @@ dummy_func( _CHECK_FUNCTION_EXACT_ARGS + _CHECK_STACK_SPACE + _INIT_CALL_PY_EXACT_ARGS + - SAVE_IP + // Tier 2 only; special-cased oparg + _SET_IP + // Tier 2 only; special-cased oparg SAVE_CURRENT_IP + // Sets frame->prev_instr _PUSH_FRAME; @@ -3071,7 +3071,7 @@ dummy_func( _CHECK_FUNCTION_EXACT_ARGS + _CHECK_STACK_SPACE + _INIT_CALL_PY_EXACT_ARGS + - SAVE_IP + // Tier 2 only; special-cased oparg + _SET_IP + // Tier 2 only; special-cased oparg SAVE_CURRENT_IP + // Sets frame->prev_instr _PUSH_FRAME; @@ -3832,7 +3832,7 @@ dummy_func( CHECK_EVAL_BREAKER(); } - op(SAVE_IP, (--)) { + op(_SET_IP, (--)) { frame->prev_instr = ip_offset + oparg; } @@ -3841,7 +3841,7 @@ dummy_func( frame->prev_instr = next_instr - 1; #endif #if TIER_TWO - // Relies on a preceding SAVE_IP + // Relies on a preceding _SET_IP frame->prev_instr--; #endif } diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index 918991dca7dd25..a3bf94d5639760 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -2893,7 +2893,7 @@ break; } - case SAVE_IP: { + case _SET_IP: { frame->prev_instr = ip_offset + oparg; break; } @@ -2903,7 +2903,7 @@ frame->prev_instr = next_instr - 1; #endif #if TIER_TWO - // Relies on a preceding SAVE_IP + // Relies on a preceding _SET_IP frame->prev_instr--; #endif break; diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index e84599d87a6968..1015169bde5f6a 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -993,7 +993,7 @@ frame->prev_instr = next_instr - 1; #endif #if TIER_TWO - // Relies on a preceding SAVE_IP + // Relies on a preceding _SET_IP frame->prev_instr--; #endif } @@ -1061,7 +1061,7 @@ frame->prev_instr = next_instr - 1; #endif #if TIER_TWO - // Relies on a preceding SAVE_IP + // Relies on a preceding _SET_IP frame->prev_instr--; #endif } @@ -3866,7 +3866,7 @@ frame->prev_instr = next_instr - 1; #endif #if TIER_TWO - // Relies on a preceding SAVE_IP + // Relies on a preceding _SET_IP frame->prev_instr--; #endif } @@ -3945,7 +3945,7 @@ frame->prev_instr = next_instr - 1; #endif #if TIER_TWO - // Relies on a preceding SAVE_IP + // Relies on a preceding _SET_IP frame->prev_instr--; #endif } diff --git a/Python/optimizer.c b/Python/optimizer.c index c6d0f9e5bf22d7..38c795f5192e87 100644 --- a/Python/optimizer.c +++ b/Python/optimizer.c @@ -473,14 +473,14 @@ translate_bytecode_to_trace( } \ reserved = (n); // Keep ADD_TO_TRACE / ADD_TO_STUB honest -// Reserve space for main+stub uops, plus 2 for SAVE_IP and EXIT_TRACE +// Reserve space for main+stub uops, plus 2 for _SET_IP and EXIT_TRACE #define RESERVE(main, stub) RESERVE_RAW((main) + (stub) + 2, uop_name(opcode)) // Trace stack operations (used by _PUSH_FRAME, _POP_FRAME) #define TRACE_STACK_PUSH() \ if (trace_stack_depth >= TRACE_STACK_SIZE) { \ DPRINTF(2, "Trace stack overflow\n"); \ - ADD_TO_TRACE(SAVE_IP, 0, 0); \ + ADD_TO_TRACE(_SET_IP, 0, 0); \ goto done; \ } \ trace_stack[trace_stack_depth].code = code; \ @@ -503,8 +503,8 @@ translate_bytecode_to_trace( top: // Jump here after _PUSH_FRAME for (;;) { - RESERVE_RAW(2, "epilogue"); // Always need space for SAVE_IP and EXIT_TRACE - ADD_TO_TRACE(SAVE_IP, INSTR_IP(instr, code), 0); + RESERVE_RAW(2, "epilogue"); // Always need space for _SET_IP and EXIT_TRACE + ADD_TO_TRACE(_SET_IP, INSTR_IP(instr, code), 0); uint32_t opcode = instr->op.code; uint32_t oparg = instr->op.arg; @@ -555,7 +555,7 @@ translate_bytecode_to_trace( uint32_t uopcode = opcode == POP_JUMP_IF_TRUE ? _POP_JUMP_IF_TRUE : _POP_JUMP_IF_FALSE; ADD_TO_TRACE(uopcode, max_length, 0); - ADD_TO_STUB(max_length, SAVE_IP, INSTR_IP(target_instr, code), 0); + ADD_TO_STUB(max_length, _SET_IP, INSTR_IP(target_instr, code), 0); ADD_TO_STUB(max_length + 1, EXIT_TRACE, 0, 0); break; } @@ -575,7 +575,7 @@ translate_bytecode_to_trace( case JUMP_FORWARD: { RESERVE(0, 0); - // This will emit two SAVE_IP instructions; leave it to the optimizer + // This will emit two _SET_IP instructions; leave it to the optimizer instr += oparg; break; } @@ -615,7 +615,7 @@ translate_bytecode_to_trace( ADD_TO_TRACE(next_op, 0, 0); ADD_TO_STUB(max_length + 0, POP_TOP, 0, 0); - ADD_TO_STUB(max_length + 1, SAVE_IP, INSTR_IP(target_instr, code), 0); + ADD_TO_STUB(max_length + 1, _SET_IP, INSTR_IP(target_instr, code), 0); ADD_TO_STUB(max_length + 2, EXIT_TRACE, 0, 0); break; } @@ -624,7 +624,7 @@ translate_bytecode_to_trace( { const struct opcode_macro_expansion *expansion = &_PyOpcode_macro_expansion[opcode]; if (expansion->nuops > 0) { - // Reserve space for nuops (+ SAVE_IP + EXIT_TRACE) + // Reserve space for nuops (+ _SET_IP + EXIT_TRACE) int nuops = expansion->nuops; RESERVE(nuops, 0); if (expansion->uops[nuops-1].uop == _POP_FRAME) { @@ -668,7 +668,7 @@ translate_bytecode_to_trace( case OPARG_BOTTOM: // Second half of super-instr oparg = orig_oparg & 0xF; break; - case OPARG_SAVE_IP: // op==SAVE_IP; oparg=next instr + case OPARG_SET_IP: // op==_SET_IP; oparg=next instr oparg = INSTR_IP(instr + offset, code); break; @@ -708,7 +708,7 @@ translate_bytecode_to_trace( PyUnicode_AsUTF8(new_code->co_qualname), PyUnicode_AsUTF8(new_code->co_filename), new_code->co_firstlineno); - ADD_TO_TRACE(SAVE_IP, 0, 0); + ADD_TO_TRACE(_SET_IP, 0, 0); goto done; } if (new_code->co_version != func_version) { @@ -716,7 +716,7 @@ translate_bytecode_to_trace( // Perhaps it may happen again, so don't bother tracing. // TODO: Reason about this -- is it better to bail or not? DPRINTF(2, "Bailing because co_version != func_version\n"); - ADD_TO_TRACE(SAVE_IP, 0, 0); + ADD_TO_TRACE(_SET_IP, 0, 0); goto done; } // Increment IP to the return address @@ -732,7 +732,7 @@ translate_bytecode_to_trace( 2 * INSTR_IP(instr, code)); goto top; } - ADD_TO_TRACE(SAVE_IP, 0, 0); + ADD_TO_TRACE(_SET_IP, 0, 0); goto done; } } @@ -754,7 +754,7 @@ translate_bytecode_to_trace( TRACE_STACK_POP(); } assert(code == initial_code); - // Skip short traces like SAVE_IP, LOAD_FAST, SAVE_IP, EXIT_TRACE + // Skip short traces like _SET_IP, LOAD_FAST, _SET_IP, EXIT_TRACE if (trace_length > 3) { ADD_TO_TRACE(EXIT_TRACE, 0, 0); DPRINTF(1, @@ -805,23 +805,23 @@ translate_bytecode_to_trace( static int remove_unneeded_uops(_PyUOpInstruction *trace, int trace_length) { - // Stage 1: Replace unneeded SAVE_IP uops with NOP. - // Note that we don't enter stubs, those SAVE_IPs are needed. - int last_save_ip = -1; + // Stage 1: Replace unneeded _SET_IP uops with NOP. + // Note that we don't enter stubs, those SET_IPs are needed. + int last_set_ip = -1; int last_instr = 0; bool need_ip = true; for (int pc = 0; pc < trace_length; pc++) { int opcode = trace[pc].opcode; if (opcode == SAVE_CURRENT_IP) { - // Special case: never remove preceding SAVE_IP - last_save_ip = -1; + // Special case: never remove preceding _SET_IP + last_set_ip = -1; } - else if (opcode == SAVE_IP) { - if (!need_ip && last_save_ip >= 0) { - trace[last_save_ip].opcode = NOP; + else if (opcode == _SET_IP) { + if (!need_ip && last_set_ip >= 0) { + trace[last_set_ip].opcode = NOP; } need_ip = false; - last_save_ip = pc; + last_set_ip = pc; } else if (opcode == JUMP_TO_TOP || opcode == EXIT_TRACE) { last_instr = pc + 1; diff --git a/Tools/cases_generator/analysis.py b/Tools/cases_generator/analysis.py index 7c7c9086cd72f5..9e0124bd90878e 100644 --- a/Tools/cases_generator/analysis.py +++ b/Tools/cases_generator/analysis.py @@ -365,8 +365,8 @@ def analyze_macro(self, macro: parsing.Macro) -> MacroInstruction: case Instruction() as instr: part, offset = self.analyze_instruction(instr, offset) parts.append(part) - if instr.name != "SAVE_IP": - # SAVE_IP in a macro is a no-op in Tier 1 + if instr.name != "_SET_IP": + # _SET_IP in a macro is a no-op in Tier 1 flags.add(instr.instr_flags) case _: assert_never(component) diff --git a/Tools/cases_generator/generate_cases.py b/Tools/cases_generator/generate_cases.py index 1335c0c29ebbf6..cb44d3a4a2de71 100644 --- a/Tools/cases_generator/generate_cases.py +++ b/Tools/cases_generator/generate_cases.py @@ -68,7 +68,7 @@ "OPARG_CACHE_4": 4, "OPARG_TOP": 5, "OPARG_BOTTOM": 6, - "OPARG_SAVE_IP": 7, + "OPARG_SET_IP": 7, } INSTR_FMT_PREFIX = "INSTR_FMT_" @@ -649,7 +649,7 @@ def add(name: str) -> None: # These two are first by convention add("EXIT_TRACE") - add("SAVE_IP") + add("_SET_IP") for instr in self.instrs.values(): if instr.kind == "op": @@ -677,8 +677,8 @@ def write_macro_expansions( ) return if not part.active_caches: - if part.instr.name == "SAVE_IP": - size, offset = OPARG_SIZES["OPARG_SAVE_IP"], cache_offset + if part.instr.name == "_SET_IP": + size, offset = OPARG_SIZES["OPARG_SET_IP"], cache_offset else: size, offset = OPARG_SIZES["OPARG_FULL"], 0 else: diff --git a/Tools/cases_generator/stacking.py b/Tools/cases_generator/stacking.py index 3021324e909100..891f047a6d6f18 100644 --- a/Tools/cases_generator/stacking.py +++ b/Tools/cases_generator/stacking.py @@ -362,7 +362,7 @@ def write_macro_instr( parts = [ part for part in mac.parts - if isinstance(part, Component) and part.instr.name != "SAVE_IP" + if isinstance(part, Component) and part.instr.name != "_SET_IP" ] out.emit("") with out.block(f"TARGET({mac.name})"): From 1db9c80f4cb2ba51f90953d1ad5eca24c7c4523e Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Mon, 11 Sep 2023 12:56:53 -0700 Subject: [PATCH 2/6] Rename EXIT_TRACE to _EXIT_TRACE --- Include/internal/pycore_opcode_metadata.h | 10 +++++----- Python/abstract_interp_cases.c.h | 2 +- Python/bytecodes.c | 2 +- Python/executor_cases.c.h | 2 +- Python/optimizer.c | 16 ++++++++-------- Tools/cases_generator/generate_cases.py | 2 +- Tools/cases_generator/instructions.py | 2 +- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Include/internal/pycore_opcode_metadata.h b/Include/internal/pycore_opcode_metadata.h index 081039fc735ef1..939bac6ae92240 100644 --- a/Include/internal/pycore_opcode_metadata.h +++ b/Include/internal/pycore_opcode_metadata.h @@ -25,7 +25,7 @@ ((OP) == POP_BLOCK) || \ 0) -#define EXIT_TRACE 300 +#define _EXIT_TRACE 300 #define _SET_IP 301 #define _GUARD_BOTH_INT 302 #define _BINARY_OP_MULTIPLY_INT 303 @@ -592,7 +592,7 @@ int _PyOpcode_num_popped(int opcode, int oparg, bool jump) { return 0; case SAVE_CURRENT_IP: return 0; - case EXIT_TRACE: + case _EXIT_TRACE: return 0; case INSERT: return oparg + 1; @@ -1122,7 +1122,7 @@ int _PyOpcode_num_pushed(int opcode, int oparg, bool jump) { return 0; case SAVE_CURRENT_IP: return 0; - case EXIT_TRACE: + case _EXIT_TRACE: return 0; case INSERT: return oparg + 1; @@ -1461,7 +1461,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[OPCODE_METADATA_SIZE] = { [JUMP_TO_TOP] = { true, INSTR_FMT_IX, HAS_EVAL_BREAK_FLAG }, [_SET_IP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, [SAVE_CURRENT_IP] = { true, INSTR_FMT_IX, 0 }, - [EXIT_TRACE] = { true, INSTR_FMT_IX, 0 }, + [_EXIT_TRACE] = { true, INSTR_FMT_IX, 0 }, [INSERT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, }; #endif // NEED_OPCODE_METADATA @@ -1607,7 +1607,7 @@ const struct opcode_macro_expansion _PyOpcode_macro_expansion[OPCODE_MACRO_EXPAN extern const char * const _PyOpcode_uop_name[OPCODE_UOP_NAME_SIZE]; #ifdef NEED_OPCODE_METADATA const char * const _PyOpcode_uop_name[OPCODE_UOP_NAME_SIZE] = { - [EXIT_TRACE] = "EXIT_TRACE", + [_EXIT_TRACE] = "_EXIT_TRACE", [_SET_IP] = "_SET_IP", [_GUARD_BOTH_INT] = "_GUARD_BOTH_INT", [_BINARY_OP_MULTIPLY_INT] = "_BINARY_OP_MULTIPLY_INT", diff --git a/Python/abstract_interp_cases.c.h b/Python/abstract_interp_cases.c.h index 8dae053f13d520..4dd02ae6077d80 100644 --- a/Python/abstract_interp_cases.c.h +++ b/Python/abstract_interp_cases.c.h @@ -804,7 +804,7 @@ break; } - case EXIT_TRACE: { + case _EXIT_TRACE: { break; } diff --git a/Python/bytecodes.c b/Python/bytecodes.c index eed65cd48f2cb5..8a44a439135943 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -3846,7 +3846,7 @@ dummy_func( #endif } - op(EXIT_TRACE, (--)) { + op(_EXIT_TRACE, (--)) { frame->prev_instr--; // Back up to just before destination _PyFrame_SetStackPointer(frame, stack_pointer); Py_DECREF(self); diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index a3bf94d5639760..bcc2ca48c19626 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -2909,7 +2909,7 @@ break; } - case EXIT_TRACE: { + case _EXIT_TRACE: { frame->prev_instr--; // Back up to just before destination _PyFrame_SetStackPointer(frame, stack_pointer); Py_DECREF(self); diff --git a/Python/optimizer.c b/Python/optimizer.c index 38c795f5192e87..ce6c81b620865e 100644 --- a/Python/optimizer.c +++ b/Python/optimizer.c @@ -473,7 +473,7 @@ translate_bytecode_to_trace( } \ reserved = (n); // Keep ADD_TO_TRACE / ADD_TO_STUB honest -// Reserve space for main+stub uops, plus 2 for _SET_IP and EXIT_TRACE +// Reserve space for main+stub uops, plus 2 for _SET_IP and _EXIT_TRACE #define RESERVE(main, stub) RESERVE_RAW((main) + (stub) + 2, uop_name(opcode)) // Trace stack operations (used by _PUSH_FRAME, _POP_FRAME) @@ -503,7 +503,7 @@ translate_bytecode_to_trace( top: // Jump here after _PUSH_FRAME for (;;) { - RESERVE_RAW(2, "epilogue"); // Always need space for _SET_IP and EXIT_TRACE + RESERVE_RAW(2, "epilogue"); // Always need space for _SET_IP and _EXIT_TRACE ADD_TO_TRACE(_SET_IP, INSTR_IP(instr, code), 0); uint32_t opcode = instr->op.code; @@ -556,7 +556,7 @@ translate_bytecode_to_trace( _POP_JUMP_IF_TRUE : _POP_JUMP_IF_FALSE; ADD_TO_TRACE(uopcode, max_length, 0); ADD_TO_STUB(max_length, _SET_IP, INSTR_IP(target_instr, code), 0); - ADD_TO_STUB(max_length + 1, EXIT_TRACE, 0, 0); + ADD_TO_STUB(max_length + 1, _EXIT_TRACE, 0, 0); break; } @@ -616,7 +616,7 @@ translate_bytecode_to_trace( ADD_TO_STUB(max_length + 0, POP_TOP, 0, 0); ADD_TO_STUB(max_length + 1, _SET_IP, INSTR_IP(target_instr, code), 0); - ADD_TO_STUB(max_length + 2, EXIT_TRACE, 0, 0); + ADD_TO_STUB(max_length + 2, _EXIT_TRACE, 0, 0); break; } @@ -624,7 +624,7 @@ translate_bytecode_to_trace( { const struct opcode_macro_expansion *expansion = &_PyOpcode_macro_expansion[opcode]; if (expansion->nuops > 0) { - // Reserve space for nuops (+ _SET_IP + EXIT_TRACE) + // Reserve space for nuops (+ _SET_IP + _EXIT_TRACE) int nuops = expansion->nuops; RESERVE(nuops, 0); if (expansion->uops[nuops-1].uop == _POP_FRAME) { @@ -754,9 +754,9 @@ translate_bytecode_to_trace( TRACE_STACK_POP(); } assert(code == initial_code); - // Skip short traces like _SET_IP, LOAD_FAST, _SET_IP, EXIT_TRACE + // Skip short traces like _SET_IP, LOAD_FAST, _SET_IP, _EXIT_TRACE if (trace_length > 3) { - ADD_TO_TRACE(EXIT_TRACE, 0, 0); + ADD_TO_TRACE(_EXIT_TRACE, 0, 0); DPRINTF(1, "Created a trace for %s (%s:%d) at byte offset %d -- length %d+%d\n", PyUnicode_AsUTF8(code->co_qualname), @@ -823,7 +823,7 @@ remove_unneeded_uops(_PyUOpInstruction *trace, int trace_length) need_ip = false; last_set_ip = pc; } - else if (opcode == JUMP_TO_TOP || opcode == EXIT_TRACE) { + else if (opcode == JUMP_TO_TOP || opcode == _EXIT_TRACE) { last_instr = pc + 1; break; } diff --git a/Tools/cases_generator/generate_cases.py b/Tools/cases_generator/generate_cases.py index cb44d3a4a2de71..b6ee4a579ee7f2 100644 --- a/Tools/cases_generator/generate_cases.py +++ b/Tools/cases_generator/generate_cases.py @@ -648,7 +648,7 @@ def add(name: str) -> None: seen.add(name) # These two are first by convention - add("EXIT_TRACE") + add("_EXIT_TRACE") add("_SET_IP") for instr in self.instrs.values(): diff --git a/Tools/cases_generator/instructions.py b/Tools/cases_generator/instructions.py index 145c1ade839b82..78b3c290a49273 100644 --- a/Tools/cases_generator/instructions.py +++ b/Tools/cases_generator/instructions.py @@ -124,7 +124,7 @@ def is_viable_uop(self) -> bool: if "FRAME" in self.name: dprint = print - if self.name == "EXIT_TRACE": + if self.name == "_EXIT_TRACE": return True # This has 'return frame' but it's okay if self.always_exits: dprint(f"Skipping {self.name} because it always exits: {self.always_exits}") From 165734abc38d56254bd7a6369542d5fff08488b8 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Mon, 11 Sep 2023 12:58:59 -0700 Subject: [PATCH 3/6] Rename SAVE_CURRENT_IP to _SAVE_CURRENT_IP --- Include/internal/pycore_opcode_metadata.h | 18 +++++++++--------- Python/abstract_interp_cases.c.h | 2 +- Python/bytecodes.c | 10 +++++----- Python/executor_cases.c.h | 2 +- Python/generated_cases.c.h | 8 ++++---- Python/optimizer.c | 2 +- Tools/cases_generator/stacking.py | 2 +- 7 files changed, 22 insertions(+), 22 deletions(-) diff --git a/Include/internal/pycore_opcode_metadata.h b/Include/internal/pycore_opcode_metadata.h index 939bac6ae92240..a6caf82aaf8fda 100644 --- a/Include/internal/pycore_opcode_metadata.h +++ b/Include/internal/pycore_opcode_metadata.h @@ -69,7 +69,7 @@ #define _POP_JUMP_IF_FALSE 341 #define _POP_JUMP_IF_TRUE 342 #define JUMP_TO_TOP 343 -#define SAVE_CURRENT_IP 344 +#define _SAVE_CURRENT_IP 344 #define INSERT 345 extern int _PyOpcode_num_popped(int opcode, int oparg, bool jump); @@ -590,7 +590,7 @@ int _PyOpcode_num_popped(int opcode, int oparg, bool jump) { return 0; case _SET_IP: return 0; - case SAVE_CURRENT_IP: + case _SAVE_CURRENT_IP: return 0; case _EXIT_TRACE: return 0; @@ -1120,7 +1120,7 @@ int _PyOpcode_num_pushed(int opcode, int oparg, bool jump) { return 0; case _SET_IP: return 0; - case SAVE_CURRENT_IP: + case _SAVE_CURRENT_IP: return 0; case _EXIT_TRACE: return 0; @@ -1460,7 +1460,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[OPCODE_METADATA_SIZE] = { [_POP_JUMP_IF_TRUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, [JUMP_TO_TOP] = { true, INSTR_FMT_IX, HAS_EVAL_BREAK_FLAG }, [_SET_IP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, - [SAVE_CURRENT_IP] = { true, INSTR_FMT_IX, 0 }, + [_SAVE_CURRENT_IP] = { true, INSTR_FMT_IX, 0 }, [_EXIT_TRACE] = { true, INSTR_FMT_IX, 0 }, [INSERT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, }; @@ -1515,8 +1515,8 @@ const struct opcode_macro_expansion _PyOpcode_macro_expansion[OPCODE_MACRO_EXPAN [DELETE_SUBSCR] = { .nuops = 1, .uops = { { DELETE_SUBSCR, 0, 0 } } }, [CALL_INTRINSIC_1] = { .nuops = 1, .uops = { { CALL_INTRINSIC_1, 0, 0 } } }, [CALL_INTRINSIC_2] = { .nuops = 1, .uops = { { CALL_INTRINSIC_2, 0, 0 } } }, - [RETURN_VALUE] = { .nuops = 3, .uops = { { _SET_IP, 7, 0 }, { SAVE_CURRENT_IP, 0, 0 }, { _POP_FRAME, 0, 0 } } }, - [RETURN_CONST] = { .nuops = 4, .uops = { { LOAD_CONST, 0, 0 }, { _SET_IP, 7, 0 }, { SAVE_CURRENT_IP, 0, 0 }, { _POP_FRAME, 0, 0 } } }, + [RETURN_VALUE] = { .nuops = 3, .uops = { { _SET_IP, 7, 0 }, { _SAVE_CURRENT_IP, 0, 0 }, { _POP_FRAME, 0, 0 } } }, + [RETURN_CONST] = { .nuops = 4, .uops = { { LOAD_CONST, 0, 0 }, { _SET_IP, 7, 0 }, { _SAVE_CURRENT_IP, 0, 0 }, { _POP_FRAME, 0, 0 } } }, [GET_AITER] = { .nuops = 1, .uops = { { GET_AITER, 0, 0 } } }, [GET_ANEXT] = { .nuops = 1, .uops = { { GET_ANEXT, 0, 0 } } }, [GET_AWAITABLE] = { .nuops = 1, .uops = { { GET_AWAITABLE, 0, 0 } } }, @@ -1579,8 +1579,8 @@ const struct opcode_macro_expansion _PyOpcode_macro_expansion[OPCODE_MACRO_EXPAN [GET_YIELD_FROM_ITER] = { .nuops = 1, .uops = { { GET_YIELD_FROM_ITER, 0, 0 } } }, [WITH_EXCEPT_START] = { .nuops = 1, .uops = { { WITH_EXCEPT_START, 0, 0 } } }, [PUSH_EXC_INFO] = { .nuops = 1, .uops = { { PUSH_EXC_INFO, 0, 0 } } }, - [CALL_BOUND_METHOD_EXACT_ARGS] = { .nuops = 9, .uops = { { _CHECK_PEP_523, 0, 0 }, { _CHECK_CALL_BOUND_METHOD_EXACT_ARGS, 0, 0 }, { _INIT_CALL_BOUND_METHOD_EXACT_ARGS, 0, 0 }, { _CHECK_FUNCTION_EXACT_ARGS, 2, 1 }, { _CHECK_STACK_SPACE, 0, 0 }, { _INIT_CALL_PY_EXACT_ARGS, 0, 0 }, { _SET_IP, 7, 3 }, { SAVE_CURRENT_IP, 0, 0 }, { _PUSH_FRAME, 0, 0 } } }, - [CALL_PY_EXACT_ARGS] = { .nuops = 7, .uops = { { _CHECK_PEP_523, 0, 0 }, { _CHECK_FUNCTION_EXACT_ARGS, 2, 1 }, { _CHECK_STACK_SPACE, 0, 0 }, { _INIT_CALL_PY_EXACT_ARGS, 0, 0 }, { _SET_IP, 7, 3 }, { SAVE_CURRENT_IP, 0, 0 }, { _PUSH_FRAME, 0, 0 } } }, + [CALL_BOUND_METHOD_EXACT_ARGS] = { .nuops = 9, .uops = { { _CHECK_PEP_523, 0, 0 }, { _CHECK_CALL_BOUND_METHOD_EXACT_ARGS, 0, 0 }, { _INIT_CALL_BOUND_METHOD_EXACT_ARGS, 0, 0 }, { _CHECK_FUNCTION_EXACT_ARGS, 2, 1 }, { _CHECK_STACK_SPACE, 0, 0 }, { _INIT_CALL_PY_EXACT_ARGS, 0, 0 }, { _SET_IP, 7, 3 }, { _SAVE_CURRENT_IP, 0, 0 }, { _PUSH_FRAME, 0, 0 } } }, + [CALL_PY_EXACT_ARGS] = { .nuops = 7, .uops = { { _CHECK_PEP_523, 0, 0 }, { _CHECK_FUNCTION_EXACT_ARGS, 2, 1 }, { _CHECK_STACK_SPACE, 0, 0 }, { _INIT_CALL_PY_EXACT_ARGS, 0, 0 }, { _SET_IP, 7, 3 }, { _SAVE_CURRENT_IP, 0, 0 }, { _PUSH_FRAME, 0, 0 } } }, [CALL_NO_KW_TYPE_1] = { .nuops = 1, .uops = { { CALL_NO_KW_TYPE_1, 0, 0 } } }, [CALL_NO_KW_STR_1] = { .nuops = 1, .uops = { { CALL_NO_KW_STR_1, 0, 0 } } }, [CALL_NO_KW_TUPLE_1] = { .nuops = 1, .uops = { { CALL_NO_KW_TUPLE_1, 0, 0 } } }, @@ -1651,7 +1651,7 @@ const char * const _PyOpcode_uop_name[OPCODE_UOP_NAME_SIZE] = { [_POP_JUMP_IF_FALSE] = "_POP_JUMP_IF_FALSE", [_POP_JUMP_IF_TRUE] = "_POP_JUMP_IF_TRUE", [JUMP_TO_TOP] = "JUMP_TO_TOP", - [SAVE_CURRENT_IP] = "SAVE_CURRENT_IP", + [_SAVE_CURRENT_IP] = "_SAVE_CURRENT_IP", [INSERT] = "INSERT", }; #endif // NEED_OPCODE_METADATA diff --git a/Python/abstract_interp_cases.c.h b/Python/abstract_interp_cases.c.h index 4dd02ae6077d80..593cfdf4f5a379 100644 --- a/Python/abstract_interp_cases.c.h +++ b/Python/abstract_interp_cases.c.h @@ -800,7 +800,7 @@ break; } - case SAVE_CURRENT_IP: { + case _SAVE_CURRENT_IP: { break; } diff --git a/Python/bytecodes.c b/Python/bytecodes.c index 8a44a439135943..5cb505354129d6 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -804,7 +804,7 @@ dummy_func( macro(RETURN_VALUE) = _SET_IP + // Tier 2 only; special-cased oparg - SAVE_CURRENT_IP + // Sets frame->prev_instr + _SAVE_CURRENT_IP + // Sets frame->prev_instr _POP_FRAME; inst(INSTRUMENTED_RETURN_VALUE, (retval --)) { @@ -829,7 +829,7 @@ dummy_func( macro(RETURN_CONST) = LOAD_CONST + _SET_IP + // Tier 2 only; special-cased oparg - SAVE_CURRENT_IP + // Sets frame->prev_instr + _SAVE_CURRENT_IP + // Sets frame->prev_instr _POP_FRAME; inst(INSTRUMENTED_RETURN_CONST, (--)) { @@ -3062,7 +3062,7 @@ dummy_func( _CHECK_STACK_SPACE + _INIT_CALL_PY_EXACT_ARGS + _SET_IP + // Tier 2 only; special-cased oparg - SAVE_CURRENT_IP + // Sets frame->prev_instr + _SAVE_CURRENT_IP + // Sets frame->prev_instr _PUSH_FRAME; macro(CALL_PY_EXACT_ARGS) = @@ -3072,7 +3072,7 @@ dummy_func( _CHECK_STACK_SPACE + _INIT_CALL_PY_EXACT_ARGS + _SET_IP + // Tier 2 only; special-cased oparg - SAVE_CURRENT_IP + // Sets frame->prev_instr + _SAVE_CURRENT_IP + // Sets frame->prev_instr _PUSH_FRAME; inst(CALL_PY_WITH_DEFAULTS, (unused/1, func_version/2, callable, self_or_null, args[oparg] -- unused)) { @@ -3836,7 +3836,7 @@ dummy_func( frame->prev_instr = ip_offset + oparg; } - op(SAVE_CURRENT_IP, (--)) { + op(_SAVE_CURRENT_IP, (--)) { #if TIER_ONE frame->prev_instr = next_instr - 1; #endif diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index bcc2ca48c19626..7744b0fc03324a 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -2898,7 +2898,7 @@ break; } - case SAVE_CURRENT_IP: { + case _SAVE_CURRENT_IP: { #if TIER_ONE frame->prev_instr = next_instr - 1; #endif diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index 1015169bde5f6a..8d850e2b9ae5ab 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -987,7 +987,7 @@ TARGET(RETURN_VALUE) { PyObject *retval; - // SAVE_CURRENT_IP + // _SAVE_CURRENT_IP { #if TIER_ONE frame->prev_instr = next_instr - 1; @@ -1055,7 +1055,7 @@ value = GETITEM(FRAME_CO_CONSTS, oparg); Py_INCREF(value); } - // SAVE_CURRENT_IP + // _SAVE_CURRENT_IP { #if TIER_ONE frame->prev_instr = next_instr - 1; @@ -3859,7 +3859,7 @@ new_frame->localsplus[i] = args[i]; } } - // SAVE_CURRENT_IP + // _SAVE_CURRENT_IP next_instr += 3; { #if TIER_ONE @@ -3938,7 +3938,7 @@ new_frame->localsplus[i] = args[i]; } } - // SAVE_CURRENT_IP + // _SAVE_CURRENT_IP next_instr += 3; { #if TIER_ONE diff --git a/Python/optimizer.c b/Python/optimizer.c index ce6c81b620865e..33d3bdf5061e32 100644 --- a/Python/optimizer.c +++ b/Python/optimizer.c @@ -812,7 +812,7 @@ remove_unneeded_uops(_PyUOpInstruction *trace, int trace_length) bool need_ip = true; for (int pc = 0; pc < trace_length; pc++) { int opcode = trace[pc].opcode; - if (opcode == SAVE_CURRENT_IP) { + if (opcode == _SAVE_CURRENT_IP) { // Special case: never remove preceding _SET_IP last_set_ip = -1; } diff --git a/Tools/cases_generator/stacking.py b/Tools/cases_generator/stacking.py index 891f047a6d6f18..026f0392eff1d7 100644 --- a/Tools/cases_generator/stacking.py +++ b/Tools/cases_generator/stacking.py @@ -444,7 +444,7 @@ def write_components( ), f"Expected {mgr.instr.name!r} to be the last uop" assert_no_pokes(managers) - if mgr.instr.name == "SAVE_CURRENT_IP": + if mgr.instr.name == "_SAVE_CURRENT_IP": next_instr_is_set = True if cache_offset: out.emit(f"next_instr += {cache_offset};") From 92298966a3b23669c03693157e29cedf5a07e4ae Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Mon, 11 Sep 2023 13:01:28 -0700 Subject: [PATCH 4/6] Rename INSERT to _INSERT (This is Ken Jin's opcode) --- Include/internal/pycore_opcode_metadata.h | 10 +++++----- Python/abstract_interp_cases.c.h | 2 +- Python/bytecodes.c | 2 +- Python/executor_cases.c.h | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Include/internal/pycore_opcode_metadata.h b/Include/internal/pycore_opcode_metadata.h index a6caf82aaf8fda..527dce0672e00e 100644 --- a/Include/internal/pycore_opcode_metadata.h +++ b/Include/internal/pycore_opcode_metadata.h @@ -70,7 +70,7 @@ #define _POP_JUMP_IF_TRUE 342 #define JUMP_TO_TOP 343 #define _SAVE_CURRENT_IP 344 -#define INSERT 345 +#define _INSERT 345 extern int _PyOpcode_num_popped(int opcode, int oparg, bool jump); #ifdef NEED_OPCODE_METADATA @@ -594,7 +594,7 @@ int _PyOpcode_num_popped(int opcode, int oparg, bool jump) { return 0; case _EXIT_TRACE: return 0; - case INSERT: + case _INSERT: return oparg + 1; default: return -1; @@ -1124,7 +1124,7 @@ int _PyOpcode_num_pushed(int opcode, int oparg, bool jump) { return 0; case _EXIT_TRACE: return 0; - case INSERT: + case _INSERT: return oparg + 1; default: return -1; @@ -1462,7 +1462,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[OPCODE_METADATA_SIZE] = { [_SET_IP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, [_SAVE_CURRENT_IP] = { true, INSTR_FMT_IX, 0 }, [_EXIT_TRACE] = { true, INSTR_FMT_IX, 0 }, - [INSERT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, + [_INSERT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, }; #endif // NEED_OPCODE_METADATA @@ -1652,7 +1652,7 @@ const char * const _PyOpcode_uop_name[OPCODE_UOP_NAME_SIZE] = { [_POP_JUMP_IF_TRUE] = "_POP_JUMP_IF_TRUE", [JUMP_TO_TOP] = "JUMP_TO_TOP", [_SAVE_CURRENT_IP] = "_SAVE_CURRENT_IP", - [INSERT] = "INSERT", + [_INSERT] = "_INSERT", }; #endif // NEED_OPCODE_METADATA diff --git a/Python/abstract_interp_cases.c.h b/Python/abstract_interp_cases.c.h index 593cfdf4f5a379..f223cc39f10d07 100644 --- a/Python/abstract_interp_cases.c.h +++ b/Python/abstract_interp_cases.c.h @@ -808,7 +808,7 @@ break; } - case INSERT: { + case _INSERT: { PARTITIONNODE_OVERWRITE((_Py_PARTITIONNODE_t *)PARTITIONNODE_NULLROOT, PEEK(-(-1 - oparg)), true); break; } diff --git a/Python/bytecodes.c b/Python/bytecodes.c index 5cb505354129d6..a529af984cca60 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -3853,7 +3853,7 @@ dummy_func( return frame; } - op(INSERT, (unused[oparg], top -- top, unused[oparg])) { + op(_INSERT, (unused[oparg], top -- top, unused[oparg])) { // Inserts TOS at position specified by oparg; memmove(&stack_pointer[-1 - oparg], &stack_pointer[-oparg], oparg * sizeof(stack_pointer[0])); } diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index 7744b0fc03324a..ba973bc4470085 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -2917,7 +2917,7 @@ break; } - case INSERT: { + case _INSERT: { PyObject *top; top = stack_pointer[-1]; // Inserts TOS at position specified by oparg; From 74b30c3b9345fcc09123fdb1defe89599224ce11 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Mon, 11 Sep 2023 13:51:25 -0700 Subject: [PATCH 5/6] Rename IS_NONE to _IS_NONE --- Include/internal/pycore_opcode_metadata.h | 10 +++++----- Python/abstract_interp_cases.c.h | 2 +- Python/bytecodes.c | 6 +++--- Python/executor_cases.c.h | 2 +- Python/generated_cases.c.h | 4 ++-- Python/optimizer.c | 4 ++-- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Include/internal/pycore_opcode_metadata.h b/Include/internal/pycore_opcode_metadata.h index 527dce0672e00e..a950df6b8cb9cd 100644 --- a/Include/internal/pycore_opcode_metadata.h +++ b/Include/internal/pycore_opcode_metadata.h @@ -46,7 +46,7 @@ #define _GUARD_TYPE_VERSION 318 #define _CHECK_MANAGED_OBJECT_HAS_VALUES 319 #define _LOAD_ATTR_INSTANCE_VALUE 320 -#define IS_NONE 321 +#define _IS_NONE 321 #define _ITER_CHECK_LIST 322 #define _ITER_JUMP_LIST 323 #define _IS_ITER_EXHAUSTED_LIST 324 @@ -402,7 +402,7 @@ int _PyOpcode_num_popped(int opcode, int oparg, bool jump) { return 1; case POP_JUMP_IF_TRUE: return 1; - case IS_NONE: + case _IS_NONE: return 1; case POP_JUMP_IF_NONE: return 1; @@ -932,7 +932,7 @@ int _PyOpcode_num_pushed(int opcode, int oparg, bool jump) { return 0; case POP_JUMP_IF_TRUE: return 0; - case IS_NONE: + case _IS_NONE: return 1; case POP_JUMP_IF_NONE: return 0; @@ -1363,7 +1363,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[OPCODE_METADATA_SIZE] = { [ENTER_EXECUTOR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG }, [POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG }, [POP_JUMP_IF_TRUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG }, - [IS_NONE] = { true, INSTR_FMT_IX, 0 }, + [_IS_NONE] = { true, INSTR_FMT_IX, 0 }, [POP_JUMP_IF_NONE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG }, [POP_JUMP_IF_NOT_NONE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG }, [JUMP_BACKWARD_NO_INTERRUPT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG }, @@ -1628,7 +1628,7 @@ const char * const _PyOpcode_uop_name[OPCODE_UOP_NAME_SIZE] = { [_GUARD_TYPE_VERSION] = "_GUARD_TYPE_VERSION", [_CHECK_MANAGED_OBJECT_HAS_VALUES] = "_CHECK_MANAGED_OBJECT_HAS_VALUES", [_LOAD_ATTR_INSTANCE_VALUE] = "_LOAD_ATTR_INSTANCE_VALUE", - [IS_NONE] = "IS_NONE", + [_IS_NONE] = "_IS_NONE", [_ITER_CHECK_LIST] = "_ITER_CHECK_LIST", [_ITER_JUMP_LIST] = "_ITER_JUMP_LIST", [_IS_ITER_EXHAUSTED_LIST] = "_IS_ITER_EXHAUSTED_LIST", diff --git a/Python/abstract_interp_cases.c.h b/Python/abstract_interp_cases.c.h index f223cc39f10d07..82c868cf3988ba 100644 --- a/Python/abstract_interp_cases.c.h +++ b/Python/abstract_interp_cases.c.h @@ -521,7 +521,7 @@ break; } - case IS_NONE: { + case _IS_NONE: { PARTITIONNODE_OVERWRITE((_Py_PARTITIONNODE_t *)PARTITIONNODE_NULLROOT, PEEK(-(-1)), true); break; } diff --git a/Python/bytecodes.c b/Python/bytecodes.c index a529af984cca60..c252915ca61a2c 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -2302,7 +2302,7 @@ dummy_func( JUMPBY(oparg * Py_IsTrue(cond)); } - op(IS_NONE, (value -- b)) { + op(_IS_NONE, (value -- b)) { if (Py_IsNone(value)) { b = Py_True; } @@ -2312,9 +2312,9 @@ dummy_func( } } - macro(POP_JUMP_IF_NONE) = IS_NONE + POP_JUMP_IF_TRUE; + macro(POP_JUMP_IF_NONE) = _IS_NONE + POP_JUMP_IF_TRUE; - macro(POP_JUMP_IF_NOT_NONE) = IS_NONE + POP_JUMP_IF_FALSE; + macro(POP_JUMP_IF_NOT_NONE) = _IS_NONE + POP_JUMP_IF_FALSE; inst(JUMP_BACKWARD_NO_INTERRUPT, (--)) { /* This bytecode is used in the `yield from` or `await` loop. diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index ba973bc4470085..f8949833c0d45d 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -1902,7 +1902,7 @@ break; } - case IS_NONE: { + case _IS_NONE: { PyObject *value; PyObject *b; value = stack_pointer[-1]; diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index 8d850e2b9ae5ab..216aa8d73d21f2 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -3014,7 +3014,7 @@ PyObject *value; PyObject *b; PyObject *cond; - // IS_NONE + // _IS_NONE value = stack_pointer[-1]; { if (Py_IsNone(value)) { @@ -3039,7 +3039,7 @@ PyObject *value; PyObject *b; PyObject *cond; - // IS_NONE + // _IS_NONE value = stack_pointer[-1]; { if (Py_IsNone(value)) { diff --git a/Python/optimizer.c b/Python/optimizer.c index 33d3bdf5061e32..89411be618644b 100644 --- a/Python/optimizer.c +++ b/Python/optimizer.c @@ -530,7 +530,7 @@ translate_bytecode_to_trace( case POP_JUMP_IF_NONE: { RESERVE(2, 2); - ADD_TO_TRACE(IS_NONE, 0, 0); + ADD_TO_TRACE(_IS_NONE, 0, 0); opcode = POP_JUMP_IF_TRUE; goto pop_jump_if_bool; } @@ -538,7 +538,7 @@ translate_bytecode_to_trace( case POP_JUMP_IF_NOT_NONE: { RESERVE(2, 2); - ADD_TO_TRACE(IS_NONE, 0, 0); + ADD_TO_TRACE(_IS_NONE, 0, 0); opcode = POP_JUMP_IF_FALSE; goto pop_jump_if_bool; } From cbb58cd63c1a2fc014f0af64eefe6a9d73d3d30a Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Mon, 11 Sep 2023 13:56:36 -0700 Subject: [PATCH 6/6] Rename JUMP_TO_TOP to _JUMP_TO_TOP --- Include/internal/pycore_opcode_metadata.h | 10 +++++----- Lib/test/test_capi/test_misc.py | 2 +- Python/abstract_interp_cases.c.h | 2 +- Python/bytecodes.c | 2 +- Python/executor_cases.c.h | 2 +- Python/optimizer.c | 4 ++-- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Include/internal/pycore_opcode_metadata.h b/Include/internal/pycore_opcode_metadata.h index a950df6b8cb9cd..d6837eca0d2b97 100644 --- a/Include/internal/pycore_opcode_metadata.h +++ b/Include/internal/pycore_opcode_metadata.h @@ -68,7 +68,7 @@ #define _PUSH_FRAME 340 #define _POP_JUMP_IF_FALSE 341 #define _POP_JUMP_IF_TRUE 342 -#define JUMP_TO_TOP 343 +#define _JUMP_TO_TOP 343 #define _SAVE_CURRENT_IP 344 #define _INSERT 345 @@ -586,7 +586,7 @@ int _PyOpcode_num_popped(int opcode, int oparg, bool jump) { return 1; case _POP_JUMP_IF_TRUE: return 1; - case JUMP_TO_TOP: + case _JUMP_TO_TOP: return 0; case _SET_IP: return 0; @@ -1116,7 +1116,7 @@ int _PyOpcode_num_pushed(int opcode, int oparg, bool jump) { return 0; case _POP_JUMP_IF_TRUE: return 0; - case JUMP_TO_TOP: + case _JUMP_TO_TOP: return 0; case _SET_IP: return 0; @@ -1458,7 +1458,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[OPCODE_METADATA_SIZE] = { [RESERVED] = { true, INSTR_FMT_IX, 0 }, [_POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, [_POP_JUMP_IF_TRUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, - [JUMP_TO_TOP] = { true, INSTR_FMT_IX, HAS_EVAL_BREAK_FLAG }, + [_JUMP_TO_TOP] = { true, INSTR_FMT_IX, HAS_EVAL_BREAK_FLAG }, [_SET_IP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, [_SAVE_CURRENT_IP] = { true, INSTR_FMT_IX, 0 }, [_EXIT_TRACE] = { true, INSTR_FMT_IX, 0 }, @@ -1650,7 +1650,7 @@ const char * const _PyOpcode_uop_name[OPCODE_UOP_NAME_SIZE] = { [_PUSH_FRAME] = "_PUSH_FRAME", [_POP_JUMP_IF_FALSE] = "_POP_JUMP_IF_FALSE", [_POP_JUMP_IF_TRUE] = "_POP_JUMP_IF_TRUE", - [JUMP_TO_TOP] = "JUMP_TO_TOP", + [_JUMP_TO_TOP] = "_JUMP_TO_TOP", [_SAVE_CURRENT_IP] = "_SAVE_CURRENT_IP", [_INSERT] = "_INSERT", }; diff --git a/Lib/test/test_capi/test_misc.py b/Lib/test/test_capi/test_misc.py index 527d3f09178b1d..8f6c5d8c32d819 100644 --- a/Lib/test/test_capi/test_misc.py +++ b/Lib/test/test_capi/test_misc.py @@ -2535,7 +2535,7 @@ def testfunc(n): ex = get_first_executor(testfunc) self.assertIsNotNone(ex) uops = {opname for opname, _, _ in ex} - self.assertIn("JUMP_TO_TOP", uops) + self.assertIn("_JUMP_TO_TOP", uops) def test_jump_forward(self): def testfunc(n): diff --git a/Python/abstract_interp_cases.c.h b/Python/abstract_interp_cases.c.h index 82c868cf3988ba..1b96ca130defcf 100644 --- a/Python/abstract_interp_cases.c.h +++ b/Python/abstract_interp_cases.c.h @@ -792,7 +792,7 @@ break; } - case JUMP_TO_TOP: { + case _JUMP_TO_TOP: { break; } diff --git a/Python/bytecodes.c b/Python/bytecodes.c index c252915ca61a2c..2ce1a4cdbdfaaa 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -3827,7 +3827,7 @@ dummy_func( } } - op(JUMP_TO_TOP, (--)) { + op(_JUMP_TO_TOP, (--)) { pc = 0; CHECK_EVAL_BREAKER(); } diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index f8949833c0d45d..a4d813056aa9f6 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -2887,7 +2887,7 @@ break; } - case JUMP_TO_TOP: { + case _JUMP_TO_TOP: { pc = 0; CHECK_EVAL_BREAKER(); break; diff --git a/Python/optimizer.c b/Python/optimizer.c index 89411be618644b..22ecd708f5cec2 100644 --- a/Python/optimizer.c +++ b/Python/optimizer.c @@ -564,7 +564,7 @@ translate_bytecode_to_trace( { if (instr + 2 - oparg == initial_instr && code == initial_code) { RESERVE(1, 0); - ADD_TO_TRACE(JUMP_TO_TOP, 0, 0); + ADD_TO_TRACE(_JUMP_TO_TOP, 0, 0); } else { DPRINTF(2, "JUMP_BACKWARD not to top ends trace\n"); @@ -823,7 +823,7 @@ remove_unneeded_uops(_PyUOpInstruction *trace, int trace_length) need_ip = false; last_set_ip = pc; } - else if (opcode == JUMP_TO_TOP || opcode == _EXIT_TRACE) { + else if (opcode == _JUMP_TO_TOP || opcode == _EXIT_TRACE) { last_instr = pc + 1; break; }