La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones."— Transcripción de la presentación:

1 Compiladores Análisis de Flujo de Datos

2 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 59 Algoritmo para Expresiones Disponibles Asignar un número a cada expresión

60 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 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 1 2 3 4 5 6 7

62 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 63 Algoritmo para Expresiones Disponibles Asignar un número a cada expresión Calcular conjuntos gen y kill para cada expresión 15

64 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 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 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 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 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 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 70 Conjunto Gen agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } InGEN set OutGEN set OutGEN =

71 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 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 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 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 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 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 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 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 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 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 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 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 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 84 Conjunto Kill agregado a = b + c 1 gen = { 1 } kill = { 3, 4, 5, 7 } InKILL set OutKILL set OutKILL =

85 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 102 Propagar conjunto de disponibles gen = { … } kill = {... } IN set OUT set OUT =

103 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 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 105 Propagar conjunto de disponibles IN set OUT = gen  (IN - kill) OUT set IN =

106 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 = 1010000 Kill = 0111111 Gen = 0001000 Kill = 0000000 Gen = 0000110 Kill = 1000001 Gen = 0000001 Kill = 0000000 Se requieren 7 bits por conjunto

143 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 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 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 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 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 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 149 Operaciones Meet y Join { d1, d2 } { d2, d3 } { d1 } { d3 }  = { } T = { d1, d2, d3 } { d1, d3 } { d2 } { d1, d2 }  { d2, d3 } = ???

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

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

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

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

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

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

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

157 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 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 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 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 161 Alto del Lattice El alto del lattice es la cadena ascendiente más larga en el lattice –( T, a, b, c, …,  )

162 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 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 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 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 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 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 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 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 170 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 k exit i < n

171 171 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 172 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 173 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 174 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 175 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 176 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 177 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 178 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 179 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 180 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 181 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 182 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 183 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 184 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 185 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 186 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 187 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 188 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 189 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 190 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 191 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 192 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 193 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 194 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 195 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 196 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 197 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 198 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 199 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 200 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 201 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 202 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 203 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 204 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 205 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 206 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 207 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 208 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 209 Ejemplo DU entry k = false 1 i = 1 2 j = 2 3 j = j * 2 4 k = true 5 i = i + 1 6 print ji = i + 1 7 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 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 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 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 213 Forma Static Single Assignment (SSA) a = 1 b = a + 2 c = a + b a = a + 1 d = a + b

214 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 1 + 2 c 1 = a 1 + b 1 a 2 = a 1 + 1 d 1 = a 2 + b 1

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

216 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 1 + 2 b 1 = 1 c 2 = b 1 + 2 c 3 =  (c 1, c 2 ) d 1 = c 3 + 2

217 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 218 Ejemplo DU entry k 1 = false i 1 = 1 j 1 = 2 j 2 = j 3 * 2 k 2 = true i 2 = i 3 + 1 print j 3 i 4 = i 3 + 1 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 219 Lecturas Ballena –Capítulo 12 Tigre –17.1 - 17.4, 19.1, 19.2


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

Presentaciones similares


Anuncios Google