Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Generacin de cdigo
Introduccin
La fase final de nuestro modelo de compilador es el generador de cdigo Toma por entrada una RI del fuente y produce su equivalente en cdigo objeto Las tcnicas que veremos son independientes de si se realiza o no optimizacin
Introduccin
Los requerimientos que, tradicionalmente, se imponen en un generador de cdigo son muy demandantes El cdigo generado debe ser correcto y de alta calidad (debe hacer uso efectivo de los recursos de la mquina objeto) El generador, adems, debe ser eficiente
Introduccin
El problema de generar cdigo ptimo es no decidible
Son problemas NP completos No hay algoritmos polinomiales que resuelvan el problema
En la prctica, se utilizan heursticas que generan cdigo bueno (aunque probablemente no ptimo)
Aspectos generales
Entrada al generador de cdigo (RI) Programas objeto Administracin de memoria Seleccin de instrucciones Adjudicacin de registros Eleccin de orden de evaluacin
Cdigo objeto
La salida del generador es el cdigo o programa objeto, el cual puede tomar distintas formas:
cdigo mquina absoluto cdigo mquina reubicable cdigo assembler
Cdigo objeto
Producir cdigo mquina absoluto como salida conlleva la ventaja de que puede ser ubicado en un lugar fijo de memoria y ejecutado inmediatamente Cdigo reubicable (tambin llamado mdulo objeto) permite tener mdulos que se compilan por separado. Luego se unen (linking) y se cargan
Cdigo objeto
En este caso se gana mucha flexibilidad en funcin del trabajo que conlleva la unin y carga. Si la mquina objeto no se hace cargo de la reubicacin, el compilador debe producir informacin explcita para el linker
Cdigo objeto
Finalmente, producir cdigo assembler como salida facilita el proceso de compilacin. Podemos generar instrucciones simblicas y usar las macros de assembler como ayudas. Finalmente, facilita la optimizacin a mano del cdigo generado. El precio es que aparece una etapa final de ensamblado
Administracin de memoria
Consiste en determinar la posicin de memoria en la que los diferentes smbolos del programa almacenan la informacin Depende de la estrategia utilizada para la gestin de memoria, el mecanismo puede variar
Seleccin de instrucciones
La naturaleza del conjunto de instrucciones de la mquina objeto, determina la dificultad de la seleccin de instrucciones La uniformidad y completitud del conjunto de instrucciones son factores muy importantes. Si la mquina objeto no soporta cada tipo de datos de forma uniforme, entonces se necesitan estrategias alternativas
Seleccin de instrucciones
Si no nos interesa la eficiencia, para cada tipo de sentencia en C3D podemos disear un esqueleto de cdigo que muestra el cdigo objeto a generar para esa construccin Ej.: x:=y+z
MOV Y, R0 ADD Z, R0 MOV R0, X
Seleccin de instrucciones
Por ejemplo:
a := b + c d := a + e
Se traduce a
MOV b, R0 ADD c, R0 MOV R0, a MOV a, RO ADD e, R0 MOV R0, d redundante? redundante?
Seleccin de instrucciones
La calidad del cdigo generado se mide en funcin de
Tamao Velocidad
En funcin de la variedad de instrucciones uno puede seleccionar la instruccin ms performante (ej. INC vs MOV - ADD - MOV). Para los casos no triviales, es un problema muy complejo.
Asignacin de registros
Operar sobre registros es ms rpido y eficiente que operar sobre memoria
Por ello, la adjudicacin eficiente de registros tiene un gran impacto en la performance
Asignacin de registros
El uso de registros puede dividirse en dos subproblemas:
Durante la reserva de registros (allocation), se seleccionan el conjunto de variables que vivir en registros en un punto del programa. Durante la (posterior) asignacin de registros (assignation), se elige el registro especfico para cada variable.
Orden de evaluacin
El orden en que algunas computaciones se llevan a cabo puede afectar la eficiencia del cdigo objeto Algunos ordenes requieren menos registros para almacenar valores intermedios Seleccionar el orden ptimo es tambin NP-completo
Orden de evaluacin
El orden en que algunas computaciones se llevan a cabo puede afectar la eficiencia del cdigo objeto Algunos ordenes requieren menos registros para almacenar valores intermedios Seleccionar el orden ptimo es tambin NP-completo