Skip to content

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

Closed
@markshannon

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