diff options
| author | Michael Droettboom <mdboom@gmail.com> | 2024-03-21 17:27:46 (GMT) |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-21 17:27:46 (GMT) |
| commit | 50369e6c34d05222e5a0ec9443a9f7b230e83112 (patch) | |
| tree | db917d49c0ab14cb31520715390a10a1247e73ba /Python/optimizer_analysis.c | |
| parent | 617158e07811edfd6fd552a3d84b0beedd8f1d18 (diff) | |
| download | cpython-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.c | 11 |
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; |
