compiladores análisis de flujo de datos. 2 resumen overview de análisis de control de flujo...
Post on 25-Jan-2016
223 Views
Preview:
TRANSCRIPT
Compiladores
Análisis de Flujo de Datos
2
Resumen
• Overview de análisis de control de flujo
• Expresiones disponibles
• Algoritmo para calcular expresiones disponibles
• Bit sets
• Formulando un problema de análisis de flujo de datos
• Cadenas DU
• Forma SSA
3
Representando el control de flujo del progama
• Forma un grafo
• Un grafo muy grande
• Crear Bloques Básicos• Un Grafo de Control de Flujo (CFG) conecta
los Bloques Básicos
4
Grafo de Control de Flujo (CFG)
• Control-Flow Graph G = <N, E>
• Nodos(N): Bloques Básicos
• Edges(E): (x,y) E ssi la primera instrucción en el bloque básico y sigue a la última instrucción en el bloque básico x
5
Identificando loops de estructuras recursivas
• Identificar aristas de retorno• Encontrar los nodos y aristas en el
loop dado por la arista de retorno• Aparte de la arista de retorno
– Aristas entrantes sólo al bloque básico con la cabeza de la arista de retorno
– Una arista saliente del bloque básico a la cola de la arista de retorno
• ¿Cómo encontramos las aristas de retorno?
bb1
bb2
bb4bb3
bb5
bb6
6
Computando Dominators
• Algoritmo– Hacer que el conjunto de dominators del nodo de
entrada sólo contenga ese nodo– Hacer que el conjunto de dominators del resto de
los nodos contenga todos los nodos– Visitar los nodos en cualquier orden– Hacer que el conjunto de dominators del nodo
actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
7
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
8
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
9
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
10
Computando Dominators
bb1
bb2
bb4bb3
bb5
bb6
{bb1}
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
11
Computando Dominators
bb1
bb2
bb4bb3
bb5
bb6
{bb1}
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
12
Computando Dominators
bb1
bb2
bb4bb3
bb5
bb6
{bb1}
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
13
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2
bb1bb2bb3bb4bb5bb6
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
14
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3
bb1bb2bb3bb4bb5bb6
bb1bb2
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
15
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3
bb1bb2
bb1bb2bb3bb4bb5bb6
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
16
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
17
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
18
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb3bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
19
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb3bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
20
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5bb6
bb1bb2bb3bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
21
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5bb6
bb1bb2bb3bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
22
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5bb6
bb1bb2bb3bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
23
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5bb6
bb1bb2bb3bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
24
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5bb6
bb1bb2bb3bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
25
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5bb6
bb1bb2bb3bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
26
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5bb6
bb1bb2bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
27
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5bb6
bb1bb2bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
28
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
29
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
30
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
31
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
32
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
33
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
34
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
35
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
36
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
37
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
38
Computando Dominators
• Lo que acabamos de ver fue un algoritmo iterativo de análisis de flujo de datos en acción– Inicializar todos los nodos a un valor dado– Visitar los nodos en algún orden– Calcular el valor del nodo– Repetir hasta que no haya cambios
39
Análisis de Flujo de Datos
• Análisis Local– Analizar el efecto de cada instrucción– Componer efectos de instrucciones para derivar
información desde el principio del bloque básico a cada instrucción
• Análisis de Flujo de Datos– Iterativamente propagar la información del bloque básico
sobre el grafo de control de flujo hasta que no hayan cambios
– Calcular el valor final al principio del bloque básico
• Propagación Local– Propagar la información desde el principio del bloque
básico a cada instrucción
40
Resumen
• Overview de análisis de control de flujo
• Expresiones disponibles
• Algoritmo para calcular expresiones disponibles
• Bit sets
• Formulando un problema de análisis de flujo de datos
• Cadenas DU
• Forma SSA
41
Ejemplo: Expresiones Disponibles
• Una expresión está disponible ssi– Todos los caminos que llegan al punto actual
pasan a través del punto donde se definió la expresión
– Ninguna variable usada en la expresión fue modificada entre el punto en que se definió la expresión y el punto actual
42
Ejemplo: Expresiones Disponibles
a = b + cd = e + ff = a + c
g = a + c
j = a + b + c + d
b = a + dh = c + f
43
¿Está la expresión disponible?
a = b + cd = e + ff = a + c
g = a + c
j = a + b + c + d
b = a + dh = c + f
Sí!
44
¿Está la expresión disponible?
a = b + cd = e + ff = a + c
g = a + c
j = a + b + c + d
b = a + dh = c + f
Sí!
45
¿Está la expresión disponible?
a = b + cd = e + ff = a + c
g = a + c
j = a + b + c + d
b = a + dh = c + f
No!
46
¿Está la expresión disponible?
a = b + cd = e + ff = a + c
g = a + c
j = a + b + c + d
b = a + dh = c + f
No!
47
¿Está la expresión disponible?
a = b + cd = e + ff = a + c
g = a + c
j = a + b + c + d
b = a + dh = c + f
No!
48
¿Está la expresión disponible?
a = b + cd = e + ff = a + c
g = a + c
j = a + b + c + d
b = a + dh = c + f
Sí!
49
¿Está la expresión disponible?
a = b + cd = e + ff = a + c
g = a + c
j = a + b + c + d
b = a + dh = c + f
Sí!
50
Uso de Expresiones Disponibles
a = b + cd = e + ff = a + c
g = a + c
j = a + b + c + d
b = a + dh = c + f
51
Uso de Expresiones Disponibles
a = b + cd = e + ff = a + c
g = a + c
j = a + b + c + d
b = a + dh = c + f
52
Uso de Expresiones Disponibles
a = b + cd = e + ff = a + c
g = a + c
j = a + b + c + d
b = a + dh = c + f
53
Uso de Expresiones Disponibles
a = b + cd = e + ff = a + c
g = f
j = a + b + c + d
b = a + dh = c + f
54
Uso de Expresiones Disponibles
a = b + cd = e + ff = a + c
g = f
j = a + b + c + d
b = a + dh = c + f
55
Uso de Expresiones Disponibles
a = b + cd = e + ff = a + c
g = f
j = a + c + b + d
b = a + dh = c + f
56
Uso de Expresiones Disponibles
a = b + cd = e + ff = a + c
g = f
j = f + b + d
b = a + dh = c + f
57
Uso de Expresiones Disponibles
a = b + cd = e + ff = a + c
g = f
j = f + b + d
b = a + dh = c + f
58
Resumen
• Overview de análisis de control de flujo• Expresiones Disponibles• Algoritmo para calcular expresiones
disponibles• Bit sets• Formulando un problema de análisis de flujo
de datos• Cadenas DU• Forma SSA
5
59
Algoritmo para Expresiones Disponibles
• Asignar un número a cada expresión
60
b = a + d h = c + f
g = a + c
Ejemplo: Expresiones Disponibles
a = b + cd = e + ff = a + c
j = a + b + c + d
61
b = a + d h = c + f
g = a + c
Ejemplo: Expresiones Disponibles
a = b + cd = e + ff = a + c
j = a + b + c + d
123
456
7
62
Conjuntos Gen y Kill
• Conjunto Gen– Si el bloque básico actual (o instrucción) crea la
definición, está en el conjunto gen– El elemento debe estar en la salida del bloque
básico siempre
• Conjunto Kill– Si el bloque básico actual (o instrucción)
redefine una variable en la expresión, está en el conjunto kill
– La expresión no es válida después de esto
63
Algoritmo para Expresiones Disponibles
• Asignar un número a cada expresión
• Calcular conjuntos gen y kill para cada expresión
15
64
Conjuntos Gen y Kill
a = b + c 1d = e + f 2f = a + c 3
g = a + c 4
j = a + b + c + d 7
b = a + d 5h = c + f 6
65
Conjuntos Gen y Kill
a = b + c 1
d = e + f 2
f = a + c 3
a = b + c 1d = e + f 2f = a + c 3
g = a + c 4
j = a + b + c + d 7
b = a + d 5h = c + f 6
66
a = b + c 1
gen = { b + c }
kill = { cualquier expr con a }
d = e + f 2
gen = { e + f }
kill = { cualquier expr con d }
f = a + c 3
gen = { a + c }
kill = {cualquier expr con f }
Conjuntos Gen y Kill
a = b + c 1d = e + f 2f = a + c 3
g = a + c 4
j = a + b + c + d 7
b = a + d 5h = c + f 6
67
a = b + c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
d = e + f 2
gen = { 2 }
kill = { 5, 7 }
f = a + c 3
gen = { 3 }
kill = { 2, 6 }
Conjuntos Gen y Kill
a = b + c 1d = e + f 2f = a + c 3
g = a + c 4
j = a + b + c + d 7
b = a + d 5h = c + f 6
68
Algoritmo para Expresiones Disponibles
• Asignarle un número a cada expresión
• Calcular conjuntos gen y kill para cada expresión
• Calcular conjuntos gen y kill agregados para cada bloque básico
16
69
Conjuntos Gen y Kill agregados
a = b + c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
d = e + f 2
gen = { 2 }
kill = { 5, 7 }
f = a + c 3
gen = { 3 }
kill = { 2, 6 }
• Propagar todos los conjuntos gen y kill desde el comienzo del bloque básico hasta el final del bloque básico
70
Conjunto Gen agregado
a = b + c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
InGEN set
OutGEN set
OutGEN =
71
Conjunto Gen agregado
a = b + c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
InGEN set
OutGEN set
• El conjunto gen en la expresión actual debe estar en el conjunto OutGEN
OutGEN = gen
72
Conjunto Gen agregado
a = b + c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
InGEN set
OutGEN set
• El conjunto gen en la expresión actual debe estar en el conjunto OutGEN
• Cualquier expresión en el conjunto InGEN que no está en el conjunto kill debe estar en el conjunto OutGEN
OutGEN = gen (InGEN - kill)
73
Conjunto Gen agregado
a = b + c 1
gen = { 1 }kill = { 3, 4, 5, 7 }
d = e + f 2gen = { 2 }kill = { 5, 7 }
f = a + c 3gen = { 3 }kill = { 2, 6 }
74
Conjunto Gen agregadoInGEN = { }
a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
OutGEN = gen (InGEN - kill)
d = e + f 2gen = { 2 }kill = { 5, 7 }
f = a + c 3gen = { 3 }kill = { 2, 6 }
75
Conjunto Gen agregadoInGEN = { }
a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
OutGEN = { 1 } ({ } - { 3,4,5,7})
d = e + f 2gen = { 2 }kill = { 5, 7 }
f = a + c 3gen = { 3 }kill = { 2, 6 }
76
Conjunto Gen agregadoInGEN = { }
a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
OutGEN = { 1 }
d = e + f 2gen = { 2 }kill = { 5, 7 }
f = a + c 3gen = { 3 }kill = { 2, 6 }
77
Conjunto Gen agregado
a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
InGEN = { 1 }
d = e + f 2gen = { 2 }kill = { 5, 7 }
OutGEN = gen (InGEN - kill)
f = a + c 3gen = { 3 }kill = { 2, 6 }
78
Conjunto Gen agregado
a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
InGEN = { 1 }
d = e + f 2gen = { 2 }kill = { 5, 7 }
OutGEN = { 2 } ({ 1 } - { 5,7 })
f = a + c 3gen = { 3 }kill = { 2, 6 }
79
Conjunto Gen agregado
a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
InGEN = { 1 }
d = e + f 2gen = { 2 }kill = { 5, 7 }
OutGEN = { 1, 2 }
f = a + c 3gen = { 3 }kill = { 2, 6 }
80
Conjunto Gen agregado
a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
d = e + f 2gen = { 2 }kill = { 5, 7 }
InGEN = { 1, 2 }
f = a + c 3gen = { 3 }kill = { 2, 6 }
OutGEN = gen (InGEN - kill)
81
Conjunto Gen agregado
a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
d = e + f 2gen = { 2 }kill = { 5, 7 }
InGEN = { 1, 2 }
f = a + c 3gen = { 3 }kill = { 2, 6 }
OutGEN = { 3 } ({ 1,2 } - { 2,6 })
82
Conjunto Gen agregado
A = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
d = e + f 2gen = { 2 }kill = { 5, 7 }
InGEN = { 1, 2 }
f = a + c 3gen = { 3 }kill = { 2, 6 }
OutGEN = { 1, 3 }
83
Conjunto Gen agregado
A = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
d = e + f 2gen = { 2 }kill = { 5, 7 }
f = a + c 3gen = { 3 }kill = { 2, 6 }
GE
N =
{ 1
, 3 }
84
Conjunto Kill agregado
a = b + c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
InKILL set
OutKILL set
OutKILL =
85
Conjunto Kill agregado
a = b + c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
InKILL set
OutKILL set
• El conjunto kill de la expresión actual debe estar en el conjunto OutKILL
OutKILL = kill
86
Conjunto Kill agregado
a = b + c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
InKILL set
OutKILL set
• El conjunto kill de la expresión actual debe estar en el conjunto OutKILL
• Cualquier conjunto en el InKILL debe estar en el OutKILL
OutKILL = kill InKILL
87
Conjunto Kill agregado
a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
d = e + f 2gen = { 2 }kill = { 5, 7 }
f = a + c 3gen = { 3 }kill = { 2, 6 }
88
Conjunto Kill agregadoInKILL = { }
a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
OutKILL = kill InKILL
d = e + f 2gen = { 2 }kill = { 5, 7 }
f = a + c 3gen = { 3 }kill = { 2, 6 }
89
Conjunto Kill agregadoInKILL = { }
a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
OutKILL = { 3,4,5,7 } { }
d = e + f 2gen = { 2 }kill = { 5, 7 }
f = a + c 3gen = { 3 }kill = { 2, 6 }
90
Conjunto Kill agregadoInKILL = { }
a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
OutKILL = { 3,4,5,7 }
d = e + f 2gen = { 2 }kill = { 5, 7 }
f = a + c 3gen = { 3 }kill = { 2, 6 }
91
Conjunto Kill agregado
a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
InKILL = { 3,4,5,7 }
d = e + f 2gen = { 2 }kill = { 5, 7 }
OutKILL = kill InKILL
f = a + c 3gen = { 3 }kill = { 2, 6 }
92
Conjunto Kill agregado
a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
InKILL = { 3,4,5,7 }
d = e + f 2gen = { 2 }kill = { 5, 7 }
OutKILL = { 5,7 } { 3,4,5,7 }
f = a + c 3gen = { 3 }kill = { 2, 6 }
93
Conjunto Kill agregado
a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
InKILL = { 3,4,5,7 }
d = e + f 2gen = { 2 }kill = { 5, 7 }
OutKILL = { 3,4,5,7 }
f = a + c 3gen = { 3 }kill = { 2, 6 }
94
Conjunto Kill agregado
a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
d = e + f 2gen = { 2 }kill = { 5, 7 }
InKILL = { 3,4,5,7 }
f = a + c 3gen = { 3 }kill = { 2, 6 }
OutKILL = kill InKILL
95
Conjunto Kill agregado
a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
d = e + f 2gen = { 2 }kill = { 5, 7 }
InKILL = { 3,4,5,7 }
f = a + c 3gen = { 3 }kill = { 2, 6 }
OutKILL = { 3,4,5,7 } { 2,6 }
96
Conjunto Kill agregado
a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
d = e + f 2gen = { 2 }kill = { 5, 7 }
InKILL = { 3,4,5,7 }
f = a + c 3gen = { 3 }kill = { 2, 6 }
OutKILL = { 2,3,4,5,6,7 }
97
Conjunto Kill agregado
a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }
d = e + f 2gen = { 2 }kill = { 5, 7 }
f = a + c 3gen = { 3 }kill = { 2, 6 }
KIL
L =
{ 2
, 3, 4
, 5, 6
, 7 }
98
Conjuntos Gen y Kill agregados
a = b + c 1d = e + f 2f = a + c 3
g = a + c 4
j = a + b + c + d 7
b = a + d 5h = c + f 6
Gen = { 1, 3}Kill = { 2,3,4,5,6,7 }
Gen = { 4 }Kill = { }
Gen = { 5, 6 }Kill = { 1, 7 }
Gen = { 7 }Kill = { }
99
Algoritmo para Expresiones Disponibles
• Asignar un número a cada expresión
• Calcular conjuntos gen y kill para cada instrucción
• Calcular conjuntos gen y kill agregados para cada bloque básico
• Inicializar conjunto de disponibles de cada bloque básico con todas las expresiones
20
100
Conjuntos Gen y Kill agregados
a = b + c 1d = e + f 2f = a + c 3
g = a + c 4
j = a + b + c + d 7
b = a + d 5h = 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}
IN = {1,2,3,4,5,6,7}IN = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
OUT = {1,2,3,4,5,6,7}
OUT = {1,2,3,4,5,6,7} OUT = {1,2,3,4,5,6,7}
OUT = {1,2,3,4,5,6,7}
101
Algoritmo para Expresiones Disponibles
• Asignar un número a cada expresión
• Calcular conjuntos gen y kill para cada instrucción
• Calcular conjuntos gen y kill agregados para cada bloque básico
• Inicializar conjunto de disponibles de cada bloque básico con todas las expresiones
• Iterativamente propagar el conjunto de expresiones disponibles por el CFG
102
Propagar conjunto de disponibles
gen = { … }
kill = { ... }
IN set
OUT set
OUT =
103
Propagar conjunto de disponibles
gen = { … }
kill = { ... }
IN set
OUT set
• Si la expresión es generada (en el conjunto gen) entonces está disponible al final– Debe estar en el conjunto OUT
OUT = gen
104
Propagar conjunto de disponibles
gen = { … }
kill = { ... }
IN set
OUT set
• Si la expresión es generada (en el conjunto gen) entonces está disponible al final– Debe estar en el conjunto OUT
• Cualquier expresión disponible en la entrada (en el conjunto IN) y que no está en el conjunto kill debe estar disponible al final
OUT = gen (IN - kill)
105
Propagar conjunto de disponibles
IN set
OUT = gen (IN - kill)
OUT set OU
T se
t
IN =
106
Propagar conjunto de disponibles
IN set
• La expresión está disponible sólo está disponible en todos los caminos de entrada
OUT = gen (IN - kill)
OUT set OU
T se
t
IN = OUT
107
Conjuntos Gen y Kill agregados
a = b + c 1d = e + f 2f = a + c 3
g = a + c 4
j = a + b + c + d 7
b = a + d 5h = 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}
IN = {1,2,3,4,5,6,7}IN = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
OUT = {1,2,3,4,5,6,7}
OUT = {1,2,3,4,5,6,7} OUT = {1,2,3,4,5,6,7}
OUT = {1,2,3,4,5,6,7}
OUT = gen (IN - kill)
IN = OUT
108
Conjuntos Gen y Kill agregados
g = a + c 4
j = a + b + c + d 7
b = a + d 5h = 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}
IN = {1,2,3,4,5,6,7}IN = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
OUT = {1,2,3,4,5,6,7}
OUT = {1,2,3,4,5,6,7} OUT = {1,2,3,4,5,6,7}
OUT = {1,2,3,4,5,6,7}
OUT = gen (IN - kill)
IN = OUTa = b + c 1d = e + f 2f = a + c 3
109
Conjuntos Gen y Kill agregados
g = a + c 4
j = a + b + c + d 7
b = a + d 5h = 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}IN = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
OUT = {1,2,3,4,5,6,7}
OUT = {1,2,3,4,5,6,7} OUT = {1,2,3,4,5,6,7}
OUT = {1,2,3,4,5,6,7}
OUT = gen (IN - kill)
IN = OUTa = b + c 1d = e + f 2f = a + c 3
110
Conjuntos Gen y Kill agregados
g = a + c 4
j = a + b + c + d 7
b = a + d 5h = 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}IN = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
OUT = {1,3}
OUT = {1,2,3,4,5,6,7} OUT = {1,2,3,4,5,6,7}
OUT = {1,2,3,4,5,6,7}
OUT = gen (IN - kill)
IN = OUTa = b + c 1d = e + f 2f = a + c 3
111
Conjuntos Gen y Kill agregados
j = a + b + c + d 7
b = a + d 5h = 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}IN = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
OUT = {1,3}
OUT = {1,2,3,4,5,6,7} OUT = {1,2,3,4,5,6,7}
OUT = {1,2,3,4,5,6,7}
OUT = gen (IN - kill)
IN = OUT
g = a + c 4
a = b + c 1d = e + f 2f = a + c 3
112
Conjuntos Gen y Kill agregados
j = a + b + c + d 7
b = a + d 5h = 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,2,3,4,5,6,7}
OUT = {1,3}
OUT = {1,2,3,4,5,6,7} OUT = {1,2,3,4,5,6,7}
OUT = {1,2,3,4,5,6,7}
OUT = gen (IN - kill)
IN = OUT
g = a + c 4
a = b + c 1d = e + f 2f = a + c 3
113
Conjuntos Gen y Kill agregados
j = a + b + c + d 7
b = a + d 5h = 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,2,3,4,5,6,7}
OUT = {1,3}
OUT = {1,3,4} OUT = {1,2,3,4,5,6,7}
OUT = {1,2,3,4,5,6,7}
OUT = gen (IN - kill)
IN = OUT
g = a + c 4
a = b + c 1d = e + f 2f = a + c 3
114
Conjuntos Gen y Kill agregados
b = a + d 5h = 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,2,3,4,5,6,7}
OUT = {1,3}
OUT = {1,3,4} OUT = {1,2,3,4,5,6,7}
OUT = {1,2,3,4,5,6,7}
OUT = gen (IN - kill)
IN = OUTa = b + c 1d = e + f 2f = a + c 3
g = a + c 4
j = a + b + c + d 7
115
Conjuntos Gen y Kill agregados
b = a + d 5h = 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,2,3,4,5,6,7}
OUT = gen (IN - kill)
IN = OUTa = b + c 1d = e + f 2f = a + c 3
g = a + c 4
j = a + b + c + d 7
116
Conjuntos Gen y Kill agregados
b = a + d 5h = 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 = OUTa = b + c 1d = e + f 2f = a + c 3
g = a + c 4
j = a + b + c + d 7
117
Conjuntos Gen y Kill agregados
Gen = { 1, 3}Kill = { 2,3,4,5,6,7 }
Gen = { 4 }Kill = { }
Gen = { 5, 6 }Kill = { 1, 7 }
Gen = { 7 }Kill = { }
IN = {}
IN = {1,3}IN = {1,2,3,4,5,6,7}
IN = {1,3,4}
OUT = {1,3}
OUT = {1,3,4} OUT = {1,2,3,4,5,6,7}
OUT = {1,3,4,7}
OUT = gen (IN - kill)
IN = OUTa = b + c 1d = e + f 2f = a + c 3
g = a + c 4b = a + d 5h = c + f 6
j = a + b + c + d 7
118
Conjuntos Gen y Kill agregados
Gen = { 1, 3}Kill = { 2,3,4,5,6,7 }
Gen = { 4 }Kill = { }
Gen = { 5, 6 }Kill = { 1, 7 }
Gen = { 7 }Kill = { }
IN = {}
IN = {1,3}IN = {1,3}
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 = OUTa = b + c 1d = e + f 2f = a + c 3
g = a + c 4b = a + d 5h = c + f 6
j = a + b + c + d 7
119
Conjuntos Gen y Kill agregados
Gen = { 1, 3}Kill = { 2,3,4,5,6,7 }
Gen = { 4 }Kill = { }
Gen = { 5, 6 }Kill = { 1, 7 }
Gen = { 7 }Kill = { }
IN = {}
IN = {1,3}IN = {1,3}
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 = OUTa = b + c 1d = e + f 2f = a + c 3
g = a + c 4b = a + d 5h = c + f 6
j = a + b + c + d 7
120
Conjuntos Gen y Kill agregados
Gen = { 1, 3}Kill = { 2,3,4,5,6,7 }
Gen = { 4 }Kill = { }
Gen = { 5, 6 }Kill = { 1, 7 }
Gen = { 7 }Kill = { }
IN = {}
IN = {1,3}IN = {1,3}
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 = OUTa = b + c 1d = e + f 2f = a + c 3
g = a + c 4
j = a + b + c + d 7
b = a + d 5h = c + f 6
121
Conjuntos Gen y Kill agregados
Gen = { 1, 3}Kill = { 2,3,4,5,6,7 }
Gen = { 4 }Kill = { }
Gen = { 5, 6 }Kill = { 1, 7 }
Gen = { 7 }Kill = { }
IN = {}
IN = {1,3}IN = {1,3}
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 5h = c + f 6
a = b + c 1d = e + f 2f = a + c 3
122
Conjuntos Gen y Kill agregados
Gen = { 1, 3}Kill = { 2,3,4,5,6,7 }
Gen = { 4 }Kill = { }
Gen = { 5, 6 }Kill = { 1, 7 }
Gen = { 7 }Kill = { }
IN = {}
IN = {1,3}IN = {1,3}
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 5h = c + f 6
a = b + c 1d = e + f 2f = a + c 3
g = a + c 4
123
Conjuntos Gen y Kill agregados
Gen = { 1, 3}Kill = { 2,3,4,5,6,7 }
Gen = { 4 }Kill = { }
Gen = { 5, 6 }Kill = { 1, 7 }
Gen = { 7 }Kill = { }
IN = {}
IN = {1,3}IN = {1,3}
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 5h = c + f 6
a = b + c 1d = e + f 2f = a + c 3
g = a + c 4
j = a + b + c + d 7
124
Conjuntos Gen y Kill agregados
Gen = { 1, 3}Kill = { 2,3,4,5,6,7 }
Gen = { 4 }Kill = { }
Gen = { 5, 6 }Kill = { 1, 7 }
Gen = { 7 }Kill = { }
IN = {}
IN = {1,3}IN = {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 5h = c + f 6
a = b + c 1d = e + f 2f = a + c 3
g = a + c 4
j = a + b + c + d 7
125
Conjuntos Gen y Kill agregados
Gen = { 1, 3}Kill = { 2,3,4,5,6,7 }
Gen = { 4 }Kill = { }
Gen = { 5, 6 }Kill = { 1, 7 }
Gen = { 7 }Kill = { }
IN = {}
IN = {1,3}IN = {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 5h = c + f 6
a = b + c 1d = e + f 2f = a + c 3
g = a + c 4
j = a + b + c + d 7
126
Conjuntos Gen y Kill agregados
Gen = { 1, 3}Kill = { 2,3,4,5,6,7 }
Gen = { 4 }Kill = { }
Gen = { 5, 6 }Kill = { 1, 7 }
Gen = { 7 }Kill = { }
IN = {}
IN = {1,3}IN = {1,3}
IN = {3}
OUT = {1,3}
OUT = {1,3,4} OUT = {3,5,6}
OUT = {3,7}
OUT = gen (IN - kill)
IN = OUTa = b + c 1d = e + f 2f = a + c 3
g = a + c 4b = a + d 5h = c + f 6
j = a + b + c + d 7
127
Conjuntos Gen y Kill agregados
Gen = { 1, 3}Kill = { 2,3,4,5,6,7 }
Gen = { 4 }Kill = { }
Gen = { 5, 6 }Kill = { 1, 7 }
Gen = { 7 }Kill = { }
IN = {}
IN = {1,3}IN = {3}
IN = {3}
OUT = {1,3}
OUT = {1,3,4} OUT = {3,5,6}
OUT = {3,7}
OUT = gen (IN - kill)
IN = OUTa = b + c 1d = e + f 2f = a + c 3
g = a + c 4b = a + d 5h = c + f 6
j = a + b + c + d 7
128
Conjuntos Gen y Kill agregados
Gen = { 1, 3}Kill = { 2,3,4,5,6,7 }
Gen = { 4 }Kill = { }
Gen = { 5, 6 }Kill = { 1, 7 }
Gen = { 7 }Kill = { }
IN = {}
IN = {1,3}IN = {3}
IN = {3}
OUT = {1,3}
OUT = {1,3,4} OUT = {3,5,6}
OUT = {3,7}
OUT = gen (IN - kill)
IN = OUTa = b + c 1d = e + f 2f = a + c 3
g = a + c 4
j = a + b + c + d 7
b = a + d 5h = c + f 6
129
Conjuntos Gen y Kill agregados
Gen = { 1, 3}Kill = { 2,3,4,5,6,7 }
Gen = { 4 }Kill = { }
Gen = { 5, 6 }Kill = { 1, 7 }
Gen = { 7 }Kill = { }
IN = {}
IN = {1,3}IN = {3}
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 5h = c + f 6
a = b + c 1d = e + f 2f = a + c 3
130
Conjuntos Gen y Kill agregados
Gen = { 1, 3}Kill = { 2,3,4,5,6,7 }
Gen = { 4 }Kill = { }
Gen = { 5, 6 }Kill = { 1, 7 }
Gen = { 7 }Kill = { }
IN = {}
IN = {1,3}IN = {3}
IN = {3}
OUT = {1,3}
OUT = {1,3,4} OUT = {3,5,6}
OUT = {3,7}
OUT = gen (IN - kill)
IN = OUTa = b + c 1d = e + f 2f = a + c 3
j = a + b + c + d 7
b = a + d 5h = c + f 6g = a + c 4
131
Conjuntos Gen y Kill agregados
Gen = { 1, 3}Kill = { 2,3,4,5,6,7 }
Gen = { 4 }Kill = { }
Gen = { 5, 6 }Kill = { 1, 7 }
Gen = { 7 }Kill = { }
IN = {}
IN = {1,3}IN = {3}
IN = {3}
OUT = {1,3}
OUT = {1,3,4} OUT = {3,5,6}
OUT = {3,7}
OUT = gen (IN - kill)
IN = OUTa = b + c 1d = e + f 2f = a + c 3
g = a + c 4b = a + d 5h = c + f 6
j = a + b + c + d 7
132
Conjuntos Gen y Kill agregados
Gen = { 1, 3}Kill = { 2,3,4,5,6,7 }
Gen = { 4 }Kill = { }
Gen = { 5, 6 }Kill = { 1, 7 }
Gen = { 7 }Kill = { }
IN = {}
IN = {1,3}IN = {3}
IN = {3}
OUT = {1,3}
OUT = {1,3,4} OUT = {3,5,6}
OUT = {3,7}
OUT = gen (IN - kill)
IN = OUTa = b + c 1d = e + f 2f = a + c 3
g = a + c 4
j = a + b + c + d 7
b = a + d 5h = c + f 6
133
Conjuntos Gen y Kill agregados
Gen = { 1, 3}Kill = { 2,3,4,5,6,7 }
Gen = { 4 }Kill = { }
Gen = { 5, 6 }Kill = { 1, 7 }
Gen = { 7 }Kill = { }
IN = {}
IN = {1,3}IN = {3}
IN = {3}
OUT = {1,3}
OUT = {1,3,4} OUT = {3,5,6}
OUT = {3,7}
OUT = gen (IN - kill)
IN = OUTa = b + c 1d = e + f 2f = a + c 3
g = a + c 4
j = a + b + c + d 7
b = a + d 5h = c + f 6
134
Algoritmo para Expresiones Disponibles
• Asignar un número a cada expresión
• Calcular conjuntos gen y kill para cada instrucción
• Calcular conjuntos gen y kill agregados para cada bloque básico
• Inicializar conjunto de disponibles en cada bloque básico con todas las expresiones
• Iterativamente propagar expresiones disponibles sobre el CFG
• Propagar dentro del bloque básico
28
135
Propagar dentro del bloque básico
a = b + c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
IN set
OUT set
• Comenzar con el conjunto IN de expresiones disponibles
• Linealmente propagar hacia abajo del bloque básico– Igual que el paso de data-flow
– Una sola pasada ya que no hay aristas de retorno
OUT = gen (IN - kill)
136
ae = { 1, 3 }g = a + c 4
ae = { 1, 3, 4 }
Expresiones Disponibles
ae = { }a = b + c 1 ae = { 1 }d = e + f 2 ae = { 1, 2 }f = a + c 3 ae = { 1, 3 }
ae = { 3 }j = a + b + c + d 7
ae = { 3, 7 }
ae = { 3 }b = a + d 5
ae = { 3, 5 }h = c + f 6
ae = { 3, 5, 6 }
137
Resumen
• Overview de análisis de control de flujo• Expresiones Disponibles• Algoritmo para calcular expresiones
disponibles• Bit sets• Formulando un problema de análisis de flujo
de datos• Cadenas DU• Forma SSA
5
138
Bitsets
• Asignar un bit a cada elemento del conjunto– Unión OR– Intersección AND – Subtracción NEGATE y AND
• Implementación rápida– 32 elementos empacados en cada word– AND y OR son ambas una instrucción
139
Conjunto Kill vrs. Conjunto Preserve
• Conjuntos Kill– OUT = gen (IN - kill)– Usando vectores de bits: OUT = gen (IN - kill)– Subtracción NEGATE y AND– OUT = gen (IN kill)
• Conjuntos Preserve– Usados en el libro de la Ballena– PRSV = Entire Set - KILL– OUT = gen (IN prsv)– OUT = gen (IN prsv)
140
Conjuntos Gen y Kill agregados
a = b + c 1d = e + f 2f = a + c 3
g = a + c 4
j = a + b + c + d 7
b = a + d 5h = c + f 6
Gen = { 1,3}Kill = { 2,3,4,5,6,7 }
Gen = { 4 }Kill = { }
Gen = { 5,6 }Kill = { 1,7 }
Gen = { 7 }Kill = { }
141
Conjuntos Gen y Kill agregados
a = b + c 1d = e + f 2f = a + c 3
g = a + c 4
j = a + b + c + d 7
b = a + d 5h = c + f 6
Gen = { 1,3}Kill = { 2,3,4,5,6,7 }
Gen = { 4 }Kill = { }
Gen = { 5,6 }Kill = { 1,7 }
Gen = { 7 }Kill = { }
•Se requieren 7 bits por conjunto
142
Conjuntos Gen y Kill agregados
a = b + c 1d = e + f 2f = a + c 3
g = a + c 4
j = a + b + c + d 7
b = a + d 5h = c + f 6
Gen = 1010000Kill = 0111111
Gen = 0001000Kill = 0000000
Gen = 0000110Kill = 1000001
Gen = 0000001Kill = 0000000
•Se requieren 7 bits por conjunto
143
Resumen
• Overview de análisis de control de flujo• Expresiones Disponibles• Algoritmo para calcular expresiones
disponibles• Bit sets• Formulando un problema de análisis de flujo
de datos• Cadenas DU• Forma SSA
5
144
Formulando un problema de análisis de flujo de datos
• Independiente del problema– Calcular conjuntos gen y kill para bloque básico– Propagación iterativa de información hasta que
converja– Propagación de información dentro del bloque
básico
145
Formulando un problema de análisis de flujo de datos
• Lattice– Estructuras abstractas sobre las que opera el análisis
ejemplo: conjuntos de expresiones disponibles
• Funciones de flujo– Cómo cada control de flujo y construcciones
computacionales afectan las estructuras abstractas• Ejemplo: la ecuación OUT de cada statement
146
Lattice
• Una lattice L consiste de– Un conjunto de valores– Dos operaciones: meet( ) y join ( )– Un valor superior [top] (T) y un valor inferior
[bottom] ()
147
Lattice
• Ejemplo: el lattice para el problema de “reaching definition” cuando sólo hay 3 definiciones
{ d1, d2 }
{ d2, d3 }
{ d1 }
{ d3 }
= { }
T = { d1, d2, d3 }
{ d1, d3 }
{ d2 }
148
Operaciones Meet y Join
• Meet y Join forman una “cerradura”– Para todos a, b L existen c y d L únicos, tal que
a b = c a b = d• Meet y Join con conmutativas
– a b = b a a b = b a• Meet y Join son asociativas
– (a b) c = b (a c) (a b) c = b (a c)
• Existe un único elemento (T) [top] y un único elemento () [bottom] en L tal que– a = a T = T
149
Operaciones Meet y Join
{ d1, d2 }
{ d2, d3 }
{ d1 }
{ d3 }
= { }
T = { d1, d2, d3 }
{ d1, d3 }
{ d2 }
{ d1, d2 } { d2, d3 } = ???
150
Operaciones Meet y Join
{ d1, d2 }
{ d2, d3 }
{ d1 }
{ d3 }
= { }
T = { d1, d2, d3 }
{ d1, d3 }
{ d2 }
{ d1, d2 } { d2, d3 } = ???
151
Operaciones Meet y Join
{ d1, d2 }
{ d2, d3 }
{ d1 }
{ d3 }
= { }
T = { d1, d2, d3 }
{ d1, d3 }
{ d2 }
{ d1, d2 } { d2, d3 } = ???
152
Operaciones Meet y Join
{ d1, d2 }
{ d2, d3 }
{ d1 }
{ d3 }
= { }
T = { d1, d2, d3 }
{ d1, d3 }
{ d2 }
{ d1, d2 } { d2, d3 } = { d2 }
153
Operaciones Meet y Join
{ d1, d2 }
{ d2, d3 }
{ d1 }
{ d3 }
= { }
T = { d1, d2, d3 }
{ d1, d3 }
{ d2 }
{ d1, d2 } { d3 } = ???
154
Operaciones Meet y Join
{ d1, d2 }
{ d2, d3 }
{ d1 }
{ d3 }
= { }
T = { d1, d2, d3 }
{ d1, d3 }
{ d2 }
{ d1, d2 } { d3 } = ???
155
Operaciones Meet y Join
{ d1, d2 }
{ d2, d3 }
{ d1 }
{ d3 }
= { }
T = { d1, d2, d3 }
{ d1, d3 }
{ d2 }
{ d1, d2 } { d3 } = ???
156
Operaciones Meet y Join
{ d1, d2 }
{ d2, d3 }
{ d1 }
{ d3 }
= { }
T = { d1, d2, d3 }
{ d1, d3 }
{ d2 }
{ d1, d2 } { d3 } = ???
157
Operaciones Meet y Join
{ d1, d2 }
{ d2, d3 }
{ d1 }
{ d3 }
= { }
T = { d1, d2, d3 }
{ d1, d3 }
{ d2 }
{ d1, d2 } { d3 } = { d1, d2, d3 }
158
Operaciones Meet y Join
• Operación Meet– Intersección de conjuntos
– Seguir las líneas hacia abajo desde los dos elementos en el lattice hasta que se encuentren en un sólo elemento único
• Operación Join– Unión de conjuntos– Hay un sólo elemento en el lattice desde el que hay
un camino hacia abajo (sin segmentos compartidos) hacia ambos elementos
159
Orden Parcial
• Definimos a b sí y sólo sí a b = b
• Propiedades– Reflexivo: a a– Antisimétrico: a b y b a a = b– Transitivo: a b y b c a c
160
Orden Parcial
• Definimos a b sí y sólo sí a b = b
• Propiedades– a b existe un camino desde b hasta a
{ d1, d2 }
{ d2, d3 }
{ d1 }
{ d3 }
= { }
T = { d1, d2, d3 }
{ d1, d3 }
{ d2 }
161
Alto del Lattice
• El alto del lattice es la cadena ascendiente más larga en el lattice– (T, a, b, c, …, )
162
Alto del Lattice
• El alto del lattice es la cadena ascendiente más larga en el lattice– (T, a, b, c, …, )
– Alto es (T, {d2,d3}, {d3}, ) = 4
{ d1, d2 }
{ d2, d3 }
{ d1 }
{ d3 }
= { }
T = { d1, d2, d3 }
{ d1, d3 }
{ d2 }
163
Funciones de Flujo
• Ejemplo: OUT = f(IN)
• f: L L donde L es un lattice
• Propiedades– Monótona: a,b L a b f(a) f(b)
• Punto Fijo– Un punto fijo es un elemento a L tal que
f(a) = a
164
Intuición acerca de Finalización
• El análisis de flujo de datos comienza asumiendo los valores más optimistas (T)
• Cada etapa aplica funciones de flujo– Vnew Vprev
– Se mueve hacia abajo en el lattice
• Hasta que sea estable (valores no cambian)– Se llega a un punto fijo en cada bloque básico
• Lattice tiene un alto finito debe terminar
165
Resumen
• Overview de análisis de control de flujo• Expresiones Disponibles• Algoritmo para calcular expresiones
disponibles• Bit sets• Formulando un problema de análisis de flujo
de datos• Cadenas DU• Forma SSA
5
166
Cadenas Def-Use y Use-Def
• Cadena Def-Use (DU)– Conecta la definición de cada variable con todos
los posibles usos de esa variable
• Cadena Use-Def (UD)– Conecta el uso de una variable con todas las
posibles definiciones de esa variable
167
Formulación del problema de flujo de datos para cadena DU
• Lattice: El conjunto de definiciones– Bitvector format: un bit para cada definición en el
procedimiento
• Dirección del Flujo: Flujo hacia adelante
• Funciones de Flujo:– gen = { b0…bn | bk = 1 ssi la k-ésima definición}
– kill = { b0…bn | bk = 1 ssi k-ésima variable es redefinida }
– OUT = gen (IN - kill)
– IN = OUT
168
Formulen el problema de flujo de datos para la cadena UD
• Lattice: – Bitvector format:
• Dirección del Flujo: Flujo hacia adelante/atrás
• Funciones de flujo:– gen = { b0…bn | bk = 1 }
– kill = { b0…bn | bk = 1 }
– OUT =
– IN =
169
Ejemplo DUentry
k = false i = 1 j = 2
j = j * 2 k = true i = i + 1
print j i = i + 1
k
exit
i < n
170
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = i + 1 7
k
exit
i < n
171
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 = { }
OUT = IN = { }
OUT = { } OUT = { } OUT = { }IN = { }
173
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 = { }
OUT = IN = { }
OUT = { } OUT = { } OUT = { }IN = { }
174
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 = { }
OUT = IN = { }
OUT = { } OUT = { } OUT = { }IN = { }
175
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 = { }
OUT = IN = { }
OUT = { } OUT = { } OUT = { }IN = { }
176
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 = { }
OUT = IN = { }
OUT = { } OUT = { } OUT = { }IN = { }
177
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 = { }
OUT = IN = { }
OUT = { } OUT = { } OUT = { }IN = { }
178
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 = { } OUT = { } OUT = { }IN = { }
179
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 = { } OUT = { } OUT = { }IN = { }
180
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 = { } OUT = { }IN = { }
181
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 = { } OUT = { }IN = { }
182
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 = { 1, 2, 3 }
OUT = { 4, 5, 6 } OUT = { } OUT = { }IN = { }
183
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 = { 1, 2, 3 }
OUT = { 4, 5, 6 } OUT = { } OUT = { }IN = { }
184
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 = { 1, 2, 3 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { }IN = { }
185
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 = { 1, 2, 3 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { }IN = { }
186
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 = { 1, 2, 3 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { 1, 3, 7 }IN = { }
187
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 = { 1, 2, 3 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { 1, 3, 7 }IN = { 1, 2, 3, 7 }
188
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 = { 1, 2, 3 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { 1, 3, 7 }IN = { 1, 2, 3, 7 }
189
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 = { 1, 2, 3 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { 1, 3, 7 }IN = { 1, 2, 3, 7 }
190
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 = IN = { 1, 2, 3 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { 1, 3, 7 }IN = { 1, 2, 3, 7 }
191
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 = IN = { 1, 2, 3 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { 1, 3, 7 }IN = { 1, 2, 3, 7 }
192
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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, 4, 5, 6 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { 1, 3, 7 }IN = { 1, 2, 3, 7 }
196
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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, 4, 5, 6 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3 } OUT = { 1, 3, 7 }IN = { 1, 2, 3, 7 }
197
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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, 4, 5, 6 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 7 }IN = { 1, 2, 3, 7 }
198
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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, 4, 5, 6 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 7 }IN = { 1, 2, 3, 7 }
199
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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, 4, 5, 6 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 4, 5, 7 }IN = { 1, 2, 3, 7 }
200
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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, 4, 5, 6 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 4, 5, 7 }IN = { 1, 2, 3, 4, 5, 6, 7 }
201
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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, 4, 5, 6 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 4, 5, 7 }IN = { 1, 2, 3, 4, 5, 6, 7 }
202
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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, 4, 5, 6 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 4, 5, 7 }IN = { 1, 2, 3, 4, 5, 6, 7 }
203
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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, 4, 5, 6 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 4, 5, 7 }IN = { 1, 2, 3, 4, 5, 6, 7 }
204
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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, 4, 5, 6 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 4, 5, 7 }IN = { 1, 2, 3, 4, 5, 6, 7 }
205
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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, 4, 5, 6 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 4, 5, 7 }IN = { 1, 2, 3, 4, 5, 6, 7 }
206
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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, 4, 5, 6 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 4, 5, 7 }IN = { 1, 2, 3, 4, 5, 6, 7 }
207
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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, 4, 5, 6 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 4, 5, 7 }IN = { 1, 2, 3, 4, 5, 6, 7 }
208
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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, 4, 5, 6 }
OUT = { 4, 5, 6 } OUT = { 1, 2, 3, 4, 5, 6 } OUT = { 1, 3, 4, 5, 7 }IN = { 1, 2, 3, 4, 5, 6, 7 }
209
Ejemplo DUentry
k = false 1i = 1 2j = 2 3
j = j * 2 4k = true 5i = i + 1 6
print j i = 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 }
IN = { 1, 2, 3, 4, 5, 6, 7 }
IN = { 1, 2, 3, 4, 5, 6 }
IN = { 1, 2, 3, 4, 5, 6 }
210
Cadenas DU
• En cada uso de la variable, apunta a todas las posibles definiciones– Información muy útil– Usada en muchas optimizaciones
• Incorporar esta información en la representación– Forma SSA
211
Resumen
• Overview de análisis de control de flujo• Expresiones Disponibles• Algoritmo para calcular expresiones
disponibles• Bit sets• Formulando un problema de análisis de flujo
de datos• Cadenas DU• Forma SSA
5
212
Forma Static Single Assignment (SSA)
• Cada definición tiene un nombre único de variable– Nombre original + número de versión
• Cada uso se refiere a la definición por nombre
• ¿Qué hay acerca de posibles definiciones múltiples?– Agregamos nodos de union especiales (merge) para
que sólo pueda haber una definición (funciones
213
Forma Static Single Assignment (SSA)
a = 1 b = a + 2c = a + ba = a + 1d = a + b
214
Forma Static Single Assignment (SSA)
a = 1 b = a + 2c = a + ba = a + 1d = a + b
a1 = 1 b1 = a1 + 2c1 = a1 + b1
a2 = a1 + 1d1 = a2 + b1
215
Forma Static Single Assignment (SSA)a = 1 c = a + 2
b = 1 c = b + 2
d = a + b + c
216
Forma Static Single Assignment (SSA)a = 1 c = a + 2
b = 1 c = b + 2
d = a + b + c
a1 = 1 c1 = a1 + 2
b1 = 1 c2 = b1 + 2
c3 = (c1, c2)d1 = c3 + 2
217
Ejemplo DUentry
k = false i = 1 j = 2
j = j * 2 k = true i = i + 1
print j i = i + 1
k
exit
i < n
218
Ejemplo DUentry
k1 = false i1 = 1 j1 = 2
j2 = j3 * 2 k2 = true i2 = i3 + 1 print j3 i4 = i3 + 1
k3
i5 = (i3, i4)
exit
i3 = (i1, i2) j3 = (j1, j2) k3 = (k1, k2)
i1 < n
219
Lecturas
• Ballena– Capítulo 12
• Tigre– 17.1 - 17.4, 19.1, 19.2
top related