Optimacion mediante mirilla (compiladores)

Solo disponible en BuenasTareas
  • Páginas : 6 (1419 palabras )
  • Descarga(s) : 0
  • Publicado : 4 de diciembre de 2010
Leer documento completo
Vista previa del texto
Optimación mediante “MIRILLA”
Es un método para intentar mejorar el rendimiento del proyecto objeto examinando una secuencia corta de instrucciones objeto (llamada mirilla) y sustituyendo estas instrucciones por una secuencia más corta o más rápida, si es posible. Aunque se estudia la optimación mediante mirilla como una técnica para mejorar la calidad del código objeto, la técnica también sepuede aplicar directamente después de la generación de código intermedio para mejorar la representación intermedia.
En general, son necesarias repetidas pasadas sobre el código objeto para obtener las mayores ventajas. En este resumen se darán los siguientes ejemplos de transformaciones de programas característicos de las optimaciones mediante mirilla:
* Eliminación de instruccionesredundantes.
* Optimaciones del flujo de control.
* Simplificaciones algebraicas.
Cargas y almacenamientos redundantes.
Si se encuentra la siguiente secuencia de instrucciones
(1) MOV R0, a
(2) MOV a, R0
se puede borrar la instrucción (2) porque siempre que se ejecute (2), (1) garantizará que el valor de a ya está en el registro R0. Obsérvese que si (2) tuviera una etiqueta, no se podría estarseguro de que (1) siempre se ejecutó justo antes de (2), y entonces no se podría eliminar (2). Dicho de otro modo, (1) y (2) tienen que estar en el miso bloque básico para que esta transformación sea válida.
Código inalcanzable.
Otra oportunidad para la optimación local es la eliminación de instrucciones inalcanzables. Se puede eliminar una instrucción sin etiqueta que siga inmediatamente a unsalto incondicional. Esta operación se puede repetir para eliminar una secuencia de instrucciones. Por ejemplo, para una mayor depuración, un programa grande puede tener dentro de él algunos segmentos que se ejecutan sólo si una variable llamada depura vale 1. En C, el código fuente se parecería a:
#define depura 0

if ( depura ){
Imprime información para la depuración
}

En larepresentación intermedia la proposición if se puede traducir como:
if depura = 1 goto L1
goto L2
L1: imprime información para la depuración
L2:

Una optimación mediante mirilla obvia consiste en eliminar los saltos sobre saltos. Por tanto, independientemente del valor de depura, (en el ejemplo de ensamblador) se puede sustituir por:
if depura ≠ 1 goto L2
imprime información para la depuraciónL2:

Ahora, como a depura se asigna 0 al principio del programa, la propagación de constantes debe sustituir el programa anterior por:
if 0 ≠ 1 goto L2
imprime información para la depuración
L2:

Como el argumento de la primera proposición del programa anterior se evalúa como la constante true, se puede sustituir por goto L2. Entonces todas las proposiciones que impriman ayudas para ladepuración son manifiestamente inalcanzables y se pueden eliminar de una en una.

Optimización de flujo de control.
A menudo algunos algoritmos para generación de código intermedio producen saltos hacia saltos, saltos hacia saltos condicionales, o saltos condicionales hacia saltos. Estos saltos innecesarios se pueden eliminar, ya sea del código intermedio o del código objeto, mediante lossiguientes tipos de optimaciones locales. Se puede sustituir la secuencia de saltos.
goto L1

L1: goto L2
goto L2

L1: goto L2

Si ahora no hay saltos a L1, entonces se puede eliminar la proposición L1: goto L2, siempre que vaya precedida de un salto incondicional. De manera similar, la secuencia

if a < b goto L1

L1: goto L2

Se puede sustituir por

If a < b goto L2

L1:goto L2

Por último, supóngase que sólo hay un salto a L1 y que L1 va precedida de un salto goto incondicional. Entonces la secuencia.

Ejemplo 1
goto L1

L1: if a < b goto L2
L3:

Se puede sustituir por

Ejemplo 2

if a < b goto L2
goto L3

L3:

Aunque el número de instrucciones en ambos ejemplos es el mismo, a veces se puede evitar el salto incondicional en el...
tracking img