GH-117066: Tier 2 optimizer: Don't throw away good traces if we can't optimize them perfectly. (GH-117067)

This commit is contained in:
Mark Shannon 2024-03-20 18:24:02 +00:00 committed by GitHub
parent dcaf33a41d
commit 63289b9dfb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 16 additions and 8 deletions

View file

@ -406,24 +406,28 @@ optimize_uops(
out_of_space:
DPRINTF(3, "\n");
DPRINTF(1, "Out of space in abstract interpreter\n");
_Py_uop_abstractcontext_fini(ctx);
return 0;
goto done;
error:
DPRINTF(3, "\n");
DPRINTF(1, "Encountered error in abstract interpreter\n");
_Py_uop_abstractcontext_fini(ctx);
return 0;
return -1;
hit_bottom:
// Attempted to push a "bottom" (contradition) symbol onto the stack.
// This means that the abstract interpreter has hit unreachable code.
// We *could* generate an _EXIT_TRACE or _FATAL_ERROR here, but it's
// simpler to just admit failure and not create the executor.
// We *could* generate an _EXIT_TRACE or _FATAL_ERROR here, but hitting
// bottom indicates type instability, so we are probably better off
// retrying later.
DPRINTF(3, "\n");
DPRINTF(1, "Hit bottom in abstract interpreter\n");
_Py_uop_abstractcontext_fini(ctx);
return 0;
done:
/* Cannot optimize further, but there would be no benefit
* in retrying later */
_Py_uop_abstractcontext_fini(ctx);
return 1;
}

View file

@ -546,7 +546,9 @@ dummy_func(void) {
PyFunctionObject *func = (PyFunctionObject *)(this_instr + 2)->operand;
DPRINTF(3, "func: %p ", func);
if (func == NULL) {
goto error;
DPRINTF(3, "\n");
DPRINTF(1, "Missing function\n");
goto done;
}
PyCodeObject *co = (PyCodeObject *)func->func_code;

View file

@ -1599,7 +1599,9 @@
PyFunctionObject *func = (PyFunctionObject *)(this_instr + 2)->operand;
DPRINTF(3, "func: %p ", func);
if (func == NULL) {
goto error;
DPRINTF(3, "\n");
DPRINTF(1, "Missing function\n");
goto done;
}
PyCodeObject *co = (PyCodeObject *)func->func_code;
assert(self_or_null != NULL);