python / python/cpython

`LOAD_FAST_BORROW` not being used even when safe to do so, if value is live at BB end.

Abierto
#133,672 3 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

3.15 interpreter-core performance type-feature
Lenguaje dominante
Python
Estrellas
77.2k
Forks
36k
Métricas de merge de PR
Métricas de PR pendientes

Descripción

This function

def f(x, y, c):
    return 1 + (x if c else y)

compiles to

  1           RESUME                   0

  2           LOAD_SMALL_INT           1
              LOAD_FAST_BORROW         2 (c)
              TO_BOOL
              POP_JUMP_IF_FALSE        9 (to L1)
              NOT_TAKEN
              LOAD_FAST_BORROW         0 (x)
              BINARY_OP                0 (+)
              RETURN_VALUE
      L1:     LOAD_FAST                1 (y)
              BINARY_OP                0 (+)
              RETURN_VALUE

Note that the load of y uses LOAD_FAST even though LOAD_FAST_BORROW is safe.

This becomes important with virtual iterators as the iterable for the loop is live at BB end.

Linked PRs
  • gh-133721
  • gh-148999

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

Empieza reproduciendo el desensamblado informado para f(x, y, c) e investiga el manejo por parte del compilador de los valores vivos al final de un bloque básico. Compara las ramas condicionales y el caso del iterador virtual; luego verifica que y use LOAD_FAST_BORROW cuando sea seguro y añade o actualiza la cobertura del comportamiento informado.

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

Evaluación

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

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.