summaryrefslogtreecommitdiffstats
path: root/Python/optimizer_analysis.c
diff options
context:
space:
mode:
authorMichael Droettboom <mdboom@gmail.com>2024-03-21 17:27:46 (GMT)
committerGitHub <noreply@github.com>2024-03-21 17:27:46 (GMT)
commit50369e6c34d05222e5a0ec9443a9f7b230e83112 (patch)
treedb917d49c0ab14cb31520715390a10a1247e73ba /Python/optimizer_analysis.c
parent617158e07811edfd6fd552a3d84b0beedd8f1d18 (diff)
downloadcpython-50369e6c34d05222e5a0ec9443a9f7b230e83112.zip
cpython-50369e6c34d05222e5a0ec9443a9f7b230e83112.tar.gz
cpython-50369e6c34d05222e5a0ec9443a9f7b230e83112.tar.bz2
gh-116996: Add pystats about _Py_uop_analyse_and_optimize (GH-116997)
Diffstat (limited to 'Python/optimizer_analysis.c')
-rw-r--r--Python/optimizer_analysis.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/Python/optimizer_analysis.c b/Python/optimizer_analysis.c
index 603ac68..6c460c5 100644
--- a/Python/optimizer_analysis.c
+++ b/Python/optimizer_analysis.c
@@ -139,6 +139,7 @@ remove_globals(_PyInterpreterFrame *frame, _PyUOpInstruction *buffer,
PyInterpreterState *interp = _PyInterpreterState_GET();
PyObject *builtins = frame->f_builtins;
if (builtins != interp->builtins) {
+ OPT_STAT_INC(remove_globals_builtins_changed);
return 1;
}
PyObject *globals = frame->f_globals;
@@ -170,6 +171,7 @@ remove_globals(_PyInterpreterFrame *frame, _PyUOpInstruction *buffer,
switch(opcode) {
case _GUARD_BUILTINS_VERSION:
if (incorrect_keys(inst, builtins)) {
+ OPT_STAT_INC(remove_globals_incorrect_keys);
return 0;
}
if (interp->rare_events.builtin_dict >= _Py_MAX_ALLOWED_BUILTINS_MODIFICATIONS) {
@@ -190,6 +192,7 @@ remove_globals(_PyInterpreterFrame *frame, _PyUOpInstruction *buffer,
break;
case _GUARD_GLOBALS_VERSION:
if (incorrect_keys(inst, globals)) {
+ OPT_STAT_INC(remove_globals_incorrect_keys);
return 0;
}
uint64_t watched_mutations = get_mutations(globals);
@@ -238,6 +241,7 @@ remove_globals(_PyInterpreterFrame *frame, _PyUOpInstruction *buffer,
globals = func->func_globals;
builtins = func->func_builtins;
if (builtins != interp->builtins) {
+ OPT_STAT_INC(remove_globals_builtins_changed);
return 1;
}
break;
@@ -358,6 +362,7 @@ optimize_uops(
_Py_UOpsContext context;
_Py_UOpsContext *ctx = &context;
+ uint32_t opcode = UINT16_MAX;
if (_Py_uop_abstractcontext_init(ctx) < 0) {
goto out_of_space;
@@ -374,8 +379,7 @@ optimize_uops(
this_instr++) {
int oparg = this_instr->oparg;
- uint32_t opcode = this_instr->opcode;
-
+ opcode = this_instr->opcode;
_Py_UopsSymbol **stack_pointer = ctx->frame->stack_pointer;
#ifdef Py_DEBUG
@@ -410,6 +414,9 @@ out_of_space:
error:
DPRINTF(3, "\n");
DPRINTF(1, "Encountered error in abstract interpreter\n");
+ if (opcode <= MAX_UOP_ID) {
+ OPT_ERROR_IN_OPCODE(opcode);
+ }
_Py_uop_abstractcontext_fini(ctx);
return -1;