GH-131498: Another refactoring of the code generator (GH-131827)

* Rename 'defined' attribute to 'in_local' to more accurately reflect how it is used

* Make death of variables explicit even for array variables.

* Convert in_memory from boolean to stack offset

* Don't apply liveness analyis to optimizer generated code

* Add 'out' parameter to stack.pop
This commit is contained in:
Mark Shannon 2025-03-31 13:52:48 +01:00 committed by GitHub
parent ba11f45dd9
commit c535a132e4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 206 additions and 212 deletions

View file

@ -1484,7 +1484,7 @@ dummy_func(
(void)counter;
}
op(_UNPACK_SEQUENCE, (seq -- output[oparg], top[0])) {
op(_UNPACK_SEQUENCE, (seq -- unused[oparg], top[0])) {
PyObject *seq_o = PyStackRef_AsPyObjectSteal(seq);
int res = _PyEval_UnpackIterableStackRef(tstate, seq_o, oparg, -1, top);
Py_DECREF(seq_o);
@ -1533,7 +1533,7 @@ dummy_func(
DECREF_INPUTS();
}
inst(UNPACK_EX, (seq -- left[oparg & 0xFF], unused, right[oparg >> 8], top[0])) {
inst(UNPACK_EX, (seq -- unused[oparg & 0xFF], unused, unused[oparg >> 8], top[0])) {
PyObject *seq_o = PyStackRef_AsPyObjectSteal(seq);
int res = _PyEval_UnpackIterableStackRef(tstate, seq_o, oparg & 0xFF, oparg >> 8, top);
Py_DECREF(seq_o);

View file

@ -2608,9 +2608,9 @@
_PyStackRef *callable;
_PyStackRef *self_or_null;
_PyStackRef *args;
_PyStackRef kwnames;
_PyStackRef kwnames_in;
_PyStackRef kwnames_out;
_PyStackRef kwnames;
_PyStackRef res;
// _SPECIALIZE_CALL_KW
{
@ -2791,9 +2791,9 @@
static_assert(INLINE_CACHE_ENTRIES_CALL_KW == 3, "incorrect cache size");
_PyStackRef *callable;
_PyStackRef *null;
_PyStackRef kwnames;
_PyStackRef *self_or_null;
_PyStackRef *args;
_PyStackRef kwnames;
_PyInterpreterFrame *new_frame;
/* Skip 1 cache entry */
// _CHECK_PEP_523
@ -2924,9 +2924,9 @@
opcode = CALL_KW_NON_PY;
static_assert(INLINE_CACHE_ENTRIES_CALL_KW == 3, "incorrect cache size");
_PyStackRef *callable;
_PyStackRef kwnames;
_PyStackRef *self_or_null;
_PyStackRef *args;
_PyStackRef kwnames;
_PyStackRef res;
/* Skip 1 cache entry */
/* Skip 2 cache entries */
@ -3057,8 +3057,8 @@
static_assert(INLINE_CACHE_ENTRIES_CALL_KW == 3, "incorrect cache size");
_PyStackRef *callable;
_PyStackRef *self_or_null;
_PyStackRef kwnames;
_PyStackRef *args;
_PyStackRef kwnames;
_PyInterpreterFrame *new_frame;
/* Skip 1 cache entry */
// _CHECK_PEP_523
@ -4682,8 +4682,8 @@
PREDICTED_CONTAINS_OP:;
_Py_CODEUNIT* const this_instr = next_instr - 2;
(void)this_instr;
_PyStackRef left;
_PyStackRef right;
_PyStackRef left;
_PyStackRef b;
// _SPECIALIZE_CONTAINS_OP
{