Sig: Práctica: Optimización Peephole
Sup: La Estructura de los
Ant: Práctica: Generación de Código
Err: Si hallas una errata ...
Aunque en esta fase se incluyen toda clase de optimizaciones,
es aquí donde se hacen las optimizaciones de código dependientes
del sistema objeto. Normalmente se
recorre el código generado buscando secuencias
de instrucciones que se puedan sustituir por otras cuya
ejecución sea mas eficiente.
El nombre Peephole optimization hace alusión a esta especie de
``ventana
de visión'' que se desplaza sobre el código. En nuestro caso,
supongamos que disponemos de una instrucción INC
que permite
incrementar eficientemente una expresión. Recorremos el código buscando
por un patrón "sumar 1" y lo reeemplazamos adecuadamente.
package Peephole::Optimization;
sub transform {
$target = shift;
$target =~ s/PUSH 1\nPLUS/INC/g;
}
Otro ejemplo de optimización peephole consiste en reemplazar las operaciones
flotantes de división por una constante por la multiplicación por la inversa
de la misma (aquí se pueden introducir diferencias en el resultado, debido
a la inexactitud de las operaciones en punto flotante y a que, si
se trata de un compilador cruzado la aritmética
flotante en la máquina en la que se ejecuta el compilador puede ser diferente
de la de la máquina que ejecutará el código objeto).
Subsecciones
Sig: Práctica: Optimización Peephole
Sup: La Estructura de los
Ant: Práctica: Generación de Código
Err: Si hallas una errata ...
Casiano Rodríguez León
2013-03-05