Lenguajes Formales y Gramáticas

(4) t2 := a[t1]. (5) t3 := 4 * i. (6) t4 := b[t3]. (7) t5 := t2 *t4. (8) t6 := prod + t5. (9) prod := t6. (10) t7 := i + 1. (11) i := t7. (12) if i
377KB Größe 4 Downloads 77 vistas
Optimización de Código Intermedio

Programación II

Margarita Álvarez

Optimizador de código OBJETIVO Obtener código que se ejecuta más eficientemente según los criterios • Tiempo de ejecución (optimización temporal) • Espacio de memoria utilizado (optimización espacial)

Optimizador de código Criterios para las transformaciones  Una transformación debe preservar el significado de los programas.  Una transformación debe acelerar los programas en una cantidad mensurable.  Una transformación debe valer la pena.

Optimizador de código Las optimizaciones locales se realizan sobre el bloque básico Optimizaciones locales

Subexpresiones comunes.  Programación de copias.  Eliminación de código inactivo. 

Bloques básicos Un bloque básico es un fragmento de código que tiene una única entrada y salida, y cuyas instrucciones se ejecutan secuencialmente. La idea del bloque básico es encontrar partes del programa cuyo análisis necesario para la optimización sea lo más simple posible.

Bloques básicos Algoritmos para particionar una secuencia de proposiciones de tres direcciones en bloques básicos. 1.Se

determina el líder: 1. La primera proposición es un líder. 2. Cualquier proposición que sea destino de un salto condicional o incondicional es un líder. 3. Cualquier proposición que vaya inmediatamente después de un salto condicional o incondicional es un líder.

2.Para

cada líder su bloque básico consta del líder y de todas las proposiciones hasta, pero sin incluirlo, el siguiente líder o fin del programa.

Bloques básicos - Ejemplo Bloques básicos

B1

Código de tres direcciones

(1) (2)

(3) (4) (5) (6) (7) B2 (8) (9) (10) (11) (12)

prod := 0 i := 1 t1 := 4 * i t2 := a[t1] t3 := 4 * i t4 := b[t3] t5 := t2 *t4 t6 := prod + t5 prod := t6 t7 := i + 1 i := t7 if i