`LOAD_FAST_BORROW` not being used even when safe to do so, if value is live at BB end.
Abierto
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
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- 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