Numeración de valores: la optimización que reutiliza cálculos idénticos

Fuentes: Value numbering
Imagen generada por IA con el prompt: Editorial flat illustration of a compiler pipeline: blocks of pseudo-code with highlighted equivalent expressions being merged, neutral palette, minimalist technical style
Imagen generada con IA

La numeración de valores (value numbering) es una técnica clásica de optimización de compiladores que identifica instrucciones puras que producirán el mismo resultado en tiempo de ejecución y las fusiona para evitar cálculos redundantes. El artículo parte de la forma SSA (asignación única estática), en la que cada expresión tiene un nombre único, y muestra cómo, una vez eliminado el solapamiento textual entre variables, dos instrucciones formalmente idénticas como v1 = v0 + 1 y v3 = v0 + 1 pueden reescribirse como v3 = v1, reusando el valor calculado.

El texto explica la implementación práctica mediante hash-consing: se calcula un número hash por instrucción y, si coincide con el de otra y los operandos son estructuralmente iguales, se consideran equivalentes. En el caso de las operaciones binarias, el hash combina el opcode con la identidad de los operandos, mientras que la comparación exige igualdad exacta de opcode y operandos. Para propagar el reemplazo sin reescribir cada uso, se utiliza una estructura de unión-busca, que deja una marca (Assign/Identity) y se resuelve después con una pasada de propagación de copias.

Se distingue entre la versión local (LVN), aplicable a un solo bloque básico, y la global (GVN), que extiende el análisis a todo el flujo de control de una función, incluyendo bifurcaciones y bucles. El artículo menciona la implementación de la máquina virtual Maxine como referencia y advierte de que solo las instrucciones puras —sin efectos sobre memoria o estado externo— son candidatas seguras; cargas desde arrays u operaciones con efectos se excluyen para no alterar el punto donde se lanzan excepciones. El repaso sirve como base para abordar más adelante la numeración de valores global y la optimización de operaciones impuras.