optimizaciones tradicionales

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

Upload: kaleb

Post on 12-Feb-2016

32 views

Category:

Documents


0 download

DESCRIPTION

Optimizaciones Tradicionales. Simplificación Algebraica, Copy Propagation, y Constant Propagation. 40. Resumen. Overview de análisis de control de flujo Simplificación algebraica Copy Propagation Constant Propagation. Expresiones Disponibles. Dominio conjunto de expresiones - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Optimizaciones Tradicionales

Compiladores

Optimizaciones Tradicionales

Simplificación Algebraica,Copy Propagation,

y Constant Propagation

Page 2: Optimizaciones Tradicionales

2

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

40

Page 3: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

7

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

40

Page 8: Optimizaciones Tradicionales

8

Simplificación algebraica

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

Page 9: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

13

Utilidad de Simplificación Algebraica

• Reduce el número de instrucciones• Usa expresiones menos “caras”• Habilita otras optimizaciones

Page 14: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

18

Efectos en la estabilidad numérica

• Algunas simplificaciones algebraicas pueden producir resultados incorrectos

Page 19: Optimizaciones Tradicionales

19

Efectos en la estabilidad numérica

• Algunas simplificaciones algebraicas pueden producir resultados incorrectos

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

Page 20: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

22

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

40

Page 23: Optimizaciones Tradicionales

23

Copy Propagation

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

• Ejemploa = b + cd = ae = df = d + 2*e + c

Page 24: Optimizaciones Tradicionales

24

Copy Propagation

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

• Ejemploa = b + cd = ae = df = d + 2*e + c

Page 25: Optimizaciones Tradicionales

25

Copy Propagation

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

• Ejemploa = b + cd = ae = af = d + 2*e + c

Page 26: Optimizaciones Tradicionales

26

Copy Propagation

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

• Ejemploa = b + cd = ae = af = d + 2*e + c

Page 27: Optimizaciones Tradicionales

27

Copy Propagation

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

• Ejemploa = b + cd = ae = af = a + 2*e + c

Page 28: Optimizaciones Tradicionales

28

Copy Propagation

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

• Ejemploa = b + cd = ae = af = a + 2*e + c

Page 29: Optimizaciones Tradicionales

29

Copy Propagation

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

• Ejemploa = b + cd = ae = af = a + 2*a + c

Page 30: Optimizaciones Tradicionales

30

Copy Propagation

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

• Ejemploa = b + cd = ae = af = a + 2*a + c

Page 31: Optimizaciones Tradicionales

31

Oportunidades para Copy Propagation

• En código del usuario• Después de otras optimizaciones

– Ejemplo: Simplificación algebraica

Page 32: Optimizaciones Tradicionales

32

Ventajas de Copy Propagation

• Lleva a más simplificaciones algebraicas

Page 33: Optimizaciones Tradicionales

33

Ventajas de Copy Propagation

• Lleva a más simplificaciones algebraicas

• Ejemploa = b + cd = ae = af = a + 2*a + c

Page 34: Optimizaciones Tradicionales

34

Ventajas de Copy Propagation

• Lleva a más simplificaciones algebraicas

• Ejemploa = b + cd = ae = af = a + 2*a + c

Page 35: Optimizaciones Tradicionales

35

Ventajas de Copy Propagation

• Lleva a más simplificaciones algebraicas

• Ejemploa = b + cd = ae = af = 3*a + c

Page 36: Optimizaciones Tradicionales

36

Ventajas de Copy Propagation

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

Page 37: Optimizaciones Tradicionales

37

Ventajas de Copy Propagation

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

• Ejemploa = b + cd = ae = af = 3*a + c

Page 38: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

42

Ejemplo

b = a

c = b + 1

d = b

b = d + c

b = d

Page 43: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

58

Ejemplo

b = a

c = b + 1

d = a

b = b + c

b = d

¿Terminamos?

¡No!

Page 59: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

72

Ejemplo

b = a

c = b + 1

d = a

b = a + c

b = a

¿Terminamos?

¡Sí!

Page 73: Optimizaciones Tradicionales

73

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = d + p

d = a

Page 74: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

93

Otro Ejemplo

a = b + cp = q + r

d = as = p

a = a + p

d = a

Page 94: Optimizaciones Tradicionales

94

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

40

Page 95: Optimizaciones Tradicionales

95

Constant Propagation

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

Page 96: Optimizaciones Tradicionales

96

Constant Propagation

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

• Ejemploa = 43b = 4d = a + 2*b + c

Page 97: Optimizaciones Tradicionales

97

Constant Propagation

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

• Ejemploa = 43b = 4d = a + 2*b + c

Page 98: Optimizaciones Tradicionales

98

Constant Propagation

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

• Ejemploa = 43b = 4d = 43 + 2*b + c

Page 99: Optimizaciones Tradicionales

99

Constant Propagation

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

• Ejemploa = 43b = 4d = a + 2*b + c

Page 100: Optimizaciones Tradicionales

100

Constant Propagation

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

• Ejemploa = 43b = 4d = 43 + 2*4 + c

Page 101: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

102

Ventajas de Constant Propagation

• Simplificación del programa

Page 103: Optimizaciones Tradicionales

103

Ventajas de Constant Propagation

• Simplificación del programa

• Ejemploa = 43b = 4d = 43 + 2*4 + c

Page 104: Optimizaciones Tradicionales

104

Ventajas de Constant Propagation

• Simplificación del programa

• Ejemploa = 43b = 4d = 43 + 2*4 + c

Page 105: Optimizaciones Tradicionales

105

Ventajas de Constant Propagation

• Simplificación del programa

• Ejemploa = 43b = 4d = 51 + c

Page 106: Optimizaciones Tradicionales

106

Ventajas de Constant Propagation

• Habilita otras optimizaciones

Page 107: Optimizaciones Tradicionales

107

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4b = 8d = 2*a - b + ce = c + d

Page 108: Optimizaciones Tradicionales

108

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4b = 8d = 2*a - b + ce = c + d

Page 109: Optimizaciones Tradicionales

109

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4b = 8d = 2*4 - b + ce = c + d

Page 110: Optimizaciones Tradicionales

110

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4b = 8d = 2*4 - b + ce = c + d

Page 111: Optimizaciones Tradicionales

111

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4b = 8d = 2*4 - 8 + ce = c + d

Page 112: Optimizaciones Tradicionales

112

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4b = 8d = 2*4 - 8 + ce = c + d

Page 113: Optimizaciones Tradicionales

113

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4b = 8d = 8 - 8 + ce = c + d

Page 114: Optimizaciones Tradicionales

114

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4b = 8d = 8 - 8 + ce = c + d

Page 115: Optimizaciones Tradicionales

115

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4b = 8d = 0 + ce = c + d

Page 116: Optimizaciones Tradicionales

116

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4b = 8d = 0 + ce = c + d

Page 117: Optimizaciones Tradicionales

117

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4b = 8d = ce = c + d

Page 118: Optimizaciones Tradicionales

118

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4b = 8d = ce = c + d

Page 119: Optimizaciones Tradicionales

119

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4b = 8d = ce = c + d

Page 120: Optimizaciones Tradicionales

120

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4b = 8d = ce = c + c

Page 121: Optimizaciones Tradicionales

121

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4b = 8d = ce = c + c

Page 122: Optimizaciones Tradicionales

122

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4b = 8d = ce = c + c

Page 123: Optimizaciones Tradicionales

123

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4b = 8d = ce = 2*c

Page 124: Optimizaciones Tradicionales

124

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4b = 8d = ce = 2*c

Page 125: Optimizaciones Tradicionales

125

Ventajas de Constant Propagation

• Habilita otras optimizaciones

• Ejemploa = 4b = 8

e = 2*c

Page 126: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

128

Valores de dos caminos

a = 5

b = a + 10

a = 5

a = 5

Page 129: Optimizaciones Tradicionales

129

Valores de dos caminos

a = 5

b = a + 10

a = k + 2

a no es constante

Page 130: Optimizaciones Tradicionales

130

Valores de dos caminos

a = 5

b = a + 10

a = 7

a no es constante

Page 131: Optimizaciones Tradicionales

131

Valores de dos caminos

a = 5

b = a + 10

a no definida

a = 5

Page 132: Optimizaciones Tradicionales

132

Valores de dos caminos

a = 5

b = a + 10

a no definida

a = 5

• programa tonto, usa un valor no inicializado

Page 133: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

134

Lattice para Constant Propagation

= not a constant

T = undefined

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

Page 135: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

137

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }{ d2 }

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

Page 138: Optimizaciones Tradicionales

138

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }{ d2 }

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

Page 139: Optimizaciones Tradicionales

139

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }{ d2 }

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

Page 140: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

141

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }{ d2 }

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

Page 142: Optimizaciones Tradicionales

142

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }{ d2 }

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

Page 143: Optimizaciones Tradicionales

143

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }{ d2 }

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

Page 144: Optimizaciones Tradicionales

144

Operaciones Meet y Join

{ d1, d2 }

{ d2, d3 }

{ d1 }

{ d3 }

= { }

T = { d1, d2, d3 }

{ d1, d3 }{ d2 }

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

Page 145: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

146

Lattice para Constant Propagation

= not a constant

T = undefined

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

Page 147: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

162

i = 1 j = 2k = false

i = 3 j = 2

print j j = j + 1

k

exit

i < n

Page 163: Optimizaciones Tradicionales

163

i = 1

j = 2

k = false

Page 164: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

179

i < n

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

= not a constant

T = undefined

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

Page 180: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

189

i < n

out1 = { i:1, j:2, k:false, n:T }out2 = { i:3, j:2, k:false, n:T } IN = out1 out2IN = { i:, j:2, k:false, n:T }

= not a constant

T = undefined

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

Page 190: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

202

exit

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

= not a constant

T = undefined

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

Page 203: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

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: Optimizaciones Tradicionales

215

Lecturas

• Ballena– Capítulo 13