Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo...

219
Compilador es Análisis de Flujo de Datos

Transcript of Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo...

Page 1: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

Compiladores

Análisis de Flujo de Datos

Page 2: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 3: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 4: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 5: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 6: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 7: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 8: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 9: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 10: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 11: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 12: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 13: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 14: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 15: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 16: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 17: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 18: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 19: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 20: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 21: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 22: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 23: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 24: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 25: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 26: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 27: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 28: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 29: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 30: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 31: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 32: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 33: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 34: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 35: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 36: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 37: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 38: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 39: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 40: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 41: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 42: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

42

Ejemplo: Expresiones Disponibles

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

g = a + c

j = a + b + c + d

b = a + dh = c + f

Page 43: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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í!

Page 44: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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í!

Page 45: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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!

Page 46: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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!

Page 47: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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!

Page 48: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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í!

Page 49: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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í!

Page 50: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 51: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 52: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 53: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

53

Uso de Expresiones Disponibles

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

g = f

j = a + b + c + d

b = a + dh = c + f

Page 54: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

54

Uso de Expresiones Disponibles

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

g = f

j = a + b + c + d

b = a + dh = c + f

Page 55: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

55

Uso de Expresiones Disponibles

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

g = f

j = a + c + b + d

b = a + dh = c + f

Page 56: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

56

Uso de Expresiones Disponibles

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

g = f

j = f + b + d

b = a + dh = c + f

Page 57: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

57

Uso de Expresiones Disponibles

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

g = f

j = f + b + d

b = a + dh = c + f

Page 58: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 59: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

59

Algoritmo para Expresiones Disponibles

• Asignar un número a cada expresión

Page 60: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 61: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 62: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 63: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

63

Algoritmo para Expresiones Disponibles

• Asignar un número a cada expresión

• Calcular conjuntos gen y kill para cada expresión

15

Page 64: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 65: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 66: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 67: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 68: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 69: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 70: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

70

Conjunto Gen agregado

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

InGEN set

OutGEN set

OutGEN =

Page 71: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 72: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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)

Page 73: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 74: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 75: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 76: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 77: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 78: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 79: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 80: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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)

Page 81: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 82: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 83: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 84: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

84

Conjunto Kill agregado

a = b + c 1

gen = { 1 }

kill = { 3, 4, 5, 7 }

InKILL set

OutKILL set

OutKILL =

Page 85: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 86: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 87: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 88: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 89: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 90: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 91: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 92: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 93: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 94: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 95: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 96: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 97: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 98: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 = { }

Page 99: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 100: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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}

Page 101: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 102: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

102

Propagar conjunto de disponibles

gen = { … }

kill = { ... }

IN set

OUT set

OUT =

Page 103: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 104: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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)

Page 105: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

105

Propagar conjunto de disponibles

IN set

OUT = gen (IN - kill)

OUT set OU

T se

t

IN =

Page 106: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 107: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 108: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 109: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 110: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 111: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 112: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 113: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 114: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 115: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 116: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 117: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 118: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 119: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 120: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 121: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 122: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 123: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 124: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 125: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 126: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 127: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 128: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 129: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 130: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 131: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 132: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 133: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 134: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 135: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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)

Page 136: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 137: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 138: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 139: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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)

Page 140: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 = { }

Page 141: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 142: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 143: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 144: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 145: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 146: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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] ()

Page 147: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 148: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 149: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

149

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

Page 150: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

150

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

Page 151: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

151

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

Page 152: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

152

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

Page 153: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

153

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

Page 154: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

154

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

Page 155: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

155

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

Page 156: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

156

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

Page 157: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

157

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

Page 158: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 159: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 160: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 161: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

161

Alto del Lattice

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

Page 162: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 163: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 164: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 165: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 166: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 167: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 168: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 =

Page 169: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 170: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 171: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 172: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 = { }

Page 173: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 = { }

Page 174: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 = { }

Page 175: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 = { }

Page 176: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 = { }

Page 177: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 = { }

Page 178: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 = { }

Page 179: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 = { }

Page 180: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 = { }

Page 181: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 = { }

Page 182: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 = { }

Page 183: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 = { }

Page 184: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 = { }

Page 185: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 = { }

Page 186: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 = { }

Page 187: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 188: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 189: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 190: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 191: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 192: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 193: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 194: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 195: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 196: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 197: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 198: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 199: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 200: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 201: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 202: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 203: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 204: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 205: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 206: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 207: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 208: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 209: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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 }

Page 210: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 211: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 212: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 213: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

213

Forma Static Single Assignment (SSA)

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

Page 214: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 215: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

215

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

b = 1 c = b + 2

d = a + b + c

Page 216: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 217: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 218: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

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

Page 219: Compiladores Análisis de Flujo de Datos. 2 Resumen Overview de análisis de control de flujo Expresiones disponibles Algoritmo para calcular expresiones.

219

Lecturas

• Ballena– Capítulo 12

• Tigre– 17.1 - 17.4, 19.1, 19.2