Beruflich Dokumente
Kultur Dokumente
2
Representando el control de flujo
del progama
• Forma un grafo
4
Identificando loops de estructuras
recursivas
• Identificar aristas de retorno
bb1
• Encontrar los nodos y aristas en el
loop dado por la arista de retorno
• Aparte de la arista de retorno bb2
– Aristas entrantes sólo al bloque
básico con la cabeza de la arista bb3 bb4
de retorno
– Una arista saliente del bloque bb5
básico a la cola de la arista de
retorno
bb6
• ¿Cómo encontramos las aristas de
retorno?
5
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
6
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los
nodos contenga todos los nodos bb2
– Visitar los nodos en cualquier
orden
– Hacer que el conjunto de bb3 bb4
dominators del nodo actual sea la
intersección del conjunto de
dominators del nodo predecesor bb5
y el nodo actual
– Repetir hasta que no hayan bb6
cambios
7
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de bb1
bb2
dominators del resto de los bb3
nodos contenga todos los nodos bb4 bb2
bb5
– Visitar los nodos en cualquier bb1 bb6 bb1
orden bb2 bb2
bb3 bb3 bb4 bb3
– Hacer que el conjunto de bb4 bb4
bb5 bb1 bb5
dominators del nodo actual sea la bb6 bb2 bb6
intersección del conjunto de bb3
dominators del nodo predecesor bb4 bb5
bb5
y el nodo actual bb6
– Repetir hasta que no hayan bb1
cambios
bb2
bb3
bb6
bb4
bb5
bb6
8
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de bb1
bb2
dominators del resto de los bb3
nodos contenga todos los nodos bb4 bb2
bb5
– Visitar los nodos en cualquier bb1 bb6 bb1
orden bb2 bb2
bb3 bb3 bb4 bb3
– Hacer que el conjunto de bb4 bb4
bb5 bb1 bb5
dominators del nodo actual sea la bb6 bb2 bb6
intersección del conjunto de bb3
dominators del nodo predecesor bb4 bb5
bb5
y el nodo actual bb6
– Repetir hasta que no hayan bb1
cambios
bb2
bb3
bb6
bb4
bb5
bb6
9
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de bb1
bb2
dominators del resto de los bb3
nodos contenga todos los nodos bb4 bb2
bb5
– Visitar los nodos en cualquier bb1 bb6 bb1
orden bb2 bb2
bb3 bb3 bb4 bb3
– Hacer que el conjunto de bb4 bb4
bb5 bb1 bb5
dominators del nodo actual sea la bb6 bb2 bb6
intersección del conjunto de bb3
dominators del nodo predecesor bb4 bb5
bb5
y el nodo actual bb6
– Repetir hasta que no hayan bb1
cambios
bb2
bb3
bb6
bb4
bb5
bb6
10
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de bb1
bb2
dominators del resto de los bb3
nodos contenga todos los nodos bb4 bb2
bb5
– Visitar los nodos en cualquier bb1 bb6 bb1
orden bb2 bb2
bb3 bb3 bb4 bb3
– Hacer que el conjunto de bb4 bb4
bb5 bb1 bb5
dominators del nodo actual sea la bb6 bb2 bb6
intersección del conjunto de bb3
dominators del nodo predecesor bb4 bb5
bb5
y el nodo actual bb6
– Repetir hasta que no hayan bb1
cambios
bb2
bb3
bb6
bb4
bb5
bb6
11
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier bb1 bb1
orden bb2 bb2
bb3 bb3 bb4 bb3
– Hacer que el conjunto de bb4 bb4
bb5 bb1 bb5
dominators del nodo actual sea la bb6 bb2 bb6
intersección del conjunto de bb3
dominators del nodo predecesor bb4 bb5
bb5
y el nodo actual bb6
– Repetir hasta que no hayan bb1
cambios
bb2
bb3
bb6
bb4
bb5
bb6
12
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier bb1 bb1
orden bb2 bb2
bb3 bb3 bb4 bb3
– Hacer que el conjunto de bb4 bb4
bb5 bb1 bb5
dominators del nodo actual sea la bb6 bb2 bb6
intersección del conjunto de bb3
dominators del nodo predecesor bb4 bb5
bb5
y el nodo actual bb6
– Repetir hasta que no hayan bb1
cambios
bb2
bb3
bb6
bb4
bb5
bb6
13
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier bb1
orden bb1 bb2
bb2 bb3 bb4 bb3
– Hacer que el conjunto de bb3 bb4
bb1 bb5
dominators del nodo actual sea la bb2 bb6
intersección del conjunto de bb3
dominators del nodo predecesor bb4 bb5
bb5
y el nodo actual bb6
– Repetir hasta que no hayan bb1
cambios
bb2
bb3
bb6
bb4
bb5
bb6
14
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier bb1
orden bb1 bb2
bb2 bb3 bb4 bb3
– Hacer que el conjunto de bb3 bb4
bb1 bb5
dominators del nodo actual sea la bb2 bb6
intersección del conjunto de bb3
dominators del nodo predecesor bb4 bb5
bb5
y el nodo actual bb6
– Repetir hasta que no hayan bb1
cambios
bb2
bb3
bb6
bb4
bb5
bb6
15
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier bb1
orden bb1 bb2
bb2 bb3 bb4 bb3
– Hacer que el conjunto de bb3 bb4
bb5
dominators del nodo actual sea la bb6
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb3
bb5
y el nodo actual bb5
– Repetir hasta que no hayan bb1
cambios
bb2
bb3
bb6
bb4
bb5
bb6
16
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier bb1
orden bb1 bb2
bb2 bb3 bb4 bb3
– Hacer que el conjunto de bb3 bb4
bb5
dominators del nodo actual sea la bb6
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb3
bb5
y el nodo actual bb5
– Repetir hasta que no hayan bb1
cambios
bb2
bb3
bb6
bb4
bb5
bb6
17
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier bb1
orden bb1 bb2
bb2 bb3 bb4 bb3
– Hacer que el conjunto de bb3 bb4
bb5
dominators del nodo actual sea la bb6
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb3
bb5
y el nodo actual bb5
– Repetir hasta que no hayan bb1
cambios
bb2
bb3
bb6
bb5
bb6
18
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier bb1
orden bb1 bb2
bb2 bb3 bb4 bb3
– Hacer que el conjunto de bb3 bb4
bb5
dominators del nodo actual sea la bb6
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb3
bb5
y el nodo actual bb5
– Repetir hasta que no hayan bb1
cambios
bb2
bb3
bb6
bb5
bb6
19
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier
orden bb1 bb1
– Hacer que el conjunto de
bb2
bb3
bb3 bb4 bb2
bb4
dominators del nodo actual sea la
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb3
bb5
y el nodo actual bb5
– Repetir hasta que no hayan bb1
cambios
bb2
bb3
bb6
bb5
bb6
20
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier
orden bb1 bb1
– Hacer que el conjunto de
bb2
bb3
bb3 bb4 bb2
bb4
dominators del nodo actual sea la
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb3
bb5
y el nodo actual bb5
– Repetir hasta que no hayan bb1
cambios
bb2
bb3
bb6
bb5
bb6
21
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier
orden bb1 bb1
– Hacer que el conjunto de
bb2
bb3
bb3 bb4 bb2
bb4
dominators del nodo actual sea la
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb3
bb5
y el nodo actual bb5
– Repetir hasta que no hayan bb1
cambios
bb2
bb3
bb6
bb5
bb6
22
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier
orden bb1 bb1
– Hacer que el conjunto de
bb2
bb3
bb3 bb4 bb2
bb4
dominators del nodo actual sea la
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb3
bb5
y el nodo actual bb5
– Repetir hasta que no hayan bb1
cambios
bb2
bb3
bb6
bb5
bb6
23
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier
orden bb1 bb1
– Hacer que el conjunto de
bb2
bb3
bb3 bb4 bb2
bb4
dominators del nodo actual sea la
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb3
bb5
y el nodo actual bb5
– Repetir hasta que no hayan bb1
cambios
bb2
bb3
bb6
bb5
bb6
24
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier
orden bb1 bb1
– Hacer que el conjunto de
bb2
bb3
bb3 bb4 bb2
bb4
dominators del nodo actual sea la
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb3
bb5
y el nodo actual bb5
– Repetir hasta que no hayan bb1
cambios
bb2
bb3
bb6
bb5
bb6
25
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier
orden bb1 bb1
– Hacer que el conjunto de
bb2
bb3
bb3 bb4 bb2
bb4
dominators del nodo actual sea la
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb5
bb5
y el nodo actual
– Repetir hasta que no hayan bb1
cambios
bb2
bb3
bb6
bb5
bb6
26
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier
orden bb1 bb1
– Hacer que el conjunto de
bb2
bb3
bb3 bb4 bb2
bb4
dominators del nodo actual sea la
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb5
bb5
y el nodo actual
– Repetir hasta que no hayan bb1
cambios
bb2
bb3
bb6
bb5
bb6
27
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier
orden bb1 bb1
– Hacer que el conjunto de
bb2
bb3
bb3 bb4 bb2
bb4
dominators del nodo actual sea la
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb5
bb5
y el nodo actual
– Repetir hasta que no hayan bb1
cambios
bb2
bb5
bb6
bb6
28
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier
orden bb1 bb1
– Hacer que el conjunto de
bb2
bb3
bb3 bb4 bb2
bb4
dominators del nodo actual sea la
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb5
bb5
y el nodo actual
– Repetir hasta que no hayan bb1
cambios
bb2
bb5
bb6
bb6
29
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier
orden bb1 bb1
– Hacer que el conjunto de
bb2
bb3
bb3 bb4 bb2
bb4
dominators del nodo actual sea la
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb5
bb5
y el nodo actual
– Repetir hasta que no hayan bb1
cambios
bb2
bb5
bb6
bb6
30
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier
orden bb1 bb1
– Hacer que el conjunto de
bb2
bb3
bb3 bb4 bb2
bb4
dominators del nodo actual sea la
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb5
bb5
y el nodo actual
– Repetir hasta que no hayan bb1
cambios
bb2
bb5
bb6
bb6
31
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier
orden bb1 bb1
– Hacer que el conjunto de
bb2
bb3
bb3 bb4 bb2
bb4
dominators del nodo actual sea la
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb5
bb5
y el nodo actual
– Repetir hasta que no hayan bb1
cambios
bb2
bb5
bb6
bb6
32
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier
orden bb1 bb1
– Hacer que el conjunto de
bb2
bb3
bb3 bb4 bb2
bb4
dominators del nodo actual sea la
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb5
bb5
y el nodo actual
– Repetir hasta que no hayan bb1
cambios
bb2
bb5
bb6
bb6
33
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier
orden bb1 bb1
– Hacer que el conjunto de
bb2
bb3
bb3 bb4 bb2
bb4
dominators del nodo actual sea la
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb5
bb5
y el nodo actual
– Repetir hasta que no hayan bb1
cambios
bb2
bb5
bb6
bb6
34
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier
orden bb1 bb1
– Hacer que el conjunto de
bb2
bb3
bb3 bb4 bb2
bb4
dominators del nodo actual sea la
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb5
bb5
y el nodo actual
– Repetir hasta que no hayan bb1
cambios
bb2
bb5
bb6
bb6
35
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier
orden bb1 bb1
– Hacer que el conjunto de
bb2
bb3
bb3 bb4 bb2
bb4
dominators del nodo actual sea la
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb5
bb5
y el nodo actual
– Repetir hasta que no hayan bb1
cambios
bb2
bb5
bb6
bb6
36
Computando Dominators
• Algoritmo
– Hacer que el conjunto de
dominators del nodo de entrada
sólo contenga ese nodo {bb1} bb1
– Hacer que el conjunto de
dominators del resto de los bb1
nodos contenga todos los nodos bb2 bb2
– Visitar los nodos en cualquier
orden bb1 bb1
– Hacer que el conjunto de
bb2
bb3
bb3 bb4 bb2
bb4
dominators del nodo actual sea la
intersección del conjunto de bb1
dominators del nodo predecesor
bb2
bb5
bb5
y el nodo actual
– Repetir hasta que no hayan bb1
cambios
bb2
bb5
bb6
bb6
37
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
38
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
39
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
40
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
41
Ejemplo: Expresiones Disponibles
a=b+c
d=e+f
f=a+c
b=a+d
g=a+c
h=c+f
j=a+b+c+d
42
¿Está la expresión disponible?
a=b+c
Sí!
d=e+f
f=a+c
b=a+d
g=a+c
h=c+f
j=a+b+c+d
43
¿Está la expresión disponible?
a=b+c
Sí!
d=e+f
f=a+c
b=a+d
g=a+c
h=c+f
j=a+b+c+d
44
¿Está la expresión disponible?
a=b+c
No!
d=e+f
f=a+c
b=a+d
g=a+c
h=c+f
j=a+b+c+d
45
¿Está la expresión disponible?
a=b+c
No!
d=e+f
f=a+c
b=a+d
g=a+c
h=c+f
j=a+b+c+d
46
¿Está la expresión disponible?
a=b+c
No!
d=e+f
f=a+c
b=a+d
g=a+c
h=c+f
j=a+b+c+d
47
¿Está la expresión disponible?
a=b+c
Sí!
d=e+f
f=a+c
b=a+d
g=a+c
h=c+f
j=a+b+c+d
48
¿Está la expresión disponible?
a=b+c
Sí!
d=e+f
f=a+c
b=a+d
g=a+c
h=c+f
j=a+b+c+d
49
Uso de Expresiones Disponibles
a=b+c
d=e+f
f=a+c
b=a+d
g=a+c
h=c+f
j=a+b+c+d
50
Uso de Expresiones Disponibles
a=b+c
d=e+f
f=a+c
b=a+d
g=a+c
h=c+f
j=a+b+c+d
51
Uso de Expresiones Disponibles
a=b+c
d=e+f
f=a+c
b=a+d
g=a+c
h=c+f
j=a+b+c+d
52
Uso de Expresiones Disponibles
a=b+c
d=e+f
f=a+c
b=a+d
g=f
h=c+f
j=a+b+c+d
53
Uso de Expresiones Disponibles
a=b+c
d=e+f
f=a+c
b=a+d
g=f
h=c+f
j=a+b+c+d
54
Uso de Expresiones Disponibles
a=b+c
d=e+f
f=a+c
b=a+d
g=f
h=c+f
j=a+c+b+d
55
Uso de Expresiones Disponibles
a=b+c
d=e+f
f=a+c
b=a+d
g=f
h=c+f
j=f+ b+d
56
Uso de Expresiones Disponibles
a=b+c
d=e+f
f=a+c
b=a+d
g=f
h=c+f
j=f+ b+d
57
Resumen
5
59
Ejemplo: Expresiones Disponibles
a=b+c
d=e+f
f=a+c
b=a+d
g=a+c
h=c+f
j=a+b+c+d
60
Ejemplo: Expresiones Disponibles
a=b+c 1
d=e+f 2
f=a+c 3
b=a+d 5
g=a+c 4
h=c+f 6
j=a+b+c+d 7
61
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
62
Algoritmo para Expresiones 15
Disponibles
• Asignar un número a cada expresión
• Calcular conjuntos gen y kill para cada
expresión
63
Conjuntos Gen y Kill
a=b+c 1
d=e+f 2
f=a+c 3
b=a+d 5
g=a+c 4 h=c+f 6
j=a+b+c+d 7
64
Conjuntos Gen y Kill
a=b+c 1 a=b+c 1
d=e+f 2
f=a+c 3
d=e+f 2
b=a+d 5
g=a+c 4 h=c+f 6
f=a+c 3
j=a+b+c+d 7
65
Conjuntos Gen y Kill
a=b+c 1
gen = { b + c } a=b+c 1
d=e+f 2
kill = { cualquier expr con a } f=a+c 3
d=e+f 2
gen = { e + f }
kill = { cualquier expr con d } b=a+d 5
g=a+c 4 h=c+f 6
f=a+c 3
gen = { a + c }
kill = {cualquier expr con f }
j=a+b+c+d 7
66
Conjuntos Gen y Kill
a=b+c 1 a=b+c 1
gen = { 1 } d=e+f 2
f=a+c 3
kill = { 3, 4, 5, 7 }
d=e+f 2
gen = { 2 }
b=a+d 5
kill = { 5, 7 } g=a+c 4 h=c+f 6
f=a+c 3
gen = { 3 }
kill = { 2, 6 }
j=a+b+c+d 7
67
Algoritmo para Expresiones 16
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
68
Conjuntos Gen y Kill agregados
a=b+c 1 • Propagar todos los
gen = { 1 } conjuntos gen y kill desde
kill = { 3, 4, 5, 7 } el comienzo del bloque
básico hasta el final del
d=e+f 2 bloque básico
gen = { 2 }
kill = { 5, 7 }
f=a+c 3
gen = { 3 }
kill = { 2, 6 }
69
Conjunto Gen agregado
InGEN set
a=b+c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
OutGEN set
OutGEN =
70
Conjunto Gen agregado
InGEN set
• El conjunto gen en la expresión
actual debe estar en el conjunto
OutGEN a=b+c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
OutGEN set
OutGEN = gen
71
Conjunto Gen agregado
InGEN set
• El conjunto gen en la expresión
actual debe estar en el conjunto
OutGEN a=b+c 1
gen = { 1 }
• Cualquier expresión en el
kill = { 3, 4, 5, 7 }
conjunto InGEN que no está en
el conjunto kill debe estar en el
conjunto OutGEN OutGEN set
72
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 }
73
Conjunto Gen agregado
InGEN = { }
a=b+c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
d=e+f 2
gen = { 2 }
kill = { 5, 7 }
f=a+c 3
gen = { 3 }
kill = { 2, 6 }
74
Conjunto Gen agregado
InGEN = { }
a=b+c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
OutGEN = { 1 } ∪ ({ } - { 3,4,5,7})
d=e+f 2
gen = { 2 }
kill = { 5, 7 }
f=a+c 3
gen = { 3 }
kill = { 2, 6 }
75
Conjunto Gen agregado
InGEN = { }
a=b+c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
OutGEN = { 1 }
d=e+f 2
gen = { 2 }
kill = { 5, 7 }
f=a+c 3
gen = { 3 }
kill = { 2, 6 }
76
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 }
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 = { 2 } ∪ ({ 1 } - { 5,7 })
f=a+c 3
gen = { 3 }
kill = { 2, 6 }
78
Conjunto Gen agregado
a=b+c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
InGEN = { 1 }
d=e+f 2
gen = { 2 }
kill = { 5, 7 }
OutGEN = { 1, 2 }
f=a+c 3
gen = { 3 }
kill = { 2, 6 }
79
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)
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 = { 3 } ∪ ({ 1,2 } - { 2,6 })
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 = { 1, 3 }
82
Conjunto Gen agregado
A=b+c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
GEN = { 1, 3 }
d=e+f 2
gen = { 2 }
kill = { 5, 7 }
f=a+c 3
gen = { 3 }
kill = { 2, 6 }
83
Conjunto Kill agregado
InKILL set
a=b+c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
OutKILL set
OutKILL =
84
Conjunto Kill agregado
InKILL set
• El conjunto kill de la expresión
actual debe estar en el conjunto
OutKILL a=b+c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
OutKILL set
OutKILL = kill
85
Conjunto Kill agregado
InKILL set
• El conjunto kill de la expresión
actual debe estar en el conjunto
OutKILL a=b+c 1
gen = { 1 }
• Cualquier conjunto en el
kill = { 3, 4, 5, 7 }
InKILL debe estar en el
OutKILL
OutKILL set
86
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 }
87
Conjunto Kill agregado
InKILL = { }
a=b+c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
d=e+f 2
gen = { 2 }
kill = { 5, 7 }
f=a+c 3
gen = { 3 }
kill = { 2, 6 }
88
Conjunto Kill agregado
InKILL = { }
a=b+c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
OutKILL = { 3,4,5,7 } ∪ { }
d=e+f 2
gen = { 2 }
kill = { 5, 7 }
f=a+c 3
gen = { 3 }
kill = { 2, 6 }
89
Conjunto Kill agregado
InKILL = { }
a=b+c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
OutKILL = { 3,4,5,7 }
d=e+f 2
gen = { 2 }
kill = { 5, 7 }
f=a+c 3
gen = { 3 }
kill = { 2, 6 }
90
Conjunto Kill agregado
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 }
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 = { 5,7 } ∪ { 3,4,5,7 }
f=a+c 3
gen = { 3 }
kill = { 2, 6 }
92
Conjunto Kill agregado
a=b+c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
InKILL = { 3,4,5,7 }
d=e+f 2
gen = { 2 }
kill = { 5, 7 }
OutKILL = { 3,4,5,7 }
f=a+c 3
gen = { 3 }
kill = { 2, 6 }
93
Conjunto Kill agregado
a=b+c 1
gen = { 1 }
kill = { 3, 4, 5, 7 }
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
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 = { 3,4,5,7 } ∪ { 2,6 }
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 = { 2,3,4,5,6,7 }
96
Conjunto Kill agregado
KILL = { 2, 3, 4, 5, 6, 7 } 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 }
97
Conjuntos Gen y Kill agregados
a=b+c 1 Gen = { 1, 3}
d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
j=a+b+c+d 7 Gen = { 7 }
Kill = { }
98
Algoritmo para Expresiones 20
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
99
Conjuntos Gen y Kill agregados
IN = {1,2,3,4,5,6,7}
a=b+c 1 Gen = { 1, 3}
d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,2,3,4,5,6,7} OUT = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
j=a+b+c+d 7 Gen = { 7 }
Kill = { }
OUT = {1,2,3,4,5,6,7}
100
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
101
Propagar conjunto de disponibles
IN set
gen = { … }
kill = { ... }
OUT set
OUT =
102
Propagar conjunto de disponibles
IN set
• Si la expresión es generada (en
el conjunto gen) entonces está
disponible al final gen = { … }
– Debe estar en el conjunto OUT kill = { ... }
OUT set
OUT = gen
103
Propagar conjunto de disponibles
IN set
• Si la expresión es generada (en
el conjunto gen) entonces está
disponible al final gen = { … }
– Debe estar en el conjunto OUT kill = { ... }
• Cualquier expresión disponible
en la entrada (en el conjunto IN)
y que no está en el conjunto kill OUT set
debe estar disponible al final
et
U
Ts
T
se
OU
t
IN set
IN =
OUT = gen ∪ (IN - kill)
105
Propagar conjunto de disponibles
• La expresión está
disponible sólo está O
et
U
Ts
T
disponible en todos los se
OU
t
caminos de entrada
IN set
IN = ∩ OUT
OUT = gen ∪ (IN - kill)
106
Conjuntos Gen y Kill agregados
IN = {1,2,3,4,5,6,7}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,2,3,4,5,6,7} OUT = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
j=a+b+c+d 7 Gen = { 7 }
Kill = { }
OUT = {1,2,3,4,5,6,7}
107
Conjuntos Gen y Kill agregados
IN = {1,2,3,4,5,6,7}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,2,3,4,5,6,7} OUT = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
j=a+b+c+d 7 Gen = { 7 }
Kill = { }
OUT = {1,2,3,4,5,6,7}
108
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,2,3,4,5,6,7} OUT = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
j=a+b+c+d 7 Gen = { 7 }
Kill = { }
OUT = {1,2,3,4,5,6,7}
109
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,2,3,4,5,6,7} OUT = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
j=a+b+c+d 7 Gen = { 7 }
Kill = { }
OUT = {1,2,3,4,5,6,7}
110
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,2,3,4,5,6,7} OUT = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
j=a+b+c+d 7 Gen = { 7 }
Kill = { }
OUT = {1,2,3,4,5,6,7}
111
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {1,2,3,4,5,6,7}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,2,3,4,5,6,7} OUT = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
j=a+b+c+d 7 Gen = { 7 }
Kill = { }
OUT = {1,2,3,4,5,6,7}
112
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {1,2,3,4,5,6,7}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
j=a+b+c+d 7 Gen = { 7 }
Kill = { }
OUT = {1,2,3,4,5,6,7}
113
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {1,2,3,4,5,6,7}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {1,2,3,4,5,6,7}
IN = {1,2,3,4,5,6,7}
j=a+b+c+d 7
Gen = { 7 }
Kill = { }
OUT = {1,2,3,4,5,6,7}
114
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {1,2,3,4,5,6,7}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {1,2,3,4,5,6,7}
IN = {1,3,4}
j=a+b+c+d 7
Gen = { 7 }
Kill = { }
OUT = {1,2,3,4,5,6,7}
115
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {1,2,3,4,5,6,7}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {1,2,3,4,5,6,7}
IN = {1,3,4}
j=a+b+c+d 7
Gen = { 7 }
Kill = { }
OUT = {1,3,4,7}
116
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {1,2,3,4,5,6,7}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {1,2,3,4,5,6,7}
IN = {1,3,4}
j=a+b+c+d 7
Gen = { 7 }
Kill = { }
OUT = {1,3,4,7}
117
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {1,3}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {1,2,3,4,5,6,7}
IN = {1,3,4}
j=a+b+c+d 7
Gen = { 7 }
Kill = { }
OUT = {1,3,4,7}
118
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {1,3}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {3,5,6}
IN = {1,3,4}
j=a+b+c+d 7
Gen = { 7 }
Kill = { }
OUT = {1,3,4,7}
119
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {1,3}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {3,5,6}
IN = {1,3,4}
j=a+b+c+d 7
Gen = { 7 }
Kill = { }
OUT = {1,3,4,7}
120
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {1,3}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {3,5,6}
IN = {1,3,4}
j=a+b+c+d 7
Gen = { 7 }
Kill = { }
OUT = {1,3,4,7}
121
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {1,3}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {3,5,6}
IN = {1,3,4}
j=a+b+c+d 7
Gen = { 7 }
Kill = { }
OUT = {1,3,4,7}
122
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {1,3}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {3,5,6}
IN = {1,3,4}
Gen = { 7 }
j=a+b+c+d 7
Kill = { }
OUT = {1,3,4,7}
123
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {1,3}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {3,5,6}
IN = {3}
Gen = { 7 }
j=a+b+c+d 7
Kill = { }
OUT = {1,3,4,7}
124
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {1,3}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {3,5,6}
IN = {3}
Gen = { 7 }
j=a+b+c+d 7
Kill = { }
OUT = {3,7}
125
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {1,3}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {3,5,6}
IN = {3}
Gen = { 7 }
j=a+b+c+d 7
Kill = { }
OUT = {3,7}
126
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {3}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {3,5,6}
IN = {3}
Gen = { 7 }
j=a+b+c+d 7
Kill = { }
OUT = {3,7}
127
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {3}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {3,5,6}
IN = {3}
Gen = { 7 }
j=a+b+c+d 7
Kill = { }
OUT = {3,7}
128
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {3}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {3,5,6}
IN = {3}
Gen = { 7 }
j=a+b+c+d 7
Kill = { }
OUT = {3,7}
129
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {3}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
Kill = { } g=a+c 4 h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {3,5,6}
IN = {3}
Gen = { 7 }
j=a+b+c+d 7
Kill = { }
OUT = {3,7}
130
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {3}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {3,5,6}
IN = {3}
Gen = { 7 }
j=a+b+c+d 7
Kill = { }
OUT = {3,7}
131
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {3}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {3,5,6}
IN = {3}
Gen = { 7 }
j=a+b+c+d 7
Kill = { }
OUT = {3,7}
132
Conjuntos Gen y Kill agregados
IN = {}
IN = ∩ OUT a=b+c 1 Gen = { 1, 3}
OUT = gen ∪ (IN - kill) d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
OUT = {1,3}
IN = {3}
IN = {1,3}
Gen = { 4 } b=a+d 5 Gen = { 5, 6 }
g=a+c 4
Kill = { } h=c+f 6 Kill = { 1, 7 }
OUT = {1,3,4} OUT = {3,5,6}
IN = {3}
Gen = { 7 }
j=a+b+c+d 7
Kill = { }
OUT = {3,7}
133
Algoritmo para Expresiones 28
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
134
Propagar dentro del bloque básico
IN set
• Comenzar con el conjunto IN de
expresiones disponibles
• Linealmente propagar hacia a=b+c 1
gen = { 1 }
abajo del bloque básico
kill = { 3, 4, 5, 7 }
– Igual que el paso de data-flow
– Una sola pasada ya que no hay
aristas de retorno OUT set
135
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 }
ae = { 1, 3 } b=a+d 5
g=a+c 4
ae = { 3, 5 }
ae = { 1, 3, 4 } h=c+f 6
ae = { 3, 5, 6 }
ae = { 3 }
j=a+b+c+d 7
ae = { 3, 7 }
136
Resumen
5
138
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)
139
Conjuntos Gen y Kill agregados
j=a+b+c+d 7 Gen = { 7 }
Kill = { }
140
Conjuntos Gen y Kill agregados
•Se requieren 7 bits por
conjunto a=b+c 1 Gen = { 1,3}
d=e+f 2 Kill = { 2,3,4,5,6,7 }
f=a+c 3
j=a+b+c+d 7 Gen = { 7 }
Kill = { }
141
Conjuntos Gen y Kill agregados
•Se requieren 7 bits por
conjunto a=b+c 1 Gen = 1010000
d=e+f 2 Kill = 0111111
f=a+c 3
142
Resumen
5
144
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
145
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] (⊥ )
146
Lattice
• Ejemplo: el lattice para el problema de “reaching
definition” cuando sólo hay 3 definiciones
T = { d1, d2, d3 }
{ d2, d3 }
{ d1, d3 }
{ d1, d2 }
{ d2 } { d3 }
{ d1 }
⊥ ={ }
147
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
148
Operaciones Meet y Join
T = { d1, d2, d3 }
{ d2, d3 }
{ d1, d3 }
{ d1, d2 }
{ d2 } { d3 }
{ d1 }
⊥ ={ }
149
Operaciones Meet y Join
T = { d1, d2, d3 }
{ d2, d3 }
{ d1, d3 }
{ d1, d2 }
{ d2 } { d3 }
{ d1 }
⊥ ={ }
150
Operaciones Meet y Join
T = { d1, d2, d3 }
{ d2, d3 }
{ d1, d3 }
{ d1, d2 }
{ d2 } { d3 }
{ d1 }
⊥ ={ }
151
Operaciones Meet y Join
{ d1, d2 } ∧ { d2, d3 } = { d2 }
T = { d1, d2, d3 }
{ d2, d3 }
{ d1, d3 }
{ d1, d2 }
{ d2 } { d3 }
{ d1 }
⊥ ={ }
152
Operaciones Meet y Join
{ d1, d2 } ∨ { d3 } = ???
T = { d1, d2, d3 }
{ d2, d3 }
{ d1, d3 }
{ d1, d2 }
{ d2 } { d3 }
{ d1 }
⊥ ={ }
153
Operaciones Meet y Join
{ d1, d2 } ∨ { d3 } = ???
T = { d1, d2, d3 }
{ d2, d3 }
{ d1, d3 }
{ d1, d2 }
{ d2 } { d3 }
{ d1 }
⊥ ={ }
154
Operaciones Meet y Join
{ d1, d2 } ∨ { d3 } = ???
T = { d1, d2, d3 }
{ d2, d3 }
{ d1, d3 }
{ d1, d2 }
{ d2 } { d3 }
{ d1 }
⊥ ={ }
155
Operaciones Meet y Join
{ d1, d2 } ∨ { d3 } = ???
T = { d1, d2, d3 }
{ d2, d3 }
{ d1, d3 }
{ d1, d2 }
{ d2 } { d3 }
{ d1 }
⊥ ={ }
156
Operaciones Meet y Join
T = { d1, d2, d3 }
{ d2, d3 }
{ d1, d3 }
{ d1, d2 }
{ d2 } { d3 }
{ d1 }
⊥ ={ }
157
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
158
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
159
Orden Parcial
• Definimos a ⊆ b sí y sólo sí a ∧b = b
• Propiedades
– a ⊆ b ⇒ existe un camino desde b hasta a
T = { d1, d2, d3 }
{ d2, d3 }
{ d1, d3 }
{ d1, d2 }
{ d2 } { d3 }
{ d1 }
⊥ ={ }
160
Alto del Lattice
• El alto del lattice es la cadena ascendiente
más larga en el lattice
– (T, a, b, c, …, ⊥ )
161
Alto del Lattice
• El alto del lattice es la cadena ascendiente más
larga en el lattice
– (T, a, b, c, …, ⊥ ) T = { d1, d2, d3 }
{ d2, d3 }
{ d1, d3 }
{ d1, d2 }
{ d2 } { d3 }
{ d1 }
⊥ ={ }
• Punto Fijo
– Un punto fijo es un elemento a ∈L tal que
f(a) = a
163
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
164
Resumen
5
166
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
167
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 =
168
Ejemplo DU
entry
k = false
i=1
j=2
i<n
k
j=j*2
k = true
i=i+1
print j i=i+1
exit
169
Ejemplo DU
entry
k = false 1
i=1 2
j=2 3
i<n
k
j=j*2 4
k = true 5
i=i+1 6
print j i=i+1
7
exit
170
Ejemplo DU
entry
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
gen ={ }
i<n
kill = { }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
kill = { } 7 kill = { 2,6 }
exit
171
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { }
IN = { }
gen ={ }
i<n
kill = { }
OUT = IN = { }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { } kill = { } 7 OUT = { }kill = { 2,6 }
OUT = { }
IN = { }
exit
172
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { }
IN = { }
gen ={ }
i<n
kill = { }
OUT = IN = { }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { } kill = { } 7 OUT = { }kill = { 2,6 }
OUT = { }
IN = { }
exit
173
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { }
IN = { }
gen ={ }
i<n
kill = { }
OUT = IN = { }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { } kill = { } 7 OUT = { }kill = { 2,6 }
OUT = { }
IN = { }
exit
174
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { }
gen ={ }
i<n
kill = { }
OUT = IN = { }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { } kill = { } 7 OUT = { }kill = { 2,6 }
OUT = { }
IN = { }
exit
175
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3 }
gen ={ }
i<n
kill = { }
OUT = IN = { }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { } kill = { } 7 OUT = { }kill = { 2,6 }
OUT = { }
IN = { }
exit
176
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3 }
gen ={ }
i<n
kill = { }
OUT = IN = { }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { } kill = { } 7 OUT = { }kill = { 2,6 }
OUT = { }
IN = { }
exit
177
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { } kill = { } 7 OUT = { }kill = { 2,6 }
OUT = { }
IN = { }
exit
178
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { } kill = { } 7 OUT = { }kill = { 2,6 }
OUT = { }
IN = { }
exit
179
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
kill
OUT = { 4, 5, 6 } = { } 7 OUT = { }kill = { 2,6 }
OUT = { }
IN = { }
exit
180
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
kill
OUT = { 4, 5, 6 } = { } 7 OUT = { }kill = { 2,6 }
OUT = { }
IN = { }
exit
181
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
={ } 7 OUT = { }
kill = { 2,6 }
IN = { }
exit
182
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
={ } 7 OUT = { }
kill = { 2,6 }
IN = { }
exit
183
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3 } 7 OUT = { }
kill = { 2,6 }
IN = { }
exit
184
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3 } 7 OUT = { }
kill = { 2,6 }
IN = { }
exit
185
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3 } 7 kill = { 2,6 }
OUT = { 1, 3, 7 }
IN = { }
exit
186
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3 } 7 kill = { 2,6 }
OUT = { 1, 3, 7 }
IN = { 1, 2, 3, 7 }
exit
187
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3 } 7 kill = { 2,6 }
OUT = { 1, 3, 7 }
IN = { 1, 2, 3, 7 }
exit
188
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3 } 7 kill = { 2,6 }
OUT = { 1, 3, 7 }
IN = { 1, 2, 3, 7 }
exit
189
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3 } 7 kill = { 2,6 }
OUT = { 1, 3, 7 }
IN = { 1, 2, 3, 7 }
exit
190
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3 } 7 kill = { 2,6 }
OUT = { 1, 3, 7 }
IN = { 1, 2, 3, 7 }
exit
191
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3 } 7 kill = { 2,6 }
OUT = { 1, 3, 7 }
IN = { 1, 2, 3, 7 }
exit
192
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3 } 7 kill = { 2,6 }
OUT = { 1, 3, 7 }
IN = { 1, 2, 3, 7 }
exit
193
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3 } 7 kill = { 2,6 }
OUT = { 1, 3, 7 }
IN = { 1, 2, 3, 7 }
exit
194
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3, 4, 5, 6 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3 } 7 kill = { 2,6 }
OUT = { 1, 3, 7 }
IN = { 1, 2, 3, 7 }
exit
195
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3, 4, 5, 6 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3 } 7 kill = { 2,6 }
OUT = { 1, 3, 7 }
IN = { 1, 2, 3, 7 }
exit
196
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3, 4, 5, 6 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3, 4, 5, 6 } 7 kill = { 2,6 }
OUT = { 1, 3, 7 }
IN = { 1, 2, 3, 7 }
exit
197
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3, 4, 5, 6 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3, 4, 5, 6 } 7 kill = { 2,6 }
OUT = { 1, 3, 7 }
IN = { 1, 2, 3, 7 }
exit
198
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3, 4, 5, 6 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3, 4, 5, 6 } 7 kill = { 2,6 }
OUT = { 1, 3, 4, 5, 7 }
IN = { 1, 2, 3, 7 }
exit
199
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3, 4, 5, 6 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3, 4, 5, 6 } 7 kill = { 2,6 }
OUT = { 1, 3, 4, 5, 7 }
IN = { 1, 2, 3, 4, 5, 6, 7 }
exit
200
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3, 4, 5, 6 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3, 4, 5, 6 } 7 kill = { 2,6 }
OUT = { 1, 3, 4, 5, 7 }
IN = { 1, 2, 3, 4, 5, 6, 7 }
exit
201
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3, 4, 5, 6 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3, 4, 5, 6 } 7 kill = { 2,6 }
OUT = { 1, 3, 4, 5, 7 }
IN = { 1, 2, 3, 4, 5, 6, 7 }
exit
202
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3, 4, 5, 6 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3, 4, 5, 6 } 7 kill = { 2,6 }
OUT = { 1, 3, 4, 5, 7 }
IN = { 1, 2, 3, 4, 5, 6, 7 }
exit
203
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3, 4, 5, 6 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3, 4, 5, 6 } 7 kill = { 2,6 }
OUT = { 1, 3, 4, 5, 7 }
IN = { 1, 2, 3, 4, 5, 6, 7 }
exit
204
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3, 4, 5, 6 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3, 4, 5, 6 } 7 kill = { 2,6 }
OUT = { 1, 3, 4, 5, 7 }
IN = { 1, 2, 3, 4, 5, 6, 7 }
exit
205
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3, 4, 5, 6 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3, 4, 5, 6 } 7 kill = { 2,6 }
OUT = { 1, 3, 4, 5, 7 }
IN = { 1, 2, 3, 4, 5, 6, 7 }
exit
206
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3, 4, 5, 6 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3, 4, 5, 6 } 7 kill = { 2,6 }
OUT = { 1, 3, 4, 5, 7 }
IN = { 1, 2, 3, 4, 5, 6, 7 }
exit
207
Ejemplo DU
entry
OUT = IN = { }
k = false 1
gen ={ 1, 2, 3 }
i=1 2
j=2 3 kill = { 4,5,6,7 }
OUT = { 1, 2, 3 }
IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
i<n
kill = { }
OUT = IN = { 1, 2, 3, 4, 5, 6 }
gen ={ }
k
j=j*2 4 gen ={ 4,5,6 } kill = { }
k = true 5 kill = { 1,2,3,7 } OUT = IN = { 1, 2, 3, 4, 5, 6 }
i=i+1 6 gen ={ } gen ={ 7 }
print j i=i+1
OUT = { 4, 5, 6 kill
} = { OUT
}
= { 1, 2, 3, 4, 5, 6 } 7 kill = { 2,6 }
OUT = { 1, 3, 4, 5, 7 }
IN = { 1, 2, 3, 4, 5, 6, 7 }
exit
208
Ejemplo DU
entry
IN = { }
k = false 1
i=1 2
j=2 3
IN = { 1, 2, 3, 4, 5, 6 }
i<n
IN = { 1, 2, 3, 4, 5, 6 }
IN = { 1, 2, 3, 4, 5, 6 }
k
j=j*2 4
k = true 5 IN = { 1, 2, 3, 4, 5, 6 } IN = { 1, 2, 3, 4, 5, 6 }
i=i+1 6
print j i=i+1
7
IN = { 1, 2, 3, 4, 5, 6, 7 }
exit
209
Cadenas DU
• En cada uso de la variable, apunta a todas las
posibles definiciones
– Información muy útil
– Usada en muchas optimizaciones
210
Resumen
5
212
Forma Static Single Assignment (SSA)
a=1
b=a+2
c=a+b
a=a+1
d=a+b
213
Forma Static Single Assignment (SSA)
a=1
b=a+2
c=a+b
a=a+1
d=a+b
a1 = 1
b 1 = a1 + 2
c1 = a1 + b1
a2 = a1 + 1
d 1 = a2 + b 1
214
Forma Static Single Assignment (SSA)
a=1 b=1
c=a+2 c=b+2
d=a+b+c
215
Forma Static Single Assignment (SSA)
a=1 b=1
c=a+2 c=b+2
d=a+b+c
a1 = 1 b1 = 1
c1 = a1 + 2 c2 = b1 + 2
c3 = Φ (c1, c2)
d 1 = c3 + 2
216
Ejemplo DU
entry
k = false
i=1
j=2
i<n
k
j=j*2
k = true
i=i+1
print j i=i+1
exit
217
Ejemplo DU
entry
k1 = false
i1 = 1
j1 = 2
i3 = Φ (i1, i2)
j3 = Φ (j1, j2)
k3 = Φ (k1,
k2)
i1 < n
k3
j2 = j3 * 2
k2 = true
i2 = i3 + 1 print j3 i4 = i3 + 1
i5 = Φ (i3, i4)
218 exit
Lecturas
• Ballena
– Capítulo 12
• Tigre
– 17.1 - 17.4, 19.1, 19.2
219