DATA-FLOW ANALYSIS
/ 16• ¿Para qué hacemos data-flow analysis?• Optimizar el código.• Detectar errores.DATA-FLOW ANALYSIS2
/ 16• Es un método para detectar posibles usos de variables antesde ser definidas.• Es un tipo de análisis estático que det...
/ 16• Una definición de una variable x es una sentencia que asigna, opuede asignar, un valor a x.• Una definición d alcanza ...
/ 16• Por ejemplo:• Genera una definición d de la variable u.• Reemplaza a todas las anteriores definiciones de u.• Deja las...
/ 16• ¿Cómo determinamos las definiciones para todo el código?REACHING DEFINITIONS6- Calculamos gen y kill para cada bloque...
/ 167ENTRY-----gen = { d6 1B3kill ={4}B3senB4 = { d, 1kill = { dl, d4 }B4
/ 168ENTRY-----gen = { d6 1B3kill ={4}B3senB4 = { d, 1kill = { dl, d4 }B41. Introducci´ongenB1= {d1, d2, d3}killB1 = {}gen...
/ 169ENTRY-----gen = { d6 1B3kill ={4}B3senB4 = { d, 1kill = { dl, d4 }B4killB1= {d4, d5, d6, d7}gB1 = {d1, d2, d3} kB1 = ...
/ 1610ENTRY-----gen = { d6 1B3kill ={4}B3senB4 = { d, 1kill = { dl, d4 }B4killB1= {d4, d5, d6, d7}gB1 = {d1, d2, d3} kB1 =...
/ 16• ¿Cómo hacemos para detectar variables usadas antes de serdefinidas?REACHING DEFINITIONS11
/ 16• ¿Cómo hacemos para detectar variables usadas antes de serdefinidas?Agregamos una definición ficticia de la variable a t...
/ 1613604 CHAPTER 9. MACHINE-INDEPENDENT OPTIMIZATIONSENTRY-----gen = { d6 1B3kill ={4}B3senB4 = { d, 1kill = { dl, d4 }B4...
/ 1614604 CHAPTER 9. MACHINE-INDEPENDENT OPTIMIZATIONSENTRY-----gen = { d6 1B3kill ={4}B3senB4 = { d, 1kill = { dl, d4 }B4...
/ 1615604 CHAPTER 9. MACHINE-INDEPENDENT OPTIMIZATIONSENTRY-----gen = { d6 1B3kill ={4}B3senB4 = { d, 1kill = { dl, d4 }B4...
/ 16RESUMIENDO• Ataca el problema de uso de variables no definidas.• Genera el conjunto de definiciones para cada punto delc...
Prochain SlideShare
Chargement dans…5
×

Data-flow Analysis: Reaching Definitions

622 vues

Publié le

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
622
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3
Actions
Partages
0
Téléchargements
2
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Data-flow Analysis: Reaching Definitions

  1. 1. DATA-FLOW ANALYSIS
  2. 2. / 16• ¿Para qué hacemos data-flow analysis?• Optimizar el código.• Detectar errores.DATA-FLOW ANALYSIS2
  3. 3. / 16• Es un método para detectar posibles usos de variables antesde ser definidas.• Es un tipo de análisis estático que determina cuales son lasdefiniciones que pueden alcanzar un punto dado en el código.• Es un análisis hacia delante (forward).REACHING DEFINITIONS3
  4. 4. / 16• Una definición de una variable x es una sentencia que asigna, opuede asignar, un valor a x.• Una definición d alcanza un punto p si existe un camino entreellos tal que d no es reemplazada por otra definición.REACHING DEFINITIONS4
  5. 5. / 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 sinmodificar.• La función de transferencia de una definición d:donde = y el resto de las definiciones de u.REACHING DEFINITIONS51. Introducci´ond : u = x + y2. Diagrama de Entidad Re3. Modelo Relacional4. C´odigo de las funcionalid1. Introducci´onfd(x) = gend [ (x killd)2. Diagrama de Entidad Relaci´o1. Introducci´ongend{d}killd1. Introducci´ongend{d}killdgenB1= {d1, d2, d3}1. Introducci´ongend{d}killdgenB1= {d1, d2, d3}killB1= {}
  6. 6. / 16• ¿Cómo determinamos las definiciones para todo el código?REACHING DEFINITIONS6- 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 entryin[B] = U(out[p]), para todos los predecesores p de Bout[B] = fB(in[B])
  7. 7. / 167ENTRY-----gen = { d6 1B3kill ={4}B3senB4 = { d, 1kill = { dl, d4 }B4
  8. 8. / 168ENTRY-----gen = { d6 1B3kill ={4}B3senB4 = { d, 1kill = { dl, d4 }B41. Introducci´ongenB1= {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 En3. Modelo Relacio1. Introducci´ongenB1= {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}1. Introducci´ongenB1= {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}1. Introducci´ongenB1= {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 Ent3. Modelo Relacion4. C´odigo de las funkillB1= {d4, d5, d6, d7}1. Introducci´onIntro...
  9. 9. / 169ENTRY-----gen = { d6 1B3kill ={4}B3senB4 = { d, 1kill = { dl, d4 }B4killB1= {d4, d5, d6, d7}gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}1. Introducci´onIntro...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. Introducci´onIntro...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. Introducci´onIntro...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}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}killB1= {d4, d5, d6, d7}gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7gB2= {d4, d5} kB2= {d1, d2, d7}1. Introducci´onIntro...killB1= {d4, d5, d6, d7}gB1 = {d1, d2, d3} kB1 = {d4, d5, d6,gB2= {d4, d5} kB2= {d1, d2, d7}1. Introducci´onIntro...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. Introducci´onIntro...killB1= {d4, d5, d6, d7}gB1 = {d1, d2, d3} kB1 = {d4, d5, dgB2= {d4, d5} kB2= {d1, d2, d7}gB3 = {d6} kB3 = {d3}1. Introducci´onIntro...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}killB1= {d4, d5, d6, d7}gB1 = {d1, d2, d3} kB1 = {d4, d5,gB2= {d4, d5} kB2= {d1, d2, d7}gB3 = {d6} kB3 = {d3}gB4= {d7} kB4= {d1, d4}fBi(x) = genBi[ (x killBi)1. Introducci´onIntro...gB4= {d7} kB4= {d1, d4}fBi(x) = genBi[ (x killBi)OUT[B] = f(IN[B])1. Introducci´onIntro...B4 7 B4 1 4fBi(x) = genBi[ (x killBi)OUT[B] = f(IN[B])OUT[entry] = ;1. Introducci´onIntro...fBi(x) = genBi[ (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. Introducci´onIntro...
  10. 10. / 1610ENTRY-----gen = { d6 1B3kill ={4}B3senB4 = { d, 1kill = { dl, d4 }B4killB1= {d4, d5, d6, d7}gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7}1. Introducci´onIntro...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. Introducci´onIntro...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. Introducci´onIntro...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}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. Introducci´onIntro...gB4= {d7} kB4= {d1, d4}fBi(x) = genBi[ (x killBi)OUT[B] = f(IN[B])1. Introducci´onIntro...B4 7 B4 1 4fBi(x) = genBi[ (x killBi)OUT[B] = f(IN[B])OUT[entry] = ;1. Introducci´onIntro...killB1= {d4, d5, d6, d7}gB1 = {d1, d2, d3} kB1 = {d4, d5, d6, d7gB2= {d4, d5} kB2= {d1, d2, d7}1. Introducci´onIntro...killB1= {d4, d5, d6, d7}gB1 = {d1, d2, d3} kB1 = {d4, d5, d6,gB2= {d4, d5} kB2= {d1, d2, d7}1. Introducci´onIntro...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. Introducci´onIntro...killB1= {d4, d5, d6, d7}gB1 = {d1, d2, d3} kB1 = {d4, d5, dgB2= {d4, d5} kB2= {d1, d2, d7}gB3 = {d6} kB3 = {d3}1. Introducci´onIntro...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}killB1= {d4, d5, d6, d7}gB1 = {d1, d2, d3} kB1 = {d4, d5,gB2= {d4, d5} kB2= {d1, d2, d7}gB3 = {d6} kB3 = {d3}gB4= {d7} kB4= {d1, d4}gB4= {d7} kB4= {d1, d4}fBi(x) = genBi[ (x killBi)OUT[B] = f(IN[B])OUT[entry] = ;OUT[B1] = {d1, d2, d3}1. Introducci´onIntro...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. Introducci´onIntro...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}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. Introducci´onIntro...fBi(x) = genBi[ (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. Introducci´onIntro...
  11. 11. / 16• ¿Cómo hacemos para detectar variables usadas antes de serdefinidas?REACHING DEFINITIONS11
  12. 12. / 16• ¿Cómo hacemos para detectar variables usadas antes de serdefinidas?Agregamos una definición ficticia de la variable a testear yvemos si llegamos a un posible uso.REACHING DEFINITIONS12
  13. 13. / 1613604 CHAPTER 9. MACHINE-INDEPENDENT OPTIMIZATIONSENTRY-----gen = { d6 1B3kill ={4}B3senB4 = { d, 1kill = { dl, d4 }B4Figure 9.13: Flow graph for illustrating reaching definitions604 CHAPTER 9. MACHINE-INDEPENDENT OPTIMIZATIONSENTRY-----gen = { d6 1B3kill ={4}B3senB4 = { d, 1kill = { dl, d4 }B4Figure 9.13: Flow graph for illustrating reaching definitionsOUT[B3] = {d4, d5, d6}OUT[B4] = {d3, d5, d6, d7}d0 : u3 = 11. Introducci´onIntro...
  14. 14. / 1614604 CHAPTER 9. MACHINE-INDEPENDENT OPTIMIZATIONSENTRY-----gen = { d6 1B3kill ={4}B3senB4 = { d, 1kill = { dl, d4 }B4Figure 9.13: Flow graph for illustrating reaching definitions604 CHAPTER 9. MACHINE-INDEPENDENT OPTIMIZATIONSENTRY-----gen = { d6 1B3kill ={4}B3senB4 = { d, 1kill = { dl, d4 }B4Figure 9.13: Flow graph for illustrating reaching definitionsOUT[B3] = {d4, d5, d6}OUT[B4] = {d3, d5, d6, d7}d0 : u3 = 11. Introducci´onIntro...fBi(x) = genBi[ (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 = 1IN[B4] = {d0, ...}1. Introducci´on...
  15. 15. / 1615604 CHAPTER 9. MACHINE-INDEPENDENT OPTIMIZATIONSENTRY-----gen = { d6 1B3kill ={4}B3senB4 = { d, 1kill = { dl, d4 }B4Figure 9.13: Flow graph for illustrating reaching definitions604 CHAPTER 9. MACHINE-INDEPENDENT OPTIMIZATIONSENTRY-----gen = { d6 1B3kill ={4}B3senB4 = { d, 1kill = { dl, d4 }B4Figure 9.13: Flow graph for illustrating reaching definitionsOUT[B3] = {d4, d5, d6}OUT[B4] = {d3, d5, d6, d7}d0 : u3 = 11. Introducci´onIntro...fBi(x) = genBi[ (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 = 1IN[B4] = {d0, ...}1. Introducci´onOops! Llegué a un uso de ladefinición ficticia......
  16. 16. / 16RESUMIENDO• Ataca el problema de uso de variables no definidas.• Genera el conjunto de definiciones para cada punto delcódigo.• Análisis forward.• Función de transferencia:16killB1= {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)IN[B] =Sp predecesor de B OUT[p]

×