next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: Práctica: Optimización Peephole Sup: La Estructura de los Ant: Práctica: Generación de Código Err: Si hallas una errata ...

Optimización de Código

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
next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
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
2012-05-22