data-flow analysis: reaching definitions
TRANSCRIPT
DATA-FLOW ANALYSIS
/ 16
• ¿Para qué hacemos data-flow analysis?
•Optimizar el código.•Detectar errores.
DATA-FLOW ANALYSIS
2
/ 16
• Es un método para detectar posibles usos de variables antes de ser definidas.
• Es un tipo de análisis estático que determina cuales son las definiciones que pueden alcanzar un punto dado en el código.
• Es un análisis hacia delante (forward).
REACHING DEFINITIONS
3
/ 16
• Una definición de una variable x es una sentencia que asigna, o puede asignar, un valor a x.
• Una definición d alcanza un punto p si existe un camino entre ellos tal que d no es reemplazada por otra definición.
REACHING DEFINITIONS
4
/ 16
• Por ejemplo: • Genera una definición d de la variable u.
• Reemplaza a todas las anteriores definiciones de u.•Deja las definiciones del resto de las variables sin
modificar.
• La función de transferencia de una definición d:
donde = y el resto de las definiciones de u.
REACHING DEFINITIONS
5
1. Introduccion
d : u = x+ y
2. Diagrama de Entidad Relacion
3. Modelo Relacional
4. Codigo de las funcionalidades
3
1. Introduccion
fd(x) = gend [ (x� killd)
2. Diagrama de Entidad Relacion
3. Modelo Relacional
4. Codigo de las funcionalidades
3
1. Introduccion
gend
{d}killdgenB1 = {d1, d2, d3}killB1 = {}genB2 = {d4, d5}killB2 = {d1, d2}genB3 = {d6}killB3 = {d3}genB4 = {d7}killB4 = {d1, d4}genB2 = {d4, d5}killB2 = {d1, d2, d7}
2. Diagrama de Entidad Relacion
3. Modelo Relacional
4. Codigo de las funcionalidades
3
1. Introduccion
gend
{d}killdgenB1 = {d1, d2, d3}killB1 = {}genB2 = {d4, d5}killB2 = {d1, d2}genB3 = {d6}killB3 = {d3}genB4 = {d7}killB4 = {d1, d4}genB2 = {d4, d5}killB2 = {d1, d2, d7}
2. Diagrama de Entidad Relacion
3. Modelo Relacional
4. Codigo de las funcionalidades
3
1. Introduccion
gend
{d}killdgenB1 = {d1, d2, d3}killB1 = {}genB2 = {d4, d5}killB2 = {d1, d2}genB3 = {d6}killB3 = {d3}genB4 = {d7}killB4 = {d1, d4}genB2 = {d4, d5}killB2 = {d1, d2, d7}
2. Diagrama de Entidad Relacion
3. Modelo Relacional
4. Codigo de las funcionalidades
3
/ 16
• ¿Cómo determinamos las definiciones para todo el código?
REACHING DEFINITIONS
6
- Calculamos gen y kill para cada bloque- out[entry] = ∅- Por cada bloque B que no sea entry: out[B] = ∅- Mientas (algún out[] cambie) Por cada bloque B que no sea entry
in[B] = U(out[p]), para todos los predecesores p de Bout[B] = fB(in[B])
/ 167
604 CHAPTER 9. MACHINE-INDEPENDENT OPTIMIZATIONS
ENTRY '-----
gen = { d6 1 B3
kill ={4} B3
senB4 = { d, 1 kill = { dl, d4 }
B4
Figure 9.13: Flow graph for illustrating reaching definitions
This rule extends to a block consisting of any number of statements. Suppose block B has n statements, with transfer functions f i ( x ) = geni U ( x - killi) for i = 1 ,2 , . . . , n. Then the transfer function for block B may be written as:
where
killB = killl U kill2 U . - . U kill,
and
g e n ~ = gen, U (gen,-1 - kill,) U (gennV2 - - kill,) U
- - . U (genl - killz - kills - . - . - kill,)
/ 168
604 CHAPTER 9. MACHINE-INDEPENDENT OPTIMIZATIONS
ENTRY '-----
gen = { d6 1 B3
kill ={4} B3
senB4 = { d, 1 kill = { dl, d4 }
B4
Figure 9.13: Flow graph for illustrating reaching definitions
This rule extends to a block consisting of any number of statements. Suppose block B has n statements, with transfer functions f i ( x ) = geni U ( x - killi) for i = 1 ,2 , . . . , n. Then the transfer function for block B may be written as:
where
killB = killl U kill2 U . - . U kill,
and
g e n ~ = gen, U (gen,-1 - kill,) U (gennV2 - - kill,) U
- - . U (genl - killz - kills - . - . - kill,)
1. Introduccion
genB1 = {d1, d2, d3}killB1 = {}genB2 = {d4, d5}killB2 = {d1, d2}genB3 = {d6}killB3 = {d3}genB4 = {d7}killB4 = {d1, d4}genB2 = {d4, d5}killB2 = {d1, d2, d7}
2. Diagrama de Entidad Relacion
3. Modelo Relacional
4. Codigo de las funcionalidades
3
1. Introduccion
genB1 = {d1, d2, d3}killB1 = {}genB2 = {d4, d5}killB2 = {d1, d2}genB3 = {d6}killB3 = {d3}genB4 = {d7}killB4 = {d1, d4}genB2 = {d4, d5}killB2 = {d1, d2, d7}
2. Diagrama de Entidad Relacion
3. Modelo Relacional
4. Codigo de las funcionalidades
3
1. Introduccion
genB1 = {d1, d2, d3}killB1 = {}genB2 = {d4, d5}killB2 = {d1, d2}genB3 = {d6}killB3 = {d3}genB4 = {d7}killB4 = {d1, d4}genB2 = {d4, d5}killB2 = {d1, d2, d7}
2. Diagrama de Entidad Relacion
3. Modelo Relacional
4. Codigo de las funcionalidades
3
1. Introduccion
genB1 = {d1, d2, d3}killB1 = {}genB2 = {d4, d5}killB2 = {d1, d2}genB3 = {d6}killB3 = {d3}genB4 = {d7}killB4 = {d1, d4}genB2 = {d4, d5}killB2 = {d1, d2, d7}
2. Diagrama de Entidad Relacion
3. Modelo Relacional
4. Codigo de las funcionalidades
3
killB1 = {d4, d5, d6, d7}
1. Introduccion
Intro...
3
/ 169
604 CHAPTER 9. MACHINE-INDEPENDENT OPTIMIZATIONS
ENTRY '-----
gen = { d6 1 B3
kill ={4} B3
senB4 = { d, 1 kill = { dl, d4 }
B4
Figure 9.13: Flow graph for illustrating reaching definitions
This rule extends to a block consisting of any number of statements. Suppose block B has n statements, with transfer functions f i ( x ) = geni U ( x - killi) for i = 1 ,2 , . . . , n. Then the transfer function for block B may be written as:
where
killB = killl U kill2 U . - . U kill,
and
g e n ~ = gen, U (gen,-1 - kill,) U (gennV2 - - kill,) U
- - . U (genl - killz - kills - . - . - kill,)
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
fBi(x) = genBi [ (x� killBi)
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
fBi(x) = genBi [ (x� killBi)
OUT [B] = f(IN [B])
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
fBi(x) = genBi [ (x� killBi)
OUT [B] = f(IN [B])
OUT [entry] = ;
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} k
B1 = {d4, d5, d6, d7}
gB2 = {d4, d5} k
B2 = {d1, d2, d7}
gB3 = {d6} k
B3 = {d3}
gB4 = {d7} k
B4 = {d1, d4}
fBi(x) = gen
Bi [ (x� killBi)
IN [B] =
Sp predecesor de B
OUT [p]
OUT [B] = f(IN [B])
OUT [entry] = ;
OUT [B1] = {d1, d2, d3}
OUT [B2] = {d3, d4, d5, d6}
OUT [B3] = {d4, d5, d6}
OUT [B4] = {d3, d5, d6, d7}
1. Introduccion
Intro...
3
/ 1610
604 CHAPTER 9. MACHINE-INDEPENDENT OPTIMIZATIONS
ENTRY '-----
gen = { d6 1 B3
kill ={4} B3
senB4 = { d, 1 kill = { dl, d4 }
B4
Figure 9.13: Flow graph for illustrating reaching definitions
This rule extends to a block consisting of any number of statements. Suppose block B has n statements, with transfer functions f i ( x ) = geni U ( x - killi) for i = 1 ,2 , . . . , n. Then the transfer function for block B may be written as:
where
killB = killl U kill2 U . - . U kill,
and
g e n ~ = gen, U (gen,-1 - kill,) U (gennV2 - - kill,) U
- - . U (genl - killz - kills - . - . - kill,)
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
fBi(x) = genBi [ (x� killBi)
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
fBi(x) = genBi [ (x� killBi)
OUT [B] = f(IN [B])
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
fBi(x) = genBi [ (x� killBi)
OUT [B] = f(IN [B])
OUT [entry] = ;
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
fBi(x) = genBi [ (x� killBi)
OUT [B] = f(IN [B])
OUT [entry] = ;
OUT [B1] = {d1, d2, d3}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
fBi(x) = genBi [ (x� killBi)
OUT [B] = f(IN [B])
OUT [entry] = ;
OUT [B1] = {d1, d2, d3}
OUT [B2] = {d3, d4, d5}
OUT [B3] = {d4, d5, d6}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
fBi(x) = genBi [ (x� killBi)
OUT [B] = f(IN [B])
OUT [entry] = ;
OUT [B1] = {d1, d2, d3}
OUT [B2] = {d3, d4, d5}
OUT [B3] = {d4, d5, d6}
OUT [B4] = {d3, d5, d6, d7}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}
gB2 = {d4, d5} kB2 = {d1, d2, d7}
gB3 = {d6} kB3 = {d3}
gB4 = {d7} kB4 = {d1, d4}
fBi(x) = genBi [ (x� killBi)
OUT [B] = f(IN [B])
OUT [entry] = ;
OUT [B1] = {d1, d2, d3}
OUT [B2] = {d3, d4, d5, d6}
OUT [B3] = {d4, d5, d6}
OUT [B4] = {d3, d5, d6, d7}
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} k
B1 = {d4, d5, d6, d7}
gB2 = {d4, d5} k
B2 = {d1, d2, d7}
gB3 = {d6} k
B3 = {d3}
gB4 = {d7} k
B4 = {d1, d4}
fBi(x) = gen
Bi [ (x� killBi)
IN [B] =
Sp predecesor de B
OUT [p]
OUT [B] = f(IN [B])
OUT [entry] = ;
OUT [B1] = {d1, d2, d3}
OUT [B2] = {d3, d4, d5, d6}
OUT [B3] = {d4, d5, d6}
OUT [B4] = {d3, d5, d6, d7}
1. Introduccion
Intro...
3
/ 16
• ¿Cómo hacemos para detectar variables usadas antes de ser definidas?
REACHING DEFINITIONS
11
/ 16
• ¿Cómo hacemos para detectar variables usadas antes de ser definidas?
Agregamos una definición ficticia de la variable a testear y vemos si llegamos a un posible uso.
REACHING DEFINITIONS
12
/ 1613
604 CHAPTER 9. MACHINE-INDEPENDENT OPTIMIZATIONS
ENTRY '-----
gen = { d6 1 B3
kill ={4} B3
senB4 = { d, 1 kill = { dl, d4 }
B4
Figure 9.13: Flow graph for illustrating reaching definitions
This rule extends to a block consisting of any number of statements. Suppose block B has n statements, with transfer functions f i ( x ) = geni U ( x - killi) for i = 1 ,2 , . . . , n. Then the transfer function for block B may be written as:
where
killB = killl U kill2 U . - . U kill,
and
g e n ~ = gen, U (gen,-1 - kill,) U (gennV2 - - kill,) U
- - . U (genl - killz - kills - . - . - kill,)
604 CHAPTER 9. MACHINE-INDEPENDENT OPTIMIZATIONS
ENTRY '-----
gen = { d6 1 B3
kill ={4} B3
senB4 = { d, 1 kill = { dl, d4 }
B4
Figure 9.13: Flow graph for illustrating reaching definitions
This rule extends to a block consisting of any number of statements. Suppose block B has n statements, with transfer functions f i ( x ) = geni U ( x - killi) for i = 1 ,2 , . . . , n. Then the transfer function for block B may be written as:
where
killB = killl U kill2 U . - . U kill,
and
g e n ~ = gen, U (gen,-1 - kill,) U (gennV2 - - kill,) U
- - . U (genl - killz - kills - . - . - kill,)
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} k
B1 = {d4, d5, d6, d7}
gB2 = {d4, d5} k
B2 = {d1, d2, d7}
gB3 = {d6} k
B3 = {d3}
gB4 = {d7} k
B4 = {d1, d4}
fBi(x) = gen
Bi [ (x� killBi)
IN [B] =
Sp predecesor de B
OUT [p]
OUT [B] = f(IN [B])
OUT [entry] = ;
OUT [B1] = {d1, d2, d3}
OUT [B2] = {d3, d4, d5, d6}
OUT [B3] = {d4, d5, d6}
OUT [B4] = {d3, d5, d6, d7}
d0 : u3 = �1
1. Introduccion
Intro...
3
/ 1614
604 CHAPTER 9. MACHINE-INDEPENDENT OPTIMIZATIONS
ENTRY '-----
gen = { d6 1 B3
kill ={4} B3
senB4 = { d, 1 kill = { dl, d4 }
B4
Figure 9.13: Flow graph for illustrating reaching definitions
This rule extends to a block consisting of any number of statements. Suppose block B has n statements, with transfer functions f i ( x ) = geni U ( x - killi) for i = 1 ,2 , . . . , n. Then the transfer function for block B may be written as:
where
killB = killl U kill2 U . - . U kill,
and
g e n ~ = gen, U (gen,-1 - kill,) U (gennV2 - - kill,) U
- - . U (genl - killz - kills - . - . - kill,)
604 CHAPTER 9. MACHINE-INDEPENDENT OPTIMIZATIONS
ENTRY '-----
gen = { d6 1 B3
kill ={4} B3
senB4 = { d, 1 kill = { dl, d4 }
B4
Figure 9.13: Flow graph for illustrating reaching definitions
This rule extends to a block consisting of any number of statements. Suppose block B has n statements, with transfer functions f i ( x ) = geni U ( x - killi) for i = 1 ,2 , . . . , n. Then the transfer function for block B may be written as:
where
killB = killl U kill2 U . - . U kill,
and
g e n ~ = gen, U (gen,-1 - kill,) U (gennV2 - - kill,) U
- - . U (genl - killz - kills - . - . - kill,)
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} k
B1 = {d4, d5, d6, d7}
gB2 = {d4, d5} k
B2 = {d1, d2, d7}
gB3 = {d6} k
B3 = {d3}
gB4 = {d7} k
B4 = {d1, d4}
fBi(x) = gen
Bi [ (x� killBi)
IN [B] =
Sp predecesor de B
OUT [p]
OUT [B] = f(IN [B])
OUT [entry] = ;
OUT [B1] = {d1, d2, d3}
OUT [B2] = {d3, d4, d5, d6}
OUT [B3] = {d4, d5, d6}
OUT [B4] = {d3, d5, d6, d7}
d0 : u3 = �1
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} k
B1 = {d4, d5, d6, d7}
gB2 = {d4, d5} k
B2 = {d1, d2, d7}
gB3 = {d6} k
B3 = {d3}
gB4 = {d7} k
B4 = {d1, d4}
fBi(x) = gen
Bi [ (x� killBi)
IN [B] =
Sp predecesor de B
OUT [p]
OUT [B] = f(IN [B])
OUT [entry] = ;
OUT [B1] = {d1, d2, d3}
OUT [B2] = {d3, d4, d5, d6}
OUT [B3] = {d4, d5, d6}
OUT [B4] = {d3, d5, d6, d7}
d0 : u3 = �1
IN [B4] = {d0, ...}
1. Introduccion
Intro...
3
...
/ 1615
604 CHAPTER 9. MACHINE-INDEPENDENT OPTIMIZATIONS
ENTRY '-----
gen = { d6 1 B3
kill ={4} B3
senB4 = { d, 1 kill = { dl, d4 }
B4
Figure 9.13: Flow graph for illustrating reaching definitions
This rule extends to a block consisting of any number of statements. Suppose block B has n statements, with transfer functions f i ( x ) = geni U ( x - killi) for i = 1 ,2 , . . . , n. Then the transfer function for block B may be written as:
where
killB = killl U kill2 U . - . U kill,
and
g e n ~ = gen, U (gen,-1 - kill,) U (gennV2 - - kill,) U
- - . U (genl - killz - kills - . - . - kill,)
604 CHAPTER 9. MACHINE-INDEPENDENT OPTIMIZATIONS
ENTRY '-----
gen = { d6 1 B3
kill ={4} B3
senB4 = { d, 1 kill = { dl, d4 }
B4
Figure 9.13: Flow graph for illustrating reaching definitions
This rule extends to a block consisting of any number of statements. Suppose block B has n statements, with transfer functions f i ( x ) = geni U ( x - killi) for i = 1 ,2 , . . . , n. Then the transfer function for block B may be written as:
where
killB = killl U kill2 U . - . U kill,
and
g e n ~ = gen, U (gen,-1 - kill,) U (gennV2 - - kill,) U
- - . U (genl - killz - kills - . - . - kill,)
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} k
B1 = {d4, d5, d6, d7}
gB2 = {d4, d5} k
B2 = {d1, d2, d7}
gB3 = {d6} k
B3 = {d3}
gB4 = {d7} k
B4 = {d1, d4}
fBi(x) = gen
Bi [ (x� killBi)
IN [B] =
Sp predecesor de B
OUT [p]
OUT [B] = f(IN [B])
OUT [entry] = ;
OUT [B1] = {d1, d2, d3}
OUT [B2] = {d3, d4, d5, d6}
OUT [B3] = {d4, d5, d6}
OUT [B4] = {d3, d5, d6, d7}
d0 : u3 = �1
1. Introduccion
Intro...
3
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} k
B1 = {d4, d5, d6, d7}
gB2 = {d4, d5} k
B2 = {d1, d2, d7}
gB3 = {d6} k
B3 = {d3}
gB4 = {d7} k
B4 = {d1, d4}
fBi(x) = gen
Bi [ (x� killBi)
IN [B] =
Sp predecesor de B
OUT [p]
OUT [B] = f(IN [B])
OUT [entry] = ;
OUT [B1] = {d1, d2, d3}
OUT [B2] = {d3, d4, d5, d6}
OUT [B3] = {d4, d5, d6}
OUT [B4] = {d3, d5, d6, d7}
d0 : u3 = �1
IN [B4] = {d0, ...}
1. Introduccion
Intro...
3
Oops! Llegué a un uso de la definición ficticia...
...
/ 16
RESUMIENDO
• Ataca el problema de uso de variables no definidas.
• Genera el conjunto de definiciones para cada punto del código.
• Análisis forward.
• Función de transferencia:
16
killB1 = {d4, d5, d6, d7}
gB1 = {d1, d2, d3} k
B1 = {d4, d5, d6, d7}
gB2 = {d4, d5} k
B2 = {d1, d2, d7}
gB3 = {d6} k
B3 = {d3}
gB4 = {d7} k
B4 = {d1, d4}
fBi(x) = gen
Bi [ (x� killBi)
IN [B] =
Sp predecesor de B
OUT [p]
OUT [B] = f(IN [B])
OUT [entry] = ;
OUT [B1] = {d1, d2, d3}
OUT [B2] = {d3, d4, d5, d6}
OUT [B3] = {d4, d5, d6}
OUT [B4] = {d3, d5, d6, d7}
d0 : u3 = �1
IN [B4] = {d0, ...}
1. Introduccion
Intro...
3