python / python/cpython

Redundant stack spills on subsequent escaping calls separated by comments

Abierto
#128,760 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

interpreter-core type-bug
Lenguaje dominante
Python
Estrellas
77.2k
Forks
35.9k
Métricas de merge de PR
Métricas de PR pendientes

Descripción

Bug report

Bug description:

Tier 1 case generator emits stack spill for every subsequent escaping call, when subsequent escaping calls are separated by comment(s). Example:

Subsequent escaping calls without comments in between:

Bytecode definition:

pure inst(NOP, (--)) {
    escaping_call1();
    escaping_call2();
    escaping_call3();
}

Generated case:

TARGET(NOP) {
    frame->instr_ptr = next_instr;
    next_instr += 1;
    INSTRUCTION_STATS(NOP);
    _PyFrame_SetStackPointer(frame, stack_pointer);
    escaping_call1();
    escaping_call2();
    escaping_call3();
    stack_pointer = _PyFrame_GetStackPointer(frame);
    DISPATCH();
}
Subsequent escaping calls with comments in between:

Bytecode definition:

pure inst(NOP, (--)) {
    escaping_call1();
    // comment1
    escaping_call2();
    // comment2
    escaping_call3();
}

Generated case:

TARGET(NOP) {
    frame->instr_ptr = next_instr;
    next_instr += 1;
    INSTRUCTION_STATS(NOP);
    _PyFrame_SetStackPointer(frame, stack_pointer);
    escaping_call1();
    stack_pointer = _PyFrame_GetStackPointer(frame);
    // comment1
    _PyFrame_SetStackPointer(frame, stack_pointer);
    escaping_call2();
    stack_pointer = _PyFrame_GetStackPointer(frame);
    // comment2
    _PyFrame_SetStackPointer(frame, stack_pointer);
    escaping_call3();
    stack_pointer = _PyFrame_GetStackPointer(frame);
    DISPATCH();
}
CPython versions tested on:

CPython main branch

Operating systems tested on:

No response

Linked PRs
  • gh-128761

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con el generador de casos de Tier 1 y la definición de bytecode mostrados en el informe; después, revisa el PR enlazado gh-128761 para consultar el trabajo actual. Reproduce los ejemplos con comentarios entre las llamadas de escaping y verifica que el caso generado emita únicamente las operaciones necesarias del puntero de pila.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
c, python
Área
compilers
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
25/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.