Skip to content

Interpreter code generators need to be able to handle basic flow control #123391

Description

@markshannon

In order to be able to flush the stack efficiently around escaping calls, the interpreter code generators need to be able to handle simple-ish flow control.

For example, in this code:

 op(_CHECK_PERIODIC, (--)) {
if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) {
int err = _Py_HandlePending(tstate);
ERROR_IF(err != 0, error);
}
}

The general shape is:

 if (cond) {
*escaping_call()*
}

We want to be able to track the flow control so that we can spill around the call, but not on the fast path:

 if (cond) {
SPILL_STACK();
*escaping_call()*
RELOAD_STACK();
}

We cannot currently do this.

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    interpreter-core(Objects, Python, Grammar, and Parser dirs)type-featureA feature request or enhancement

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions