Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porAdalina Castillo Modificado hace 10 años
1
Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation
2
2 Resumen Overview de análisis de control de flujo Simplificación algebraica Copy Propagation Constant Propagation 40
3
3 Expresiones Disponibles Dominio –conjunto de expresiones Dirección de flujo de datosHacia 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 v a que es definida en el b.b. } Operación Meet –IN = OUT Valores iniciales conjunto entero (Top)
4
4 Cadena DU (Reaching Definitions) Dominio –conjunto de definiciones Dirección de flujo de datosHacia 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 inicialesConjunto vacío (Bottom)
5
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!
6
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
7
7 Resumen Overview de análisis de control de flujo Simplificación algebraica Copy Propagation Constant Propagation 40
8
8 Simplificación algebraica Aplicar nuestro conocimiento de algebra, teoría de números, etc para simplificar expresiones
9
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
10
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
11
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
12
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
13
13 Utilidad de Simplificación Algebraica Reduce el número de instrucciones Usa expresiones menos “caras” Habilita otras optimizaciones
14
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
15
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 - a a - b a +
16
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)
17
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
18
18 Efectos en la estabilidad numérica Algunas simplificaciones algebraicas pueden producir resultados incorrectos
19
19 Efectos en la estabilidad numérica Algunas simplificaciones algebraicas pueden producir resultados incorrectos Ejemplo –(a / b)*0 + c
20
20 Efectos en la estabilidad numérica Algunas simplificaciones algebraicas pueden producir resultados incorrectos Ejemplo –(a / b)*0 + c –Podemos simplificar esto a c
21
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
22
22 Resumen Overview de análisis de control de flujo Simplificación algebraica Copy Propagation Constant Propagation 40
23
23 Copy Propagation Eliminar copias múltiples –propagar el valor directamente a su uso Ejemplo a = b + c d = a e = d f = d + 2*e + c
24
24 Copy Propagation Eliminar copias múltiples –propagar el valor directamente a su uso Ejemplo a = b + c d = a e = d f = d + 2*e + c
25
25 Copy Propagation Eliminar copias múltiples –propagar el valor directamente a su uso Ejemplo a = b + c d = a e = a f = d + 2*e + c
26
26 Copy Propagation Eliminar copias múltiples –propagar el valor directamente a su uso Ejemplo a = b + c d = a e = a f = d + 2*e + c
27
27 Copy Propagation Eliminar copias múltiples –propagar el valor directamente a su uso Ejemplo a = b + c d = a e = a f = a + 2*e + c
28
28 Copy Propagation Eliminar copias múltiples –propagar el valor directamente a su uso Ejemplo a = b + c d = a e = a f = a + 2*e + c
29
29 Copy Propagation Eliminar copias múltiples –propagar el valor directamente a su uso Ejemplo a = b + c d = a e = a f = a + 2*a + c
30
30 Copy Propagation Eliminar copias múltiples –propagar el valor directamente a su uso Ejemplo a = b + c d = a e = a f = a + 2*a + c
31
31 Oportunidades para Copy Propagation En código del usuario Después de otras optimizaciones –Ejemplo: Simplificación algebraica
32
32 Ventajas de Copy Propagation Lleva a más simplificaciones algebraicas
33
33 Ventajas de Copy Propagation Lleva a más simplificaciones algebraicas Ejemplo a = b + c d = a e = a f = a + 2*a + c
34
34 Ventajas de Copy Propagation Lleva a más simplificaciones algebraicas Ejemplo a = b + c d = a e = a f = a + 2*a + c
35
35 Ventajas de Copy Propagation Lleva a más simplificaciones algebraicas Ejemplo a = b + c d = a e = a f = 3*a + c
36
36 Ventajas de Copy Propagation Reduce instrucciones al eliminar ops de copia –Crea código muerto que puede ser eliminado
37
37 Ventajas de Copy Propagation Reduce instrucciones al eliminar ops de copia –Crea código muerto que puede ser eliminado Ejemplo a = b + c d = a e = a f = 3*a + c
38
38 Ventajas de Copy Propagation Reduce instrucciones al eliminar ops de copia –Crea código muerto que puede ser eliminado Ejemplo a = b + c f = 3*a + c
39
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 está en el conjunto ssi v = u (u, v son variables)
40
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!
41
41 Problema de Data-Flow para Copy Propagation Dominio –Conjunto de tuplas representando un statement v = u Dirección de flujo de datosHacia adelante Función de flujo de datos –OUT = gen (IN - kill) –gen = { | v = u es el statement } –kill = { | LHS var. del stmt. es v ó u } Operación Meet –IN = OUT Valores InicialesConjunto vacio (Bottom)
42
42 Ejemplo b = a c = b + 1 d = b b = d + c b = d
43
43 b = a c = b + 1 d = b b = d + c b = d gen = { | v = u es el statement } kill = { | LHS var. del stmt. es v ó u }
44
44 b = a c = b + 1 d = b b = d + c b = d gen = { } gen = { } gen = { } gen = { } gen = { } gen = { | v = u es el statement } kill = { | LHS var. del stmt. es v ó u }
45
45 b = a c = b + 1 d = b b = d + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = {, } gen = { | v = u es el statement } kill = { | LHS var. del stmt. es v ó u }
46
46 b = a c = b + 1 d = b b = d + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = {, } OUT = gen (IN - kill)
47
47 b = a c = b + 1 d = b b = d + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = {, } OUT = { } IN = { } OUT = gen (IN - kill)
48
48 b = a c = b + 1 d = b b = d + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = {, } OUT = { } IN = { } OUT = gen (IN - kill)
49
49 b = a c = b + 1 d = b b = d + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = {, } IN = { } OUT = {, } OUT = gen (IN - kill)
50
50 b = a c = b + 1 d = b b = d + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = {, } IN = { } IN = {, } OUT = { } OUT = gen (IN - kill)
51
51 b = a c = b + 1 d = b b = d + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = {, } IN = { } IN = {, } IN = { } OUT = { } OUT = gen (IN - kill)
52
52 b = a c = b + 1 d = b b = d + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = {, } { } {, } { } OUT = gen (IN - kill)
53
53 Ejemplo b = a c = b + 1 d = b b = d + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = {, } { } {, } { }
54
54 Ejemplo b = a c = b + 1 d = a b = d + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = {, } { } {, } { }
55
55 Ejemplo b = a c = b + 1 d = a b = d + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = {, } { } {, } { }
56
56 Ejemplo b = a c = b + 1 d = a b = b + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = {, } { } {, } { }
57
57 Ejemplo b = a c = b + 1 d = a b = b + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = {, } { } {, } { }
58
58 Ejemplo b = a c = b + 1 d = a b = b + c b = d ¿Terminamos? ¡No!
59
59 b = a c = b + 1 d = a b = b + c b = d gen = { } gen = { } gen = { } gen = { } gen = { } gen = { | v = u es el statement } kill = { | LHS var. del stmt. es v ó u }
60
60 b = a c = b + 1 d = a b = b + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = { } gen = { | v = u es el statement } kill = { | LHS var. del stmt. es v ó u }
61
61 b = a c = b + 1 d = a b = b + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = { } OUT = { } IN = { } OUT = gen (IN - kill)
62
62 b = a c = b + 1 d = a b = b + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = { } OUT = { } IN = { } OUT = gen (IN - kill)
63
63 b = a c = b + 1 d = a b = b + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = { } IN = { } OUT = {, } OUT = gen (IN - kill)
64
64 b = a c = b + 1 d = a b = b + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = { } IN = { } IN = {, } OUT = { } OUT = gen (IN - kill)
65
65 b = a c = b + 1 d = a b = b + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = { } IN = { } IN = {, } IN = { } OUT = {, } OUT = gen (IN - kill)
66
66 Ejemplo b = a c = b + 1 d = a b = b + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = { } { } {, } { } {, }
67
67 Ejemplo b = a c = b + 1 d = a b = b + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = { } { } {, } { } {, }
68
68 Ejemplo b = a c = b + 1 d = a b = a + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = { } { } {, } { } {, }
69
69 Ejemplo b = a c = b + 1 d = a b = a + c b = d gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = { } { } {, } { } {, }
70
70 Ejemplo b = a c = b + 1 d = a b = a + c b = a gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = { } { } {, } { } {, }
71
71 Ejemplo b = a c = b + 1 d = a b = a + c b = a gen = { } kill = {, } gen = { } kill = { } gen = { } kill = { } gen = { } kill = {, } gen = { } kill = { } { } {, } { } {, }
72
72 Ejemplo b = a c = b + 1 d = a b = a + c b = a ¿Terminamos? ¡Sí!
73
73 Otro Ejemplo a = b + c p = q + r d = a s = p a = d + p d = a
74
74 Otro Ejemplo a = b + c p = q + r d = a s = p a = d + p d = a Gen = { } Gen = {, }Gen = { } gen = { | v = u es el statement } kill = { | LHS var. del stmt. es v ó u }
75
75 Otro Ejemplo a = b + c p = q + r d = a s = p a = d + p d = a Gen = { } Kill = {, } Gen = {, } Kill = { } Gen = { } Kill = { } Gen = { } Kill = {{ } gen = { | v = u es el statement } kill = { | LHS var. del stmt. es v ó u }
76
76 Otro Ejemplo a = b + c p = q + r d = a s = p a = d + p d = a Gen = { } Kill = {, } Gen = {, } Kill = { } Gen = { } Kill = { } Gen = { } Kill = {{ } OUT = gen (IN - kill) IN = OUT
77
77 Otro Ejemplo a = b + c p = q + r d = a s = p a = d + p d = a Gen = { } Kill = {, } Gen = {, } Kill = { } Gen = { } Kill = { } Gen = { } Kill = {{ } IN = { } OUT = gen (IN - kill) IN = OUT
78
78 Otro Ejemplo a = b + c p = q + r d = a s = p a = d + p d = a Gen = { } Kill = {, } Gen = {, } Kill = { } Gen = { } Kill = { } Gen = { } Kill = {{ } IN = { } OUT = gen (IN - kill) IN = OUT
79
79 Otro Ejemplo a = b + c p = q + r d = a s = p a = d + p d = a Gen = { } Kill = {, } Gen = {, } Kill = { } Gen = { } Kill = { } Gen = { } Kill = {{ } IN = { } OUT = gen (IN - kill) IN = OUT OUT = { }
80
80 Otro Ejemplo a = b + c p = q + r d = a s = p a = d + p d = a Gen = { } Kill = {, } Gen = {, } Kill = { } Gen = { } Kill = { } Gen = { } Kill = {{ } IN = { } OUT = gen (IN - kill) IN = OUT OUT = { } IN = { }
81
81 Otro Ejemplo a = b + c p = q + r d = a s = p a = d + p d = a Gen = { } Kill = {, } Gen = {, } Kill = { } Gen = { } Kill = { } Gen = { } Kill = {{ } IN = { } OUT = gen (IN - kill) IN = OUT OUT = { } IN = { }
82
82 Otro Ejemplo a = b + c p = q + r d = a s = p a = d + p d = a Gen = { } Kill = {, } Gen = {, } Kill = { } Gen = { } Kill = { } Gen = { } Kill = {{ } IN = { } OUT = gen (IN - kill) IN = OUT OUT = { } IN = { } OUT = {, }
83
83 Otro Ejemplo a = b + c p = q + r d = a s = p a = d + p d = a Gen = { } Kill = {, } Gen = {, } Kill = { } Gen = { } Kill = { } Gen = { } Kill = {{ } IN = { } OUT = gen (IN - kill) IN = OUT OUT = { } IN = { } OUT = {, }
84
84 Otro Ejemplo a = b + c p = q + r d = a s = p a = d + p d = a Gen = { } Kill = {, } Gen = {, } Kill = { } Gen = { } Kill = { } Gen = { } Kill = {{ } IN = { } OUT = gen (IN - kill) IN = OUT OUT = { } IN = { } OUT = {, }
85
85 Otro Ejemplo a = b + c p = q + r d = a s = p a = d + p d = a Gen = { } Kill = {, } Gen = {, } Kill = { } Gen = { } Kill = { } Gen = { } Kill = {{ } IN = { } OUT = gen (IN - kill) IN = OUT OUT = { } IN = { } OUT = {, } OUT = { }
86
86 Otro Ejemplo a = b + c p = q + r d = a s = p a = d + p d = a Gen = { } Kill = {, } Gen = {, } Kill = { } Gen = { } Kill = { } Gen = { } Kill = {{ } IN = { } OUT = gen (IN - kill) IN = OUT OUT = { } IN = { } OUT = {, } OUT = { } IN = { }
87
87 Otro Ejemplo a = b + c p = q + r d = a s = p a = d + p d = a Gen = { } Kill = {, } Gen = {, } Kill = { } Gen = { } Kill = { } Gen = { } Kill = {{ } IN = { } OUT = gen (IN - kill) IN = OUT OUT = { } IN = { } OUT = {, } OUT = { } IN = { }
88
88 Otro Ejemplo a = b + c p = q + r d = a s = p a = d + p d = a Gen = { } Kill = {, } Gen = {, } Kill = { } Gen = { } Kill = { } Gen = { } Kill = {{ } IN = { } OUT = gen (IN - kill) IN = OUT OUT = { } IN = { } OUT = {, } OUT = { } IN = { }
89
89 Otro Ejemplo a = b + c p = q + r d = a s = p a = d + p d = a IN = { } OUT = { } IN = { } OUT = {, } OUT = { } IN = { }
90
90 Otro Ejemplo a = b + c p = q + r d = a s = p a = d + p d = a IN = { } OUT = { } IN = { } OUT = {, } OUT = { } IN = { }
91
91 Otro Ejemplo a = b + c p = q + r d = a s = p a = a + p d = a IN = { } OUT = { } IN = { } OUT = {, } OUT = { } IN = { }
92
92 Otro Ejemplo a = b + c p = q + r d = a s = p a = a + p d = a IN = { } OUT = { } IN = { } OUT = {, } OUT = { } IN = { }
93
93 Otro Ejemplo a = b + c p = q + r d = a s = p a = a + p d = a
94
94 Resumen Overview de análisis de control de flujo Simplificación algebraica Copy Propagation Constant Propagation 40
95
95 Constant Propagation Usar valores constantes –Usar la constante conocida para una variable
96
96 Constant Propagation Usar valores constantes –Usar la constante conocida para una variable Ejemplo a = 43 b = 4 d = a + 2*b + c
97
97 Constant Propagation Usar valores constantes –Usar la constante conocida para una variable Ejemplo a = 43 b = 4 d = a + 2*b + c
98
98 Constant Propagation Usar valores constantes –Usar la constante conocida para una variable Ejemplo a = 43 b = 4 d = 43 + 2*b + c
99
99 Constant Propagation Usar valores constantes –Usar la constante conocida para una variable Ejemplo a = 43 b = 4 d = a + 2*b + c
100
100 Constant Propagation Usar valores constantes –Usar la constante conocida para una variable Ejemplo a = 43 b = 4 d = 43 + 2*4 + c
101
101 Oportunidades para Constant 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
102
102 Ventajas de Constant Propagation Simplificación del programa
103
103 Ventajas de Constant Propagation Simplificación del programa Ejemplo a = 43 b = 4 d = 43 + 2*4 + c
104
104 Ventajas de Constant Propagation Simplificación del programa Ejemplo a = 43 b = 4 d = 43 + 2*4 + c
105
105 Ventajas de Constant Propagation Simplificación del programa Ejemplo a = 43 b = 4 d = 51 + c
106
106 Ventajas de Constant Propagation Habilita otras optimizaciones
107
107 Ventajas de Constant Propagation Habilita otras optimizaciones Ejemplo a = 4 b = 8 d = 2*a - b + c e = c + d
108
108 Ventajas de Constant Propagation Habilita otras optimizaciones Ejemplo a = 4 b = 8 d = 2*a - b + c e = c + d
109
109 Ventajas de Constant Propagation Habilita otras optimizaciones Ejemplo a = 4 b = 8 d = 2*4 - b + c e = c + d
110
110 Ventajas de Constant Propagation Habilita otras optimizaciones Ejemplo a = 4 b = 8 d = 2*4 - b + c e = c + d
111
111 Ventajas de Constant Propagation Habilita otras optimizaciones Ejemplo a = 4 b = 8 d = 2*4 - 8 + c e = c + d
112
112 Ventajas de Constant Propagation Habilita otras optimizaciones Ejemplo a = 4 b = 8 d = 2*4 - 8 + c e = c + d
113
113 Ventajas de Constant Propagation Habilita otras optimizaciones Ejemplo a = 4 b = 8 d = 8 - 8 + c e = c + d
114
114 Ventajas de Constant Propagation Habilita otras optimizaciones Ejemplo a = 4 b = 8 d = 8 - 8 + c e = c + d
115
115 Ventajas de Constant Propagation Habilita otras optimizaciones Ejemplo a = 4 b = 8 d = 0 + c e = c + d
116
116 Ventajas de Constant Propagation Habilita otras optimizaciones Ejemplo a = 4 b = 8 d = 0 + c e = c + d
117
117 Ventajas de Constant Propagation Habilita otras optimizaciones Ejemplo a = 4 b = 8 d = c e = c + d
118
118 Ventajas de Constant Propagation Habilita otras optimizaciones Ejemplo a = 4 b = 8 d = c e = c + d
119
119 Ventajas de Constant Propagation Habilita otras optimizaciones Ejemplo a = 4 b = 8 d = c e = c + d
120
120 Ventajas de Constant Propagation Habilita otras optimizaciones Ejemplo a = 4 b = 8 d = c e = c + c
121
121 Ventajas de Constant Propagation Habilita otras optimizaciones Ejemplo a = 4 b = 8 d = c e = c + c
122
122 Ventajas de Constant Propagation Habilita otras optimizaciones Ejemplo a = 4 b = 8 d = c e = c + c
123
123 Ventajas de Constant Propagation Habilita otras optimizaciones Ejemplo a = 4 b = 8 d = c e = 2*c
124
124 Ventajas de Constant Propagation Habilita otras optimizaciones Ejemplo a = 4 b = 8 d = c e = 2*c
125
125 Ventajas de Constant Propagation Habilita otras optimizaciones Ejemplo a = 4 b = 8 e = 2*c
126
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
127
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!
128
128 Valores de dos caminos a = 5 b = a + 10 a = 5
129
129 Valores de dos caminos a = 5 b = a + 10 a = k + 2 a no es constante
130
130 Valores de dos caminos a = 5 b = a + 10 a = 7 a no es constante
131
131 Valores de dos caminos a = 5 b = a + 10 a no definida a = 5
132
132 Valores de dos caminos a = 5 b = a + 10 a no definida a = 5 programa tonto, usa un valor no inicializado
133
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
134
134 Lattice para Constant Propagation = not a constant T = undefined falsetrue….-201234….
135
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 ( )
136
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 }
137
137 Operaciones Meet y Join { d1, d2 } { d2, d3 } { d1 } { d3 } = { } T = { d1, d2, d3 } { d1, d3 } { d2 } { d1, d2 } { d2, d3 } = ???
138
138 Operaciones Meet y Join { d1, d2 } { d2, d3 } { d1 } { d3 } = { } T = { d1, d2, d3 } { d1, d3 } { d2 } { d1, d2 } { d2, d3 } = ???
139
139 Operaciones Meet y Join { d1, d2 } { d2, d3 } { d1 } { d3 } = { } T = { d1, d2, d3 } { d1, d3 } { d2 } { d1, d2 } { d2, d3 } = ???
140
140 Operaciones Meet y Join { d1, d2 } { d2, d3 } { d1 } { d3 } = { } T = { d1, d2, d3 } { d1, d3 } { d2 } { d1, d2 } { d2, d3 } = { d2 }
141
141 Operaciones Meet y Join { d1, d2 } { d2, d3 } { d1 } { d3 } = { } T = { d1, d2, d3 } { d1, d3 } { d2 } { d1, d2 } { d3 } = ???
142
142 Operaciones Meet y Join { d1, d2 } { d2, d3 } { d1 } { d3 } = { } T = { d1, d2, d3 } { d1, d3 } { d2 } { d1, d2 } { d3 } = ???
143
143 Operaciones Meet y Join { d1, d2 } { d2, d3 } { d1 } { d3 } = { } T = { d1, d2, d3 } { d1, d3 } { d2 } { d1, d2 } { d3 } = ???
144
144 Operaciones Meet y Join { d1, d2 } { d2, d3 } { d1 } { d3 } = { } T = { d1, d2, d3 } { d1, d3 } { d2 } { d1, d2 } { d3 } = ???
145
145 Operaciones Meet y Join { d1, d2 } { d2, d3 } { d1 } { d3 } = { } T = { d1, d2, d3 } { d1, d3 } { d2 } { d1, d2 } { d3 } = { d1, d2, d3 }
146
146 Lattice para Constant Propagation = not a constant T = undefined falsetrue….-201234….
147
147 Operación Meet en el lattice = not a constant T = undefined falsetrue….-201234…. a = 2 = a 2 2 =
148
148 Operación Meet en el lattice = not a constant T = undefined falsetrue….-201234…. a = 2 = a 2 2 =
149
149 Operación Meet en el lattice = not a constant T = undefined falsetrue….-201234…. a = 2 = a 2 2 = 2
150
150 Operación Meet en el lattice = not a constant T = undefined falsetrue….-201234…. a = 2a = 0 = a 2 0 =
151
151 Operación Meet en el lattice = not a constant T = undefined falsetrue….-201234…. a = 2a = 0 = a 2 0 =
152
152 Operación Meet en el lattice = not a constant T = undefined falsetrue….-201234…. a = 2a = 0 = a 2 0 =
153
153 Operación Meet en el lattice = not a constant T = undefined falsetrue….-201234…. a = 2a = 0 = a 2 0 = not a constant
154
154 Operación Meet en el lattice = not a constant T = undefined falsetrue….-201234…. a = 2undefined = a 2 undefined =
155
155 Operación Meet en el lattice = not a constant T = undefined falsetrue….-201234…. a = 2undefined = a 2 undefined =
156
156 Operación Meet en el lattice = not a constant T = undefined falsetrue….-201234…. a = 2undefined = a 2 undefined =
157
157 Operación Meet en el lattice = not a constant T = undefined falsetrue….-201234…. a = 2undefined = a 2 undefined = 2
158
158 Problema de Data-Flow para Constant Propagation Dominio –Para cada variable un lattice Lv Dirección de flujo de datosHacia adelante Función de flujo de datos –OUT = gen (IN resv)
159
159 Problema de Data-Flow para Constant Propagation Dominio –Para cada variable un lattice Lv Dirección de flujo de datosHacia adelante Función de flujo de datos –OUT = gen (IN resv) T si v no es LHS –gen = x v x v = valor si v es LHS & RHS es constante de otra forma
160
160 Problema de Data-Flow para Constant Propagation Dominio –Para cada variable un lattice Lv Dirección de flujo de datosHacia adelante Función de flujo de datos –OUT = gen (IN resv) T si v no es LHS –gen = x v x v = valor si v es LHS & RHS es constante de otra forma –prsv = x v x v = T si v es el LHS si v no es el LHS
161
161 Problema de Data-Flow para Constant Propagation Dominio –Para cada variable un lattice Lv Dirección de flujo de datosHacia adelante Función de flujo de datos –OUT = gen (IN resv) T si v no es LHS –gen = x v x v = valor si v es LHS & RHS es constante de otra forma –prsv = x v x v = Valores Iniciales T (= undefined) T si v es el LHS si v no es el LHS
162
162 i = 1 j = 2 k = false i = 3 j = 2 print jj = j + 1 k exit i < n
163
163 i = 1 j = 2 k = false
164
164 T si v no es LHS –gen = x v x v = valor si v es LHS & RHS es constante. de otra forma –prsv = x v x v = T si v es el LHS si v no es el LHS
165
165 gen ={ i: T, j: T, k: T, n: T } T si v no es LHS –gen = x v x v = valor si v es LHS & RHS es constante. de otra forma –prsv = x v x v = T si v es el LHS si v no es el LHS
166
166 gen ={ i: T, j: T, k: T, n: T } prsv = { i: , j: , k: , n: } T si v no es LHS –gen = x v x v = valor si v es LHS & RHS es constante. de otra forma –prsv = x v x v = T si v es el LHS si v no es el LHS
167
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 = x v x v = valor si v es LHS & RHS es constante. de otra forma –prsv = x v x v = T si v es el LHS si v no es el LHS
168
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 = x v x v = valor si v es LHS & RHS es constante. de otra forma –prsv = x v x v = T si v es el LHS si v no es el LHS
169
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 = x v x v = valor si v es LHS & RHS es constante. de otra forma –prsv = x v x v = T si v es el LHS si v no es el LHS
170
170 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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: }
171
171 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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: }
172
172 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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 }
173
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 }
174
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 falsetrue….-201234….
175
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 falsetrue….-201234….
176
176 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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 }
177
177 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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 }
178
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 falsetrue….-201234….
179
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 falsetrue….-201234….
180
180 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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 }
181
181 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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 }
182
182 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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 }
183
183 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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 }
184
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 falsetrue….-201234….
185
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 falsetrue….-201234….
186
186 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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:1, j:2, k:false, n: T }
187
187 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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:1, j:2, k:false, n: T }
188
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 falsetrue….-201234….
189
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 falsetrue….-201234….
190
190 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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 }
191
191 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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 }
192
192 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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 }
193
193 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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 }
194
194 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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 }
195
195 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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 }
196
196 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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 }
197
197 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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 }
198
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 falsetrue….-201234….
199
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 falsetrue….-201234….
200
200 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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 }
201
201 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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 }
202
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 falsetrue….-201234….
203
203 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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 }
204
204 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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 }
205
205 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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 } OUT ={i: , j: , k:false, n: T }
206
206 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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: , j:2, k:false, n: T } OUT ={i: , j: , k:false, n: T }
207
207 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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: , j:2, k:false, n: T } OUT ={i: , j: , k:false, n: T }
208
208 i = 1 j = 2 k = false i = 3 j = 2 print jj = 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: , j:2, k:false, n: T } OUT ={i: , j: , k:false, n: T }
209
209 i = 1 j = 2 k = false i = 3 j = 2 print 2j = 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: , j:2, k:false, n: T } OUT ={i: , j: , k:false, n: T }
210
210 i = 1 j = 2 k = false i = 3 j = 2 print 2j = 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: , j:2, k:false, n: T } OUT ={i: , j: , k:false, n: T }
211
211 i = 1 j = 2 k = false i = 3 j = 2 print 2j = 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: , j:2, k:false, n: T } OUT ={i: , j: , k:false, n: T }
212
212 i = 1 j = 2 k = false i = 3 j = 2 print 2j = 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: , j:2, k:false, n: T } OUT ={i: , j: , k:false, n: T }
213
213 i = 1 j = 2 k = false i = 3 j = 2 print 2j = 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: , j:2, k:false, n: T } OUT ={i: , j: , k:false, n: T }
214
214 i = 1 j = 2 k = 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: , j:2, k:false, n: T } OUT ={i: , j: , k:false, n: T }
215
215 Lecturas Ballena –Capítulo 13
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.