Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porNicolás Villanueva Maldonado Modificado hace 9 años
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
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.