compiladores análisis de flujo de datos. 2 resumen overview de análisis de control de flujo...

Post on 22-Feb-2015

16 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Compiladores

Análisis de Flujo de Datos

2

Resumen

• Overview de análisis de control de flujo

• Expresiones disponibles

• Algoritmo para calcular expresiones disponibles

• Bit sets

• Formulando un problema de análisis de flujo de datos

• Cadenas DU

• Forma SSA

3

Representando el control de flujo del progama

• Forma un grafo

• Un grafo muy grande

• Crear Bloques Básicos• Un Grafo de Control de Flujo (CFG) conecta

los Bloques Básicos

4

Grafo de Control de Flujo (CFG)

• Control-Flow Graph G = <N, E>

• Nodos(N): Bloques Básicos

• Edges(E): (x,y) E ssi la primera instrucción en el bloque básico y sigue a la última instrucción en el bloque básico x

5

Identificando loops de estructuras recursivas

• Identificar aristas de retorno• Encontrar los nodos y aristas en el

loop dado por la arista de retorno• Aparte de la arista de retorno

– Aristas entrantes sólo al bloque básico con la cabeza de la arista de retorno

– Una arista saliente del bloque básico a la cola de la arista de retorno

• ¿Cómo encontramos las aristas de retorno?

bb1

bb2

bb4bb3

bb5

bb6

6

Computando Dominators

• Algoritmo– Hacer que el conjunto de dominators del nodo de

entrada sólo contenga ese nodo– Hacer que el conjunto de dominators del resto de

los nodos contenga todos los nodos– Visitar los nodos en cualquier orden– Hacer que el conjunto de dominators del nodo

actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

7

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

8

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

9

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

10

Computando Dominators

bb1

bb2

bb4bb3

bb5

bb6

{bb1}

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

11

Computando Dominators

bb1

bb2

bb4bb3

bb5

bb6

{bb1}

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

12

Computando Dominators

bb1

bb2

bb4bb3

bb5

bb6

{bb1}

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

13

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2

bb1bb2bb3bb4bb5bb6

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

14

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3

bb1bb2bb3bb4bb5bb6

bb1bb2

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

15

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3

bb1bb2

bb1bb2bb3bb4bb5bb6

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

16

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3

bb1bb2

bb1bb2bb3bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

17

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb3bb4bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3

bb1bb2

bb1bb2bb3bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

18

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb3bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3

bb1bb2

bb1bb2bb3bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

19

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb3bb5bb6

bb1bb2bb3bb4bb5bb6

bb1bb2bb3

bb1bb2

bb1bb2bb3bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

20

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb4

bb1bb2bb3

bb1bb2

bb1bb2bb3bb5bb6

bb1bb2bb3bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

21

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb4

bb1bb2bb3

bb1bb2

bb1bb2bb3bb5bb6

bb1bb2bb3bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

22

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb4

bb1bb2bb3

bb1bb2

bb1bb2bb3bb5bb6

bb1bb2bb3bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

23

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb4

bb1bb2bb3

bb1bb2

bb1bb2bb3bb5bb6

bb1bb2bb3bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

24

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb4

bb1bb2bb3

bb1bb2

bb1bb2bb3bb5bb6

bb1bb2bb3bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

25

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb4

bb1bb2bb3

bb1bb2

bb1bb2bb3bb5bb6

bb1bb2bb3bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

26

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb4

bb1bb2bb3

bb1bb2

bb1bb2bb3bb5bb6

bb1bb2bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

27

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb4

bb1bb2bb3

bb1bb2

bb1bb2bb3bb5bb6

bb1bb2bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

28

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb4

bb1bb2bb3

bb1bb2

bb1bb2bb5bb6

bb1bb2bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

29

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb4

bb1bb2bb3

bb1bb2

bb1bb2bb5bb6

bb1bb2bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

30

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb4

bb1bb2bb3

bb1bb2

bb1bb2bb5bb6

bb1bb2bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

31

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb4

bb1bb2bb3

bb1bb2

bb1bb2bb5bb6

bb1bb2bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

32

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb4

bb1bb2bb3

bb1bb2

bb1bb2bb5bb6

bb1bb2bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

33

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb4

bb1bb2bb3

bb1bb2

bb1bb2bb5bb6

bb1bb2bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

34

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb4

bb1bb2bb3

bb1bb2

bb1bb2bb5bb6

bb1bb2bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

35

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb4

bb1bb2bb3

bb1bb2

bb1bb2bb5bb6

bb1bb2bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

36

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb4

bb1bb2bb3

bb1bb2

bb1bb2bb5bb6

bb1bb2bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

37

Computando Dominators

bb2

bb4bb3

bb5

bb6

{bb1} bb1

bb1bb2bb4

bb1bb2bb3

bb1bb2

bb1bb2bb5bb6

bb1bb2bb5

• Algoritmo– Hacer que el conjunto de

dominators del nodo de entrada sólo contenga ese nodo

– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos

– Visitar los nodos en cualquier orden

– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual

– Repetir hasta que no hayan cambios

38

Computando Dominators

• Lo que acabamos de ver fue un algoritmo iterativo de análisis de flujo de datos en acción– Inicializar todos los nodos a un valor dado– Visitar los nodos en algún orden– Calcular el valor del nodo– Repetir hasta que no haya cambios

39

Análisis de Flujo de Datos

• Análisis Local– Analizar el efecto de cada instrucción– Componer efectos de instrucciones para derivar

información desde el principio del bloque básico a cada instrucción

• Análisis de Flujo de Datos– Iterativamente propagar la información del bloque básico

sobre el grafo de control de flujo hasta que no hayan cambios

– Calcular el valor final al principio del bloque básico

• Propagación Local– Propagar la información desde el principio del bloque

básico a cada instrucción

40

Resumen

• Overview de análisis de control de flujo

• Expresiones disponibles

• Algoritmo para calcular expresiones disponibles

• Bit sets

• Formulando un problema de análisis de flujo de datos

• Cadenas DU

• Forma SSA

41

Ejemplo: Expresiones Disponibles

• Una expresión está disponible ssi– Todos los caminos que llegan al punto actual

pasan a través del punto donde se definió la expresión

– Ninguna variable usada en la expresión fue modificada entre el punto en que se definió la expresión y el punto actual

42

Ejemplo: Expresiones Disponibles

a = b + cd = e + ff = a + c

g = a + c

j = a + b + c + d

b = a + dh = c + f

43

¿Está la expresión disponible?

a = b + cd = e + ff = a + c

g = a + c

j = a + b + c + d

b = a + dh = c + f

Sí!

44

¿Está la expresión disponible?

a = b + cd = e + ff = a + c

g = a + c

j = a + b + c + d

b = a + dh = c + f

Sí!

45

¿Está la expresión disponible?

a = b + cd = e + ff = a + c

g = a + c

j = a + b + c + d

b = a + dh = c + f

No!

46

¿Está la expresión disponible?

a = b + cd = e + ff = a + c

g = a + c

j = a + b + c + d

b = a + dh = c + f

No!

47

¿Está la expresión disponible?

a = b + cd = e + ff = a + c

g = a + c

j = a + b + c + d

b = a + dh = c + f

No!

48

¿Está la expresión disponible?

a = b + cd = e + ff = a + c

g = a + c

j = a + b + c + d

b = a + dh = c + f

Sí!

49

¿Está la expresión disponible?

a = b + cd = e + ff = a + c

g = a + c

j = a + b + c + d

b = a + dh = c + f

Sí!

50

Uso de Expresiones Disponibles

a = b + cd = e + ff = a + c

g = a + c

j = a + b + c + d

b = a + dh = c + f

51

Uso de Expresiones Disponibles

a = b + cd = e + ff = a + c

g = a + c

j = a + b + c + d

b = a + dh = c + f

52

Uso de Expresiones Disponibles

a = b + cd = e + ff = a + c

g = a + c

j = a + b + c + d

b = a + dh = c + f

53

Uso de Expresiones Disponibles

a = b + cd = e + ff = a + c

g = f

j = a + b + c + d

b = a + dh = c + f

54

Uso de Expresiones Disponibles

a = b + cd = e + ff = a + c

g = f

j = a + b + c + d

b = a + dh = c + f

55

Uso de Expresiones Disponibles

a = b + cd = e + ff = a + c

g = f

j = a + c + b + d

b = a + dh = c + f

56

Uso de Expresiones Disponibles

a = b + cd = e + ff = a + c

g = f

j = f + b + d

b = a + dh = c + f

57

Uso de Expresiones Disponibles

a = b + cd = e + ff = a + c

g = f

j = f + b + d

b = a + dh = c + f

58

Resumen

• Overview de análisis de control de flujo• Expresiones Disponibles• Algoritmo para calcular expresiones

disponibles• Bit sets• Formulando un problema de análisis de flujo

de datos• Cadenas DU• Forma SSA

5

59

Algoritmo para Expresiones Disponibles

• Asignar un número a cada expresión

60

b = a + d h = c + f

g = a + c

Ejemplo: Expresiones Disponibles

a = b + cd = e + ff = a + c

j = a + b + c + d

61

b = a + d h = c + f

g = a + c

Ejemplo: Expresiones Disponibles

a = b + cd = e + ff = a + c

j = a + b + c + d

123

456

7

62

Conjuntos Gen y Kill

• Conjunto Gen– Si el bloque básico actual (o instrucción) crea la

definición, está en el conjunto gen– El elemento debe estar en la salida del bloque

básico siempre

• Conjunto Kill– Si el bloque básico actual (o instrucción)

redefine una variable en la expresión, está en el conjunto kill

– La expresión no es válida después de esto

63

Algoritmo para Expresiones Disponibles

• Asignar un número a cada expresión

• Calcular conjuntos gen y kill para cada expresión

15

64

Conjuntos Gen y Kill

a = b + c 1d = e + f 2f = a + c 3

g = a + c 4

j = a + b + c + d 7

b = a + d 5h = c + f 6

65

Conjuntos Gen y Kill

a = b + c 1

d = e + f 2

f = a + c 3

a = b + c 1d = e + f 2f = a + c 3

g = a + c 4

j = a + b + c + d 7

b = a + d 5h = c + f 6

66

a = b + c 1

gen = { b + c }

kill = { cualquier expr con a }

d = e + f 2

gen = { e + f }

kill = { cualquier expr con d }

f = a + c 3

gen = { a + c }

kill = {cualquier expr con f }

Conjuntos Gen y Kill

a = b + c 1d = e + f 2f = a + c 3

g = a + c 4

j = a + b + c + d 7

b = a + d 5h = c + f 6

67

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

d = e + f 2

gen = { 2 }

kill = { 5, 7 }

f = a + c 3

gen = { 3 }

kill = { 2, 6 }

Conjuntos Gen y Kill

a = b + c 1d = e + f 2f = a + c 3

g = a + c 4

j = a + b + c + d 7

b = a + d 5h = c + f 6

68

Algoritmo para Expresiones Disponibles

• Asignarle un número a cada expresión

• Calcular conjuntos gen y kill para cada expresión

• Calcular conjuntos gen y kill agregados para cada bloque básico

16

69

Conjuntos Gen y Kill agregados

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

d = e + f 2

gen = { 2 }

kill = { 5, 7 }

f = a + c 3

gen = { 3 }

kill = { 2, 6 }

• Propagar todos los conjuntos gen y kill desde el comienzo del bloque básico hasta el final del bloque básico

70

Conjunto Gen agregado

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

InGEN set

OutGEN set

OutGEN =

71

Conjunto Gen agregado

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

InGEN set

OutGEN set

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

OutGEN = gen

72

Conjunto Gen agregado

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

InGEN set

OutGEN set

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

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

OutGEN = gen (InGEN - kill)

73

Conjunto Gen agregado

a = b + c 1

gen = { 1 }kill = { 3, 4, 5, 7 }

d = e + f 2gen = { 2 }kill = { 5, 7 }

f = a + c 3gen = { 3 }kill = { 2, 6 }

74

Conjunto Gen agregadoInGEN = { }

a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

OutGEN = gen (InGEN - kill)

d = e + f 2gen = { 2 }kill = { 5, 7 }

f = a + c 3gen = { 3 }kill = { 2, 6 }

75

Conjunto Gen agregadoInGEN = { }

a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

OutGEN = { 1 } ({ } - { 3,4,5,7})

d = e + f 2gen = { 2 }kill = { 5, 7 }

f = a + c 3gen = { 3 }kill = { 2, 6 }

76

Conjunto Gen agregadoInGEN = { }

a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

OutGEN = { 1 }

d = e + f 2gen = { 2 }kill = { 5, 7 }

f = a + c 3gen = { 3 }kill = { 2, 6 }

77

Conjunto Gen agregado

a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

InGEN = { 1 }

d = e + f 2gen = { 2 }kill = { 5, 7 }

OutGEN = gen (InGEN - kill)

f = a + c 3gen = { 3 }kill = { 2, 6 }

78

Conjunto Gen agregado

a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

InGEN = { 1 }

d = e + f 2gen = { 2 }kill = { 5, 7 }

OutGEN = { 2 } ({ 1 } - { 5,7 })

f = a + c 3gen = { 3 }kill = { 2, 6 }

79

Conjunto Gen agregado

a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

InGEN = { 1 }

d = e + f 2gen = { 2 }kill = { 5, 7 }

OutGEN = { 1, 2 }

f = a + c 3gen = { 3 }kill = { 2, 6 }

80

Conjunto Gen agregado

a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

d = e + f 2gen = { 2 }kill = { 5, 7 }

InGEN = { 1, 2 }

f = a + c 3gen = { 3 }kill = { 2, 6 }

OutGEN = gen (InGEN - kill)

81

Conjunto Gen agregado

a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

d = e + f 2gen = { 2 }kill = { 5, 7 }

InGEN = { 1, 2 }

f = a + c 3gen = { 3 }kill = { 2, 6 }

OutGEN = { 3 } ({ 1,2 } - { 2,6 })

82

Conjunto Gen agregado

A = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

d = e + f 2gen = { 2 }kill = { 5, 7 }

InGEN = { 1, 2 }

f = a + c 3gen = { 3 }kill = { 2, 6 }

OutGEN = { 1, 3 }

83

Conjunto Gen agregado

A = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

d = e + f 2gen = { 2 }kill = { 5, 7 }

f = a + c 3gen = { 3 }kill = { 2, 6 }

GE

N =

{ 1

, 3 }

84

Conjunto Kill agregado

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

InKILL set

OutKILL set

OutKILL =

85

Conjunto Kill agregado

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

InKILL set

OutKILL set

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

OutKILL = kill

86

Conjunto Kill agregado

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

InKILL set

OutKILL set

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

• Cualquier conjunto en el InKILL debe estar en el OutKILL

OutKILL = kill InKILL

87

Conjunto Kill agregado

a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

d = e + f 2gen = { 2 }kill = { 5, 7 }

f = a + c 3gen = { 3 }kill = { 2, 6 }

88

Conjunto Kill agregadoInKILL = { }

a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

OutKILL = kill InKILL

d = e + f 2gen = { 2 }kill = { 5, 7 }

f = a + c 3gen = { 3 }kill = { 2, 6 }

89

Conjunto Kill agregadoInKILL = { }

a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

OutKILL = { 3,4,5,7 } { }

d = e + f 2gen = { 2 }kill = { 5, 7 }

f = a + c 3gen = { 3 }kill = { 2, 6 }

90

Conjunto Kill agregadoInKILL = { }

a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

OutKILL = { 3,4,5,7 }

d = e + f 2gen = { 2 }kill = { 5, 7 }

f = a + c 3gen = { 3 }kill = { 2, 6 }

91

Conjunto Kill agregado

a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

InKILL = { 3,4,5,7 }

d = e + f 2gen = { 2 }kill = { 5, 7 }

OutKILL = kill InKILL

f = a + c 3gen = { 3 }kill = { 2, 6 }

92

Conjunto Kill agregado

a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

InKILL = { 3,4,5,7 }

d = e + f 2gen = { 2 }kill = { 5, 7 }

OutKILL = { 5,7 } { 3,4,5,7 }

f = a + c 3gen = { 3 }kill = { 2, 6 }

93

Conjunto Kill agregado

a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

InKILL = { 3,4,5,7 }

d = e + f 2gen = { 2 }kill = { 5, 7 }

OutKILL = { 3,4,5,7 }

f = a + c 3gen = { 3 }kill = { 2, 6 }

94

Conjunto Kill agregado

a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

d = e + f 2gen = { 2 }kill = { 5, 7 }

InKILL = { 3,4,5,7 }

f = a + c 3gen = { 3 }kill = { 2, 6 }

OutKILL = kill InKILL

95

Conjunto Kill agregado

a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

d = e + f 2gen = { 2 }kill = { 5, 7 }

InKILL = { 3,4,5,7 }

f = a + c 3gen = { 3 }kill = { 2, 6 }

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

96

Conjunto Kill agregado

a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

d = e + f 2gen = { 2 }kill = { 5, 7 }

InKILL = { 3,4,5,7 }

f = a + c 3gen = { 3 }kill = { 2, 6 }

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

97

Conjunto Kill agregado

a = b + c 1gen = { 1 }kill = { 3, 4, 5, 7 }

d = e + f 2gen = { 2 }kill = { 5, 7 }

f = a + c 3gen = { 3 }kill = { 2, 6 }

KIL

L =

{ 2

, 3, 4

, 5, 6

, 7 }

98

Conjuntos Gen y Kill agregados

a = b + c 1d = e + f 2f = a + c 3

g = a + c 4

j = a + b + c + d 7

b = a + d 5h = c + f 6

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

99

Algoritmo para Expresiones Disponibles

• Asignar un número a cada expresión

• Calcular conjuntos gen y kill para cada instrucción

• Calcular conjuntos gen y kill agregados para cada bloque básico

• Inicializar conjunto de disponibles de cada bloque básico con todas las expresiones

20

100

Conjuntos Gen y Kill agregados

a = b + c 1d = e + f 2f = a + c 3

g = a + c 4

j = a + b + c + d 7

b = a + d 5h = c + f 6

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

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

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

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

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

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

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

101

Algoritmo para Expresiones Disponibles

• Asignar un número a cada expresión

• Calcular conjuntos gen y kill para cada instrucción

• Calcular conjuntos gen y kill agregados para cada bloque básico

• Inicializar conjunto de disponibles de cada bloque básico con todas las expresiones

• Iterativamente propagar el conjunto de expresiones disponibles por el CFG

102

Propagar conjunto de disponibles

gen = { … }

kill = { ... }

IN set

OUT set

OUT =

103

Propagar conjunto de disponibles

gen = { … }

kill = { ... }

IN set

OUT set

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

OUT = gen

104

Propagar conjunto de disponibles

gen = { … }

kill = { ... }

IN set

OUT set

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

• Cualquier expresión disponible en la entrada (en el conjunto IN) y que no está en el conjunto kill debe estar disponible al final

OUT = gen (IN - kill)

105

Propagar conjunto de disponibles

IN set

OUT = gen (IN - kill)

OUT set OU

T se

t

IN =

106

Propagar conjunto de disponibles

IN set

• La expresión está disponible sólo está disponible en todos los caminos de entrada

OUT = gen (IN - kill)

OUT set OU

T se

t

IN = OUT

107

Conjuntos Gen y Kill agregados

a = b + c 1d = e + f 2f = a + c 3

g = a + c 4

j = a + b + c + d 7

b = a + d 5h = c + f 6

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

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

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

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

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

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

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

OUT = gen (IN - kill)

IN = OUT

108

Conjuntos Gen y Kill agregados

g = a + c 4

j = a + b + c + d 7

b = a + d 5h = c + f 6

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

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

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

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

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

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

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

OUT = gen (IN - kill)

IN = OUTa = b + c 1d = e + f 2f = a + c 3

109

Conjuntos Gen y Kill agregados

g = a + c 4

j = a + b + c + d 7

b = a + d 5h = c + f 6

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

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

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

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

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

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

OUT = gen (IN - kill)

IN = OUTa = b + c 1d = e + f 2f = a + c 3

110

Conjuntos Gen y Kill agregados

g = a + c 4

j = a + b + c + d 7

b = a + d 5h = c + f 6

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

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

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

OUT = {1,3}

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

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

OUT = gen (IN - kill)

IN = OUTa = b + c 1d = e + f 2f = a + c 3

111

Conjuntos Gen y Kill agregados

j = a + b + c + d 7

b = a + d 5h = c + f 6

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

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

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

OUT = {1,3}

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

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

OUT = gen (IN - kill)

IN = OUT

g = a + c 4

a = b + c 1d = e + f 2f = a + c 3

112

Conjuntos Gen y Kill agregados

j = a + b + c + d 7

b = a + d 5h = c + f 6

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

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

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

OUT = {1,3}

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

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

OUT = gen (IN - kill)

IN = OUT

g = a + c 4

a = b + c 1d = e + f 2f = a + c 3

113

Conjuntos Gen y Kill agregados

j = a + b + c + d 7

b = a + d 5h = c + f 6

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

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

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

OUT = {1,3}

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

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

OUT = gen (IN - kill)

IN = OUT

g = a + c 4

a = b + c 1d = e + f 2f = a + c 3

114

Conjuntos Gen y Kill agregados

b = a + d 5h = c + f 6

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

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

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

OUT = {1,3}

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

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

OUT = gen (IN - kill)

IN = OUTa = b + c 1d = e + f 2f = a + c 3

g = a + c 4

j = a + b + c + d 7

115

Conjuntos Gen y Kill agregados

b = a + d 5h = c + f 6

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

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

IN = {1,3,4}

OUT = {1,3}

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

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

OUT = gen (IN - kill)

IN = OUTa = b + c 1d = e + f 2f = a + c 3

g = a + c 4

j = a + b + c + d 7

116

Conjuntos Gen y Kill agregados

b = a + d 5h = c + f 6

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

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

IN = {1,3,4}

OUT = {1,3}

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

OUT = {1,3,4,7}

OUT = gen (IN - kill)

IN = OUTa = b + c 1d = e + f 2f = a + c 3

g = a + c 4

j = a + b + c + d 7

117

Conjuntos Gen y Kill agregados

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

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

IN = {1,3,4}

OUT = {1,3}

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

OUT = {1,3,4,7}

OUT = gen (IN - kill)

IN = OUTa = b + c 1d = e + f 2f = a + c 3

g = a + c 4b = a + d 5h = c + f 6

j = a + b + c + d 7

118

Conjuntos Gen y Kill agregados

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

IN = {1,3}IN = {1,3}

IN = {1,3,4}

OUT = {1,3}

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

OUT = {1,3,4,7}

OUT = gen (IN - kill)

IN = OUTa = b + c 1d = e + f 2f = a + c 3

g = a + c 4b = a + d 5h = c + f 6

j = a + b + c + d 7

119

Conjuntos Gen y Kill agregados

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

IN = {1,3}IN = {1,3}

IN = {1,3,4}

OUT = {1,3}

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

OUT = {1,3,4,7}

OUT = gen (IN - kill)

IN = OUTa = b + c 1d = e + f 2f = a + c 3

g = a + c 4b = a + d 5h = c + f 6

j = a + b + c + d 7

120

Conjuntos Gen y Kill agregados

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

IN = {1,3}IN = {1,3}

IN = {1,3,4}

OUT = {1,3}

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

OUT = {1,3,4,7}

OUT = gen (IN - kill)

IN = OUTa = b + c 1d = e + f 2f = a + c 3

g = a + c 4

j = a + b + c + d 7

b = a + d 5h = c + f 6

121

Conjuntos Gen y Kill agregados

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

IN = {1,3}IN = {1,3}

IN = {1,3,4}

OUT = {1,3}

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

OUT = {1,3,4,7}

OUT = gen (IN - kill)

IN = OUT

g = a + c 4

j = a + b + c + d 7

b = a + d 5h = c + f 6

a = b + c 1d = e + f 2f = a + c 3

122

Conjuntos Gen y Kill agregados

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

IN = {1,3}IN = {1,3}

IN = {1,3,4}

OUT = {1,3}

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

OUT = {1,3,4,7}

OUT = gen (IN - kill)

IN = OUT

j = a + b + c + d 7

b = a + d 5h = c + f 6

a = b + c 1d = e + f 2f = a + c 3

g = a + c 4

123

Conjuntos Gen y Kill agregados

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

IN = {1,3}IN = {1,3}

IN = {1,3,4}

OUT = {1,3}

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

OUT = {1,3,4,7}

OUT = gen (IN - kill)

IN = OUT

b = a + d 5h = c + f 6

a = b + c 1d = e + f 2f = a + c 3

g = a + c 4

j = a + b + c + d 7

124

Conjuntos Gen y Kill agregados

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

IN = {1,3}IN = {1,3}

IN = {3}

OUT = {1,3}

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

OUT = {1,3,4,7}

OUT = gen (IN - kill)

IN = OUT

b = a + d 5h = c + f 6

a = b + c 1d = e + f 2f = a + c 3

g = a + c 4

j = a + b + c + d 7

125

Conjuntos Gen y Kill agregados

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

IN = {1,3}IN = {1,3}

IN = {3}

OUT = {1,3}

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

OUT = {3,7}

OUT = gen (IN - kill)

IN = OUT

b = a + d 5h = c + f 6

a = b + c 1d = e + f 2f = a + c 3

g = a + c 4

j = a + b + c + d 7

126

Conjuntos Gen y Kill agregados

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

IN = {1,3}IN = {1,3}

IN = {3}

OUT = {1,3}

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

OUT = {3,7}

OUT = gen (IN - kill)

IN = OUTa = b + c 1d = e + f 2f = a + c 3

g = a + c 4b = a + d 5h = c + f 6

j = a + b + c + d 7

127

Conjuntos Gen y Kill agregados

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

IN = {1,3}IN = {3}

IN = {3}

OUT = {1,3}

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

OUT = {3,7}

OUT = gen (IN - kill)

IN = OUTa = b + c 1d = e + f 2f = a + c 3

g = a + c 4b = a + d 5h = c + f 6

j = a + b + c + d 7

128

Conjuntos Gen y Kill agregados

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

IN = {1,3}IN = {3}

IN = {3}

OUT = {1,3}

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

OUT = {3,7}

OUT = gen (IN - kill)

IN = OUTa = b + c 1d = e + f 2f = a + c 3

g = a + c 4

j = a + b + c + d 7

b = a + d 5h = c + f 6

129

Conjuntos Gen y Kill agregados

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

IN = {1,3}IN = {3}

IN = {3}

OUT = {1,3}

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

OUT = {3,7}

OUT = gen (IN - kill)

IN = OUT

g = a + c 4

j = a + b + c + d 7

b = a + d 5h = c + f 6

a = b + c 1d = e + f 2f = a + c 3

130

Conjuntos Gen y Kill agregados

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

IN = {1,3}IN = {3}

IN = {3}

OUT = {1,3}

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

OUT = {3,7}

OUT = gen (IN - kill)

IN = OUTa = b + c 1d = e + f 2f = a + c 3

j = a + b + c + d 7

b = a + d 5h = c + f 6g = a + c 4

131

Conjuntos Gen y Kill agregados

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

IN = {1,3}IN = {3}

IN = {3}

OUT = {1,3}

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

OUT = {3,7}

OUT = gen (IN - kill)

IN = OUTa = b + c 1d = e + f 2f = a + c 3

g = a + c 4b = a + d 5h = c + f 6

j = a + b + c + d 7

132

Conjuntos Gen y Kill agregados

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

IN = {1,3}IN = {3}

IN = {3}

OUT = {1,3}

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

OUT = {3,7}

OUT = gen (IN - kill)

IN = OUTa = b + c 1d = e + f 2f = a + c 3

g = a + c 4

j = a + b + c + d 7

b = a + d 5h = c + f 6

133

Conjuntos Gen y Kill agregados

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

Gen = { 4 }Kill = { }

Gen = { 5, 6 }Kill = { 1, 7 }

Gen = { 7 }Kill = { }

IN = {}

IN = {1,3}IN = {3}

IN = {3}

OUT = {1,3}

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

OUT = {3,7}

OUT = gen (IN - kill)

IN = OUTa = b + c 1d = e + f 2f = a + c 3

g = a + c 4

j = a + b + c + d 7

b = a + d 5h = c + f 6

134

Algoritmo para Expresiones Disponibles

• Asignar un número a cada expresión

• Calcular conjuntos gen y kill para cada instrucción

• Calcular conjuntos gen y kill agregados para cada bloque básico

• Inicializar conjunto de disponibles en cada bloque básico con todas las expresiones

• Iterativamente propagar expresiones disponibles sobre el CFG

• Propagar dentro del bloque básico

28

135

Propagar dentro del bloque básico

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

IN set

OUT set

• Comenzar con el conjunto IN de expresiones disponibles

• Linealmente propagar hacia abajo del bloque básico– Igual que el paso de data-flow

– Una sola pasada ya que no hay aristas de retorno

OUT = gen (IN - kill)

136

ae = { 1, 3 }g = a + c 4

ae = { 1, 3, 4 }

Expresiones Disponibles

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

ae = { 3 }j = a + b + c + d 7

ae = { 3, 7 }

ae = { 3 }b = a + d 5

ae = { 3, 5 }h = c + f 6

ae = { 3, 5, 6 }

137

Resumen

• Overview de análisis de control de flujo• Expresiones Disponibles• Algoritmo para calcular expresiones

disponibles• Bit sets• Formulando un problema de análisis de flujo

de datos• Cadenas DU• Forma SSA

5

138

Bitsets

• Asignar un bit a cada elemento del conjunto– Unión OR– Intersección AND – Subtracción NEGATE y AND

• Implementación rápida– 32 elementos empacados en cada word– AND y OR son ambas una instrucción

139

Conjunto Kill vrs. Conjunto Preserve

• Conjuntos Kill– OUT = gen (IN - kill)– Usando vectores de bits: OUT = gen (IN - kill)– Subtracción NEGATE y AND– OUT = gen (IN kill)

• Conjuntos Preserve– Usados en el libro de la Ballena– PRSV = Entire Set - KILL– OUT = gen (IN prsv)– OUT = gen (IN prsv)

140

Conjuntos Gen y Kill agregados

a = b + c 1d = e + f 2f = a + c 3

g = a + c 4

j = a + b + c + d 7

b = a + d 5h = c + f 6

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

Gen = { 4 }Kill = { }

Gen = { 5,6 }Kill = { 1,7 }

Gen = { 7 }Kill = { }

141

Conjuntos Gen y Kill agregados

a = b + c 1d = e + f 2f = a + c 3

g = a + c 4

j = a + b + c + d 7

b = a + d 5h = c + f 6

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

Gen = { 4 }Kill = { }

Gen = { 5,6 }Kill = { 1,7 }

Gen = { 7 }Kill = { }

•Se requieren 7 bits por conjunto

142

Conjuntos Gen y Kill agregados

a = b + c 1d = e + f 2f = a + c 3

g = a + c 4

j = a + b + c + d 7

b = a + d 5h = c + f 6

Gen = 1010000Kill = 0111111

Gen = 0001000Kill = 0000000

Gen = 0000110Kill = 1000001

Gen = 0000001Kill = 0000000

•Se requieren 7 bits por conjunto

143

Resumen

• Overview de análisis de control de flujo• Expresiones Disponibles• Algoritmo para calcular expresiones

disponibles• Bit sets• Formulando un problema de análisis de flujo

de datos• Cadenas DU• Forma SSA

5

144

Formulando un problema de análisis de flujo de datos

• Independiente del problema– Calcular conjuntos gen y kill para bloque básico– Propagación iterativa de información hasta que

converja– Propagación de información dentro del bloque

básico

145

Formulando un problema de análisis de flujo de datos

• Lattice– Estructuras abstractas sobre las que opera el análisis

ejemplo: conjuntos de expresiones disponibles

• Funciones de flujo– Cómo cada control de flujo y construcciones

computacionales afectan las estructuras abstractas• Ejemplo: la ecuación OUT de cada statement

146

Lattice

• Una lattice L consiste de– Un conjunto de valores– Dos operaciones: meet( ) y join ( )– Un valor superior [top] (T) y un valor inferior

[bottom] ()

147

Lattice

• Ejemplo: el lattice para el problema de “reaching definition” cuando sólo hay 3 definiciones

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

148

Operaciones Meet y Join

• Meet y Join forman una “cerradura”– Para todos a, b L existen c y d L únicos, tal que

a b = c a b = d• Meet y Join con conmutativas

– a b = b a a b = b a• Meet y Join son asociativas

– (a b) c = b (a c) (a b) c = b (a c)

• Existe un único elemento (T) [top] y un único elemento () [bottom] en L tal que– a = a T = T

149

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

150

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

151

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

152

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

153

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

154

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

155

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

156

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

157

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

158

Operaciones Meet y Join

• Operación Meet– Intersección de conjuntos

– Seguir las líneas hacia abajo desde los dos elementos en el lattice hasta que se encuentren en un sólo elemento único

• Operación Join– Unión de conjuntos– Hay un sólo elemento en el lattice desde el que hay

un camino hacia abajo (sin segmentos compartidos) hacia ambos elementos

159

Orden Parcial

• Definimos a b sí y sólo sí a b = b

• Propiedades– Reflexivo: a a– Antisimétrico: a b y b a a = b– Transitivo: a b y b c a c

160

Orden Parcial

• Definimos a b sí y sólo sí a b = b

• Propiedades– a b existe un camino desde b hasta a

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

161

Alto del Lattice

• El alto del lattice es la cadena ascendiente más larga en el lattice– (T, a, b, c, …, )

162

Alto del Lattice

• El alto del lattice es la cadena ascendiente más larga en el lattice– (T, a, b, c, …, )

– Alto es (T, {d2,d3}, {d3}, ) = 4

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

163

Funciones de Flujo

• Ejemplo: OUT = f(IN)

• f: L L donde L es un lattice

• Propiedades– Monótona: a,b L a b f(a) f(b)

• Punto Fijo– Un punto fijo es un elemento a L tal que

f(a) = a

164

Intuición acerca de Finalización

• El análisis de flujo de datos comienza asumiendo los valores más optimistas (T)

• Cada etapa aplica funciones de flujo– Vnew Vprev

– Se mueve hacia abajo en el lattice

• Hasta que sea estable (valores no cambian)– Se llega a un punto fijo en cada bloque básico

• Lattice tiene un alto finito debe terminar

165

Resumen

• Overview de análisis de control de flujo• Expresiones Disponibles• Algoritmo para calcular expresiones

disponibles• Bit sets• Formulando un problema de análisis de flujo

de datos• Cadenas DU• Forma SSA

5

166

Cadenas Def-Use y Use-Def

• Cadena Def-Use (DU)– Conecta la definición de cada variable con todos

los posibles usos de esa variable

• Cadena Use-Def (UD)– Conecta el uso de una variable con todas las

posibles definiciones de esa variable

167

Formulación del problema de flujo de datos para cadena DU

• Lattice: El conjunto de definiciones– Bitvector format: un bit para cada definición en el

procedimiento

• Dirección del Flujo: Flujo hacia adelante

• Funciones de Flujo:– gen = { b0…bn | bk = 1 ssi la k-ésima definición}

– kill = { b0…bn | bk = 1 ssi k-ésima variable es redefinida }

– OUT = gen (IN - kill)

– IN = OUT

168

Formulen el problema de flujo de datos para la cadena UD

• Lattice: – Bitvector format:

• Dirección del Flujo: Flujo hacia adelante/atrás

• Funciones de flujo:– gen = { b0…bn | bk = 1 }

– kill = { b0…bn | bk = 1 }

– OUT =

– IN =

169

Ejemplo DUentry

k = false i = 1 j = 2

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

print j i = i + 1

k

exit

i < n

170

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

171

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

172

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

OUT = { }IN = { }

OUT = IN = { }

OUT = IN = { }

OUT = IN = { }

OUT = { } OUT = { } OUT = { }IN = { }

173

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

OUT = { }IN = { }

OUT = IN = { }

OUT = IN = { }

OUT = IN = { }

OUT = { } OUT = { } OUT = { }IN = { }

174

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

OUT = { }IN = { }

OUT = IN = { }

OUT = IN = { }

OUT = IN = { }

OUT = { } OUT = { } OUT = { }IN = { }

175

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

OUT = IN = { }

OUT = IN = { }

OUT = { } OUT = { } OUT = { }IN = { }

176

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

OUT = IN = { }

OUT = IN = { }

OUT = { } OUT = { } OUT = { }IN = { }

177

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

OUT = IN = { }

OUT = IN = { }

OUT = { } OUT = { } OUT = { }IN = { }

178

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

OUT = IN = { 1, 2, 3 }

OUT = IN = { }

OUT = { } OUT = { } OUT = { }IN = { }

179

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

OUT = IN = { 1, 2, 3 }

OUT = IN = { }

OUT = { } OUT = { } OUT = { }IN = { }

180

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

OUT = IN = { 1, 2, 3 }

OUT = IN = { }

OUT = { 4, 5, 6 } OUT = { } OUT = { }IN = { }

181

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

OUT = IN = { 1, 2, 3 }

OUT = IN = { }

OUT = { 4, 5, 6 } OUT = { } OUT = { }IN = { }

182

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

OUT = IN = { 1, 2, 3 }

OUT = IN = { 1, 2, 3 }

OUT = { 4, 5, 6 } OUT = { } OUT = { }IN = { }

183

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

OUT = IN = { 1, 2, 3 }

OUT = IN = { 1, 2, 3 }

OUT = { 4, 5, 6 } OUT = { } OUT = { }IN = { }

184

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

OUT = IN = { 1, 2, 3 }

OUT = IN = { 1, 2, 3 }

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

185

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

OUT = IN = { 1, 2, 3 }

OUT = IN = { 1, 2, 3 }

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

186

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

OUT = IN = { 1, 2, 3 }

OUT = IN = { 1, 2, 3 }

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

187

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

OUT = IN = { 1, 2, 3 }

OUT = IN = { 1, 2, 3 }

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

188

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

OUT = IN = { 1, 2, 3 }

OUT = IN = { 1, 2, 3 }

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

189

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

OUT = IN = { 1, 2, 3 }

OUT = IN = { 1, 2, 3 }

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

190

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

OUT = IN = { 1, 2, 3 }

OUT = IN = { 1, 2, 3 }

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

191

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

OUT = IN = { 1, 2, 3 }

OUT = IN = { 1, 2, 3 }

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

192

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

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

OUT = IN = { 1, 2, 3 }

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

193

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

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

OUT = IN = { 1, 2, 3 }

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

194

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

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

OUT = IN = { 1, 2, 3 }

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

195

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

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

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

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

196

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

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

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

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

197

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

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

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

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

198

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

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

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

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

199

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

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

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

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

200

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

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

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

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

201

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

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

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

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

202

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

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

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

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

203

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

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

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

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

204

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

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

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

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

205

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

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

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

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

206

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

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

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

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

207

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

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

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

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

208

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

gen ={ 1, 2, 3 }kill = { 4,5,6,7 }

gen ={ 4,5,6 }kill = { 1,2,3,7 }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ }kill = { }

gen ={ 7 }kill = { 2,6 }

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

OUT = IN = { }

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

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

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

209

Ejemplo DUentry

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

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

print j i = i + 1 7

k

exit

i < n

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

IN = { }

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

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

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

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

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

210

Cadenas DU

• En cada uso de la variable, apunta a todas las posibles definiciones– Información muy útil– Usada en muchas optimizaciones

• Incorporar esta información en la representación– Forma SSA

211

Resumen

• Overview de análisis de control de flujo• Expresiones Disponibles• Algoritmo para calcular expresiones

disponibles• Bit sets• Formulando un problema de análisis de flujo

de datos• Cadenas DU• Forma SSA

5

212

Forma Static Single Assignment (SSA)

• Cada definición tiene un nombre único de variable– Nombre original + número de versión

• Cada uso se refiere a la definición por nombre

• ¿Qué hay acerca de posibles definiciones múltiples?– Agregamos nodos de union especiales (merge) para

que sólo pueda haber una definición (funciones

213

Forma Static Single Assignment (SSA)

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

214

Forma Static Single Assignment (SSA)

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

a1 = 1 b1 = a1 + 2c1 = a1 + b1

a2 = a1 + 1d1 = a2 + b1

215

Forma Static Single Assignment (SSA)a = 1 c = a + 2

b = 1 c = b + 2

d = a + b + c

216

Forma Static Single Assignment (SSA)a = 1 c = a + 2

b = 1 c = b + 2

d = a + b + c

a1 = 1 c1 = a1 + 2

b1 = 1 c2 = b1 + 2

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

217

Ejemplo DUentry

k = false i = 1 j = 2

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

print j i = i + 1

k

exit

i < n

218

Ejemplo DUentry

k1 = false i1 = 1 j1 = 2

j2 = j3 * 2 k2 = true i2 = i3 + 1 print j3 i4 = i3 + 1

k3

i5 = (i3, i4)

exit

i3 = (i1, i2) j3 = (j1, j2) k3 = (k1, k2)

i1 < n

219

Lecturas

• Ballena– Capítulo 12

• Tigre– 17.1 - 17.4, 19.1, 19.2

top related