Convolución de constantes

El plegamiento constante y la  propagación constante ( también promoción constante, duplicación constante , propagación constante ) son optimizaciones que se usan a menudo en los compiladores modernos que reducen los cálculos redundantes al reemplazar expresiones y variables constantes con sus valores [1] . El algoritmo extendido de propagación constante condicional dispersa también se usa a menudo , que realiza simultáneamente la propagación constante y la eliminación de algún código muerto [2] .  

Plegado constante

El plegado constante  es una optimización que evalúa expresiones constantes en tiempo de compilación. En primer lugar, se simplifican las expresiones constantes que contienen literales numéricos . Las expresiones que contienen variables que nunca cambian o variables declaradas como constantes también se pueden simplificar . Considere un ejemplo:

i = 320 * 200 * 32 ;

Un compilador que admita el plegado constante no generará dos instrucciones de multiplicación ni registrará el resultado. En cambio, reconoce esta construcción como una expresión constante y la reemplaza con el valor calculado (en este caso, 2,048,000).

Propagación constante

La propagación constante  es una optimización que reemplaza una expresión que siempre devuelve la misma constante cuando se ejecuta con esa constante [3] . Puede ser una constante definida anteriormente o función aplicada a las constantes Considere el siguiente ejemplo:

int x = 14 ; int y = 7 - x / 2 ; devuelve y * ( 28 / x + 2 );

Devoluciones de distribución x:

int x = 14 ; int y = 7 - 14 / 2 ; devuelve y * ( 28 / 14 + 2 );

Además, el plegado y la expansión constantes ydevuelven lo siguiente (las asignaciones xy yes probable que se eliminen mediante optimizaciones de eliminación de código inactivo más adelante ):

int x = 14 ; int y = 0 ; devolver 0 ;

Véase también

Notas

  1. Taller "Optimización de compiladores" (sobre el ejemplo de GCC). - NGU ellos. Lobachevsky. - S. 100.
  2. Muchnick, 1997 , pág. 362-370.
  3. Libro del Dragón, 2008 , p. 760.

Literatura

  • Steven S. Muchnick. Diseño e implementación de compiladores avanzados. — 5ª edición. - San Francisco: Morgan Kaufmann Publishers , 1997. - 856 p. - ISBN 1-55860-320-4 .
  • Alfred Aho, Monica Lam, Ravi Seti, Jeffrey Ullman. Compiladores : Principios, Técnicas y Herramientas = Compiladores: Principios, Técnicas y Herramientas. — 2ª edición. - M. : "Williams", 2008. - 1184 p. - 1500 copias.  - ISBN 978-5-8459-1349-4 .

Enlaces