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