summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2023-12-12 00:42:30 (GMT)
committerGitHub <noreply@github.com>2023-12-12 00:42:30 (GMT)
commit5b8664433829ea967c150363cf49a5c4c1380fe8 (patch)
tree3a03e24b502da7ea03182f6522bb1d12d195205a /Python
parentfdee7b7b3e15931d58f07e5449de2e55b4d48b05 (diff)
downloadcpython-5b8664433829ea967c150363cf49a5c4c1380fe8.zip
cpython-5b8664433829ea967c150363cf49a5c4c1380fe8.tar.gz
cpython-5b8664433829ea967c150363cf49a5c4c1380fe8.tar.bz2
A smattering of cleanups in uop debug output and lltrace (#112980)
* Include destination T1 opcode in Error debug message * Include destination T1 opcode in DEOPT debug message * Remove obsolete comment from remove_unneeded_uops * Change lltrace_instruction() to print caller's opcode/oparg
Diffstat (limited to 'Python')
-rw-r--r--Python/ceval.c18
-rw-r--r--Python/ceval_macros.h2
-rw-r--r--Python/optimizer_analysis.c1
3 files changed, 11 insertions, 10 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index f8fa50e..d92ab92 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -135,14 +135,14 @@ dump_stack(_PyInterpreterFrame *frame, PyObject **stack_pointer)
static void
lltrace_instruction(_PyInterpreterFrame *frame,
PyObject **stack_pointer,
- _Py_CODEUNIT *next_instr)
+ _Py_CODEUNIT *next_instr,
+ int opcode,
+ int oparg)
{
if (frame->owner == FRAME_OWNED_BY_CSTACK) {
return;
}
dump_stack(frame, stack_pointer);
- int oparg = next_instr->op.arg;
- int opcode = next_instr->op.code;
const char *opname = _PyOpcode_OpName[opcode];
assert(opname != NULL);
int offset = (int)(next_instr - _PyCode_CODE(_PyFrame_GetCode(frame)));
@@ -1051,9 +1051,10 @@ pop_2_error_tier_two:
pop_1_error_tier_two:
STACK_SHRINK(1);
error_tier_two:
- DPRINTF(2, "Error: [UOp %d (%s), oparg %d, operand %" PRIu64 ", target %d @ %d]\n",
+ DPRINTF(2, "Error: [UOp %d (%s), oparg %d, operand %" PRIu64 ", target %d @ %d -> %s]\n",
uopcode, _PyUOpName(uopcode), next_uop[-1].oparg, next_uop[-1].operand, next_uop[-1].target,
- (int)(next_uop - current_executor->trace - 1));
+ (int)(next_uop - current_executor->trace - 1),
+ _PyOpcode_OpName[frame->instr_ptr->op.code]);
OPT_HIST(trace_uop_execution_counter, trace_run_length_hist);
frame->return_offset = 0; // Don't leave this random
_PyFrame_SetStackPointer(frame, stack_pointer);
@@ -1064,14 +1065,15 @@ error_tier_two:
deoptimize:
// On DEOPT_IF we just repeat the last instruction.
// This presumes nothing was popped from the stack (nor pushed).
- DPRINTF(2, "DEOPT: [UOp %d (%s), oparg %d, operand %" PRIu64 ", target %d @ %d]\n",
+ frame->instr_ptr = next_uop[-1].target + _PyCode_CODE(_PyFrame_GetCode(frame));
+ DPRINTF(2, "DEOPT: [UOp %d (%s), oparg %d, operand %" PRIu64 ", target %d @ %d -> %s]\n",
uopcode, _PyUOpName(uopcode), next_uop[-1].oparg, next_uop[-1].operand, next_uop[-1].target,
- (int)(next_uop - current_executor->trace - 1));
+ (int)(next_uop - current_executor->trace - 1),
+ _PyOpcode_OpName[frame->instr_ptr->op.code]);
OPT_HIST(trace_uop_execution_counter, trace_run_length_hist);
UOP_STAT_INC(uopcode, miss);
frame->return_offset = 0; // Dispatch to frame->instr_ptr
_PyFrame_SetStackPointer(frame, stack_pointer);
- frame->instr_ptr = next_uop[-1].target + _PyCode_CODE(_PyFrame_GetCode(frame));
Py_DECREF(current_executor);
// Fall through
// Jump here from ENTER_EXECUTOR
diff --git a/Python/ceval_macros.h b/Python/ceval_macros.h
index b0cb7c8..f298c60 100644
--- a/Python/ceval_macros.h
+++ b/Python/ceval_macros.h
@@ -81,7 +81,7 @@
/* PRE_DISPATCH_GOTO() does lltrace if enabled. Normally a no-op */
#ifdef LLTRACE
#define PRE_DISPATCH_GOTO() if (lltrace >= 5) { \
- lltrace_instruction(frame, stack_pointer, next_instr); }
+ lltrace_instruction(frame, stack_pointer, next_instr, opcode, oparg); }
#else
#define PRE_DISPATCH_GOTO() ((void)0)
#endif
diff --git a/Python/optimizer_analysis.c b/Python/optimizer_analysis.c
index 0f9bc08..8b471d7 100644
--- a/Python/optimizer_analysis.c
+++ b/Python/optimizer_analysis.c
@@ -15,7 +15,6 @@
static void
remove_unneeded_uops(_PyUOpInstruction *buffer, int buffer_size)
{
- // Note that we don't enter stubs, those SET_IPs are needed.
int last_set_ip = -1;
bool maybe_invalid = false;
for (int pc = 0; pc < buffer_size; pc++) {