Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Universidad de Oviedo
Contenido
Introduccin Tipos de Representacin Intermedia Representaciones Intermedias de Alto Nivel Representaciones Intermedias de Medio Nivel Representaciones Intermedias de Bajo Nivel Representaciones Intermedias con Mltiples Niveles de Abstraccin Caso Prctico
Introduccin
Cdigo Intermedio
La representacin intermedia del cdigo analizado representa el nexo entre el front-end y el back-end de un procesador El cdigo intermedio representa la salida del primer mdulo de sntesis (generacin de cdigo intermedio) El cdigo intermedio se puede representar de mltiples formas y en mltiples niveles d abstraccin f l l l de b
Front-end Analizador Semntico rbol Sint. Decorado Tabla de Smbolos Generador de Cdigo Intermedio Cdigo Intermedio Optimizador de Cdigo Sntesis Back-end
Francisco Ortn Soler
Gestin de Errores
Introduccin
Justificacin de Emplear un CI
El cdigo intermedio de un compilador suele ser cdigo del lenguaje de una mquina abstracta: Mquina diseada sin la intencin de ser implementada a nivel hardware Por qu existe una fase intermedia en la generacin de cdigo? Para reducir el nmero de traducciones necesarias para construir un compilador portable (retargetable) capaz de generar cdigo para distintas plataforma
Cdigo Fuente Fortran Pascal ... C n Lenguajes
n*m Traducciones
Compilacin Directa a las Plataformas Existentes Plataformas Especficas Motorola 68K Sun Sparc
i80x86
...
Introduccin
Reduccin de Traducciones
La traduccin de n lenguajes a m plataformas se ve reducida de n*m a n+m, gracias al empleo de un cdigo intermedio Tambin es comn ver este escenario para un nico lenguaje y varias plataformas
Cdigo Fuente
Fortran
Pascal
...
n Lenguajes
Cdigo Intermedio
n+m Traducciones
Plataformas Especficas
i80x86
Motorola 68K
...
Sun sparc
Introduccin
Otras Utilizaciones
Inicialmente, la reduccin del nmero de traducciones de un compilador fue el objetivo principal de la utilizacin de un cdigo intermedio Un caso particular de este esquema, que ofrece beneficios adicionales, es la utilizacin de una mquina virtual Una mquina virtual es una implementacin software de la especificacin de una mquina abstracta
Cdigo Fuente
Compilacin Lenguaje Intermedio de la Mquina Abstracta Lenguaje Fuente
Cdigo Intermedio
Plataforma A
Plataforma B
Introduccin
Contenido
Introduccin Tipos de Representacin Intermedia Representaciones Intermedias de Alto Nivel Representaciones Intermedias de Medio Nivel Representaciones Intermedias de Bajo Nivel Representaciones Intermedias con Mltiples Niveles de Abstraccin Caso Prctico
Tipos de RI
Las representaciones intermedias que emplean los lenguajes de programacin pueden ser clasificadas en funcin de los siguientes criterios
En base a su nivel de abstraccin En base a las propiedades de su lenguaje
Nos centraremos en la primera clasificacin y, para cada caso, describiremos una clasificacin del segundo criterio Los procesadores de lenguaje pueden utilizar varias representaciones intermedias, en funcin en la fase en la que se encuentren En funcin de su nivel de abstraccin, se suelen distinguir Lenguajes Intermedios de alto, medio y bajo nivel de abstraccin, as como multinivel
Francisco Ortn Soler
Clasificacin de RI
Lenguajes Intermedios de Alto Nivel: Son aquellos que se suelen emplear en las primeras fases de traduccin (anlisis), o incluso en preproceso Lenguajes Intermedios de Medio Nivel: Lenguajes intermedios que son Vlidos para representar un conjunto amplio de lenguajes fuente (no siendo dependientes de uno en concreto) Vlidos para representar un conjunto extenso de arquitecturas hardware Lenguajes Intermedios de Bajo Nivel: Permiten traducir a distintos micros de una misma arquitectura (dependientes de sta) Lenguajes Intermedios Multinivel: Aqullos que conjugan algunas de las caractersticas anteriores
Francisco Ortn Soler
Contenido
Introduccin Tipos de Representacin Intermedia Representaciones Intermedias de Alto Nivel Representaciones Intermedias de Medio Nivel Representaciones Intermedias de Bajo Nivel Representaciones Intermedias con Mltiples Niveles de Abstraccin Caso Prctico
Caractersticas
Los elementos de una representacin de alto nivel, modelan las abstracciones de los lenguajes que procesan
Elementos condicionales Representacin de iteraciones Sentencias de asignacin e invocacin Expresiones (desde los operadores aritmticos y condicionales hasta accesos a arrays, atributos, campos y mtodos) Declaraciones de variables, funciones y mtodos
Los lenguajes intermedios de medio y bajo nivel ofrecen abstracciones ms cercanas a los microprocesadores hardware
Francisco Ortn Soler
c=a*b/32+a*b
c / * a b 32
+ * a b
Francisco Ortn Soler
Implementacin de ASTs
Implementacin de diseo con el patrn Composite Ejemplo de diagrama de clases para expresiones, sentencias y condicionales:
Sentencia n 1..n
Expresion 1
1 2
Suele ser un soporte directo para la optimizacin de subexpresiones comunes independiente de la plataforma
= Expresin en C: c=a*b/32+a*b * a b c / 32 +
GAD asociado
Grafos de Dependencia
Los grafos de dependencia se emplean en tareas de optimizacin de cdigo Coexisten con las representaciones anteriores Pueden ser de dos tipos Grafos de dependencia de flujo: Grafos dirigidos que representan dependencias entre instrucciones q p Nodos que representan secuencias de instrucciones contiguas Aristas (etiquetadas con predicados) que representan saltos condicionales o incondicionales Ejemplo: Transforamciones SSA (Static SingleAssignment) Grafos de dependencia de datos: Grafos dirigidos que representan dependencias entre datos Nodos del grafo son instrucciones Aristas (etiquetadas con identificadores) del grafo representan dependencia entre los datos Ejemplo: alias analysis o liveness analysis Francisco Ortn Soler
Contenido
Introduccin Tipos de Representacin Intermedia Representaciones Intermedias de Alto Nivel p Representaciones Intermedias de Medio Nivel Representaciones Intermedias de Bajo Nivel Representaciones Intermedias con Mltiples Niveles de Abstraccin Caso Prctico
Francisco Ortn Soler
Mquinas de Pila
Los operaciones trabajan con (operandos) y sobre (resultados) una estructura de pila No es comn el empleo de registros simblicos Ventajas
Generar este tipo de cdigo es sencillo Su i t S interpretacin ( j t i (ejecucin) resulta di i ) lt directa t empleando una estructura de pila
Inconvenientes
Las optimizaciones de cdigo son algo ms complejas, puesto que los parmetros estn implcitos en la pila Aunque existen microprocesadores basados en mquinas de pila (HP3000 y Burroughs B5500), en la actualidad la mayora estn basadas en registros
Cdigo MSIL (.net): ldloc.0 ldloc.1 mul ldc.i4.s 32 div ldloc.0 ldloc.1 mul add stloc.2 // a // b
a b
// a // b
// a // b // c
// c
MAPL
MAPL es una Mquina Abstracta utilizada para Procesadores de Lenguaje (la asignatura) Es una mquina de pila Una mquina virtual (.Net Fw 2) y depurador estn disponibles en di ibl
http://www.di.uniovi.es/procesadores/Herramientas/ HerramientasCompiladores/interprete.zip
Se utiliza en las clases prcticas y en el examen prctico Aunque su propsito es didctico, su lenguaje es bastante similar a mquinas como JVM o CLI (CLR)
Francisco Ortn Soler
MAPL: Elementos
Memoria para datos entre 512 bytes y 16 Kb (1Kb por defecto) No ofrece primitivas de gestin de memoria heap Segmento de cdigo separado en un espacio de direcciones con una direccin para cada instruccin (comenzando en cero) Registros: IP -> Direccin en el segmento de cdigo de la instruccin actual SP -> Direccin en el segmento de datos de la cima de la pila BP -> Direccin en el segmento de datos del marco (frame) de la funcin actual No hay SS la pila siempre comienza al final del Francisco Ortn Soler segmento de datos
MAPL: Ejercicio
Se pide,
Escribir el cdigo MAPL de salida Supngase las direcciones de a=0 y b=2 Ejecutar el cdigo en el depurador
MAPL: Operaciones
Aritmticas add[i], addf sub[i], subf mul[i], mulf div[i], divf mod[i], modf Lgicas: and , or, not
1. 2. 3.
Comparacin: gt[i], gtf lt[i], ltf ge[i], gef le[i], lef eq[i], eqf ne[i], nef
Desapilan los 2 operandos (uno en el caso de not) Realizan la operacin Apilan el resultado
Francisco Ortn Soler
10
MAPL: Ejercicio
Se pide,
Escribir el cdigo MAPL de salida Supngase las direcciones de entero=0 y real=2 Ejecutar el cdigo en el depurador
Francisco Ortn Soler
Las arquitecturas CISC emplean cdigo de dos direcciones (coinciden el primer operando y el resultado) Ntese que no permite representar expresiones compuestas Ventajas: Es ms orientado a la optimizacin de cdigo y traduccin sencilla a micros hardware Inconvenientes: Su generacin e interpretacin es ms compleja
Francisco Ortn Soler
x y op z Donde x, y, z son identificadores, constantes (a excepcin de x) o variables temporales generadas por el compilador Y op representa cualquier tipo de operador
Ejemplo
ste es un formato utilizado principalmente como representacin interna del compilador SunIR es un lenguaje de tres direcciones empleado por los compiladores de Sparc y Motorola 68K para los lenguajes C, C++, Fortran77 y Pascal UCODE es un lenguaje intermedio que se ha empleado para compiladores HP PA-RISC y MIPS Expresin en C: c=a*b/32+a*b Cdigo de tres direcciones (no optimizado): t1 a * b t2 t1 / 32 t3 a * b t4 t2 + t3 c t4 Cdigo de tres direcciones (optimizado): t1 a * b t2 t1 / 32 c t2 + t1
11
Representacin de C3D
Como hemos comentado, ste suele ser un formato interno del compilador
Los lenguajes intermedios de mquinas de pila son ms comunes como formato externo
Por tanto, es importante idear un modo de representar internamente sus instrucciones (cuartetos, tercetos y tercetos indirectos)
Cuartetos: Estructura de tipo registro con cuatro campos: op, arg1, arg2 y resultado
Cdigo TD t1 a * b t2 t1 / 32 t3 a * b t4 t2 + t3 c t4 Representacin en Cuartetos op arg1 arg2 resultado * a b t1 / t1 32 t2 * a b t1 + t2 t3 t4 = t4 c Francisco Ortn Soler
Representacin de C3D
Tercetos: Evitan la utilizacin de valores temporales, utilizando posiciones de las operaciones Se elimina por tanto la variable resultado Ventajas: Menor memoria No gestionan el uso de temporales (las posiciones son punteros) Inconvenientes: El traslado de instrucciones empleado en optimizacin de cdigo resulta ms complejo Menor legibilidad (depuracin) Cdigo TD Representacin en Tercetos op arg1 arg2 t1 a * b (1) * a b t2 t1 / 32 (2) / (1) 32 t3 a * b (3) * a b t4 t2 + t3 (4) + (2) (3) c t4 (5) = c (4) Francisco Ortn Soler
Representacin de C3D
Los tercetos indirectos Permiten reordenar instrucciones en optimizaciones de cdigo (utilizan una indireccin) Eliminan la necesidad de gestionar variables temporales Tercetos Indirectos: Se aade una nueva lista de los p punteros a las instrucciones, para indicar su orden ,p El traslado de instrucciones modifica esta lista El cdigo de Sun IR que emplean los compiladores para Sparc, emplean una representacin de este tipo
Cdigo TD t1 a * b t2 t1 / 32 t3 a * b t4 t2 + t3 c t4
Representacin en Tercetos Indirectos orden op arg1 arg2 (101) (101) * a b (102) (102) / (101) 32 (103) (103) * a b (104) (104) + (102) (103) (105) (105) = c (104)
12
Contenido
Introduccin Tipos de Representacin Intermedia Representaciones Intermedias de Alto Nivel Representaciones Intermedias de Medio Nivel Representaciones Intermedias de Bajo Nivel Representaciones Intermedias con Mltiples Niveles de Abstraccin Caso Prctico
13
Ejemplo
HP PA-RISC (Precision Architecture, Reduced Instruction Set Computing) es una familia de micros RISC de HP cuyo cdigo intermedio de bajo nivel se denomina SLLIC (Spectrum Low-Level Intermediate Code) Cdigo 3D Cdigo C:
L1: t2 *t1 // t2 es *p t1 t1 + 1 // t1 es p t3 t3 + 1 // t3 es i t4 t3 < t2 SLLIC (PA-RISC) if t4 goto L1 // r1 es p, r2 es *p, r3 es i L1: LDWM 4(0,r1),r2 // Load (r2=*p) and modify (p++) ADDI 1,r3,r3 // Add integer (++i) COMB,< r3,r2,L1 // Compare and branch on < while (++i<*p++); HP 9000/700 // r1 es p, r2 es *p, r3 es i L1: LDWM 4(0,r1),r2 // Load (r2=*p) and modify (p++) ADDIB,< (1,r3)r2,L1 // Add (++i) and brach on < Soler Francisco Ortn
Contenido
Introduccin Tipos de Representacin Intermedia Representaciones Intermedias de Alto Nivel Representaciones Intermedias de Medio Nivel Representaciones Intermedias de Bajo Nivel Representaciones Intermedias con Mltiples Niveles de Abstraccin Caso Prctico
Este criterio se suele emplear para facilitar la tarea de optimizar cdigo, sin embargo:
Subir el nivel de abstraccin representa dependencia del lenguaje de alto nivel (en este caso, de Java) Bajar el nivel conlleva una dependencia de una arquitectura especfica Francisco Ortn Soler
14
C++
1.
2.
3.
4.
5.
Traducen el programa fuente (C, C++, Fortran y Pascal) a una representacin de alto nivel ( (AST) ) El AST es optimizador mediante transformaciones por el HLO (High Level Optimizer) obteniendo un GAD La salida del HLO es traducida a UCode (lenguaje de pila), siendo sta la salida del front-end De los distintos back-end existentes para HP, el de la arquitectura RISC traduce Ucode a SLLIC (lenguaje de bajo nivel de PA-RISC) En este ltimo nivel se realizan la mayora de las optimizaciones, generando el cdigo objeto
Front-end C++
Anlisis AST HLO GAD GC Intermedio Ucode GC SLLIC Optimizador binario PA-RISC Francisco Ortn Soler
Back-end
Contenido
Introduccin Tipos de Representacin Intermedia Representaciones Intermedias de Alto Nivel Representaciones Intermedias de Medio Nivel Representaciones Intermedias de Bajo Nivel Representaciones Intermedias con Mltiples Niveles de Abstraccin Caso Prctico
Caso Prctico
Ejercicio: Compilador Portable C- Se quiere realizar un compilador de un subconjunto de C (C--) independiente de la plataforma Para ello su cdigo ser traducido a cdigo intermedio MAPL (front-end) El cdigo MAPL ser traducido a binario por distintas mquinas virtuales de las distintas plataformas (distintos back-ends) Para poder migrar las implementaciones de los backends, sta traduce MAPL a una representacin interna de cdigo de tres direcciones El cdigo de 3D ser optimizado antes de generar el cdigo dependiente de la plataforma Ejercicio: Mustrese La estructura de los procesadores de lenguaje para generar finalmente 80x86 Todas las representaciones de cdigo (interno y externo) para la expresin c = (a+b) * (a+b-4) Francisco Ortn Soler
15
Bibliografa
Steven Muchnick. Advanced Compiler Design and Implementation. Morgan Kaufman, 1997. Louden, K.C. d Construccin de Compiladores Principios y Prctica. Thomson. 2004. Scott, M.L. Programming Language Pragmatics. Morgan Kaufmann. 2000.
Francisco Ortn Soler
Procesadores de Lenguaje
Francisco Ortn Soler
Universidad de Oviedo
16