compiladores optimizaciones tradicionales simplificación algebraica, copy propagation, y constant...

215
Compilador es Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

Upload: adalina-castillo

Post on 22-Jan-2016

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

Compiladores

Optimizaciones Tradicionales

Simplificación Algebraica,

Copy Propagation, y Constant Propagation

Page 2: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

2

Resumen

• Overview de análisis de control de flujo• Simplificación algebraica• Copy Propagation• Constant Propagation

40

Page 3: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

3

Expresiones Disponibles

• Dominio– conjunto de expresiones

• Dirección de flujo de datos Hacia adelante• Función de flujo de datos

– OUT = gen (IN - kill)– gen = { a | a se calcula en el bloque básico }– kill = { a | una variable va que es definida en el b.b. }

• Operación Meet– IN = OUT

• Valores iniciales conjunto entero (Top)

Page 4: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

4

Cadena DU (Reaching Definitions)

• Dominio– conjunto de definiciones

• Dirección de flujo de datos Hacia adelante• Función de flujo de datos

– OUT = gen (IN - kill)– gen = { x | x es definida en el statement}– kill = { x | LHS var. de x es redefinido en el statement. }

• Operación Meet– IN = OUT

• Valores iniciales Conjunto vacío (Bottom)

Page 5: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

5

Framework para análisis

• Análisis de control de flujo– Identificar la estructura del programa

– Ayuda a construir el análisis de flujo de datos

• Análisis de flujo de datos– Framework para encontrar la información necesaria para

optimizar

– Hasta ahora hemos encontrado• expresiones disponibles

• cadenas UD y DU

– ¡Ahora usemos esta información para hacer algo interesante!

Page 6: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

6

Optimizaciones

• Cada optimización es muy simple– Reduce la complejidad

• Se necesitan múltiples optimizaciones

• Es posible que haya que aplicar la misma optimización múltiples veces

Page 7: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

7

Resumen

• Overview de análisis de control de flujo• Simplificación algebraica• Copy Propagation• Constant Propagation

40

Page 8: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

8

Simplificación algebraica

• Aplicar nuestro conocimiento de algebra, teoría de números, etc para simplificar expresiones

Page 9: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

9

Simplificación algebraica

• Aplicar nuestro conocimiento de algebra, teoría de números, etc para simplificar expresiones

• Ejemplo– a + 0 a– a * 1 a– a / 1 a– a * 0 0– 0 - a -a– a + (-b) a - b– -(-a) a

Page 10: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

10

Simplificación algebraica

• Aplicar nuestro conocimiento de algebra, teoría de números, etc para simplificar expresiones

• Ejemplo– a true a– a false false– a true true– a false a

Page 11: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

11

Simplificación algebraica

• Aplicar nuestro conocimiento de algebra, teoría de números, etc para simplificar expresiones

• Ejemplo– a ^ 2 a*a– a * 2 a + a– a * 8 a << 3

Page 12: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

12

Oportunidades para Simplificación Algebraica

• En el código– Los programadores no simplifican expresiones– Los programas son más legibles con exresiones

completas

• Luego de la expansión del compilador– Ejemplo: Lectura de array A[8][12] va a ser

expandida a:– *(Abase + 4*(12 + 8*256)) que puede ser

simplificada después de otras optimizaciones

Page 13: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

13

Utilidad de Simplificación Algebraica

• Reduce el número de instrucciones

• Usa expresiones menos “caras”

• Habilita otras optimizaciones

Page 14: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

14

Implementación

• ¡No es una optimización de flujo de datos!

• Encontrar candidatos que hagan match con las reglas de simplificación y simplificar los árboles de expresión

• Los candidatos pueden no ser obvios

Page 15: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

15

Implementación

• ¡No es una optimización de flujo de datos!

• Encontrar candidatos que hagan match con las reglas de simplificación y simplificar los árboles de expresión

• Los candidatos pueden no ser obvios– Ejemplo

a + b - aa -

b a

+

Page 16: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

16

Usar nuestro conocimiento de los operadores

• Operadores conmutativos a op b = b op a

• Operadores asociativos (a op b) op c = b op (a op c)

Page 17: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

17

Forma Canónica

• Poner los árboles de expresiones en forma canónica– Suma de multiplicandos– Ejemplo

• (a + 3) * (a + 8) * 4 4*a*a + 44*a + 96

– La Sección 12.3.1 de la ballena habla de esto

Page 18: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

18

Efectos en la estabilidad numérica

• Algunas simplificaciones algebraicas pueden producir resultados incorrectos

Page 19: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

19

Efectos en la estabilidad numérica

• Algunas simplificaciones algebraicas pueden producir resultados incorrectos

• Ejemplo– (a / b)*0 + c

Page 20: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

20

Efectos en la estabilidad numérica

• Algunas simplificaciones algebraicas pueden producir resultados incorrectos

• Ejemplo– (a / b)*0 + c– Podemos simplificar esto a c

Page 21: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

21

Efectos en la estabilidad numérica

• Algunas simplificaciones algebraicas pueden producir resultados incorrectos

• Ejemplo– (a / b)*0 + c– Podemos simplificar esto a c– Pero qué pasa cuándo b = 0

debería ser una excepción, pero vamos a obtener un resultado

Page 22: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

22

Resumen

• Overview de análisis de control de flujo• Simplificación algebraica• Copy Propagation• Constant Propagation

40

Page 23: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

23

Copy Propagation

• Eliminar copias múltiples– propagar el valor directamente a su uso

• Ejemploa = b + c

d = a

e = d

f = d + 2*e + c

Page 24: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

24

Copy Propagation

• Eliminar copias múltiples– propagar el valor directamente a su uso

• Ejemploa = b + c

d = a

e = d

f = d + 2*e + c

Page 25: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

25

Copy Propagation

• Eliminar copias múltiples– propagar el valor directamente a su uso

• Ejemploa = b + c

d = a

e = a

f = d + 2*e + c

Page 26: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

26

Copy Propagation

• Eliminar copias múltiples– propagar el valor directamente a su uso

• Ejemploa = b + c

d = a

e = a

f = d + 2*e + c

Page 27: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

27

Copy Propagation

• Eliminar copias múltiples– propagar el valor directamente a su uso

• Ejemploa = b + c

d = a

e = a

f = a + 2*e + c

Page 28: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

28

Copy Propagation

• Eliminar copias múltiples– propagar el valor directamente a su uso

• Ejemploa = b + c

d = a

e = a

f = a + 2*e + c

Page 29: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

29

Copy Propagation

• Eliminar copias múltiples– propagar el valor directamente a su uso

• Ejemploa = b + c

d = a

e = a

f = a + 2*a + c

Page 30: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

30

Copy Propagation

• Eliminar copias múltiples– propagar el valor directamente a su uso

• Ejemploa = b + c

d = a

e = a

f = a + 2*a + c

Page 31: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

31

Oportunidades para Copy Propagation

• En código del usuario

• Después de otras optimizaciones– Ejemplo: Simplificación algebraica

Page 32: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

32

Ventajas de Copy Propagation

• Lleva a más simplificaciones algebraicas

Page 33: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

33

Ventajas de Copy Propagation

• Lleva a más simplificaciones algebraicas

• Ejemploa = b + c

d = a

e = a

f = a + 2*a + c

Page 34: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

34

Ventajas de Copy Propagation

• Lleva a más simplificaciones algebraicas

• Ejemploa = b + c

d = a

e = a

f = a + 2*a + c

Page 35: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

35

Ventajas de Copy Propagation

• Lleva a más simplificaciones algebraicas

• Ejemploa = b + c

d = a

e = a

f = 3*a + c

Page 36: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

36

Ventajas de Copy Propagation

• Reduce instrucciones al eliminar ops de copia– Crea código muerto que puede ser eliminado

Page 37: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

37

Ventajas de Copy Propagation

• Reduce instrucciones al eliminar ops de copia– Crea código muerto que puede ser eliminado

• Ejemploa = b + c

d = a

e = a

f = 3*a + c

Page 38: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

38

Ventajas de Copy Propagation

• Reduce instrucciones al eliminar ops de copia– Crea código muerto que puede ser eliminado

• Ejemploa = b + c

f = 3*a + c

Page 39: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

39

Cómo hacer copy propagation

• Para cada expresión RHS Para cada variable v usada en expresión RHS– si la variable v es definida por un statement v = u– reemplazar la variable v por u

• En cada punto del programa hay que saber– qué variables son iguales– un elemento <u,v> está en el conjunto ssi v = u

(u, v son variables)

Page 40: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

40

Cómo hacer copy propagation

• Una asignación v = u todavía es válida en un punto dado de ejecución ssi– Un statement v = u occurre en cada camino de

ejecución que llega al punto actual– La variable v no es redefinida en ninguno de estos

caminos de ejecución entre el statement y el punto actual

– La variable u no es redefinida en ninguno de caminos de ejecución entre el statement y el punto actual

• ¡un problema de flujo de datos!

Page 41: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

41

Problema de Data-Flow paraCopy Propagation

• Dominio– Conjunto de tuplas <v,u> representando un statement v = u

• Dirección de flujo de datos Hacia adelante• Función de flujo de datos

– OUT = gen (IN - kill)– gen = { <v,u> | v = u es el statement }– kill = { <v,u> | LHS var. del stmt. es v ó u }

• Operación Meet– IN = OUT

• Valores Iniciales Conjunto vacio (Bottom)

Page 42: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

42

Ejemplo

b = a

c = b + 1

d = b

b = d + c

b = d

Page 43: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

43

b = a

c = b + 1

d = b

b = d + c

b = d

gen = { <v,u> | v = u es el statement }kill = { <v,u> | LHS var. del stmt. es v ó u }

Page 44: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

44

b = a

c = b + 1

d = b

b = d + c

b = d

gen = { <b,a> }

gen = { }

gen = { <d,b> }

gen = { }

gen = { <b,d> }

gen = { <v,u> | v = u es el statement }kill = { <v,u> | LHS var. del stmt. es v ó u }

Page 45: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

45

b = a

c = b + 1

d = b

b = d + c

b = d

gen = { <b,a> }

kill = { <d,b>, <b,d> }

gen = { }

kill = { }

gen = { <d,b> }

kill = { <b,d> }

gen = { }

kill = { <b,a> <d,b>, <b,d> }

gen = { <b,d> }

kill = { <b,a>, <d,b> }

gen = { <v,u> | v = u es el statement }kill = { <v,u> | LHS var. del stmt. es v ó u }

Page 46: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

46

b = a

c = b + 1

d = b

b = d + c

b = d

gen = { <b,a> }

kill = { <d,b>, <b,d> }

gen = { }

kill = { }

gen = { <d,b> }

kill = { <b,d> }

gen = { }

kill = { <b,a> <d,b>, <b,d> }

gen = { <b,d> }

kill = { <b,a>, <d,b> }

OUT = gen (IN - kill)

Page 47: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

47

b = a

c = b + 1

d = b

b = d + c

b = d

gen = { <b,a> }

kill = { <d,b>, <b,d> }

gen = { }

kill = { }

gen = { <d,b> }

kill = { <b,d> }

gen = { }

kill = { <b,a> <d,b>, <b,d> }

gen = { <b,d> }

kill = { <b,a>, <d,b> }

OUT = { <b,a> }

IN = { }

OUT = gen (IN - kill)

Page 48: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

48

b = a

c = b + 1

d = b

b = d + c

b = d

gen = { <b,a> }

kill = { <d,b>, <b,d> }

gen = { }

kill = { }

gen = { <d,b> }

kill = { <b,d> }

gen = { }

kill = { <b,a> <d,b>, <b,d> }

gen = { <b,d> }

kill = { <b,a>, <d,b> }

OUT = { <b,a> }

IN = { <b,a> }

IN = { }

OUT = gen (IN - kill)

Page 49: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

49

b = a

c = b + 1

d = b

b = d + c

b = d

gen = { <b,a> }

kill = { <d,b>, <b,d> }

gen = { }

kill = { }

gen = { <d,b> }

kill = { <b,d> }

gen = { }

kill = { <b,a> <d,b>, <b,d> }

gen = { <b,d> }

kill = { <b,a>, <d,b> }

IN = { <b,a> }

IN = { <b,a> }

IN = { }

OUT = { <b,a>, <d,b> }

OUT = gen (IN - kill)

Page 50: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

50

b = a

c = b + 1

d = b

b = d + c

b = d

gen = { <b,a> }

kill = { <d,b>, <b,d> }

gen = { }

kill = { }

gen = { <d,b> }

kill = { <b,d> }

gen = { }

kill = { <b,a> <d,b>, <b,d> }

gen = { <b,d> }

kill = { <b,a>, <d,b> }

IN = { <b,a> }

IN = { <b,a> }

IN = { }

IN = { <b,a>, <d,b> }

OUT = { }

OUT = gen (IN - kill)

Page 51: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

51

b = a

c = b + 1

d = b

b = d + c

b = d

gen = { <b,a> }

kill = { <d,b>, <b,d> }

gen = { }

kill = { }

gen = { <d,b> }

kill = { <b,d> }

gen = { }

kill = { <b,a> <d,b>, <b,d> }

gen = { <b,d> }

kill = { <b,a>, <d,b> }

IN = { <b,a> }

IN = { <b,a> }

IN = { }

IN = { <b,a>, <d,b> }

IN = { }

OUT = { <b,d> }

OUT = gen (IN - kill)

Page 52: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

52

b = a

c = b + 1

d = b

b = d + c

b = d

gen = { <b,a> }

kill = { <d,b>, <b,d> }

gen = { }

kill = { }

gen = { <d,b> }

kill = { <b,d> }

gen = { }

kill = { <b,a> <d,b>, <b,d> }

gen = { <b,d> }

kill = { <b,a>, <d,b> }

{ <b,a> }

{ <b,a> }

{ }

{ <b,a>, <d,b> }

{ }

{ <b,d> }

OUT = gen (IN - kill)

Page 53: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

53

Ejemplo

b = a

c = b + 1

d = b

b = d + c

b = d

gen = { <b,a> }

kill = { <d,b>, <b,d> }

gen = { }

kill = { }

gen = { <d,b> }

kill = { <b,d> }

gen = { }

kill = { <b,a> <d,b>, <b,d> }

gen = { <b,d> }

kill = { <b,a>, <d,b> }

{ <b,a> }

{ <b,a> }

{ }

{ <b,a>, <d,b> }

{ }

{ <b,d> }

Page 54: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

54

Ejemplo

b = a

c = b + 1

d = a

b = d + c

b = d

gen = { <b,a> }

kill = { <d,b>, <b,d> }

gen = { }

kill = { }

gen = { <d,b> }

kill = { <b,d> }

gen = { }

kill = { <b,a> <d,b>, <b,d> }

gen = { <b,d> }

kill = { <b,a>, <d,b> }

{ <b,a> }

{ <b,a> }

{ }

{ <b,a>, <d,b> }

{ }

{ <b,d> }

Page 55: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

55

Ejemplo

b = a

c = b + 1

d = a

b = d + c

b = d

gen = { <b,a> }

kill = { <d,b>, <b,d> }

gen = { }

kill = { }

gen = { <d,b> }

kill = { <b,d> }

gen = { }

kill = { <b,a> <d,b>, <b,d> }

gen = { <b,d> }

kill = { <b,a>, <d,b> }

{ <b,a> }

{ <b,a> }

{ }

{ <b,a>, <d,b> }

{ }

{ <b,d> }

Page 56: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

56

Ejemplo

b = a

c = b + 1

d = a

b = b + c

b = d

gen = { <b,a> }

kill = { <d,b>, <b,d> }

gen = { }

kill = { }

gen = { <d,b> }

kill = { <b,d> }

gen = { }

kill = { <b,a> <d,b>, <b,d> }

gen = { <b,d> }

kill = { <b,a>, <d,b> }

{ <b,a> }

{ <b,a> }

{ }

{ <b,a>, <d,b> }

{ }

{ <b,d> }

Page 57: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

57

Ejemplo

b = a

c = b + 1

d = a

b = b + c

b = d

gen = { <b,a> }

kill = { <d,b>, <b,d> }

gen = { }

kill = { }

gen = { <d,b> }

kill = { <b,d> }

gen = { }

kill = { <b,a> <d,b>, <b,d> }

gen = { <b,d> }

kill = { <b,a>, <d,b> }

{ <b,a> }

{ <b,a> }

{ }

{ <b,a>, <d,b> }

{ }

{ <b,d> }

Page 58: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

58

Ejemplo

b = a

c = b + 1

d = a

b = b + c

b = d

¿Terminamos?

¡No!

Page 59: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

59

b = a

c = b + 1

d = a

b = b + c

b = d

gen = { <b,a> }

gen = { }

gen = { <d,a> }

gen = { }

gen = { <b,d> }

gen = { <v,u> | v = u es el statement }kill = { <v,u> | LHS var. del stmt. es v ó u }

Page 60: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

60

b = a

c = b + 1

d = a

b = b + c

b = d

gen = { <b,a> }

kill = { <d,a>, <b,d> }

gen = { }

kill = { }

gen = { <d,a> }

kill = { <b,d> }

gen = { }

kill = { <b,a>, <b,d> }

gen = { <b,d> }

kill = { <b,a> }

gen = { <v,u> | v = u es el statement }kill = { <v,u> | LHS var. del stmt. es v ó u }

Page 61: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

61

b = a

c = b + 1

d = a

b = b + c

b = d

gen = { <b,a> }

kill = { <d,a>, <b,d> }

gen = { }

kill = { }

gen = { <d,a> }

kill = { <b,d> }

gen = { }

kill = { <b,a>, <b,d> }

gen = { <b,d> }

kill = { <b,a> }

OUT = { <b,a> }

IN = { }

OUT = gen (IN - kill)

Page 62: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

62

b = a

c = b + 1

d = a

b = b + c

b = d

gen = { <b,a> }

kill = { <d,a>, <b,d> }

gen = { }

kill = { }

gen = { <d,a> }

kill = { <b,d> }

gen = { }

kill = { <b,a>, <b,d> }

gen = { <b,d> }

kill = { <b,a> }

OUT = { <b,a> }

IN = { <b,a> }

IN = { }

OUT = gen (IN - kill)

Page 63: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

63

b = a

c = b + 1

d = a

b = b + c

b = d

gen = { <b,a> }

kill = { <d,a>, <b,d> }

gen = { }

kill = { }

gen = { <d,a> }

kill = { <b,d> }

gen = { }

kill = { <b,a>, <b,d> }

gen = { <b,d> }

kill = { <b,a> }

IN = { <b,a> }

IN = { <b,a> }

IN = { }

OUT = { <b,a>, <d,a> }

OUT = gen (IN - kill)

Page 64: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

64

b = a

c = b + 1

d = a

b = b + c

b = d

gen = { <b,a> }

kill = { <d,a>, <b,d> }

gen = { }

kill = { }

gen = { <d,a> }

kill = { <b,d> }

gen = { }

kill = { <b,a>, <b,d> }

gen = { <b,d> }

kill = { <b,a> }

IN = { <b,a> }

IN = { <b,a> }

IN = { }

IN = { <b,a>, <d,a> }

OUT = { <d,a> }

OUT = gen (IN - kill)

Page 65: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

65

b = a

c = b + 1

d = a

b = b + c

b = d

gen = { <b,a> }

kill = { <d,a>, <b,d> }

gen = { }

kill = { }

gen = { <d,a> }

kill = { <b,d> }

gen = { }

kill = { <b,a>, <b,d> }

gen = { <b,d> }

kill = { <b,a> }

IN = { <b,a> }

IN = { <b,a> }

IN = { }

IN = { <b,a>, <d,a> }

IN = { <d,a> }

OUT = {<d,a> ,<b,d> }

OUT = gen (IN - kill)

Page 66: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

66

Ejemplo

b = a

c = b + 1

d = a

b = b + c

b = d

gen = { <b,a> }

kill = { <d,a>, <b,d> }

gen = { }

kill = { }

gen = { <d,a> }

kill = { <b,d> }

gen = { }

kill = { <b,a>, <b,d> }

gen = { <b,d> }

kill = { <b,a> }

{ <b,a> }

{ <b,a> }

{ }

{ <b,a>, <d,a> }

{ <d,a> }

{<d,a> ,<b,d> }

Page 67: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

67

Ejemplo

b = a

c = b + 1

d = a

b = b + c

b = d

gen = { <b,a> }

kill = { <d,a>, <b,d> }

gen = { }

kill = { }

gen = { <d,a> }

kill = { <b,d> }

gen = { }

kill = { <b,a>, <b,d> }

gen = { <b,d> }

kill = { <b,a> }

{ <b,a> }

{ <b,a> }

{ }

{ <b,a>, <d,a> }

{ <d,a> }

{<d,a> ,<b,d> }

Page 68: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

68

Ejemplo

b = a

c = b + 1

d = a

b = a + c

b = d

gen = { <b,a> }

kill = { <d,a>, <b,d> }

gen = { }

kill = { }

gen = { <d,a> }

kill = { <b,d> }

gen = { }

kill = { <b,a>, <b,d> }

gen = { <b,d> }

kill = { <b,a> }

{ <b,a> }

{ <b,a> }

{ }

{ <b,a>, <d,a> }

{ <d,a> }

{<d,a> ,<b,d> }

Page 69: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

69

Ejemplo

b = a

c = b + 1

d = a

b = a + c

b = d

gen = { <b,a> }

kill = { <d,a>, <b,d> }

gen = { }

kill = { }

gen = { <d,a> }

kill = { <b,d> }

gen = { }

kill = { <b,a>, <b,d> }

gen = { <b,d> }

kill = { <b,a> }

{ <b,a> }

{ <b,a> }

{ }

{ <b,a>, <d,a> }

{ <d,a> }

{<d,a> ,<b,d> }

Page 70: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

70

Ejemplo

b = a

c = b + 1

d = a

b = a + c

b = a

gen = { <b,a> }

kill = { <d,a>, <b,d> }

gen = { }

kill = { }

gen = { <d,a> }

kill = { <b,d> }

gen = { }

kill = { <b,a>, <b,d> }

gen = { <b,d> }

kill = { <b,a> }

{ <b,a> }

{ <b,a> }

{ }

{ <b,a>, <d,a> }

{ <d,a> }

{<d,a> ,<b,d> }

Page 71: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

71

Ejemplo

b = a

c = b + 1

d = a

b = a + c

b = a

gen = { <b,a> }

kill = { <d,a>, <b,d> }

gen = { }

kill = { }

gen = { <d,a> }

kill = { <b,d> }

gen = { }

kill = { <b,a>, <b,d> }

gen = { <b,d> }

kill = { <b,a> }

{ <b,a> }

{ <b,a> }

{ }

{ <b,a>, <d,a> }

{ <d,a> }

{<d,a> ,<b,d> }

Page 72: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

72

Ejemplo

b = a

c = b + 1

d = a

b = a + c

b = a

¿Terminamos?

¡Sí!

Page 73: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

73

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = d + p

d = a

Page 74: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

74

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = d + p

d = a

Gen = { }

Gen = {<d,a>, <s,p> } Gen = {<d,a> }

Gen = { }

gen = { <v,u> | v = u es el statement }kill = { <v,u> | LHS var. del stmt. es v ó u }

Page 75: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

75

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = d + p

d = a

Gen = { }Kill = {<d,a>, <s,p> }

Gen = {<d,a>, <s,p> }Kill = { }

Gen = {<d,a> }Kill = { }

Gen = { }Kill = {{<d,a> }

gen = { <v,u> | v = u es el statement }kill = { <v,u> | LHS var. del stmt. es v ó u }

Page 76: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

76

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = d + p

d = a

Gen = { }Kill = {<d,a>, <s,p> }

Gen = {<d,a>, <s,p> }Kill = { }

Gen = {<d,a> }Kill = { }

Gen = { }Kill = {{<d,a> }

OUT = gen (IN - kill)

IN = OUT

Page 77: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

77

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = d + p

d = a

Gen = { }Kill = {<d,a>, <s,p> }

Gen = {<d,a>, <s,p> }Kill = { }

Gen = {<d,a> }Kill = { }

Gen = { }Kill = {{<d,a> }

IN = { }

OUT = gen (IN - kill)

IN = OUT

Page 78: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

78

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = d + p

d = a

Gen = { }Kill = {<d,a>, <s,p> }

Gen = {<d,a>, <s,p> }Kill = { }

Gen = {<d,a> }Kill = { }

Gen = { }Kill = {{<d,a> }

IN = { }

OUT = gen (IN - kill)

IN = OUT

Page 79: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

79

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = d + p

d = a

Gen = { }Kill = {<d,a>, <s,p> }

Gen = {<d,a>, <s,p> }Kill = { }

Gen = {<d,a> }Kill = { }

Gen = { }Kill = {{<d,a> }

IN = { }

OUT = gen (IN - kill)

IN = OUT

OUT = { }

Page 80: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

80

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = d + p

d = a

Gen = { }Kill = {<d,a>, <s,p> }

Gen = {<d,a>, <s,p> }Kill = { }

Gen = {<d,a> }Kill = { }

Gen = { }Kill = {{<d,a> }

IN = { }

OUT = gen (IN - kill)

IN = OUT

OUT = { }

IN = { }

Page 81: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

81

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = d + p

d = a

Gen = { }Kill = {<d,a>, <s,p> }

Gen = {<d,a>, <s,p> }Kill = { }

Gen = {<d,a> }Kill = { }

Gen = { }Kill = {{<d,a> }

IN = { }

OUT = gen (IN - kill)

IN = OUT

OUT = { }

IN = { }

Page 82: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

82

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = d + p

d = a

Gen = { }Kill = {<d,a>, <s,p> }

Gen = {<d,a>, <s,p> }Kill = { }

Gen = {<d,a> }Kill = { }

Gen = { }Kill = {{<d,a> }

IN = { }

OUT = gen (IN - kill)

IN = OUT

OUT = { }

IN = { }

OUT = { <d,a>, <s,p> }

Page 83: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

83

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = d + p

d = a

Gen = { }Kill = {<d,a>, <s,p> }

Gen = {<d,a>, <s,p> }Kill = { }

Gen = {<d,a> }Kill = { }

Gen = { }Kill = {{<d,a> }

IN = { }

OUT = gen (IN - kill)

IN = OUT

OUT = { }

IN = { } IN = { }

OUT = { <d,a>, <s,p> }

Page 84: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

84

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = d + p

d = a

Gen = { }Kill = {<d,a>, <s,p> }

Gen = {<d,a>, <s,p> }Kill = { }

Gen = {<d,a> }Kill = { }

Gen = { }Kill = {{<d,a> }

IN = { }

OUT = gen (IN - kill)

IN = OUT

OUT = { }

IN = { } IN = { }

OUT = { <d,a>, <s,p> }

Page 85: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

85

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = d + p

d = a

Gen = { }Kill = {<d,a>, <s,p> }

Gen = {<d,a>, <s,p> }Kill = { }

Gen = {<d,a> }Kill = { }

Gen = { }Kill = {{<d,a> }

IN = { }

OUT = gen (IN - kill)

IN = OUT

OUT = { }

IN = { } IN = { }

OUT = { <d,a>, <s,p> }OUT = { <d,a> }

Page 86: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

86

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = d + p

d = a

Gen = { }Kill = {<d,a>, <s,p> }

Gen = {<d,a>, <s,p> }Kill = { }

Gen = {<d,a> }Kill = { }

Gen = { }Kill = {{<d,a> }

IN = { }

OUT = gen (IN - kill)

IN = OUT

OUT = { }

IN = { } IN = { }

OUT = { <d,a>, <s,p> }OUT = { <d,a> }

IN = { <d,a> }

Page 87: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

87

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = d + p

d = a

Gen = { }Kill = {<d,a>, <s,p> }

Gen = {<d,a>, <s,p> }Kill = { }

Gen = {<d,a> }Kill = { }

Gen = { }Kill = {{<d,a> }

IN = { }

OUT = gen (IN - kill)

IN = OUT

OUT = { }

IN = { } IN = { }

OUT = { <d,a>, <s,p> }OUT = { <d,a> }

IN = { <d,a> }

Page 88: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

88

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = d + p

d = a

Gen = { }Kill = {<d,a>, <s,p> }

Gen = {<d,a>, <s,p> }Kill = { }

Gen = {<d,a> }Kill = { }

Gen = { }Kill = {{<d,a> }

IN = { }

OUT = gen (IN - kill)

IN = OUT

OUT = { }

IN = { } IN = { }

OUT = { <d,a>, <s,p> }OUT = { <d,a> }

OUT = { }

IN = { <d,a> }

Page 89: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

89

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = d + p

d = a

IN = { }

OUT = { }

IN = { } IN = { }

OUT = { <d,a>, <s,p> }OUT = { <d,a> }

OUT = { }

IN = { <d,a> }

Page 90: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

90

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = d + p

d = a

IN = { }

OUT = { }

IN = { } IN = { }

OUT = { <d,a>, <s,p> }OUT = { <d,a> }

OUT = { }

IN = { <d,a> }

Page 91: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

91

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = a + p

d = a

IN = { }

OUT = { }

IN = { } IN = { }

OUT = { <d,a>, <s,p> }OUT = { <d,a> }

OUT = { }

IN = { <d,a> }

Page 92: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

92

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = a + p

d = a

IN = { }

OUT = { }

IN = { } IN = { }

OUT = { <d,a>, <s,p> }OUT = { <d,a> }

OUT = { }

IN = { <d,a> }

Page 93: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

93

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = a + p

d = a

Page 94: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

94

Resumen

• Overview de análisis de control de flujo• Simplificación algebraica• Copy Propagation• Constant Propagation

40

Page 95: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

95

Constant Propagation

• Usar valores constantes– Usar la constante conocida para una variable

Page 96: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

96

Constant Propagation

• Usar valores constantes– Usar la constante conocida para una variable

• Ejemploa = 43

b = 4

d = a + 2*b + c

Page 97: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

97

Constant Propagation

• Usar valores constantes– Usar la constante conocida para una variable

• Ejemploa = 43

b = 4

d = a + 2*b + c

Page 98: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

98

Constant Propagation

• Usar valores constantes– Usar la constante conocida para una variable

• Ejemploa = 43

b = 4

d = 43 + 2*b + c

Page 99: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

99

Constant Propagation

• Usar valores constantes– Usar la constante conocida para una variable

• Ejemploa = 43

b = 4

d = a + 2*b + c

Page 100: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

100

Constant Propagation

• Usar valores constantes– Usar la constante conocida para una variable

• Ejemploa = 43

b = 4

d = 43 + 2*4 + c

Page 101: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

101

Oportunidades paraConstant Propagation

• Constantes definidas por el usuario– Las mismas constantes se propagan por muchos

caminos– Constantes simbólicas definidas como variables

• Constantes conocidas al compilador– data sizes, stack offsets

• Constantes disponibles después de otras optimizaciones– Simplificación algebraica– Copy propagation

Page 102: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

102

Ventajas de Constant Propagation

• Simplificación del programa

Page 103: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

103

Ventajas de Constant Propagation

• Simplificación del programa

• Ejemploa = 43

b = 4

d = 43 + 2*4 + c

Page 104: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

104

Ventajas de Constant Propagation

• Simplificación del programa

• Ejemploa = 43

b = 4

d = 43 + 2*4 + c

Page 105: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

105

Ventajas de Constant Propagation

• Simplificación del programa

• Ejemploa = 43

b = 4

d = 51 + c

Page 106: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

106

Ventajas de Constant Propagation

• Habilita otras optimizaciones

Page 107: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

107

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4

b = 8

d = 2*a - b + c

e = c + d

Page 108: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

108

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4

b = 8

d = 2*a - b + c

e = c + d

Page 109: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

109

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4

b = 8

d = 2*4 - b + c

e = c + d

Page 110: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

110

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4

b = 8

d = 2*4 - b + c

e = c + d

Page 111: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

111

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4

b = 8

d = 2*4 - 8 + c

e = c + d

Page 112: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

112

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4

b = 8

d = 2*4 - 8 + c

e = c + d

Page 113: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

113

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4

b = 8

d = 8 - 8 + c

e = c + d

Page 114: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

114

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4

b = 8

d = 8 - 8 + c

e = c + d

Page 115: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

115

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4

b = 8

d = 0 + c

e = c + d

Page 116: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

116

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4

b = 8

d = 0 + c

e = c + d

Page 117: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

117

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4

b = 8

d = c

e = c + d

Page 118: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

118

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4

b = 8

d = c

e = c + d

Page 119: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

119

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4

b = 8

d = c

e = c + d

Page 120: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

120

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4

b = 8

d = c

e = c + c

Page 121: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

121

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4

b = 8

d = c

e = c + c

Page 122: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

122

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4

b = 8

d = c

e = c + c

Page 123: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

123

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4

b = 8

d = c

e = 2*c

Page 124: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

124

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4

b = 8

d = c

e = 2*c

Page 125: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

125

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4

b = 8

e = 2*c

Page 126: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

126

Cómo hacer Constant Propagation

• En cada expresión RHS Para cada variable v usada en expresión RHS– si la variable v es una constante conocida k– reemplazar la variable v por k

• En cada punto del programa hay que saber– Para cada variable v, si v es una constante, y si lo

es, el valor constante

Page 127: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

127

Cómo hacer Constant Propagation

• Una variable v es la constante k en un punto de ejecución ssi– el statement actual es v = k

o– todo camino que llega al punto actual tiene la

constante k asignada a v

• ¡Un problema de flujo de datos!

Page 128: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

128

Valores de dos caminos

a = 5

b = a + 10

a = 5

a = 5

Page 129: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

129

Valores de dos caminos

a = 5

b = a + 10

a = k + 2

a no es constante

Page 130: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

130

Valores de dos caminos

a = 5

b = a + 10

a = 7

a no es constante

Page 131: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

131

Valores de dos caminos

a = 5

b = a + 10

a no definida

a = 5

Page 132: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

132

Valores de dos caminos

a = 5

b = a + 10

a no definida

a = 5

• programa tonto, usa un valor no inicializado

Page 133: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

133

Valores de dos caminos

a = 5

b = a + 10

a no definida

a = 5

• programa tonto, usa un valor no inicializado• semántica de alto nivel que el compilador no entiende hace que este sea un programa correcto

Page 134: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

134

Lattice para Constant Propagation

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

Page 135: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

135

Lattice (repaso)

• Un lattice L consiste de– un conjunto de valores – dos operaciones meet( ) y join ( )– un valor top (T) y un valor bottom ()

Page 136: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

136

Lattice (repaso)

• Ejemplo: el lattice para el problema de reaching definitions cuándo sólo hay 3 definiciones

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

Page 137: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

137

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

Page 138: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

138

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

Page 139: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

139

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

Page 140: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

140

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

Page 141: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

141

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

Page 142: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

142

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

Page 143: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

143

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

Page 144: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

144

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

Page 145: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

145

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }

{ d2 }

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

Page 146: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

146

Lattice para Constant Propagation

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

Page 147: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

147

Operación Meet en el lattice

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

a = 2 a = 2

= a

2 2 =

Page 148: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

148

Operación Meet en el lattice

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

a = 2 a = 2

= a

2 2 =

Page 149: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

149

Operación Meet en el lattice

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

a = 2 a = 2

= a

2 2 = 2

Page 150: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

150

Operación Meet en el lattice

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

a = 2 a = 0

= a

2 0 =

Page 151: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

151

Operación Meet en el lattice

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

a = 2 a = 0

= a

2 0 =

Page 152: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

152

Operación Meet en el lattice

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

a = 2 a = 0

= a

2 0 =

Page 153: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

153

Operación Meet en el lattice

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

a = 2 a = 0

= a

2 0 = not a constant

Page 154: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

154

Operación Meet en el lattice

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

a = 2 undefined

= a

2 undefined =

Page 155: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

155

Operación Meet en el lattice

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

a = 2 undefined

= a

2 undefined =

Page 156: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

156

Operación Meet en el lattice

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

a = 2 undefined

= a

2 undefined =

Page 157: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

157

Operación Meet en el lattice

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

a = 2 undefined

= a

2 undefined = 2

Page 158: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

158

Problema de Data-Flow paraConstant Propagation

• Dominio– Para cada variable un lattice Lv

• Dirección de flujo de datos Hacia adelante• Función de flujo de datos

– OUT = gen (IN resv)

Page 159: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

159

Problema de Data-Flow paraConstant Propagation

• Dominio– Para cada variable un lattice Lv

• Dirección de flujo de datos Hacia adelante• Función de flujo de datos

– OUT = gen (IN resv) T si v no es LHS

– gen = xv xv = valor si v es LHS & RHS es constante de otra forma

Page 160: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

160

Problema de Data-Flow paraConstant Propagation

• Dominio– Para cada variable un lattice Lv

• Dirección de flujo de datos Hacia adelante• Función de flujo de datos

– OUT = gen (IN resv) T si v no es LHS

– gen = xv xv = valor si v es LHS & RHS es constante de otra forma

– prsv = xv xv = T si v es el LHS si v no es el LHS

Page 161: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

161

Problema de Data-Flow paraConstant Propagation

• Dominio– Para cada variable un lattice Lv

• Dirección de flujo de datos Hacia adelante• Función de flujo de datos

– OUT = gen (IN resv) T si v no es LHS

– gen = xv xv = valor si v es LHS & RHS es constante de otra forma

– prsv = xv xv =

• Valores Iniciales T (= undefined)

T si v es el LHS si v no es el LHS

Page 162: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

162

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

Page 163: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

163

i = 1

j = 2

k = false

Page 164: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

164

T si v no es LHS– gen = xv xv = valor si v es LHS & RHS es constante.

de otra forma

– prsv = xv xv = T si v es el LHS si v no es el LHS

Page 165: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

165

gen ={ i:T, j:T, k:T, n:T }

T si v no es LHS– gen = xv xv = valor si v es LHS & RHS es constante.

de otra forma

– prsv = xv xv = T si v es el LHS si v no es el LHS

Page 166: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

166

gen ={ i:T, j:T, k:T, n:T }

prsv = { i:, j:, k:, n: }•

T si v no es LHS– gen = xv xv = valor si v es LHS & RHS es constante.

de otra forma

– prsv = xv xv = T si v es el LHS si v no es el LHS

Page 167: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

167

i = 1

gen ={ i:1, j:T, k:T, n:T }

prsv = { i:T, j:, k:, n: }•

T si v no es LHS– gen = xv xv = valor si v es LHS & RHS es constante.

de otra forma

– prsv = xv xv = T si v es el LHS si v no es el LHS

Page 168: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

168

i = 1

j = 2

gen ={ i:1, j:2, k:T, n:T }

prsv = { i:T, j:T, k:, n: }•

T si v no es LHS– gen = xv xv = valor si v es LHS & RHS es constante.

de otra forma

– prsv = xv xv = T si v es el LHS si v no es el LHS

Page 169: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

169

i = 1

j = 2

k = false

gen ={ i:1, j:2, k:false, n:T }

prsv = { i:T, j:T, k:T, n: }•

T si v no es LHS– gen = xv xv = valor si v es LHS & RHS es constante.

de otra forma

– prsv = xv xv = T si v es el LHS si v no es el LHS

Page 170: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

170

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

Page 171: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

171

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

Page 172: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

172

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

Page 173: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

173

i = 1

j = 2

k = false

gen = { i:1, j:2, k:false, n:T }

prsv = { i:T, j:T, k:T, n: }

IN = { i:T, j:T, k:T, n:T }

Page 174: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

174

i = 1

j = 2

k = false

gen = { i:1, j:2, k:false, n:T }

prsv = { i:T, j:T, k:T, n: }

IN = { i:T, j:T, k:T, n:T }

OUT = gen (IN resv)

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

Page 175: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

175

i = 1

j = 2

k = false

gen = { i:1, j:2, k:false, n:T }

prsv = { i:T, j:T, k:T, n: }

IN = { i:T, j:T, k:T, n:T }

OUT = gen (IN resv)

IN = { i:1, j:2, k:false, n:T }

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

Page 176: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

176

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

OUT ={ i:T, j:T, k:T, n:T }

OUT ={i:1, j:2, k:false, n:T }

Page 177: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

177

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

OUT ={ i:T, j:T, k:T, n:T }

OUT ={i:1, j:2, k:false, n:T }

Page 178: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

178

i < n

out1 = { i:T, j:T, k:T, n:T }

out2 = { i:1, j:2, k:false, n:T }

IN = out1 out2

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

Page 179: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

179

i < n

out1 = { i:T, j:T, k:T, n:T }

out2 = { i:1, j:2, k:false, n:T }

IN = out1 out2

IN = { i:1, j:2, k:false, n:T }

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

Page 180: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

180

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

OUT ={ i:T, j:T, k:T, n:T }

OUT ={i:1, j:2, k:false, n:T } IN ={i:1, j:2, k:false, n:T }

Page 181: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

181

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

OUT ={ i:T, j:T, k:T, n:T }

OUT ={i:1, j:2, k:false, n:T } IN ={i:1, j:2, k:false, n:T }

OUT ={i:1, j:2, k:false, n:T }

Page 182: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

182

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

OUT ={ i:T, j:T, k:T, n:T }

OUT ={i:1, j:2, k:false, n:T } IN ={i:1, j:2, k:false, n:T }

OUT ={i:1, j:2, k:false, n:T }

Page 183: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

183

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

OUT ={ i:T, j:T, k:T, n:T }

OUT ={i:1, j:2, k:false, n:T } IN ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

OUT ={i:1, j:2, k:false, n:T }

Page 184: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

184

i = 3

j = 2

gen = { i:3, j:2, k:T, n:T }

prsv = { i:T, j:T, k:, n: }

IN = { i:1, j:2, k:false, n:T }

OUT = gen (IN resv)

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

Page 185: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

185

i = 3

j = 2

gen = { i:3, j:2, k:T, n:T }

prsv = { i:T, j:T, k:, n: }

IN = { i:1, j:2, k:false, n:T }

OUT = gen (IN resv)

IN = { i:3, j:2, k:false, n:T }

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

Page 186: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

186

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

OUT ={i:3, j:2, k:false, n:T }

OUT ={i:1, j:2, k:false, n:T } IN ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

OUT ={i:1, j:2, k:false, n:T }

Page 187: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

187

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

OUT ={i:3, j:2, k:false, n:T }

OUT ={i:1, j:2, k:false, n:T } IN ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

OUT ={i:1, j:2, k:false, n:T }

Page 188: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

188

i < n

out1 = { i:1, j:2, k:false, n:T }

out2 = { i:3, j:2, k:false, n:T }

IN = out1 out2

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

Page 189: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

189

i < n

out1 = { i:1, j:2, k:false, n:T }

out2 = { i:3, j:2, k:false, n:T }

IN = out1 out2

IN = { i:, j:2, k:false, n:T }

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

Page 190: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

190

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

OUT ={i:3, j:2, k:false, n:T }

OUT ={i:1, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T }

Page 191: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

191

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

OUT ={i:3, j:2, k:false, n:T }

OUT ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

Page 192: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

192

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

OUT ={i:3, j:2, k:false, n:T }

OUT ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

Page 193: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

193

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

OUT ={i:3, j:2, k:false, n:T }

OUT ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

Page 194: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

194

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

OUT ={i:3, j:2, k:false, n:T }

OUT ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

Page 195: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

195

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

OUT ={i:3, j:2, k:false, n:T }

OUT ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

Page 196: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

196

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

OUT ={i:3, j:2, k:false, n:T }

OUT ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

Page 197: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

197

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

OUT ={i:3, j:2, k:false, n:T }

OUT ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

Page 198: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

198

j = j + 1

gen = { i:T, j:, k:T, n:T }

prsv = { i:, j:T, k:, n: }

IN = { i:, j:2, k:false, n:T }

OUT = gen (IN resv)

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

Page 199: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

199

j = j + 1

gen = { i:T, j:, k:T, n:T }

prsv = { i:, j:T, k:, n: }

IN = { i:, j:2, k:false, n:T }

OUT = gen (IN resv)

IN = { i:, j:, k:false, n:T }

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

Page 200: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

200

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

OUT ={i:3, j:2, k:false, n:T }

OUT ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

Page 201: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

201

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

OUT ={i:3, j:2, k:false, n:T }

OUT ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

Page 202: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

202

exit

out1 = { i:, j:2, k:false, n:T }

out2 = { i:, j:, k:false, n:T }

IN = out1 out2

IN = { i:, j:, k:false, n:T }

= not a constant

T = undefined

false true …. -2 -1 0 1 2 3 4 ….

Page 203: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

203

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

OUT ={i:3, j:2, k:false, n:T }

OUT ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:, k:false, n:T }

OUT ={i:, j:, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

Page 204: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

204

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

gen ={ i:1, j:2, k:false, n:T } prsv = { i:T, j:T, k:T, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:3, j:2, k:T, n:T } prsv = { i:T, j:T, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

gen ={ i:T, j:, k:T, n:T } prsv ={ i:, j:T, k:, n:}

gen ={ i:T, j:T, k:T, n:T } prsv = { i:, j:, k:, n: }

IN ={ i:T, j:T, k:T, n:T }

OUT ={i:3, j:2, k:false, n:T }

OUT ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:, k:false, n:T }

OUT ={i:, j:, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

Page 205: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

205

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

IN ={ i:T, j:T, k:T, n:T }

IN ={i:, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:, k:false, n:T }

Page 206: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

206

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

IN ={ i:T, j:T, k:T, n:T }

IN ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:, k:false, n:T }

Page 207: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

207

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

false

exit

i < n

IN ={ i:T, j:T, k:T, n:T }

IN ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:, k:false, n:T }

Page 208: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

208

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

false

exit

i < n

IN ={ i:T, j:T, k:T, n:T }

IN ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:, k:false, n:T }

Page 209: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

209

i = 1 j = 2k = false

i = 3 j = 2

print 2 j = j + 1

false

exit

i < n

IN ={ i:T, j:T, k:T, n:T }

IN ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:, k:false, n:T }

Page 210: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

210

i = 1 j = 2k = false

i = 3 j = 2

print 2 j = j + 1

false

exit

i < n

IN ={ i:T, j:T, k:T, n:T }

IN ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:, k:false, n:T }

Page 211: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

211

i = 1 j = 2k = false

i = 3 j = 2

print 2 j = j + 1

false

exit

i < n

IN ={ i:T, j:T, k:T, n:T }

IN ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:, k:false, n:T }

Page 212: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

212

i = 1 j = 2k = false

i = 3 j = 2

print 2 j = 2 + 1

false

exit

i < n

IN ={ i:T, j:T, k:T, n:T }

IN ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:, k:false, n:T }

Page 213: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

213

i = 1 j = 2k = false

i = 3 j = 2

print 2 j = 2 + 1

false

exit

i < n

IN ={ i:T, j:T, k:T, n:T }

IN ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T } IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:, k:false, n:T }

Page 214: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

214

i = 1 j = 2k = false

i = 3 j = 2

j = 2 + 1

exit

i < n

IN ={ i:T, j:T, k:T, n:T }

IN ={i:1, j:2, k:false, n:T }

IN ={i:1, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

IN ={i:, j:2, k:false, n:T }

OUT ={i:, j:, k:false, n:T }

Page 215: Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

215

Lecturas

• Ballena– Capítulo 13