mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
gh-116996: Add pystats about _Py_uop_analyse_and_optimize (GH-116997)
This commit is contained in:
parent
617158e078
commit
50369e6c34
5 changed files with 56 additions and 3 deletions
|
@ -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;
|
||||
|
||||
|
|
|
@ -247,6 +247,8 @@ print_optimization_stats(FILE *out, OptimizationStats *stats)
|
|||
fprintf(out, "Optimization optimizer successes: %" PRIu64 "\n", stats->optimizer_successes);
|
||||
fprintf(out, "Optimization optimizer failure no memory: %" PRIu64 "\n",
|
||||
stats->optimizer_failure_reason_no_memory);
|
||||
fprintf(out, "Optimizer remove globals builtins changed: %" PRIu64 "\n", stats->remove_globals_builtins_changed);
|
||||
fprintf(out, "Optimizer remove globals incorrect keys: %" PRIu64 "\n", stats->remove_globals_incorrect_keys);
|
||||
|
||||
const char* const* names;
|
||||
for (int i = 0; i <= MAX_UOP_ID; i++) {
|
||||
|
@ -268,6 +270,17 @@ print_optimization_stats(FILE *out, OptimizationStats *stats)
|
|||
);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < MAX_UOP_ID; i++) {
|
||||
if (stats->error_in_opcode[i]) {
|
||||
fprintf(
|
||||
out,
|
||||
"error_in_opcode[%s].count : %" PRIu64 "\n",
|
||||
_PyUOpName(i),
|
||||
stats->error_in_opcode[i]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue