GH-123232: Fix "not specialized" stats (GH-123236)

This commit is contained in:
Mark Shannon 2024-08-23 10:46:03 +01:00 committed by GitHub
parent 5fce482c9a
commit 0b0f7befad
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 18 additions and 2 deletions

View File

@ -672,6 +672,7 @@ dummy_func(
PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start),
PyStackRef_AsPyObjectSteal(stop)); PyStackRef_AsPyObjectSteal(stop));
PyObject *res_o; PyObject *res_o;
OPCODE_DEFERRED_INC(BINARY_SLICE);
// Can't use ERROR_IF() here, because we haven't // Can't use ERROR_IF() here, because we haven't
// DECREF'ed container yet, and we still own slice. // DECREF'ed container yet, and we still own slice.
if (slice == NULL) { if (slice == NULL) {
@ -689,6 +690,7 @@ dummy_func(
inst(STORE_SLICE, (v, container, start, stop -- )) { inst(STORE_SLICE, (v, container, start, stop -- )) {
PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start),
PyStackRef_AsPyObjectSteal(stop)); PyStackRef_AsPyObjectSteal(stop));
OPCODE_DEFERRED_INC(STORE_SLICE);
int err; int err;
if (slice == NULL) { if (slice == NULL) {
err = 1; err = 1;

View File

@ -797,6 +797,7 @@
PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start),
PyStackRef_AsPyObjectSteal(stop)); PyStackRef_AsPyObjectSteal(stop));
PyObject *res_o; PyObject *res_o;
OPCODE_DEFERRED_INC(BINARY_SLICE);
// Can't use ERROR_IF() here, because we haven't // Can't use ERROR_IF() here, because we haven't
// DECREF'ed container yet, and we still own slice. // DECREF'ed container yet, and we still own slice.
if (slice == NULL) { if (slice == NULL) {
@ -826,6 +827,7 @@
v = stack_pointer[-4]; v = stack_pointer[-4];
PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start),
PyStackRef_AsPyObjectSteal(stop)); PyStackRef_AsPyObjectSteal(stop));
OPCODE_DEFERRED_INC(STORE_SLICE);
int err; int err;
if (slice == NULL) { if (slice == NULL) {
err = 1; err = 1;

View File

@ -377,6 +377,7 @@
PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start),
PyStackRef_AsPyObjectSteal(stop)); PyStackRef_AsPyObjectSteal(stop));
PyObject *res_o; PyObject *res_o;
OPCODE_DEFERRED_INC(BINARY_SLICE);
// Can't use ERROR_IF() here, because we haven't // Can't use ERROR_IF() here, because we haven't
// DECREF'ed container yet, and we still own slice. // DECREF'ed container yet, and we still own slice.
if (slice == NULL) { if (slice == NULL) {
@ -7090,6 +7091,7 @@
v = stack_pointer[-4]; v = stack_pointer[-4];
PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start),
PyStackRef_AsPyObjectSteal(stop)); PyStackRef_AsPyObjectSteal(stop));
OPCODE_DEFERRED_INC(STORE_SLICE);
int err; int err;
if (slice == NULL) { if (slice == NULL) {
err = 1; err = 1;

View File

@ -144,8 +144,18 @@ print_spec_stats(FILE *out, OpcodeStats *stats)
fprintf(out, "opcode[BINARY_SLICE].specializable : 1\n"); fprintf(out, "opcode[BINARY_SLICE].specializable : 1\n");
fprintf(out, "opcode[STORE_SLICE].specializable : 1\n"); fprintf(out, "opcode[STORE_SLICE].specializable : 1\n");
for (int i = 0; i < 256; i++) { for (int i = 0; i < 256; i++) {
if (_PyOpcode_Caches[i] && i != JUMP_BACKWARD) { if (_PyOpcode_Caches[i]) {
fprintf(out, "opcode[%s].specializable : 1\n", _PyOpcode_OpName[i]); /* Ignore jumps as they cannot be specialized */
switch (i) {
case POP_JUMP_IF_FALSE:
case POP_JUMP_IF_TRUE:
case POP_JUMP_IF_NONE:
case POP_JUMP_IF_NOT_NONE:
case JUMP_BACKWARD:
break;
default:
fprintf(out, "opcode[%s].specializable : 1\n", _PyOpcode_OpName[i]);
}
} }
PRINT_STAT(i, specialization.success); PRINT_STAT(i, specialization.success);
PRINT_STAT(i, specialization.failure); PRINT_STAT(i, specialization.failure);