Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

Slides:



Advertisements
Presentaciones similares
Diseño y análisis de algoritmos
Advertisements

GRAFOS Presentado por: Oscar Leonardo Ramírez John Freddy Sandoval
Nuestro reto es educar al pensamiento, para que razone de acuerdo a ciertas reglas; con ello podremos ser más eficientes al momento en que ordenamos.
Unidad 1 DISEÑO DE ALGORITMOS ING. Nelwi Baez. MSC
Introducción a los Algoritmos
ESTRUCTURAS LINEALES UNIDAD 3.
MATEMÁTICAS DISCRETAS.
Técnico en programación de Software
Unidad 4. Estructuras de selección
Investigación de Operaciones II
Investigación de Operaciones II
Concepto de programa. Directorio Concepto de programa. Analisis del problema. Resolucion del problema. Desarroollo de un programa. Partes constitutivas.
Unidad académica: Ingenierías
UNIVERSIDAD LATINA (UNILA) IV. IMPLANTACION DE ALGORITMOS.
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Traducción dirigida por la Sintaxis
Investigación Operativa
Algebra Booleana y Compuertas Lógicas

Tema 3. Optimización de Código
METODOLOGIA DE LA PROGRAMACION
Circuitos Combinacionales Comunes
Teoría de lenguajes y compiladores
TÉCNICO EN PROGRAMACIÓN DE SOFTWARE Instructor: Ingeniero Adrián Guerrero Taborda
Answering Queries Using Views (Levy, Mendelzon, Sagiv, Srivastava) Javier López C.
ESTRUCTURAS DE CONTROL
Analisis y Diseño de Algoritmos Tema: Grafos 3ra Parte
Taller de Base de Datos Búsqueda de Reglas de Asociación Agrawal, Imielinski, Swami. “Mining Association Rules Between Sets for items in Large Databases”,
GRAFOS HUGO ARAYA CARRASCO.
Proceso de información en la computadora
Asignación de Registros
TRANSFORMACIONES LINEALES PARA REDES NEURALES ARTIFICIALES
Solución de problemas por Búsqueda
Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation.
Estructura de Datos y Algoritmos
M.S.C. Ivette Hernández Dávila
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.),
Diseño y análisis de algoritmos
Asignación de Espacio No Contiguo
Tipos de Datos. Entrada-Salida.. La entrada-salida (I/O) le permite a un programa comunicarse con el mundo exterior. Esta comunicación puede realizarse.
Planteos Recursivos Resolución de Problemas y Algoritmos
M. en C. José Andrés Vázquez Flores
Álgebra de Boole Tema 5.
Unidad 1: FUNDAMENTOS DE COMPUTACIÓN Y PSEUDOLENGUAJE
ALGORITMOS La palabra algoritmo se deriva de la traducción al latín de la palabra árabe alkhowarizmi, nombre de un matemático y astrónomo árabe que escribió.
1 Compilación, pereza y expresiones let(rec) 2 Compilando un programa Describiremos un compilador para la máquina minimal usando un conjunto de esquemas.
Parte I. Estructuras de Datos.
Capa de Red4-1 Capítulo 4: Capa de Red  4. 1 Introducción  4.2 Circuitos virtuales y redes de datagramas  4.3 ¿Qué hay dentro de un router?  4.4 IP:
Elementos básicos para el desarrollo de algoritmos
1 AFDAFN AF Gramáticas lineales derecha Expresiones regulares Tema 2 Método de los AF Método de las derivadas Sistemas de Ecuaciones Tema 1.
TEMA 5: El problema del flujo con costo mínimo
CALCULO DIFERENCIAL E INTEGRAL TAREA 12
Objetivo Mostrar los fundamentos de la programación a través de ejemplos y prácticas utilizadas cotidianamente en el desarrollo de aplicaciones.
Flujo en redes Def: una red N es un grafo orientado conexo que tiene dos nodos distinguidos una fuente s con grado de salida positivo y un sumidero t con.
ELEMENTOS DE COMPUTACIÓN Profesor: Guillermo Figueroa
ALGORITMO QUE ES ??.
UNIDAD 2 Grafos Árboles abarcadores mínimos Caminos más cortos.
Teoría de lenguajes y compiladores
Reglas Básicas del Álgebra de Boole
Elaboración de algoritmos usando lógica de programación
Ingeniería Mecánica Estática
¿QUE ES EL DIAGRAMA DE ESTADO ?
Introducción a los TADs
Organización del Computador I Verano Aritmética (2 de 3) Basado en el capítulo 4 del libro de Patterson y Hennessy Verano 2004 Profesora Borensztejn.
* Cuando nos permite desarrollar un programa que necesitamos para tomar un conjunto de buenas prácticas para hacer eso. Esto se debe a que podemos ahorrar.
PROGRAMACIÓN Grupo de Modelamiento de Sistemas
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) V. GESTIÓN DE TIPOS Y GENERACIÓN DE CÓDIGOS.
Tema 1 : Introducción y errores
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) IV. IMPLANTACION DE ALGORITMOS.
Transcripción de la presentación:

Compiladores Análisis de Flujo de Datos

2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones disponibles Bit sets Formulando un problema de análisis de flujo de datos Cadenas DU Forma SSA

3 Representando el control de flujo del progama Forma un grafo Un grafo muy grande Crear Bloques Básicos Un Grafo de Control de Flujo (CFG) conecta los Bloques Básicos

4 Grafo de Control de Flujo (CFG) Control-Flow Graph G = Nodos(N): Bloques Básicos Edges(E): (x,y)  E ssi la primera instrucción en el bloque básico y sigue a la última instrucción en el bloque básico x

5 Identificando loops de estructuras recursivas Identificar aristas de retorno Encontrar los nodos y aristas en el loop dado por la arista de retorno Aparte de la arista de retorno –Aristas entrantes sólo al bloque básico con la cabeza de la arista de retorno –Una arista saliente del bloque básico a la cola de la arista de retorno ¿Cómo encontramos las aristas de retorno? bb1 bb2 bb4bb3 bb5 bb6

6 Computando Dominators Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

7 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

8 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

9 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

10 Computando Dominators bb1 bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

11 Computando Dominators bb1 bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

12 Computando Dominators bb1 bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

13 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb1 bb2 bb3 bb4 bb5 bb6 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

14 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

15 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb3 bb4 bb5 bb6 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

16 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb3 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

17 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb3 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

18 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb3 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb3 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

19 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb3 bb5 bb6 bb1 bb2 bb3 bb4 bb5 bb6 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb3 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

20 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb3 bb5 bb6 bb1 bb2 bb3 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

21 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb3 bb5 bb6 bb1 bb2 bb3 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

22 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb3 bb5 bb6 bb1 bb2 bb3 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

23 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb3 bb5 bb6 bb1 bb2 bb3 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

24 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb3 bb5 bb6 bb1 bb2 bb3 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

25 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb3 bb5 bb6 bb1 bb2 bb3 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

26 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb3 bb5 bb6 bb1 bb2 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

27 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb3 bb5 bb6 bb1 bb2 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

28 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb5 bb6 bb1 bb2 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

29 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb5 bb6 bb1 bb2 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

30 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb5 bb6 bb1 bb2 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

31 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb5 bb6 bb1 bb2 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

32 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb5 bb6 bb1 bb2 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

33 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb5 bb6 bb1 bb2 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

34 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb5 bb6 bb1 bb2 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

35 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb5 bb6 bb1 bb2 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

36 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb5 bb6 bb1 bb2 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

37 Computando Dominators bb2 bb4bb3 bb5 bb6 {bb1} bb1 bb2 bb4 bb1 bb2 bb3 bb1 bb2 bb1 bb2 bb5 bb6 bb1 bb2 bb5 Algoritmo –Hacer que el conjunto de dominators del nodo de entrada sólo contenga ese nodo –Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos –Visitar los nodos en cualquier orden –Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual –Repetir hasta que no hayan cambios

38 Computando Dominators Lo que acabamos de ver fue un algoritmo iterativo de análisis de flujo de datos en acción –Inicializar todos los nodos a un valor dado –Visitar los nodos en algún orden –Calcular el valor del nodo –Repetir hasta que no haya cambios

39 Análisis de Flujo de Datos Análisis Local –Analizar el efecto de cada instrucción –Componer efectos de instrucciones para derivar información desde el principio del bloque básico a cada instrucción Análisis de Flujo de Datos –Iterativamente propagar la información del bloque básico sobre el grafo de control de flujo hasta que no hayan cambios –Calcular el valor final al principio del bloque básico Propagación Local –Propagar la información desde el principio del bloque básico a cada instrucción

40 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones disponibles Bit sets Formulando un problema de análisis de flujo de datos Cadenas DU Forma SSA

41 Ejemplo: Expresiones Disponibles Una expresión está disponible ssi –Todos los caminos que llegan al punto actual pasan a través del punto donde se definió la expresión –Ninguna variable usada en la expresión fue modificada entre el punto en que se definió la expresión y el punto actual

42 Ejemplo: Expresiones Disponibles a = b + c d = e + f f = a + c g = a + c j = a + b + c + d b = a + d h = c + f

43 ¿Está la expresión disponible? a = b + c d = e + f f = a + c g = a + c j = a + b + c + d b = a + d h = c + f Sí!

44 ¿Está la expresión disponible? a = b + c d = e + f f = a + c g = a + c j = a + b + c + d b = a + d h = c + f Sí!

45 ¿Está la expresión disponible? a = b + c d = e + f f = a + c g = a + c j = a + b + c + d b = a + d h = c + f No!

46 ¿Está la expresión disponible? a = b + c d = e + f f = a + c g = a + c j = a + b + c + d b = a + d h = c + f No!

47 ¿Está la expresión disponible? a = b + c d = e + f f = a + c g = a + c j = a + b + c + d b = a + d h = c + f No!

48 ¿Está la expresión disponible? a = b + c d = e + f f = a + c g = a + c j = a + b + c + d b = a + d h = c + f Sí!

49 ¿Está la expresión disponible? a = b + c d = e + f f = a + c g = a + c j = a + b + c + d b = a + d h = c + f Sí!

50 Uso de Expresiones Disponibles a = b + c d = e + f f = a + c g = a + c j = a + b + c + d b = a + d h = c + f

51 Uso de Expresiones Disponibles a = b + c d = e + f f = a + c g = a + c j = a + b + c + d b = a + d h = c + f

52 Uso de Expresiones Disponibles a = b + c d = e + f f = a + c g = a + c j = a + b + c + d b = a + d h = c + f

53 Uso de Expresiones Disponibles a = b + c d = e + f f = a + c g = f j = a + b + c + d b = a + d h = c + f

54 Uso de Expresiones Disponibles a = b + c d = e + f f = a + c g = f j = a + b + c + d b = a + d h = c + f

55 Uso de Expresiones Disponibles a = b + c d = e + f f = a + c g = f j = a + c + b + d b = a + d h = c + f

56 Uso de Expresiones Disponibles a = b + c d = e + f f = a + c g = f j = f + b + d b = a + d h = c + f

57 Uso de Expresiones Disponibles a = b + c d = e + f f = a + c g = f j = f + b + d b = a + d h = c + f

58 Resumen Overview de análisis de control de flujo Expresiones Disponibles Algoritmo para calcular expresiones disponibles Bit sets Formulando un problema de análisis de flujo de datos Cadenas DU Forma SSA 5

59 Algoritmo para Expresiones Disponibles Asignar un número a cada expresión

60 b = a + d h = c + f g = a + c Ejemplo: Expresiones Disponibles a = b + c d = e + f f = a + c j = a + b + c + d

61 b = a + d h = c + f g = a + c Ejemplo: Expresiones Disponibles a = b + c d = e + f f = a + c j = a + b + c + d

62 Conjuntos Gen y Kill Conjunto Gen –Si el bloque básico actual (o instrucción) crea la definición, está en el conjunto gen –El elemento debe estar en la salida del bloque básico siempre Conjunto Kill –Si el bloque básico actual (o instrucción) redefine una variable en la expresión, está en el conjunto kill –La expresión no es válida después de esto

63 Algoritmo para Expresiones Disponibles Asignar un número a cada expresión Calcular conjuntos gen y kill para cada expresión 15

64 Conjuntos Gen y Kill a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 j = a + b + c + d 7 b = a + d 5 h = c + f 6

65 Conjuntos Gen y Kill a = b + c 1 d = e + f 2 f = a + c 3 a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 j = a + b + c + d 7 b = a + d 5 h = c + f 6

66 a = b + c 1 gen = { b + c } kill = { cualquier expr con a } d = e + f 2 gen = { e + f } kill = { cualquier expr con d } f = a + c 3 gen = { a + c } kill = {cualquier expr con f } Conjuntos Gen y Kill a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 j = a + b + c + d 7 b = a + d 5 h = c + f 6

67 a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } d = e + f 2 gen = { 2 } kill = { 5, 7 } f = a + c 3 gen = { 3 } kill = { 2, 6 } Conjuntos Gen y Kill a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 j = a + b + c + d 7 b = a + d 5 h = c + f 6

68 Algoritmo para Expresiones Disponibles Asignarle un número a cada expresión Calcular conjuntos gen y kill para cada expresión Calcular conjuntos gen y kill agregados para cada bloque básico 16

69 Conjuntos Gen y Kill agregados a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } d = e + f 2 gen = { 2 } kill = { 5, 7 } f = a + c 3 gen = { 3 } kill = { 2, 6 } Propagar todos los conjuntos gen y kill desde el comienzo del bloque básico hasta el final del bloque básico

70 Conjunto Gen agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } InGEN set OutGEN set OutGEN =

71 Conjunto Gen agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } InGEN set OutGEN set El conjunto gen en la expresión actual debe estar en el conjunto OutGEN OutGEN = gen

72 Conjunto Gen agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } InGEN set OutGEN set El conjunto gen en la expresión actual debe estar en el conjunto OutGEN Cualquier expresión en el conjunto InGEN que no está en el conjunto kill debe estar en el conjunto OutGEN OutGEN = gen  (InGEN - kill)

73 Conjunto Gen agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } d = e + f 2 gen = { 2 } kill = { 5, 7 } f = a + c 3 gen = { 3 } kill = { 2, 6 }

74 Conjunto Gen agregado InGEN = { } a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } OutGEN = gen  (InGEN - kill) d = e + f 2 gen = { 2 } kill = { 5, 7 } f = a + c 3 gen = { 3 } kill = { 2, 6 }

75 Conjunto Gen agregado InGEN = { } a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } OutGEN = { 1 }  ({ } - { 3,4,5,7}) d = e + f 2 gen = { 2 } kill = { 5, 7 } f = a + c 3 gen = { 3 } kill = { 2, 6 }

76 Conjunto Gen agregado InGEN = { } a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } OutGEN = { 1 } d = e + f 2 gen = { 2 } kill = { 5, 7 } f = a + c 3 gen = { 3 } kill = { 2, 6 }

77 Conjunto Gen agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } InGEN = { 1 } d = e + f 2 gen = { 2 } kill = { 5, 7 } OutGEN = gen  (InGEN - kill) f = a + c 3 gen = { 3 } kill = { 2, 6 }

78 Conjunto Gen agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } InGEN = { 1 } d = e + f 2 gen = { 2 } kill = { 5, 7 } OutGEN = { 2 }  ({ 1 } - { 5,7 }) f = a + c 3 gen = { 3 } kill = { 2, 6 }

79 Conjunto Gen agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } InGEN = { 1 } d = e + f 2 gen = { 2 } kill = { 5, 7 } OutGEN = { 1, 2 } f = a + c 3 gen = { 3 } kill = { 2, 6 }

80 Conjunto Gen agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } d = e + f 2 gen = { 2 } kill = { 5, 7 } InGEN = { 1, 2 } f = a + c 3 gen = { 3 } kill = { 2, 6 } OutGEN = gen  (InGEN - kill)

81 Conjunto Gen agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } d = e + f 2 gen = { 2 } kill = { 5, 7 } InGEN = { 1, 2 } f = a + c 3 gen = { 3 } kill = { 2, 6 } OutGEN = { 3 }  ({ 1,2 } - { 2,6 })

82 Conjunto Gen agregado A = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } d = e + f 2 gen = { 2 } kill = { 5, 7 } InGEN = { 1, 2 } f = a + c 3 gen = { 3 } kill = { 2, 6 } OutGEN = { 1, 3 }

83 Conjunto Gen agregado A = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } d = e + f 2 gen = { 2 } kill = { 5, 7 } f = a + c 3 gen = { 3 } kill = { 2, 6 } GEN = { 1, 3 }

84 Conjunto Kill agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } InKILL set OutKILL set OutKILL =

85 Conjunto Kill agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } InKILL set OutKILL set El conjunto kill de la expresión actual debe estar en el conjunto OutKILL OutKILL = kill

86 Conjunto Kill agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } InKILL set OutKILL set El conjunto kill de la expresión actual debe estar en el conjunto OutKILL Cualquier conjunto en el InKILL debe estar en el OutKILL OutKILL = kill  InKILL

87 Conjunto Kill agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } d = e + f 2 gen = { 2 } kill = { 5, 7 } f = a + c 3 gen = { 3 } kill = { 2, 6 }

88 Conjunto Kill agregado InKILL = { } a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } OutKILL = kill  InKILL d = e + f 2 gen = { 2 } kill = { 5, 7 } f = a + c 3 gen = { 3 } kill = { 2, 6 }

89 Conjunto Kill agregado InKILL = { } a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } OutKILL = { 3,4,5,7 }  { } d = e + f 2 gen = { 2 } kill = { 5, 7 } f = a + c 3 gen = { 3 } kill = { 2, 6 }

90 Conjunto Kill agregado InKILL = { } a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } OutKILL = { 3,4,5,7 } d = e + f 2 gen = { 2 } kill = { 5, 7 } f = a + c 3 gen = { 3 } kill = { 2, 6 }

91 Conjunto Kill agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } InKILL = { 3,4,5,7 } d = e + f 2 gen = { 2 } kill = { 5, 7 } OutKILL = kill  InKILL f = a + c 3 gen = { 3 } kill = { 2, 6 }

92 Conjunto Kill agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } InKILL = { 3,4,5,7 } d = e + f 2 gen = { 2 } kill = { 5, 7 } OutKILL = { 5,7 }  { 3,4,5,7 } f = a + c 3 gen = { 3 } kill = { 2, 6 }

93 Conjunto Kill agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } InKILL = { 3,4,5,7 } d = e + f 2 gen = { 2 } kill = { 5, 7 } OutKILL = { 3,4,5,7 } f = a + c 3 gen = { 3 } kill = { 2, 6 }

94 Conjunto Kill agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } d = e + f 2 gen = { 2 } kill = { 5, 7 } InKILL = { 3,4,5,7 } f = a + c 3 gen = { 3 } kill = { 2, 6 } OutKILL = kill  InKILL

95 Conjunto Kill agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } d = e + f 2 gen = { 2 } kill = { 5, 7 } InKILL = { 3,4,5,7 } f = a + c 3 gen = { 3 } kill = { 2, 6 } OutKILL = { 3,4,5,7 }  { 2,6 }

96 Conjunto Kill agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } d = e + f 2 gen = { 2 } kill = { 5, 7 } InKILL = { 3,4,5,7 } f = a + c 3 gen = { 3 } kill = { 2, 6 } OutKILL = { 2,3,4,5,6,7 }

97 Conjunto Kill agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } d = e + f 2 gen = { 2 } kill = { 5, 7 } f = a + c 3 gen = { 3 } kill = { 2, 6 } KILL = { 2, 3, 4, 5, 6, 7 }

98 Conjuntos Gen y Kill agregados a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 j = a + b + c + d 7 b = a + d 5 h = c + f 6 Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { }

99 Algoritmo para Expresiones Disponibles Asignar un número a cada expresión Calcular conjuntos gen y kill para cada instrucción Calcular conjuntos gen y kill agregados para cada bloque básico Inicializar conjunto de disponibles de cada bloque básico con todas las expresiones 20

100 Conjuntos Gen y Kill agregados a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 j = a + b + c + d 7 b = a + d 5 h = c + f 6 Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {1,2,3,4,5,6,7} OUT = {1,2,3,4,5,6,7}

101 Algoritmo para Expresiones Disponibles Asignar un número a cada expresión Calcular conjuntos gen y kill para cada instrucción Calcular conjuntos gen y kill agregados para cada bloque básico Inicializar conjunto de disponibles de cada bloque básico con todas las expresiones Iterativamente propagar el conjunto de expresiones disponibles por el CFG

102 Propagar conjunto de disponibles gen = { … } kill = {... } IN set OUT set OUT =

103 Propagar conjunto de disponibles gen = { … } kill = {... } IN set OUT set Si la expresión es generada (en el conjunto gen) entonces está disponible al final –Debe estar en el conjunto OUT OUT = gen

104 Propagar conjunto de disponibles gen = { … } kill = {... } IN set OUT set Si la expresión es generada (en el conjunto gen) entonces está disponible al final –Debe estar en el conjunto OUT Cualquier expresión disponible en la entrada (en el conjunto IN) y que no está en el conjunto kill debe estar disponible al final OUT = gen  (IN - kill)

105 Propagar conjunto de disponibles IN set OUT = gen  (IN - kill) OUT set IN =

106 Propagar conjunto de disponibles IN set La expresión está disponible sólo está disponible en todos los caminos de entrada OUT = gen  (IN - kill) OUT set IN =  OUT

107 Conjuntos Gen y Kill agregados a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 j = a + b + c + d 7 b = a + d 5 h = c + f 6 Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {1,2,3,4,5,6,7} OUT = {1,2,3,4,5,6,7} OUT = gen  (IN - kill) IN =  OUT

108 Conjuntos Gen y Kill agregados g = a + c 4 j = a + b + c + d 7 b = a + d 5 h = c + f 6 Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {1,2,3,4,5,6,7} OUT = {1,2,3,4,5,6,7} OUT = gen  (IN - kill) IN =  OUT a = b + c 1 d = e + f 2 f = a + c 3

109 Conjuntos Gen y Kill agregados g = a + c 4 j = a + b + c + d 7 b = a + d 5 h = c + f 6 Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,2,3,4,5,6,7} OUT = {1,2,3,4,5,6,7} OUT = gen  (IN - kill) IN =  OUT a = b + c 1 d = e + f 2 f = a + c 3

110 Conjuntos Gen y Kill agregados g = a + c 4 j = a + b + c + d 7 b = a + d 5 h = c + f 6 Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,2,3,4,5,6,7} OUT = {1,3} OUT = {1,2,3,4,5,6,7} OUT = gen  (IN - kill) IN =  OUT a = b + c 1 d = e + f 2 f = a + c 3

111 Conjuntos Gen y Kill agregados j = a + b + c + d 7 b = a + d 5 h = c + f 6 Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,2,3,4,5,6,7} OUT = {1,3} OUT = {1,2,3,4,5,6,7} OUT = gen  (IN - kill) IN =  OUT g = a + c 4 a = b + c 1 d = e + f 2 f = a + c 3

112 Conjuntos Gen y Kill agregados j = a + b + c + d 7 b = a + d 5 h = c + f 6 Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {1,2,3,4,5,6,7} OUT = {1,3} OUT = {1,2,3,4,5,6,7} OUT = gen  (IN - kill) IN =  OUT g = a + c 4 a = b + c 1 d = e + f 2 f = a + c 3

113 Conjuntos Gen y Kill agregados j = a + b + c + d 7 b = a + d 5 h = c + f 6 Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {1,2,3,4,5,6,7} OUT = {1,3} OUT = {1,3,4} OUT = {1,2,3,4,5,6,7} OUT = gen  (IN - kill) IN =  OUT g = a + c 4 a = b + c 1 d = e + f 2 f = a + c 3

114 Conjuntos Gen y Kill agregados b = a + d 5 h = c + f 6 Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {1,2,3,4,5,6,7} OUT = {1,3} OUT = {1,3,4} OUT = {1,2,3,4,5,6,7} OUT = gen  (IN - kill) IN =  OUT a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 j = a + b + c + d 7

115 Conjuntos Gen y Kill agregados b = a + d 5 h = c + f 6 Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {1,2,3,4,5,6,7} IN = {1,3,4} OUT = {1,3} OUT = {1,3,4} OUT = {1,2,3,4,5,6,7} OUT = gen  (IN - kill) IN =  OUT a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 j = a + b + c + d 7

116 Conjuntos Gen y Kill agregados b = a + d 5 h = c + f 6 Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {1,2,3,4,5,6,7} IN = {1,3,4} OUT = {1,3} OUT = {1,3,4} OUT = {1,2,3,4,5,6,7} OUT = {1,3,4,7} OUT = gen  (IN - kill) IN =  OUT a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 j = a + b + c + d 7

117 Conjuntos Gen y Kill agregados Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {1,2,3,4,5,6,7} IN = {1,3,4} OUT = {1,3} OUT = {1,3,4} OUT = {1,2,3,4,5,6,7} OUT = {1,3,4,7} OUT = gen  (IN - kill) IN =  OUT a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 b = a + d 5 h = c + f 6 j = a + b + c + d 7

118 Conjuntos Gen y Kill agregados Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {1,3,4} OUT = {1,3} OUT = {1,3,4} OUT = {1,2,3,4,5,6,7} OUT = {1,3,4,7} OUT = gen  (IN - kill) IN =  OUT a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 b = a + d 5 h = c + f 6 j = a + b + c + d 7

119 Conjuntos Gen y Kill agregados Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {1,3,4} OUT = {1,3} OUT = {1,3,4} OUT = {3,5,6} OUT = {1,3,4,7} OUT = gen  (IN - kill) IN =  OUT a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 b = a + d 5 h = c + f 6 j = a + b + c + d 7

120 Conjuntos Gen y Kill agregados Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {1,3,4} OUT = {1,3} OUT = {1,3,4} OUT = {3,5,6} OUT = {1,3,4,7} OUT = gen  (IN - kill) IN =  OUT a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 j = a + b + c + d 7 b = a + d 5 h = c + f 6

121 Conjuntos Gen y Kill agregados Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {1,3,4} OUT = {1,3} OUT = {1,3,4} OUT = {3,5,6} OUT = {1,3,4,7} OUT = gen  (IN - kill) IN =  OUT g = a + c 4 j = a + b + c + d 7 b = a + d 5 h = c + f 6 a = b + c 1 d = e + f 2 f = a + c 3

122 Conjuntos Gen y Kill agregados Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {1,3,4} OUT = {1,3} OUT = {1,3,4} OUT = {3,5,6} OUT = {1,3,4,7} OUT = gen  (IN - kill) IN =  OUT j = a + b + c + d 7 b = a + d 5 h = c + f 6 a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4

123 Conjuntos Gen y Kill agregados Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {1,3,4} OUT = {1,3} OUT = {1,3,4} OUT = {3,5,6} OUT = {1,3,4,7} OUT = gen  (IN - kill) IN =  OUT b = a + d 5 h = c + f 6 a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 j = a + b + c + d 7

124 Conjuntos Gen y Kill agregados Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {3} OUT = {1,3} OUT = {1,3,4} OUT = {3,5,6} OUT = {1,3,4,7} OUT = gen  (IN - kill) IN =  OUT b = a + d 5 h = c + f 6 a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 j = a + b + c + d 7

125 Conjuntos Gen y Kill agregados Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {3} OUT = {1,3} OUT = {1,3,4} OUT = {3,5,6} OUT = {3,7} OUT = gen  (IN - kill) IN =  OUT b = a + d 5 h = c + f 6 a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 j = a + b + c + d 7

126 Conjuntos Gen y Kill agregados Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {3} OUT = {1,3} OUT = {1,3,4} OUT = {3,5,6} OUT = {3,7} OUT = gen  (IN - kill) IN =  OUT a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 b = a + d 5 h = c + f 6 j = a + b + c + d 7

127 Conjuntos Gen y Kill agregados Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {3} OUT = {1,3} OUT = {1,3,4} OUT = {3,5,6} OUT = {3,7} OUT = gen  (IN - kill) IN =  OUT a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 b = a + d 5 h = c + f 6 j = a + b + c + d 7

128 Conjuntos Gen y Kill agregados Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {3} OUT = {1,3} OUT = {1,3,4} OUT = {3,5,6} OUT = {3,7} OUT = gen  (IN - kill) IN =  OUT a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 j = a + b + c + d 7 b = a + d 5 h = c + f 6

129 Conjuntos Gen y Kill agregados Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {3} OUT = {1,3} OUT = {1,3,4} OUT = {3,5,6} OUT = {3,7} OUT = gen  (IN - kill) IN =  OUT g = a + c 4 j = a + b + c + d 7 b = a + d 5 h = c + f 6 a = b + c 1 d = e + f 2 f = a + c 3

130 Conjuntos Gen y Kill agregados Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {3} OUT = {1,3} OUT = {1,3,4} OUT = {3,5,6} OUT = {3,7} OUT = gen  (IN - kill) IN =  OUT a = b + c 1 d = e + f 2 f = a + c 3 j = a + b + c + d 7 b = a + d 5 h = c + f 6 g = a + c 4

131 Conjuntos Gen y Kill agregados Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {3} OUT = {1,3} OUT = {1,3,4} OUT = {3,5,6} OUT = {3,7} OUT = gen  (IN - kill) IN =  OUT a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 b = a + d 5 h = c + f 6 j = a + b + c + d 7

132 Conjuntos Gen y Kill agregados Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {3} OUT = {1,3} OUT = {1,3,4} OUT = {3,5,6} OUT = {3,7} OUT = gen  (IN - kill) IN =  OUT a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 j = a + b + c + d 7 b = a + d 5 h = c + f 6

133 Conjuntos Gen y Kill agregados Gen = { 1, 3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5, 6 } Kill = { 1, 7 } Gen = { 7 } Kill = { } IN = {} IN = {1,3} IN = {3} OUT = {1,3} OUT = {1,3,4} OUT = {3,5,6} OUT = {3,7} OUT = gen  (IN - kill) IN =  OUT a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 j = a + b + c + d 7 b = a + d 5 h = c + f 6

134 Algoritmo para Expresiones Disponibles Asignar un número a cada expresión Calcular conjuntos gen y kill para cada instrucción Calcular conjuntos gen y kill agregados para cada bloque básico Inicializar conjunto de disponibles en cada bloque básico con todas las expresiones Iterativamente propagar expresiones disponibles sobre el CFG Propagar dentro del bloque básico 28

135 Propagar dentro del bloque básico a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } IN set OUT set Comenzar con el conjunto IN de expresiones disponibles Linealmente propagar hacia abajo del bloque básico –Igual que el paso de data-flow –Una sola pasada ya que no hay aristas de retorno OUT = gen  (IN - kill)

136 ae = { 1, 3 } g = a + c 4 ae = { 1, 3, 4 } Expresiones Disponibles ae = { } a = b + c 1 ae = { 1 } d = e + f 2 ae = { 1, 2 } f = a + c 3 ae = { 1, 3 } ae = { 3 } j = a + b + c + d 7 ae = { 3, 7 } ae = { 3 } b = a + d 5 ae = { 3, 5 } h = c + f 6 ae = { 3, 5, 6 }

137 Resumen Overview de análisis de control de flujo Expresiones Disponibles Algoritmo para calcular expresiones disponibles Bit sets Formulando un problema de análisis de flujo de datos Cadenas DU Forma SSA 5

138 Bitsets Asignar un bit a cada elemento del conjunto –Unión  OR –Intersección  AND –Subtracción  NEGATE y AND Implementación rápida –32 elementos empacados en cada word –AND y OR son ambas una instrucción

139 Conjunto Kill vrs. Conjunto Preserve Conjuntos Kill –OUT = gen  (IN - kill) –Usando vectores de bits: OUT = gen  (IN - kill) –Subtracción  NEGATE y AND –OUT = gen  (IN   kill) Conjuntos Preserve –Usados en el libro de la Ballena –PRSV = Entire Set - KILL –OUT = gen  (IN  prsv) –OUT = gen  (IN  prsv)

140 Conjuntos Gen y Kill agregados a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 j = a + b + c + d 7 b = a + d 5 h = c + f 6 Gen = { 1,3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5,6 } Kill = { 1,7 } Gen = { 7 } Kill = { }

141 Conjuntos Gen y Kill agregados a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 j = a + b + c + d 7 b = a + d 5 h = c + f 6 Gen = { 1,3} Kill = { 2,3,4,5,6,7 } Gen = { 4 } Kill = { } Gen = { 5,6 } Kill = { 1,7 } Gen = { 7 } Kill = { } Se requieren 7 bits por conjunto

142 Conjuntos Gen y Kill agregados a = b + c 1 d = e + f 2 f = a + c 3 g = a + c 4 j = a + b + c + d 7 b = a + d 5 h = c + f 6 Gen = Kill = Gen = Kill = Gen = Kill = Gen = Kill = Se requieren 7 bits por conjunto

143 Resumen Overview de análisis de control de flujo Expresiones Disponibles Algoritmo para calcular expresiones disponibles Bit sets Formulando un problema de análisis de flujo de datos Cadenas DU Forma SSA 5

144 Formulando un problema de análisis de flujo de datos Independiente del problema –Calcular conjuntos gen y kill para bloque básico –Propagación iterativa de información hasta que converja –Propagación de información dentro del bloque básico

145 Formulando un problema de análisis de flujo de datos Lattice –Estructuras abstractas sobre las que opera el análisis ejemplo: conjuntos de expresiones disponibles Funciones de flujo –Cómo cada control de flujo y construcciones computacionales afectan las estructuras abstractas Ejemplo: la ecuación OUT de cada statement

146 Lattice Una lattice L consiste de –Un conjunto de valores – Dos operaciones: meet(  ) y join (  ) –Un valor superior [top] ( T ) y un valor inferior [bottom] (  )

147 Lattice Ejemplo: el lattice para el problema de “reaching definition” cuando sólo hay 3 definiciones { d1, d2 } { d2, d3 } { d1 } { d3 }  = { } T = { d1, d2, d3 } { d1, d3 } { d2 }

148 Operaciones Meet y Join Meet y Join forman una “cerradura” –Para todos a, b  L existen c y d  L únicos, tal que a  b = c a  b = d Meet y Join con conmutativas –  a  b = b  a a  b = b  a Meet y Join son asociativas –  (a  b)  c = b  (a  c) (a  b)  c = b  (a  c) Existe un único elemento ( T ) [top] y un único elemento (  ) [bottom] en L tal que –a   =  a  T = T

149 Operaciones Meet y Join { d1, d2 } { d2, d3 } { d1 } { d3 }  = { } T = { d1, d2, d3 } { d1, d3 } { d2 } { d1, d2 }  { d2, d3 } = ???

150 Operaciones Meet y Join { d1, d2 } { d2, d3 } { d1 } { d3 }  = { } T = { d1, d2, d3 } { d1, d3 } { d2 } { d1, d2 }  { d2, d3 } = ???

151 Operaciones Meet y Join { d1, d2 } { d2, d3 } { d1 } { d3 }  = { } T = { d1, d2, d3 } { d1, d3 } { d2 } { d1, d2 }  { d2, d3 } = ???

152 Operaciones Meet y Join { d1, d2 } { d2, d3 } { d1 } { d3 }  = { } T = { d1, d2, d3 } { d1, d3 } { d2 } { d1, d2 }  { d2, d3 } = { d2 }

153 Operaciones Meet y Join { d1, d2 } { d2, d3 } { d1 } { d3 }  = { } T = { d1, d2, d3 } { d1, d3 } { d2 } { d1, d2 }  { d3 } = ???

154 Operaciones Meet y Join { d1, d2 } { d2, d3 } { d1 } { d3 }  = { } T = { d1, d2, d3 } { d1, d3 } { d2 } { d1, d2 }  { d3 } = ???

155 Operaciones Meet y Join { d1, d2 } { d2, d3 } { d1 } { d3 }  = { } T = { d1, d2, d3 } { d1, d3 } { d2 } { d1, d2 }  { d3 } = ???

156 Operaciones Meet y Join { d1, d2 } { d2, d3 } { d1 } { d3 }  = { } T = { d1, d2, d3 } { d1, d3 } { d2 } { d1, d2 }  { d3 } = ???

157 Operaciones Meet y Join { d1, d2 } { d2, d3 } { d1 } { d3 }  = { } T = { d1, d2, d3 } { d1, d3 } { d2 } { d1, d2 }  { d3 } = { d1, d2, d3 }

158 Operaciones Meet y Join Operación Meet –Intersección de conjuntos –Seguir las líneas hacia abajo desde los dos elementos en el lattice hasta que se encuentren en un sólo elemento único Operación Join –Unión de conjuntos –Hay un sólo elemento en el lattice desde el que hay un camino hacia abajo (sin segmentos compartidos) hacia ambos elementos

159 Orden Parcial Definimos a  b sí y sólo sí a  b = b Propiedades –Reflexivo: a  a –Antisimétrico: a  b y b  a  a = b –Transitivo: a  b y b  c  a  c

160 Orden Parcial Definimos a  b sí y sólo sí a  b = b Propiedades –a  b  existe un camino desde b hasta a { d1, d2 } { d2, d3 } { d1 } { d3 }  = { } T = { d1, d2, d3 } { d1, d3 } { d2 }

161 Alto del Lattice El alto del lattice es la cadena ascendiente más larga en el lattice –( T, a, b, c, …,  )

162 Alto del Lattice El alto del lattice es la cadena ascendiente más larga en el lattice –( T, a, b, c, …,  ) –Alto es ( T, {d2,d3}, {d3},  ) = 4 { d1, d2 } { d2, d3 } { d1 } { d3 }  = { } T = { d1, d2, d3 } { d1, d3 } { d2 }

163 Funciones de Flujo Ejemplo: OUT = f(IN) f: L  L donde L es un lattice Propiedades –Monótona:  a,b  L a  b  f(a)  f(b) Punto Fijo –Un punto fijo es un elemento a  L tal que f(a) = a

164 Intuición acerca de Finalización El análisis de flujo de datos comienza asumiendo los valores más optimistas ( T ) Cada etapa aplica funciones de flujo –Vnew  Vprev –Se mueve hacia abajo en el lattice Hasta que sea estable (valores no cambian) –Se llega a un punto fijo en cada bloque básico Lattice tiene un alto finito  debe terminar

165 Resumen Overview de análisis de control de flujo Expresiones Disponibles Algoritmo para calcular expresiones disponibles Bit sets Formulando un problema de análisis de flujo de datos Cadenas DU Forma SSA 5

166 Cadenas Def-Use y Use-Def Cadena Def-Use (DU) –Conecta la definición de cada variable con todos los posibles usos de esa variable Cadena Use-Def (UD) –Conecta el uso de una variable con todas las posibles definiciones de esa variable

167 Formulación del problema de flujo de datos para cadena DU Lattice: El conjunto de definiciones –Bitvector format: un bit para cada definición en el procedimiento Dirección del Flujo: Flujo hacia adelante Funciones de Flujo: –gen = { b 0 …b n | b k = 1 ssi la k-ésima definición} –kill = { b 0 …b n | b k = 1 ssi k-ésima variable es redefinida } –OUT = gen  (IN - kill) –IN =  OUT

168 Formulen el problema de flujo de datos para la cadena UD Lattice: –Bitvector format: Dirección del Flujo: Flujo hacia adelante/atrás Funciones de flujo: –gen = { b 0 …b n | b k = 1 } –kill = { b 0 …b n | b k = 1 } –OUT = –IN =

169 Ejemplo DU entry k = false i = 1 j = 2 j = j * 2 k = true i = i + 1 print ji = i + 1 k exit i < n

170 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n

171 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 }

172 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { } IN = { } OUT = IN = { } OUT = { } IN = { }

173 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { } IN = { } OUT = IN = { } OUT = { } IN = { }

174 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { } IN = { } OUT = IN = { } OUT = { } IN = { }

175 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { } OUT = IN = { } OUT = { } IN = { }

176 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3 } OUT = IN = { } OUT = { } IN = { }

177 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3 } OUT = IN = { } OUT = { } IN = { }

178 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3 } OUT = IN = { } OUT = IN = { 1, 2, 3 } OUT = IN = { } OUT = { } IN = { }

179 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3 } OUT = IN = { } OUT = IN = { 1, 2, 3 } OUT = IN = { } OUT = { } IN = { }

180 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3 } OUT = IN = { } OUT = IN = { 1, 2, 3 } OUT = IN = { } OUT = { 4, 5, 6 } OUT = { } IN = { }

181 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3 } OUT = IN = { } OUT = IN = { 1, 2, 3 } OUT = IN = { } OUT = { 4, 5, 6 } OUT = { } IN = { }

182 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3 } OUT = IN = { } OUT = IN = { 1, 2, 3 } OUT = { 4, 5, 6 } OUT = { } IN = { }

183 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3 } OUT = IN = { } OUT = IN = { 1, 2, 3 } OUT = { 4, 5, 6 } OUT = { } IN = { }

184 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3 } OUT = IN = { } OUT = IN = { 1, 2, 3 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { } IN = { }

185 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3 } OUT = IN = { } OUT = IN = { 1, 2, 3 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { } IN = { }

186 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3 } OUT = IN = { } OUT = IN = { 1, 2, 3 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { 1, 3, 7 } IN = { }

187 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3 } OUT = IN = { } OUT = IN = { 1, 2, 3 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { 1, 3, 7 } IN = { 1, 2, 3, 7 }

188 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3 } OUT = IN = { } OUT = IN = { 1, 2, 3 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { 1, 3, 7 } IN = { 1, 2, 3, 7 }

189 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3 } OUT = IN = { } OUT = IN = { 1, 2, 3 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { 1, 3, 7 } IN = { 1, 2, 3, 7 }

190 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { } OUT = IN = { 1, 2, 3 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { 1, 3, 7 } IN = { 1, 2, 3, 7 }

191 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { } OUT = IN = { 1, 2, 3 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { 1, 3, 7 } IN = { 1, 2, 3, 7 }

192 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { } OUT = IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { 1, 2, 3 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { 1, 3, 7 } IN = { 1, 2, 3, 7 }

193 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { } OUT = IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { 1, 2, 3 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { 1, 3, 7 } IN = { 1, 2, 3, 7 }

194 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { } OUT = IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { 1, 2, 3 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { 1, 3, 7 } IN = { 1, 2, 3, 7 }

195 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { } OUT = IN = { 1, 2, 3, 4, 5, 6 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { 1, 3, 7 } IN = { 1, 2, 3, 7 }

196 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { } OUT = IN = { 1, 2, 3, 4, 5, 6 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { 1, 3, 7 } IN = { 1, 2, 3, 7 }

197 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { } OUT = IN = { 1, 2, 3, 4, 5, 6 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 7 } IN = { 1, 2, 3, 7 }

198 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { } OUT = IN = { 1, 2, 3, 4, 5, 6 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 7 } IN = { 1, 2, 3, 7 }

199 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { } OUT = IN = { 1, 2, 3, 4, 5, 6 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 4, 5, 7 } IN = { 1, 2, 3, 7 }

200 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { } OUT = IN = { 1, 2, 3, 4, 5, 6 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 4, 5, 7 } IN = { 1, 2, 3, 4, 5, 6, 7 }

201 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { } OUT = IN = { 1, 2, 3, 4, 5, 6 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 4, 5, 7 } IN = { 1, 2, 3, 4, 5, 6, 7 }

202 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { } OUT = IN = { 1, 2, 3, 4, 5, 6 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 4, 5, 7 } IN = { 1, 2, 3, 4, 5, 6, 7 }

203 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { } OUT = IN = { 1, 2, 3, 4, 5, 6 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 4, 5, 7 } IN = { 1, 2, 3, 4, 5, 6, 7 }

204 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { } OUT = IN = { 1, 2, 3, 4, 5, 6 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 4, 5, 7 } IN = { 1, 2, 3, 4, 5, 6, 7 }

205 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { } OUT = IN = { 1, 2, 3, 4, 5, 6 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 4, 5, 7 } IN = { 1, 2, 3, 4, 5, 6, 7 }

206 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { } OUT = IN = { 1, 2, 3, 4, 5, 6 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 4, 5, 7 } IN = { 1, 2, 3, 4, 5, 6, 7 }

207 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { } OUT = IN = { 1, 2, 3, 4, 5, 6 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 4, 5, 7 } IN = { 1, 2, 3, 4, 5, 6, 7 }

208 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n gen ={ 1, 2, 3 } kill = { 4,5,6,7 } gen ={ 4,5,6 } kill = { 1,2,3,7 } gen ={ } kill = { } gen ={ } kill = { } gen ={ } kill = { } gen ={ 7 } kill = { 2,6 } OUT = { 1, 2, 3 } IN = { 1, 2, 3, 4, 5, 6 } OUT = IN = { } OUT = IN = { 1, 2, 3, 4, 5, 6 } OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 4, 5, 7 } IN = { 1, 2, 3, 4, 5, 6, 7 }

209 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i print ji = i k exit i < n IN = { 1, 2, 3, 4, 5, 6 } IN = { } IN = { 1, 2, 3, 4, 5, 6 } IN = { 1, 2, 3, 4, 5, 6, 7 } IN = { 1, 2, 3, 4, 5, 6 }

210 Cadenas DU En cada uso de la variable, apunta a todas las posibles definiciones –Información muy útil –Usada en muchas optimizaciones Incorporar esta información en la representación –Forma SSA

211 Resumen Overview de análisis de control de flujo Expresiones Disponibles Algoritmo para calcular expresiones disponibles Bit sets Formulando un problema de análisis de flujo de datos Cadenas DU Forma SSA 5

212 Forma Static Single Assignment (SSA) Cada definición tiene un nombre único de variable –Nombre original + número de versión Cada uso se refiere a la definición por nombre ¿Qué hay acerca de posibles definiciones múltiples? –Agregamos nodos de union especiales (merge) para que sólo pueda haber una definición (funciones 

213 Forma Static Single Assignment (SSA) a = 1 b = a + 2 c = a + b a = a + 1 d = a + b

214 Forma Static Single Assignment (SSA) a = 1 b = a + 2 c = a + b a = a + 1 d = a + b a 1 = 1 b 1 = a c 1 = a 1 + b 1 a 2 = a d 1 = a 2 + b 1

215 Forma Static Single Assignment (SSA) a = 1 c = a + 2 b = 1 c = b + 2 d = a + b + c

216 Forma Static Single Assignment (SSA) a = 1 c = a + 2 b = 1 c = b + 2 d = a + b + c a 1 = 1 c 1 = a b 1 = 1 c 2 = b c 3 =  (c 1, c 2 ) d 1 = c 3 + 2

217 Ejemplo DU entry k = false i = 1 j = 2 j = j * 2 k = true i = i + 1 print ji = i + 1 k exit i < n

218 Ejemplo DU entry k 1 = false i 1 = 1 j 1 = 2 j 2 = j 3 * 2 k 2 = true i 2 = i print j 3 i 4 = i k 3 i 5 =  (i 3, i 4 ) exit i 3 =  (i 1, i 2 ) j 3 =  (j 1, j 2 ) k 3 =  (k 1, k 2 ) i 1 < n

219 Lecturas Ballena –Capítulo 12 Tigre – , 19.1, 19.2