Compiladores: Generación de Código

Slides:



Advertisements
Presentaciones similares
Compiladores e intérpretes
Advertisements

Prototipo de compilador didáctico del lenguaje LC99
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Tema 3. Optimización de Código
Funciones en lenguaje C
Tema 10.3: Asignación de Espacio No Contiguo. Tema 10.3: 2 Silberschatz, Galvin and Gagne ©2005 Fundamentos de los Computadores (ITT, Sist. Electr.),
Asignación de Espacio No Contiguo
PBN © Jaime Alberto Parra Plaza CLASE 5 LOS SEGMENTOS.
Programación de Sistemas
Programación de Sistemas
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) V. GESTIÓN DE TIPOS Y GENERACIÓN DE CÓDIGOS.
JOSE ALBERTO JIMENEZ JIMENEZ KATTY HIPOLITO. 7.1 INTRODUCCION AL LENGUAJE EMSAMBLADOR.
Omar Herrera Caamal Rigoberto Lizárraga Luis Cetina Luna.
P ROCESO DE E NSAMBLADO Cámara Vázquez Berenice Rubí.
Arquitectura de Computadores Clase 12 Instrucciones en lenguaje de máquina IIC 2342 Semestre Rubén Mitnik Pontificia Universidad Católica de Chile.
Las tres primeras fases de un compilador suelen agrupan en un sola fase llamada Análisis del programa a compilar y las tres ultimas en una sola fase llamada.
Una estrategia para evitar la sucesiones repetidas de instrucciones convertir la secuencia en un procedimiento e invocarlo cada vez que se necesite.
L ISTAS ENLAZADAS M.IA. Daniel Alejandro García López.
Traducción dirigida por la Sintaxis Teoría de Autómatas y Lenguajes Formales Alma María Pisabarro, 2007.
PROGRAMACIÓN ORIENTADA A OBJETOS SEGUNDA UNIDAD: “CLASES, OBJETOS Y MÉTODOS” IRVING YAIR SALAS CHÁVEZ ING. EN SISTEMAS COMPUTACIONALES - ITSLP.
Funciones en lenguaje C 2 Funciones Definición: – Las funciones son los bloques de construcción básicos de C. Dentro de ellas se da toda la actividad.
Ingreso , proceso y salida de datos
Colegio San Agustín – El Paraíso
L. S. C. A. Raúl Monforte Chulin
Organización de computadoras
Operadores Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++.
Repaso Programacion en C
Pipelining Peligros de control.
Ciclos condicionales y exactos Estructura de control de ciclos
El procesador Diseño del control.
Conceptos básicos de programación
Datapath para las instrucciones de brinco
TAD’s ARBOLES GENERALIZADOS
Lenguajes y representación técnica
Arquitecturas alternativas UNIVERSIDAD TECNOLOGICA DE PUEBLA TECNOLOGIAS DE LA INFORMACION Y COM. AREA REDES Y TELECOMUNICIONES ADMINISTRACION DE SERVIDORES.
Listas enlazadas particulares
Tema 6. Conceptos básicos de programación (Clase 2)
TUTORIAL PSeint.
Clase 7 Assembly - Simulador MSX88.
Cada maquina tiene un lenguaje ensamblador distinto
Pipelining Introducción.
Estas dos líneas de código permiten al Asm iniciar en Code Segment
Análisis de redes. 3.4 Problema de flujo máximo.
CONCEPTOS PRELIMINARES (Cont)
ELEMENTOS DE COMPUTACIÓN Profesor: Guillermo Figueroa
Redes de Petri Coloreadas: Análisis
Retroalimentación ejercicios de tarea. Ejercicios para resolver 1.¿Cuántos bytes hay exactamente en un sistema que contiene a.32 Kbytes b.64 Mbytes c.6.4.
Diagrama de Flujo La presentación gráfica de sistemas es una forma ampliamente utilizada como herramienta de análisis, ya que permite identificar aspectos.
HERRAMIENTAS DE PROGRAMACIÓN
Introducción a las ciencias de la computación Antonio López Jaimes
Procesamiento de Consultas Distribuidas (2da. Parte) Lic. Bárbara da Silva Sistemas de Bases de Datos Distribuidas - UCV.
UNIVERSIDAD DEL VALLE Docente: MsC. Cinthya Irene Rosales Martinez Facultad de Ingeniería Lenguajes de Programación.
P P AGINACION FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS FACULTAD DE INGENIERÍA INDUSTRIAL Y DE SISTEMAS.
Funciones del Analizador Sintáctico
Instituto Tecnológico de Minatitlán
Pipelining Peligros de control.
TEMAS *Arboles Binarios *listas Abiertas y Cerradas - Inserción - Recorrido - Eliminación *Pilas - Concepto - Inserción - Recorrido -
ACCIONES Y ESTRUCTURAS
Técnicas de Análisis de las Redes de Petri
OPTIMIZACIÓN EN REDES EN ALGUNOS PROBLEMAS DE OPTIMIZACIÓN PUEDE SER ÚTIL REPRESENTAR EL PROBLEMA A TRAVÉS DE UNA GRÁFICA: ruteo de vehículos, distribución.
TUTORIAL PS EINT FUNDAMENTOS DE PROGRAMACIÓN Ing. Elizabeth Díaz Orea.
Informática Ingeniería en Electrónica y Automática Industrial
TUTORIAL PS EINT FUNDAMENTOS DE PROGRAMACIÓN Ing. Elizabeth Díaz Orea.
Tema 6. Conceptos básicos de programación (Clase 2)
Informática Ingeniería en Electrónica y Automática Industrial
El procesador Datapath y control.
CONTROLES Y ESTRUCTURAS BÁSICAS DE PROGRAMACIÓN  1. Algoritmos: conjunto de instrucciones programadas para resolver una tarea específica.  2. Datos:
UNIDAD 1 Análisis semántico 1.1 ARBOLES DE EXPRESIONES.
Pipelining Peligros de control.
COMPILADORES Semana 1 Ing. Jorge Vigil Farfán MgTI, PMP, ITIL-Expert, Cloud, ISO 27002, CCNP, CCNA, CCNA Sec, NSE.
Transcripción de la presentación:

Compiladores: Generación de Código Pontificia Universidad Javeriana Cali Ingeniería de Sistemas y Computación Prof. María Constanza Pabón

Generación de Código Generador de Código Producir código correcto Representación Intermedia Generador de Código Programa traducido al lenguaje destino Tabla de Símbolos Mantener la semántica del programa El programa traducido debe tener alta calidad: Uso efectivo de los recursos Correr eficientemente = “buen código” (generar la traducción óptima es un problema indecidible) Producir código correcto Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Generador de Código Tres tareas: Depende de: Selección de las instrucciones Localización de Registros y asignación Ordenar las instrucciones Depende de: Representación Intermedia Lenguaje Destino Run-time system Diferencia con un AF: MT puede leer y escribir en la cinta La cabeza de la cinta se mueve a izquierda y derecha La cinta es infinita Los estados de aceptación y rechazo tienen efecto inmediato. Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Generador de Código Conjuntos de instrucciones y arquitecturas de máquina usuales: RISC (Reduced Instruction Set) CISC (Complex Instruction Set) Basada en Pila (Stack based) Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Generador de Código RISC (Reduced Instruction Set): Muchos registros Instrucciones de 3 direcciones Modos de direccionamiento simples Conjunto de instrucciones simple CISC (Complex Instruction Set): Pocos registros Instrucciones de 2 direcciones Muchos modos de direccionamiento Instrucciones de longitud variable Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Generador de Código Basado en Pila (Stack based): Las operaciones se realizan sobre operandos que están en el tope de la pila Requiere muchas operaciones de intercambio y copia (swap, copy) Ejemplo: JVM (Java Virtual Machine) Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Selección de Instrucciones Si una instrucción de asignación de la forma x=y+z; Se traduce a: LD R0, y // R0 = y ADD R0, R0, z // R0 = R0+z ST x, R0 // x = R0 Como se traducen: a = b + c; d = a + c; a = a + 1; Que se puede optimizar? Cada instrucción de la máquina tiene un costo asociado Evitar volver a cargar a en un registro. Usar la operación INC, si existe. Los costos de las instrucciones varian dependiendo no solo de la operación que realizan sino tambien de los accesos a memoria. Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Localización y asignación de registros Localización: que variables se asignan a registros Asignación: establecer la relación variable-registro La asignación óptima es un problema NP-Completo. Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Orden de Evaluación El orden puede afectar la eficiencia del código En algún orden se puede requerir menos registros que en otro Encontrar un orden óptimo es un problema NP-Completo Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Ejemplo:Lenguaje Destino Conjunto de Instrucciones: Instrucción Sentido Ejemplo LD dst, addr dst = addr (dst es un registro) LD r1, x LD r2,r1 ST dst, reg dst = reg ST x, r1 ADD dst, scr1, scr2 SUB dst, scr1, scr2 …. dst = src1 + src2 dst = src1 - src2 (dst, src son registros o constantes) ADD r0, 100, r1 BR l Branch (l es una etiqueta) BR WH0 BLTZ reg, l If reg < 0 Br l BLTZ r0, WH1 Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Ejemplo:Lenguaje Destino Modos de direccionamiento: Modo Descripción Sentido Ejemplo x Variable de nombre x Rvalue de x valor a(r) Indexado, a es una variable, r un registro contenido(Lvalue de a + contenido de r) arreglo(r0) entero(r) Indexado Contenido(entero + contenido de r) 100(r1) *r Indirecto Contenido(contenido de r) *r1 *entero(r) Contenido(Contenido(entero + contenido de r)) *100(r0) #entero Constante entera Entero 100 Ejemplos: asignacion, operaciones, arreglos, apuntadores x = *p (*r, o 0(r)). If, while... Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Ejemplo:Lenguaje Destino Costo de las Instrucciones: El costo de cada instrucción es uno mas el costo de los modos de direccionamiento que usa El uso de registros no genera costo (costo 0) Cada acceso a memoria, o el uso de constantes, agrega 1 al costo. Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Grafos de flujo Se construye Representación en grafos del código intermedio Permite Mejor localización de registros Mejor selección de instrucciones Se construye Partir el código intermedio en bloques básicos Los bloques básicos se convierten en nodos de un grafo de flujos, cuyos arcos indican que bloques pueden seguir a otros bloques Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Bloques Básicos Secuencias de instrucciones que tienen las siguientes características: El control de flujo ingresa al bloque solamente por su primera instrucción (no hay saltos a instrucciones en la mitad del bloque) El control deja el bloque sin saltos, ni finalización del programa (halt), excepto por la ultima instrucción del bloque Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Bloques Básicos Método de construcción: Encontrar instrucciones líderes: La primera instrucción del código intermedio Cualquier instrucción que es destino de un salto condicional o incondicional Cualquier instrucción que sigue inmediatamente a un salto condicional o incondicional Para cada líder, su bloque básico se forma consigo misma y las instrucciones que le siguen, sin incluir otro líder ni el final del programa Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Bloques Básicos Asignación de variables a Registros: Siguiente uso de la variable: tener un indicador de en que instrucción vuelve a ser usada una variable. (j) usa un valor de x calculado en (i), x esta viva en la instrucción (i) Si la variable no es usada de nuevo dentro del bloque, se puede liberar el registro al cual se asignó. Para ello se debe: Determinar el tiempo de vida de la variable Guardar en la tabla de símbolos el registro al que se asignó. (i) x = a * 10; ... Flujo sin asignación a x (j) p = x + z; Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Bloques Básicos Asignación de variables a Registros: Método La Tabla de Símbolos marca todas las variables como si estuvieran vivas al salir del bloque Recorriendo el bloque desde la última instrucción hasta la primera, para toda instrucción de asignación, ej. (i) x = y op z; Relacione (i) con la información encontrada en la tabla de símbolos Actualice en la tabla de símbolos x como “no viva” (no hay siguiente uso) Actualice en la tabla de símbolos y, z como “vivas”, y su siguiente uso como (i) El orden de las acciones del método no es intercambiable, porque una variable puede estar siendo usada en el lado izquierdo y derecho de la asignacion. Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Grafos de Flujo Representa como el control del flujo puede fluir entre los bloques básicos Hay un arco del bloque B al C si y solo si es posible que la primera instrucción de C se ejecute inmediatamente después de la última instrucción de B. Salto de la instrucción final de B a al instrucción inicial de C C sigue a B en el código Se dice que B es predecesor de C, y C sucesor de B. Se agregan dos nodos “Entrada” y “Salida” (no tienen instrucciones de código asociadas) Se agrega un arco desde la “Entrada” hasta la primera instrucción del código. Se agrega un arco desde cada bloque que pueda tener la última instrucción que se ejecute hasta la “Salida” Se agrega un ancho desde cada bloque que tenga un salto a un código que no es parte del programa hasta la “Salida” Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Grafos de Flujo Representación. Reemplazar los saltos a instrucciones por saltos a bloques (para facilitar la manipulación de instrucciones dentro de cada bloque) Cualquier estructura típica usada para representación de grafos, donde el contenido del nodo (puede ser una lista de instrucciones) contiene las instrucciones del bloque. Ciclos: la mayor parte del tiempo de ejecución de un programa esta en los ciclos Un conjunto de nodos forma un ciclo L si y solo si: Hay un nodo E, “Entrada al ciclo”, que es el único que tiene como predecesor un nodo externo a L. Hay un camino no vacío desde cualquier nodo de L a E. Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Optimización Local Representación de los bloques básicos con DAG (Directed acyclic graph): Hay un nodo en DAG para cada uno de los valores iniciales de las variables que son usadas como operandos en alguna instrucción del bloque Hay un nodo N asociado con cada instrucción S dentro del bloque, los hijos de N son las instrucciones anteriores a S que tienen las ultimas definiciones de los operandos usados en S. El nodo N se marca con el operador que se aplica en S, y tiene asociada la lista de variables para las cuales esta es la última definición dentro del bloque. Los nodos de salida son aquellos cuyas variables están vivas al salir del bloque (sus valores pueden ser usados después en otro bloque – para el análisis global). Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Optimización Obtener una mejora sustancial en el tiempo de ejecución del código Optimización Local Optimizar las instrucciones dentro de cada bloque básico Subexpresiones comunes, Código muerto, Identidades algebraicas, referenciación de arreglos. Optimización Global Optimizar las instrucciones de acuerdo con el flujo entre los bloques básicos Vida de las variables, expresiones disponibles, eliminación de redundancia (subexpresiones comunes, invariantes de ciclos, expresiones parcialmente redundantes). Subexpresiones comunes: calculo de valores que ya han sido calculados Código muerto: calculo de valores que nunca son usados Identidades algebraicas: para reordenar operandos (reducir el tiempo que se requiere mantener un valor en un registro) y simplificar el cálculo Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Optimización Local Subexpresiones comunes: Ejemplo: a = b + c; b = a – d; c = b + c; d = a – d; El DAG: + - b0 c0 d0 a b, d c Y se puede optimizar a: a = b + c; b = a – d; c = b + c; d = b; Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Optimización Local Reducción usando Identidades Algebraicas: Ejemplo: a = b + c; b = b – d; c = c + d; d = b + c; El DAG: + - b0 c0 d0 a b c d Y se puede optimizar a: a = b + c; b = b – d; c = c + d; d = a; Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón