an lisis de flujo de datos l.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Análisis de Flujo de Datos PowerPoint Presentation
Download Presentation
Análisis de Flujo de Datos

Loading in 2 Seconds...

play fullscreen
1 / 219

Análisis de Flujo de Datos - PowerPoint PPT Presentation


  • 203 Views
  • Uploaded on

Análisis de Flujo de Datos. 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. Un grafo muy grande Crear Bloques Básicos

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Análisis de Flujo de Datos' - Jims


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
resumen
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
representando el control de flujo del progama

Un grafo muy grande

  • Crear Bloques Básicos
  • Un Grafo de Control de Flujo (CFG) conecta los Bloques Básicos
Representando el control de flujo del progama
  • Forma un grafo
grafo de control de flujo cfg
Grafo de Control de Flujo (CFG)
  • Control-Flow Graph G = <N, E>
  • Nodos(N): Bloques Básicos
  • Edges(E): (x,y)  E ssi la primera instrucción en el bloque básico y sigue a la última instrucción en el bloque básico x
identificando loops de estructuras recursivas

bb1

bb2

bb3

bb4

bb5

bb6

Identificando loops de estructuras recursivas
  • Identificar aristas de retorno
  • Encontrar los nodos y aristas en el loop dado por la arista de retorno
  • Aparte de la arista de retorno
    • Aristas entrantes sólo al bloque básico con la cabeza de la arista de retorno
    • Una arista saliente del bloque básico a la cola de la arista de retorno
  • ¿Cómo encontramos las aristas de retorno?
computando dominators
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
computando dominators7

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

computando dominators8

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

computando dominators9

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

computando dominators10

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

computando dominators11

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

computando dominators12

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

computando dominators13

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

computando dominators14

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

computando dominators15

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb4

bb5

bb6

computando dominators16

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb1

bb2

bb3

bb5

bb1

bb2

bb3

bb4

bb5

bb6

computando dominators17

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb1

bb2

bb3

bb5

bb1

bb2

bb3

bb4

bb5

bb6

computando dominators18

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb1

bb2

bb3

bb5

bb1

bb2

bb3

bb5

bb6

computando dominators19

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb3

bb4

bb5

bb6

bb1

bb2

bb3

bb1

bb2

bb3

bb5

bb1

bb2

bb3

bb5

bb6

computando dominators20

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb4

bb1

bb2

bb3

bb1

bb2

bb3

bb5

bb1

bb2

bb3

bb5

bb6

computando dominators21

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb4

bb1

bb2

bb3

bb1

bb2

bb3

bb5

bb1

bb2

bb3

bb5

bb6

computando dominators22

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb4

bb1

bb2

bb3

bb1

bb2

bb3

bb5

bb1

bb2

bb3

bb5

bb6

computando dominators23

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb4

bb1

bb2

bb3

bb1

bb2

bb3

bb5

bb1

bb2

bb3

bb5

bb6

computando dominators24

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb4

bb1

bb2

bb3

bb1

bb2

bb3

bb5

bb1

bb2

bb3

bb5

bb6

computando dominators25

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb4

bb1

bb2

bb3

bb1

bb2

bb3

bb5

bb1

bb2

bb3

bb5

bb6

computando dominators26

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb4

bb1

bb2

bb3

bb1

bb2

bb5

bb1

bb2

bb3

bb5

bb6

computando dominators27

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb4

bb1

bb2

bb3

bb1

bb2

bb5

bb1

bb2

bb3

bb5

bb6

computando dominators28

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb4

bb1

bb2

bb3

bb1

bb2

bb5

bb1

bb2

bb5

bb6

computando dominators29

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb4

bb1

bb2

bb3

bb1

bb2

bb5

bb1

bb2

bb5

bb6

computando dominators30

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb4

bb1

bb2

bb3

bb1

bb2

bb5

bb1

bb2

bb5

bb6

computando dominators31

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb4

bb1

bb2

bb3

bb1

bb2

bb5

bb1

bb2

bb5

bb6

computando dominators32

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb4

bb1

bb2

bb3

bb1

bb2

bb5

bb1

bb2

bb5

bb6

computando dominators33

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb4

bb1

bb2

bb3

bb1

bb2

bb5

bb1

bb2

bb5

bb6

computando dominators34

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb4

bb1

bb2

bb3

bb1

bb2

bb5

bb1

bb2

bb5

bb6

computando dominators35

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb4

bb1

bb2

bb3

bb1

bb2

bb5

bb1

bb2

bb5

bb6

computando dominators36

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb4

bb1

bb2

bb3

bb1

bb2

bb5

bb1

bb2

bb5

bb6

computando dominators37

bb1

bb2

bb3

bb4

bb5

bb6

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

{bb1}

bb1

bb2

bb1

bb2

bb4

bb1

bb2

bb3

bb1

bb2

bb5

bb1

bb2

bb5

bb6

computando dominators38
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
an lisis de flujo de datos39
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
resumen40
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
ejemplo expresiones disponibles
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
ejemplo expresiones disponibles42

a = b + c

d = e + f

f = a + c

b = a + d

h = c + f

g = a + c

j = a + b + c + d

Ejemplo: Expresiones Disponibles
est la expresi n disponible

a = b + c

d = e + f

f = a + c

b = a + d

h = c + f

g = a + c

j = a + b + c + d

¿Está la expresión disponible?

Sí!

est la expresi n disponible44

a = b + c

d = e + f

f = a + c

b = a + d

h = c + f

g = a + c

j = a + b + c + d

¿Está la expresión disponible?

Sí!

est la expresi n disponible45

a = b + c

d = e + f

f = a + c

b = a + d

h = c + f

g = a + c

j = a + b + c + d

¿Está la expresión disponible?

No!

est la expresi n disponible46

a = b + c

d = e + f

f = a + c

b = a + d

h = c + f

g = a + c

j = a + b + c + d

¿Está la expresión disponible?

No!

est la expresi n disponible47

a = b + c

d = e + f

f = a + c

b = a + d

h = c + f

g = a + c

j = a + b + c + d

¿Está la expresión disponible?

No!

est la expresi n disponible48

a = b + c

d = e + f

f = a + c

b = a + d

h = c + f

g = a + c

j = a + b + c + d

¿Está la expresión disponible?

Sí!

est la expresi n disponible49

a = b + c

d = e + f

f = a + c

b = a + d

h = c + f

g = a + c

j = a + b + c + d

¿Está la expresión disponible?

Sí!

uso de expresiones disponibles

a = b + c

d = e + f

f = a + c

b = a + d

h = c + f

g = a + c

j = a + b + c + d

Uso de Expresiones Disponibles
uso de expresiones disponibles51

a = b + c

d = e + f

f = a + c

b = a + d

h = c + f

g = a + c

j = a + b + c + d

Uso de Expresiones Disponibles
uso de expresiones disponibles52

a = b + c

d = e + f

f = a + c

b = a + d

h = c + f

g = a + c

j = a + b + c + d

Uso de Expresiones Disponibles
uso de expresiones disponibles53

a = b + c

d = e + f

f = a + c

b = a + d

h = c + f

g = f

j = a + b + c + d

Uso de Expresiones Disponibles
uso de expresiones disponibles54

a = b + c

d = e + f

f = a + c

b = a + d

h = c + f

g = f

j = a + b + c + d

Uso de Expresiones Disponibles
uso de expresiones disponibles55

a = b + c

d = e + f

f = a + c

b = a + d

h = c + f

g = f

j = a + c + b + d

Uso de Expresiones Disponibles
uso de expresiones disponibles56

a = b + c

d = e + f

f = a + c

b = a + d

h = c + f

g = f

j = f + b + d

Uso de Expresiones Disponibles
uso de expresiones disponibles57

a = b + c

d = e + f

f = a + c

b = a + d

h = c + f

g = f

j = f + b + d

Uso de Expresiones Disponibles
resumen58
Resumen

5

  • 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
algoritmo para expresiones disponibles
Algoritmo para Expresiones Disponibles
  • Asignar un número a cada expresión
ejemplo expresiones disponibles60

a = b + c

d = e + f

f = a + c

j = a + b + c + d

Ejemplo: Expresiones Disponibles

b = a + d

h = c + f

g = a + c

ejemplo expresiones disponibles61

a = b + c

d = e + f

f = a + c

j = a + b + c + d

Ejemplo: Expresiones Disponibles

1

2

3

b = a + d

h = c + f

5

g = a + c

4

6

7

conjuntos gen y kill
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
algoritmo para expresiones disponibles63
Algoritmo para Expresiones Disponibles

15

  • Asignar un número a cada expresión
  • Calcular conjuntos gen y kill para cada expresión
conjuntos gen y kill64

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill
conjuntos gen y kill65

a = b + c 1

d = e + f 2

f = a + c 3

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill
conjuntos gen y kill66

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill

a = b + c 1

gen = { b + c }

kill = { cualquier expr con a }

d = e + f 2

gen = { e + f }

kill = { cualquier expr con d }

f = a + c 3

gen = { a + c }

kill = {cualquier expr con f }

conjuntos gen y kill67

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill

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 }

algoritmo para expresiones disponibles68
Algoritmo para Expresiones Disponibles

16

  • 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
conjuntos gen y kill agregados

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

d = e + f 2

gen = { 2 }

kill = { 5, 7 }

f = a + c 3

gen = { 3 }

kill = { 2, 6 }

Conjuntos Gen y Kill agregados
  • Propagar todos los conjuntos gen y kill desde el comienzo del bloque básico hasta el final del bloque básico
conjunto gen agregado

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

Conjunto Gen agregado

InGEN set

OutGEN set

OutGEN =

conjunto gen agregado71

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

Conjunto Gen agregado

InGEN set

  • El conjunto gen en la expresión actual debe estar en el conjunto OutGEN

OutGEN set

OutGEN = gen

conjunto gen agregado72

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

Conjunto Gen agregado

InGEN set

  • El conjunto gen en la expresión actual debe estar en el conjunto OutGEN
  • Cualquier expresión en el conjunto InGEN que no está en el conjunto kill debe estar en el conjunto OutGEN

OutGEN set

OutGEN = gen  (InGEN - kill)

conjunto gen agregado73

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 }

Conjunto Gen agregado
conjunto gen agregado74

InGEN = { }

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

OutGEN = gen  (InGEN - kill)

d = e + f 2

gen = { 2 }

kill = { 5, 7 }

f = a + c 3

gen = { 3 }

kill = { 2, 6 }

Conjunto Gen agregado
conjunto gen agregado75

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 }

Conjunto Gen agregado
conjunto gen agregado76

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 }

Conjunto Gen agregado
conjunto gen agregado77

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 }

Conjunto Gen agregado
conjunto gen agregado78

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 }

Conjunto Gen agregado
conjunto gen agregado79

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 }

Conjunto Gen agregado
conjunto gen agregado80

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)

Conjunto Gen agregado
conjunto gen agregado81

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 })

Conjunto Gen agregado
conjunto gen agregado82
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 }

conjunto gen agregado83

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 }

Conjunto Gen agregado

GEN = { 1, 3 }

conjunto kill agregado

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

Conjunto Kill agregado

InKILL set

OutKILL set

OutKILL =

conjunto kill agregado85

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

Conjunto Kill agregado

InKILL set

  • El conjunto kill de la expresión actual debe estar en el conjunto OutKILL

OutKILL set

OutKILL = kill

conjunto kill agregado86

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

Conjunto Kill agregado

InKILL set

  • El conjunto kill de la expresión actual debe estar en el conjunto OutKILL
  • Cualquier conjunto en el InKILL debe estar en el OutKILL

OutKILL set

OutKILL = kill  InKILL

conjunto kill agregado87

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 }

Conjunto Kill agregado
conjunto kill agregado88

InKILL = { }

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

OutKILL = kill  InKILL

d = e + f 2

gen = { 2 }

kill = { 5, 7 }

f = a + c 3

gen = { 3 }

kill = { 2, 6 }

Conjunto Kill agregado
conjunto kill agregado89

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 }

Conjunto Kill agregado
conjunto kill agregado90

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 }

Conjunto Kill agregado
conjunto kill agregado91

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 }

Conjunto Kill agregado
conjunto kill agregado92

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 }

Conjunto Kill agregado
conjunto kill agregado93

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 }

Conjunto Kill agregado
conjunto kill agregado94

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

Conjunto Kill agregado
conjunto kill agregado95

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 }

Conjunto Kill agregado
conjunto kill agregado96

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 }

Conjunto Kill agregado
conjunto kill agregado97

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 }

Conjunto Kill agregado

KILL = { 2, 3, 4, 5, 6, 7 }

conjuntos gen y kill agregados98

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

Gen = { 7 }

Kill = { }

algoritmo para expresiones disponibles99
Algoritmo para Expresiones Disponibles

20

  • 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
conjuntos gen y kill agregados100

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {1,2,3,4,5,6,7}

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

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 }

Kill = { }

Gen = { 5, 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}

Gen = { 7 }

Kill = { }

OUT = {1,2,3,4,5,6,7}

algoritmo para expresiones disponibles101
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
propagar conjunto de disponibles

gen = { … }

kill = { ... }

Propagar conjunto de disponibles

IN set

OUT set

OUT =

propagar conjunto de disponibles103

gen = { … }

kill = { ... }

Propagar conjunto de disponibles

IN set

  • Si la expresión es generada (en el conjunto gen) entonces está disponible al final
    • Debe estar en el conjunto OUT

OUT set

OUT = gen

propagar conjunto de disponibles104

gen = { … }

kill = { ... }

Propagar conjunto de disponibles

IN set

  • Si la expresión es generada (en el conjunto gen) entonces está disponible al final
    • Debe estar en el conjunto OUT
  • Cualquier expresión disponible en la entrada (en el conjunto IN) y que no está en el conjunto kill debe estar disponible al final

OUT set

OUT = gen  (IN - kill)

propagar conjunto de disponibles105
Propagar conjunto de disponibles

OUT set

OUT set

IN set

IN =

OUT = gen  (IN - kill)

propagar conjunto de disponibles106
Propagar conjunto de disponibles
  • La expresión está disponible sólo está disponible en todos los caminos de entrada

OUT set

OUT set

IN set

IN =  OUT

OUT = gen  (IN - kill)

conjuntos gen y kill agregados107

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {1,2,3,4,5,6,7}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

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 }

Kill = { }

Gen = { 5, 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}

Gen = { 7 }

Kill = { }

OUT = {1,2,3,4,5,6,7}

conjuntos gen y kill agregados108

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {1,2,3,4,5,6,7}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

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 }

Kill = { }

Gen = { 5, 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}

Gen = { 7 }

Kill = { }

OUT = {1,2,3,4,5,6,7}

conjuntos gen y kill agregados109

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

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 }

Kill = { }

Gen = { 5, 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}

Gen = { 7 }

Kill = { }

OUT = {1,2,3,4,5,6,7}

conjuntos gen y kill agregados110

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {1,2,3,4,5,6,7}

IN = {1,2,3,4,5,6,7}

Gen = { 4 }

Kill = { }

Gen = { 5, 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}

Gen = { 7 }

Kill = { }

OUT = {1,2,3,4,5,6,7}

conjuntos gen y kill agregados111

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {1,2,3,4,5,6,7}

IN = {1,2,3,4,5,6,7}

Gen = { 4 }

Kill = { }

Gen = { 5, 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}

Gen = { 7 }

Kill = { }

OUT = {1,2,3,4,5,6,7}

conjuntos gen y kill agregados112

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {1,2,3,4,5,6,7}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 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}

Gen = { 7 }

Kill = { }

OUT = {1,2,3,4,5,6,7}

conjuntos gen y kill agregados113

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {1,2,3,4,5,6,7}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {1,2,3,4,5,6,7}

IN = {1,2,3,4,5,6,7}

Gen = { 7 }

Kill = { }

OUT = {1,2,3,4,5,6,7}

conjuntos gen y kill agregados114

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {1,2,3,4,5,6,7}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {1,2,3,4,5,6,7}

IN = {1,2,3,4,5,6,7}

Gen = { 7 }

Kill = { }

OUT = {1,2,3,4,5,6,7}

conjuntos gen y kill agregados115

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {1,2,3,4,5,6,7}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {1,2,3,4,5,6,7}

IN = {1,3,4}

Gen = { 7 }

Kill = { }

OUT = {1,2,3,4,5,6,7}

conjuntos gen y kill agregados116

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {1,2,3,4,5,6,7}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {1,2,3,4,5,6,7}

IN = {1,3,4}

Gen = { 7 }

Kill = { }

OUT = {1,3,4,7}

conjuntos gen y kill agregados117

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {1,2,3,4,5,6,7}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {1,2,3,4,5,6,7}

IN = {1,3,4}

Gen = { 7 }

Kill = { }

OUT = {1,3,4,7}

conjuntos gen y kill agregados118

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {1,3}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {1,2,3,4,5,6,7}

IN = {1,3,4}

Gen = { 7 }

Kill = { }

OUT = {1,3,4,7}

conjuntos gen y kill agregados119

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {1,3}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {3,5,6}

IN = {1,3,4}

Gen = { 7 }

Kill = { }

OUT = {1,3,4,7}

conjuntos gen y kill agregados120

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {1,3}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {3,5,6}

IN = {1,3,4}

Gen = { 7 }

Kill = { }

OUT = {1,3,4,7}

conjuntos gen y kill agregados121

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {1,3}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {3,5,6}

IN = {1,3,4}

Gen = { 7 }

Kill = { }

OUT = {1,3,4,7}

conjuntos gen y kill agregados122

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {1,3}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {3,5,6}

IN = {1,3,4}

Gen = { 7 }

Kill = { }

OUT = {1,3,4,7}

conjuntos gen y kill agregados123

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {1,3}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {3,5,6}

IN = {1,3,4}

Gen = { 7 }

Kill = { }

OUT = {1,3,4,7}

conjuntos gen y kill agregados124

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {1,3}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {3,5,6}

IN = {3}

Gen = { 7 }

Kill = { }

OUT = {1,3,4,7}

conjuntos gen y kill agregados125

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {1,3}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {3,5,6}

IN = {3}

Gen = { 7 }

Kill = { }

OUT = {3,7}

conjuntos gen y kill agregados126

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {1,3}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {3,5,6}

IN = {3}

Gen = { 7 }

Kill = { }

OUT = {3,7}

conjuntos gen y kill agregados127

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {3}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {3,5,6}

IN = {3}

Gen = { 7 }

Kill = { }

OUT = {3,7}

conjuntos gen y kill agregados128

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {3}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {3,5,6}

IN = {3}

Gen = { 7 }

Kill = { }

OUT = {3,7}

conjuntos gen y kill agregados129

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {3}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {3,5,6}

IN = {3}

Gen = { 7 }

Kill = { }

OUT = {3,7}

conjuntos gen y kill agregados130

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {3}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {3,5,6}

IN = {3}

Gen = { 7 }

Kill = { }

OUT = {3,7}

conjuntos gen y kill agregados131

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {3}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {3,5,6}

IN = {3}

Gen = { 7 }

Kill = { }

OUT = {3,7}

conjuntos gen y kill agregados132

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {3}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {3,5,6}

IN = {3}

Gen = { 7 }

Kill = { }

OUT = {3,7}

conjuntos gen y kill agregados133

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

IN = {}

IN =  OUT

Gen = { 1, 3}

Kill = { 2,3,4,5,6,7 }

OUT = gen  (IN - kill)

OUT = {1,3}

IN = {3}

IN = {1,3}

Gen = { 4 }

Kill = { }

Gen = { 5, 6 }

Kill = { 1, 7 }

OUT = {1,3,4}

OUT = {3,5,6}

IN = {3}

Gen = { 7 }

Kill = { }

OUT = {3,7}

algoritmo para expresiones disponibles134
Algoritmo para Expresiones Disponibles

28

  • 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
propagar dentro del bloque b sico

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

Propagar dentro del bloque básico

IN set

  • Comenzar con el conjunto IN de expresiones disponibles
  • Linealmente propagar hacia abajo del bloque básico
    • Igual que el paso de data-flow
    • Una sola pasada ya que no hay aristas de retorno

OUT set

OUT = gen  (IN - kill)

expresiones disponibles

ae = { }a = b + c 1ae = { 1 }d = e + f 2ae = { 1, 2 }f = a + c 3ae = { 1, 3 }

ae = { 3 }

b = a + d 5

ae = { 3, 5 }

h = c + f 6

ae = { 3, 5, 6 }

ae = { 3 }

j = a + b + c + d 7

ae = { 3, 7 }

Expresiones Disponibles

ae = { 1, 3 }

g = a + c 4

ae = { 1, 3, 4 }

resumen137
Resumen

5

  • 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
bitsets
Bitsets
  • Asignar un bit a cada elemento del conjunto
    • Unión  OR
    • Intersección  AND
    • Subtracción  NEGATE y AND
  • Implementación rápida
    • 32 elementos empacados en cada word
    • AND y OR son ambas una instrucción
conjunto kill vrs conjunto preserve
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)
conjuntos gen y kill agregados140

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados

Gen = { 1,3}

Kill = { 2,3,4,5,6,7 }

Gen = { 4 }

Kill = { }

Gen = { 5,6 }

Kill = { 1,7 }

Gen = { 7 }

Kill = { }

conjuntos gen y kill agregados141

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados
  • Se requieren 7 bits por conjunto

Gen = { 1,3}

Kill = { 2,3,4,5,6,7 }

Gen = { 4 }

Kill = { }

Gen = { 5,6 }

Kill = { 1,7 }

Gen = { 7 }

Kill = { }

conjuntos gen y kill agregados142

a = b + c 1

d = e + f 2

f = a + c 3

b = a + d 5

h = c + f 6

g = a + c 4

j = a + b + c + d 7

Conjuntos Gen y Kill agregados
  • Se requieren 7 bits por conjunto

Gen = 1010000

Kill = 0111111

Gen = 0001000

Kill = 0000000

Gen = 0000110

Kill = 1000001

Gen = 0000001

Kill = 0000000

resumen143
Resumen

5

  • 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
formulando un problema de an lisis de flujo de datos
Formulando un problema de análisis de flujo de datos
  • Independiente del problema
    • Calcular conjuntos gen y kill para bloque básico
    • Propagación iterativa de información hasta que converja
    • Propagación de información dentro del bloque básico
formulando un problema de an lisis de flujo de datos145
Formulando un problema de análisis de flujo de datos
  • Lattice
    • Estructuras abstractas sobre las que opera el análisisejemplo: 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
lattice
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] ()
lattice147
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 }

 ={ }

operaciones meet y join
Operaciones Meet y Join
  • Meet y Join forman una “cerradura”
    • Para todos a, b  L existen c y d  L únicos, tal quea  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
operaciones meet y join149
Operaciones Meet y Join

{ d1, d2 } { d2, d3 } = ???

T ={ d1, d2, d3 }

{ d2, d3 }

{ d1, d3 }

{ d1, d2 }

{ d2 }

{ d3 }

{ d1 }

 ={ }

operaciones meet y join150
Operaciones Meet y Join

{ d1, d2 } { d2, d3 } = ???

T ={ d1, d2, d3 }

{ d2, d3 }

{ d1, d3 }

{ d1, d2 }

{ d2 }

{ d3 }

{ d1 }

 ={ }

operaciones meet y join151
Operaciones Meet y Join

{ d1, d2 } { d2, d3 } = ???

T ={ d1, d2, d3 }

{ d2, d3 }

{ d1, d3 }

{ d1, d2 }

{ d2 }

{ d3 }

{ d1 }

 ={ }

operaciones meet y join152
Operaciones Meet y Join

{ d1, d2 } { d2, d3 } = { d2 }

T ={ d1, d2, d3 }

{ d2, d3 }

{ d1, d3 }

{ d1, d2 }

{ d2 }

{ d3 }

{ d1 }

 ={ }

operaciones meet y join153
Operaciones Meet y Join

{ d1, d2 } { d3 } = ???

T ={ d1, d2, d3 }

{ d2, d3 }

{ d1, d3 }

{ d1, d2 }

{ d2 }

{ d3 }

{ d1 }

 ={ }

operaciones meet y join154
Operaciones Meet y Join

{ d1, d2 } { d3 } = ???

T ={ d1, d2, d3 }

{ d2, d3 }

{ d1, d3 }

{ d1, d2 }

{ d2 }

{ d3 }

{ d1 }

 ={ }

operaciones meet y join155
Operaciones Meet y Join

{ d1, d2 } { d3 } = ???

T ={ d1, d2, d3 }

{ d2, d3 }

{ d1, d3 }

{ d1, d2 }

{ d2 }

{ d3 }

{ d1 }

 ={ }

operaciones meet y join156
Operaciones Meet y Join

{ d1, d2 } { d3 } = ???

T ={ d1, d2, d3 }

{ d2, d3 }

{ d1, d3 }

{ d1, d2 }

{ d2 }

{ d3 }

{ d1 }

 ={ }

operaciones meet y join157
Operaciones Meet y Join

{ d1, d2 } { d3 } = { d1, d2, d3 }

T = { d1, d2, d3 }

{ d2, d3 }

{ d1, d3 }

{ d1, d2 }

{ d2 }

{ d3 }

{ d1 }

 ={ }

operaciones meet y join158
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
orden parcial
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
orden parcial160
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 }

 ={ }

alto del lattice
Alto del Lattice
  • El alto del lattice es la cadena ascendiente más larga en el lattice
    • (T, a, b, c, …, )
alto del lattice162
Alto del Lattice
  • El alto del lattice es la cadena ascendiente más larga en el lattice
    • (T, a, b, c, …, )
    • Alto es (T, {d2,d3}, {d3}, ) = 4

T = { d1, d2, d3 }

{ d2, d3 }

{ d1, d3 }

{ d1, d2 }

{ d2 }

{ d3 }

{ d1 }

 ={ }

funciones de flujo
Funciones de Flujo
  • Ejemplo: OUT = f(IN)
  • f: L  L donde L es un lattice
  • Propiedades
    • Monótona: a,b  L a  b  f(a)  f(b)
  • Punto Fijo
    • Un punto fijo es un elemento a L tal que f(a) = a
intuici n acerca de finalizaci n
Intuición acerca de Finalización
  • El análisis de flujo de datos comienza asumiendo los valores más optimistas (T)
  • Cada etapa aplica funciones de flujo
    • Vnew  Vprev
    • Se mueve hacia abajo en el lattice
  • Hasta que sea estable (valores no cambian)
    • Se llega a un punto fijo en cada bloque básico
  • Lattice tiene un alto finito  debe terminar
resumen165
Resumen

5

  • 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
cadenas def use y use def
Cadenas Def-Use y Use-Def
  • Cadena Def-Use (DU)
    • Conecta la definición de cada variable con todos los posibles usos de esa variable
  • Cadena Use-Def (UD)
    • Conecta el uso de una variable con todas las posibles definiciones de esa variable
formulaci n del problema de flujo de datos para cadena du
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
formulen el problema de flujo de datos para la cadena ud
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 =
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

Ejemplo DU
ejemplo du170

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU
ejemplo du171

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

gen ={ }

kill = { }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

ejemplo du172

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { }IN = { }

gen ={ }

kill = { }

OUT = IN = { }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { }

OUT = { }

OUT = { }

IN = { }

ejemplo du173

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { }IN = { }

gen ={ }

kill = { }

OUT = IN = { }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { }

OUT = { }

OUT = { }

IN = { }

ejemplo du174

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { }IN = { }

gen ={ }

kill = { }

OUT = IN = { }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { }

OUT = { }

OUT = { }

IN = { }

ejemplo du175

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { }

gen ={ }

kill = { }

OUT = IN = { }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { }

OUT = { }

OUT = { }

IN = { }

ejemplo du176

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3 }

gen ={ }

kill = { }

OUT = IN = { }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { }

OUT = { }

OUT = { }

IN = { }

ejemplo du177

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3 }

gen ={ }

kill = { }

OUT = IN = { }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { }

OUT = { }

OUT = { }

IN = { }

ejemplo du178

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { }

OUT = { }

OUT = { }

IN = { }

ejemplo du179

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { }

OUT = { }

OUT = { }

IN = { }

ejemplo du180

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { }

OUT = { }

IN = { }

ejemplo du181

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { }

OUT = { }

IN = { }

ejemplo du182

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { }

OUT = { }

IN = { }

ejemplo du183

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { }

OUT = { }

IN = { }

ejemplo du184

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { }

OUT = { 1, 2, 3 }

IN = { }

ejemplo du185

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { }

OUT = { 1, 2, 3 }

IN = { }

ejemplo du186

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 7 }

OUT = { 1, 2, 3 }

IN = { }

ejemplo du187

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 7 }

OUT = { 1, 2, 3 }

IN = { 1, 2, 3, 7 }

ejemplo du188

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 7 }

OUT = { 1, 2, 3 }

IN = { 1, 2, 3, 7 }

ejemplo du189

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 7 }

OUT = { 1, 2, 3 }

IN = { 1, 2, 3, 7 }

ejemplo du190

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 7 }

OUT = { 1, 2, 3 }

IN = { 1, 2, 3, 7 }

ejemplo du191

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 7 }

OUT = { 1, 2, 3 }

IN = { 1, 2, 3, 7 }

ejemplo du192

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 7 }

OUT = { 1, 2, 3 }

IN = { 1, 2, 3, 7 }

ejemplo du193

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 7 }

OUT = { 1, 2, 3 }

IN = { 1, 2, 3, 7 }

ejemplo du194

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 7 }

OUT = { 1, 2, 3 }

IN = { 1, 2, 3, 7 }

ejemplo du195

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 7 }

OUT = { 1, 2, 3 }

IN = { 1, 2, 3, 7 }

ejemplo du196

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 7 }

OUT = { 1, 2, 3 }

IN = { 1, 2, 3, 7 }

ejemplo du197

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 7 }

OUT = { 1, 2, 3, 4, 5, 6 }

IN = { 1, 2, 3, 7 }

ejemplo du198

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 7 }

OUT = { 1, 2, 3, 4, 5, 6 }

IN = { 1, 2, 3, 7 }

ejemplo du199

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 4, 5, 7 }

OUT = { 1, 2, 3, 4, 5, 6 }

IN = { 1, 2, 3, 7 }

ejemplo du200

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 4, 5, 7 }

OUT = { 1, 2, 3, 4, 5, 6 }

IN = { 1, 2, 3, 4, 5, 6, 7 }

ejemplo du201

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 4, 5, 7 }

OUT = { 1, 2, 3, 4, 5, 6 }

IN = { 1, 2, 3, 4, 5, 6, 7 }

ejemplo du202

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 4, 5, 7 }

OUT = { 1, 2, 3, 4, 5, 6 }

IN = { 1, 2, 3, 4, 5, 6, 7 }

ejemplo du203

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 4, 5, 7 }

OUT = { 1, 2, 3, 4, 5, 6 }

IN = { 1, 2, 3, 4, 5, 6, 7 }

ejemplo du204

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 4, 5, 7 }

OUT = { 1, 2, 3, 4, 5, 6 }

IN = { 1, 2, 3, 4, 5, 6, 7 }

ejemplo du205

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 4, 5, 7 }

OUT = { 1, 2, 3, 4, 5, 6 }

IN = { 1, 2, 3, 4, 5, 6, 7 }

ejemplo du206

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 4, 5, 7 }

OUT = { 1, 2, 3, 4, 5, 6 }

IN = { 1, 2, 3, 4, 5, 6, 7 }

ejemplo du207

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 4, 5, 7 }

OUT = { 1, 2, 3, 4, 5, 6 }

IN = { 1, 2, 3, 4, 5, 6, 7 }

ejemplo du208

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

OUT = IN = { }

gen ={ 1, 2, 3 }

kill = { 4,5,6,7 }

OUT = { 1, 2, 3 }IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 4,5,6 }

kill = { 1,2,3,7 }

OUT = IN = { 1, 2, 3, 4, 5, 6 }

gen ={ }

kill = { }

gen ={ 7 }

kill = { 2,6 }

OUT = { 4, 5, 6 }

OUT = { 1, 3, 4, 5, 7 }

OUT = { 1, 2, 3, 4, 5, 6 }

IN = { 1, 2, 3, 4, 5, 6, 7 }

ejemplo du209

entry

k = false 1i = 1 2j = 2 3

i < n

k

j = j * 2 4k = true 5i = i + 1 6

print j

i = i + 1 7

exit

Ejemplo DU

IN = { }

IN = { 1, 2, 3, 4, 5, 6 }

IN = { 1, 2, 3, 4, 5, 6 }

IN = { 1, 2, 3, 4, 5, 6 }

IN = { 1, 2, 3, 4, 5, 6 }

IN = { 1, 2, 3, 4, 5, 6 }

IN = { 1, 2, 3, 4, 5, 6, 7 }

cadenas du
Cadenas DU
  • En cada uso de la variable, apunta a todas las posibles definiciones
    • Información muy útil
    • Usada en muchas optimizaciones
  • Incorporar esta información en la representación
    • Forma SSA
resumen211
Resumen

5

  • 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
forma static single assignment ssa
Forma Static Single Assignment (SSA)
  • Cada definición tiene un nombre único de variable
    • Nombre original + número de versión
  • Cada uso se refiere a la definición por nombre
  • ¿Qué hay acerca de posibles definiciones múltiples?
    • Agregamos nodos de union especiales (merge) para que sólo pueda haber una definición (funciones )
forma static single assignment ssa214

a = 1 b = a + 2c = a + ba = a + 1d = a + b

a1 = 1 b1 = a1 + 2c1 = a1 + b1a2 = a1 + 1d1 = a2 + b1

Forma Static Single Assignment (SSA)
forma static single assignment ssa216

a = 1 c = a + 2

b = 1 c = b + 2

d = a + b + c

a1 = 1 c1 = a1 + 2

b1 = 1 c2 = b1 + 2

c3 = (c1, c2)d1 = c3 + 2

Forma Static Single Assignment (SSA)
ejemplo du217

entry

k = false i = 1 j = 2

i < n

k

j = j * 2 k = true i = i + 1

print j

i = i + 1

exit

Ejemplo DU
ejemplo du218

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) exit

Ejemplo DU
lecturas
Lecturas
  • Ballena
    • Capítulo 12
  • Tigre
    • 17.1 - 17.4, 19.1, 19.2