You are on page 1of 22

Tema 9 Optimizacin de Cdigo intermedio 1. Introduccin 2. Bloques bsicos y grafos de flujo 3. Optimizaciones locales 3.1. Transformaciones algebraicas 3.2.

Transformaciones que preservan la estructura 3.2.1. Introduccin al anlisis de flujo de datos 3.2.2. Algunas transformaciones que preservan la estructura 3.2.3. Grafos dirigidos acclicos: GDAs 3.2.4. Reconstruccin del cdigo intermedio a partir de un GDA 4. Optimizaciones globales 4.1. Tcnicas bsicas 4.2. Deteccin de bucles 4.3. Extraccin de cdigo invariante 4.4. Reduccin de intensidad y eliminacin de variables de induccin

Ejemplo de optimizacin

Cdigo fuente

var a: array [1..10, 1..20] of integer; {talla entero-2} while a[i, k] < M do k := k 1;

Cdigo intermedio: 100 101 102 103 104 105 106 107 108

t1:= i * 20 t2 := t1 + k t3 := t2 * 2 t4 := a[t3] if t4 < M goto 106 goto 108 k := k 1 goto 100

Cdigo mejorado:

100 101 102 103 104 105 106 107

t1:= i * 20 t2 := t1 + k t3 := t2 * 2 t4 := a[t3] if t4 M goto 107 t3 := t3 - 2 goto 103

V. 11

Algoritmo: Particin en bloques bsicos

Cdigo intermedio ejemplo 1

Entrada: Una secuencia de instrucciones de tres direcciones. Salida: Una lista de bloques bsicos

Mtodo: 1. Se determina el conjunto de lderes (la primera proposicin de cada bloque bsico). (i) La primera proposicin es un lder (ii) Cualquier prop. destino de un salto es un lder. (iii) Cualquier prop. que vaya despus de un salto es un lder. 2. Para cada lder, su bloque bsico consta del lder y de todas las proposiciones hasta, sin incluir, el siguiente lder o el fin del programa.

131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145:

i := m-1 j := n t1 := 4*n v := a[t1] i := i+1 t2 := 4*i t3 := a[t2] if t3<v goto 135 j := j-1 t4 := 4*j t5 := a[t4] if t5>v goto 139 if i>=j goto 153 t6 := 4*i x := a[t6]

146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160:

t7 := 4*i t8 := 4*j t9 := a[t8] a[t7] := t9 t10 := 4*j a[t10] := x goto 135 t11 := 4*i x := a[t11] t12 := 4*i t13 := 4*n t14 := a[t13] a[t12] := t14 t15 := 4*n a[t15] := x

Grafo de Flujo del ejemplo 1

Ejemplo 2
B1
i := m-1 j := n t1 := 4*n v := a[t1] B2 i := i+1 t2 := 4*i t3 := a[t2] if t3<v goto B2 B3 j := j-1 t4 := 4*j t5 := a[t4] if t5>v goto B3 B4 if i>=j goto B6 var a: array [0..9, 0..9, 0..9] of integer; b: array [0..9, 0..9] of integer; for j := 0 to 9 do for k := 0 to 9 do b[5, k ] := b[5, k] + a[5, j, k] ; (j, y k no estn activas a la salida de los dos for)

Cdigo intermedio
t1 := 0 t13:= t12 * 10 j := t1 t14:= t13 + k t2 := 9 t15:= t14 * 2 L1: if j > t2 goto L3 t16:= a[t15] t3 := 0 t17:= t9 + t16 t18:= 5 k := t3 t19:= t18 * 10 t4 := 9 t20:= t19 + k L2: if k > t4 goto L4 t21:= t20 * 2 t5 := 5 b[t21]:= t17 t6 := t5 * 10 k := k + 1 t7 := t6 + k goto L2 t8 := t7 * 2 L4: j := j + 1 t9 := b[t8] goto L1 t10:= 5 L3: t11:= t10 * 10 t12:= t11 + j

B5 t6 := 4*i x := a[t6] t7 := 4*i t8 := 4*j t9 := a[t8] a[t7] := t9 t10 := 4*j a[t10] := x goto B2 t11 := 4*i x := a[t11] t12 := 4*i t13 := 4*n t14 := a[t13] a[t12] := t14 t15 := 4*n a[t15] := x

B6

Bloques bsicos y grafo de flujo


B1

Transformaciones algebraicas
1. Simplificaciones algebraicas:
B7

t1 := 0 j := t1 t2 := 9 SIG if j > t2 goto B7

B2

B3

t3 := 0 k := t3 t4 := 9

Expresiones de identidad: identidad = Propiedad conmutativa: = Propiedad asociativa: ( ) = ( ) Operador 1 distributivo respecto a 2: 1 ( 2 ) = ( 1 ) 2 ( 1 ) Operador unario autoinverso: = A*(B*C)+(B*A)*D+A*E = A*(B*(C+D)+E)

B4

if k > t4 goto B6
B6

2. Reduccin de intensidad. 3. Clculo previo de constantes. (folding)

B5

t5 := 5 t6 := 10 * t5 t7 := t6 + k t8 := t7 * 2 t9 := b[t8] t10 := 5 t11 := 10 * t10 t12 := t11 + j t13 := t12 * 10 t14 := t13 + k t15 := t14 * 2 t16 := a[t15] t17 := t9 + t16 t18 := 5 t19 := 10 * t18 t20 := t19 + k t21 := t20 * 2 b[t21] := t17 k := k + 1 goto B4

j := j + 1 goto B2

y := 3 t1 := 2 + y t2 := t1 + z x := t2 + 5 Precauciones:

x := 10 + z

- Deben aplicarse localmente 1 i := 0 2 i := i + 1 3 if i<N goto 2 - Nmeros en coma flotante

Optimizacin de cdigo intermedio

Variables activas
Una variable est activa en un arco del grafo de flujo si existe un camino dirigido desde ese arco a un uso de la variable que no pasa por ninguna definicin de la variable.

Algunas transformaciones que preservan la estructura


1.- Eliminacin de subexpresiones comunes.
(1) (2) (3) (4) a := b + c b := a - d c := b + c d := a - d a := b + c b := a d c := b + c d .= b

Ejemplo (1) (2) (3) x := (I) x := y + z (II) a := x + b (III) (4) (5) (6) (I) (II) (III) y := a + x if x < 5 goto 2 b := x {y, z, b} B = ({ f := a + b; g := a * b}, {a, b}, {f, g}) {x, b, z} {a, x, b, z} 4. Renombrar variables temporales 5. Intercambiar dos instrucciones adyacentes independientes. t1 := b + c t2 := x + y 3. Eliminacin de cdigo inactivo 2.- Propagacin de copias
(1) x := t3 (2) t9 := t5 (3) a[t2] := t9 (4) a[t4] := x (1) x := t3 (2) t9 := t5 (3) a[t2] := t5 (4) a[t4] := t3

B = ({ f := a + a; g := f * c; f := a + b; g := a * b}, {a, b, c}, {f, g}) B = ({ f := a + a; f := a + b; g := a * b}, {a, b, c}, {f, g})

10

Optimizacin de cdigo intermedio

Optimizacin de cdigo intermedio

Algoritmo construccin de un GDA (Versin 1)


ENTRADA: Un bloque bsico SALIDA: GDA USA: N = record
etiq: /* Etiqueta del nodo */ der, izq: /* Hijo derecho e izquierdo */ lista_var: /* Lista de variables asociadas al nodo */ end; CrearNodo: etiqueta ptro_a_nodo /* Funcin que crea un nodo con la etiqueta indicada */ ult_nodo: var ptro_a_nodo /* Funcin que devuelve el ltimo nodo que contiene en su lista_var (o su etiqueta si no est en ninguna lista_var) a la variable. var */

Ejemplo construccin GDA y reconstruccin cdigo


(1) (2) (3) (4) (5) (6) (7) (8) (9) (10)
t1 := 4 * i t2 := a[t1] t3 := 4 * i t4 := b[t3] t5 := t2 * t4 t6 := prod + t5 prod := t6 t7 := i + 1 i := t7 if i<=20 goto (1)
t6,prod

METODO: para toda vble. x hacer ult_nodo(x) := NIL finpara

t5 <= t4 [] t1,t3 i t7,i + 1

(1)

para toda instruccin Si = { x := y op z } I hacer


/*Desde i=0 hasta NumeroInstrucciones() */

si ult_nodo(y) = NIL ent ult_nodo(y) := Crear_nodo(y) si ult_nodo(z) = NIL ent ult_nodo(z) := Crear_nodo(z) si (nodo.etiq=op nodo.izq=ult_nodo(y) nodo.der=ult_nodo(z)) ent nodo := CrearNodo(op) nodo.izq := ult_nodo(y) nodo.der := ult_nodo(z) si ult_nodo(x) NIL ent ult_nodo(x).lista_vbles := ult_nodo(x).lista_vbles {x} nodo.lista_vbles := nodo.lista_vbles + {x} ult_nodo(x) := nodo finpara

[]

t2

* prod a b 4

20

(1) (2) (3) (4) (5) (6) (7)


11

t3 := 4 * i t4 := b[t3] t2 := a[t3] t5 := t2 * t4 prod := prod + t5 i := i + 1 if i<=20 goto (1)

12

Optimizacin de cdigo intermedio

Optimizacin de cdigo intermedio

Reglas para la reconstruccin del cdigo


1. Orden topolgico. Ejemplo: 0. Plegado de constantes. Ejemplo: BB = (P, {}, {k}) t5 := 5 t6 := 10 * t5 t7 := k + t6 t8 := t7 * t5
+ { t7 } * { t6 } * { t8 }

BB = (P, {a, c, d}, {x, y, z}) x := a c c := a d y := a c z := a d


a {y}

{x }

- { c, z }

10

5 { t5 }

Nuevo GDA:
+

* { t7 } 50 { t6 }

{ t8 }

Ordenes topolgicos correctos: x := a c z := a d y := a z

z := a - d x := a c y := a z

Ordenes topolgicos incorrectos:


k 10 5 { t5 }

y := a c x := a c z := a d

c := a - d z := c x := a c y := a z

13

14

Optimizacin de cdigo intermedio

Optimizacin de cdigo intermedio

2. Variables que aparezca como etiqueta. Secuencia incorrecta: c := a d x := a c y := a c z := c

4. En los casos en que haya que seguir un determinado orden, ste deber hacerse constar en el GDA.

5. Cdigo intil.

B = (P, {a, b, c}, {f, g})


x

{}

3. En un nodo se elegir como variable, para contener el valor de la expresin, aquella que est activa a la salida del bloque. Si no hubiera ninguna se elegir cualquier variable. Si a la salida hay ms de una activa se generarn tantas instrucciones de copia como sea necesario. En el caso de las hojas: Si la etiqueta es una variable y no se modifica dentro del bloque, se considerara est junto a su lista de variables y se aplicar el mismo criterio. Si la etiqueta es una constante, y ninguna variable en el campo lista_vbles est activa a la salida del bloque, no se generara ninguna instruccin para evaluar esta hoja.

f := a + a g := f * c f := a + b g := a * b

+ {f} + { } * {g} a b c

Cdigo obtenido: f := a + b g := a * b

15

16

Optimizacin de cdigo intermedio

Optimizacin de cdigo intermedio

Cdigo fuente:

a: array [1..100] of integer; {talla integer 4 u.m.} z := a[i] + b[i] (P, {a, i, b}, {z}) GDA

GDA correspondiente al B5 del ejemplo 2


+ t17 [] t16 * a [] t9 * t8, t21 + t14 t15

Bloque bsico:

t1 := 4 * i t2 := a[t1] t3 := 4 * i t4 := b[t3] t5 := t2 + t4 z := t5

+ [] { t4 } b a

{ t5 , z } [] { t2 }
+ t7, t20

t13

* { t1, t3 } 4 l
* t6, t11 t19 + k

t12

10

t5, t10 t18

Cdigo reconstruido: t1 := 4 * i t2 := a[t1] t4 := b[t1] z := t2 + t4

17

18

Optimizacin de cdigo intermedio

Optimizacin de cdigo intermedio

B1

j := 0 t2 := 9
B7

B2

SIG if j > t2 goto B7


2

1 3 4 5 7 6

B3

k := 0 t4 := 9

B4

if k > t4 goto B6
B6

8 9

10

B5

t7 := 50 + k t8 := t7 * 2 t9 := b[t8] t12 := 50 + j t13 := t12 * 10 t14 := t13 + k t15 := t14 * 2 t16 := a[t15] t17 := t9 + t16 b[t8] := t17 k := k + 1 goto B4

j := j + 1 goto B2

Arista de retroceso 7 4 10 7 9 1

Nodos del bucle natural { 4,5,6,7,8,10 } { 7,8,10 } { 1,2,3,4,5,6,7,8,9,10 }

19

20

Optimizacin de cdigo intermedio

Optimizacin de cdigo intermedio

Construccin del bucle natural asociado a una arista de retroceso.


Entrada: Grafo de flujo G y una arista de retroceso n ->d. Salida: Conjunto de todos los nodos que constituyen el bucle natural asociado a n --> d. Mtodo: procedure inserta(m); If m no est en bucle then Begin bucle := bucle {m}; push( m ) end; /* programa principal */ pila := vaca; bucle:= { d }; inserta( n ); while pila no sea vaca do begin m := pop ; for cada predecesor inmediato p de m do inserta( p ) end

Cdigo invariante (1) a:= 5 + N (2) i := i +1 (3) b := a * 4 (4) arr[i] := b (5) if a < N goto (1) (6) x:= t

(1) a:= 5 (2) if b > 2 goto (4) (3) a := 4 (4) b := 2 * b (5) if b < N goto (2) (6) x := a Algoritmo de extraccin de cdigo invariante Para toda Ii marcada (segn su orden de marcado) que defina x y cumpla:

i) Est en un bloque que domina todas las salidas del bucle, (o x no est activa a la salida del bucle). ii) x no se define en otra parte del bucle. iii) Todos los usos de x en el bucle solo pueden ser alcanzados por esa definicin de x. iv) Los valores de los operandos son constantes o se definen ya en el pre-encabezamiento. hacer Extraer Ii al final del pre-encabezamiento.

21

22

Optimizacin de cdigo intermedio

Optimizacin de cdigo intermedio

Ejemplos de traslado ilegal de cdigo


i := 1
i := 1 i := 1 B1 i := 2 B6 B1

B1

---> i := 3 <--if u<v goto B3 B2 i := 2 u := u+1

if u<v goto B3 B2 --> i := 2 <-u := u+1 B3 B4 v := v-1 if v<=20 goto B5 u := u+1 B3

if u<v goto B3 B2

B3 B4

B4 v := v-1 if v<=20 goto B5

v := v-1 if v<=20 goto B5

j := i
j := i B5 j := i B5

B5

No cumple la 2 condicin

(a) Antes

(b) Despus

i := 1

B1

No se puede extraer el invariante marcado, porque no cumple la primera condicin.


if u<v goto B3 B2 --> i := 2 <-u := u+1 B3 B4 k := i v := v-1 if v<=20 goto B5

j := i

B5

No cumple la 3 condicin
23 24

Optimizacin de cdigo intermedio

Optimizacin de cdigo intermedio

Deteccin de variables de induccin Algoritmo Deteccin de variables de induccin Entrada Bucle con informacin sobre el alcance y clculos invariantes Salida Familias de variables de induccin Mtodo 1) Encontrar todas las variables bsicas de induccin (i). Asociar a cada una el triple (i, 1, 0). 2) Buscar las variables k con una sola definicin dentro del bucle de la forma: k := j*b, k := b*j, k := j/b, k := jb, k := bj donde b es una cte. y j una vble. de induccin Si j es variable de induccin bsica entonces k est en la familia de j sino /* j pertenece a familia(i) */ si ( definicin de i entre la definicin de j y la de k) ( ninguna definicin de j fuera del bucle alcanza la definicin de k) entonces k est en la familia de i. Asociar a cada una el triple correspondiente.
(0) (1) (2) (3) (4) (5) (6) (7) i := i + 3 t1 := 2 * i j := t1 + 5 t2 := 3 * j k := t2 + 6 m := a[j] a[k] := m if i < N goto (0)

Variables de induccin
i t1 j t2 k (i, 1, 0) (i, 2, 0) (i, 2, 5) (i, 6, 15) (i, 6, 21)

Excepciones
A) 10 11 12 13 j:=3*i i:=i+1 k:=2*j if i < N goto 10

B)

10 11 12 13 14 15

i:=1 j:=1 k:=2*j j:=3*i i:=i+1 if i < N goto 12

25

26

Optimizacin de cdigo intermedio

Optimizacin de cdigo intermedio

Reduccin de intensidad aplicada a variables de induccin


(0) (1) (2) (3) (4) (5) (6) (7) i := i + 3 t1 := 2 * i j := t1 + 5 t2 := 3 * j k := t2 + 6 m := a[j] a[k] := m if i < N goto (0)

Algoritmo Reduccin de intensidad aplicada a variables de induccin. Mtodo Para toda variable de induccin bsica i hacer Para todo triple (i, c, d) asociado a las variables de induccin j1, j2, ... jn, de la Familia(i) hacer 1) Crear una variable temporal s 2) Sustituir las asignaciones a ji por ji:=s i [1..n]

3) Para toda asignacin i:=i+n en el bucle hacer aadir a continuacin s := s + c*n /* c*n cte.*/ poner s en Familia(i) /* triple (i,c,d) */ 4) Poner la incializacin de s al final del preencabezamiento: s := c*i /* solo s:=i si c es 1 */ s := s+d /* omitir si d es 0 */

s1 := 2 * i s2 := 2 * i s2 := s2 + 5 s3 := 6 * i s3 := s3 + 15 s4 := 6 * i s4 := s4 + 21

(0)

(1) (2) (3) (4) (5) (6) (7)

i := i + 3 s4 := s4 + 18 s3 := s3 + 18 s2 := s2 + 6 s1 := s1 + 6 t1 := s1 j := s2 t2 := s3 k := s4 m := a[j] a[k] := m if i < N goto (0)

27

28

Optimizacin de cdigo intermedio

Optimizacin de cdigo intermedio

Eliminacin de variables de induccin


Algoritmo Eliminacin de variables de induccin. Entrada Bucle L con informacin sobre definiciones de alcance, clculos invariantes y variables activas.

Salida Bucle revisado Mtodo 0) Eliminar variables de induccin sin usos en el Bucle y fuera de l. (slo su propia definicin o instruc. copia) 1) Para toda variable de induccin i que se usa slo para calcular vbles. de induc. en su familia y saltos condic. hacer Elegir una j Familia(i) /* con triple (i,c,d) lo ms simple */ Modificar cada comprobacin en que aparezca i para utilizar j Ej.: if i oprel x goto B , x vble. inducc se sustituye por: r := c*x /* r := x si c es 1 */ r := r+d /* se omite si d es 0*/ if j oprel r goto B /* r temporal */ finpara para toda vble de induccin eliminada del bucle hacer borrar todas sus asignaciones finpara 2) Para toda vble de inducc. j para la que el alg. De reduccin de intensidad en v.i. introdujo una proposicin j := s hacer a) Comprobar que no se define s entre j:=s y cualquier uso de j b) Sustituir usos de j por usos de s c) Borrar j:=s Finpara
29

s1 := 2 * i s2 := 2 * i s2 := s2 + 5 s3 := 6 * i s3 := s3 + 15 s4 := 6 * i s4 := s4 + 21 (0) i := i + 3 s4 := s4 + 18 s3 := s3 + 18 s2 := s2 + 6 s1 := s1 + 6 t1 := s1 j := s2 t2 := s3 k := s4 m := a[j] a[k] := m if i < N goto (0)

(1) (2) (3) (4) (5) (6) (7)

30

Optimizacin de cdigo intermedio

Optimizacin de cdigo intermedio

s2 := 2 * i s2 := s2 + 5 s4 := 6 * i s4 := s4 + 21 (0) i := i + 3 s4 := s4 + 18 s2 := s2 + 6 (2) j := s2 (3) k := s4 (5) m := a[j] (6) a[k] := m (7) if i < N goto (0)

Ejemplo
Var a: array [0..9, 0..9, 0..9] of integer; b: array [0..9, 0..9] of integer; for j := 0 to 9 do for k := 0 to 9 do b[5, k ] := b[5, k] + a[5, j, k] ; (Las variables j, y k no estn activas a la salida)

B1

t1 := 0 j := t1 t2 := 9 SIG if j > t2 goto B7

B7

L1:

L2:

Al finalizar el algoritmo quedar:

s2 := 2 * i s2 := s2 + 5 s4 := 6 * i s4 := s4 + 21 t := 2 * N t := t + 5

L4: L3:

t1 := 0 j := t1 t2 := 9 if j > t2 goto L3 t3 := 0 k := t3 t4 := 9 if k > t4 goto L4 t5 := 5 t6 := 10 * t5 t7 := t6 + k t8 := t7 * 2 t9 := b[t8] t10:= 5 t11:= 10 * t10 t12:= t11 + j t13:= t12 * 10 t14:= t13 + k t15:= t14 * 2 t16:= a[t15] t17:= t9 + t16 t18:= 5 t19:= 10 * t18 t20:= t19 + k t21:= t20 * 2 b[t21]:= t17 k := k + 1 goto L2 j := j + 1 goto L1

B2

B3

t3 := 0 k := t3 t4 := 9

B4

if k > t4 goto B6
B6

B5

(0) s4 := s4 + 18 s2 := s2 + 6 (2) m := a[s2] (6) a[s4] := m (7) if s2 < t goto (0)

t5 := 5 t6 := 10 * t5 t7 := t6 + k t8 := t7 * 2 t9 := b[t8] t10 := 5 t11 := 10 * t10 t12 := t11 + j t13 := t12 * 10 t14 := t13 + k t15 := t14 * 2 t16 := a[t15] t17 := t9 + t16 t18 := 5 t19 := 10 * t18 t20 := t19 + k t21 := t20 * 2 b[t21] := t17 k := k + 1 goto B4

j := j + 1 goto B2

31

32

Optimizacin de cdigo intermedio

Optimizacin de cdigo intermedio

rbol de dominacin:
B1

t17 [] t16 * t15

B2

B3

B7

B4

B5

B6

Aristas de retroceso B6 B2 y B5 B4 Bucle natural interno: { B4, B5 } Bucle natural externo: { B2, B3, B4, B5, B6 } GDA asociado al bloque B5 :

t7 := 50 + k t8 := t7 * 2 t9 := b[t8] t12 := 50 + j t13 := t12 * 10 t14 := t13 + k t15 := t14 * 2 t16 := a[t15] t17 := t9 + t16 b[t8] := t17 k := k + 1 goto B4
b 10

a [] t9 * + t7, t20 t8, t21 + t14

t13

+ k

t12

t6, t11 t19

t5, t10 t18

k0

t5 := 5 t6 := 10 * t5 t7 := t6 + k t8 := t7 * 2 t9 := b[t8] t10 := 5 t11 := 10 * t10 t12 := t11 + j t13 := t12 * 10 t14 := t13 + k t15 := t14 * 2 t16 := a[t15] t17 := t9 + t16 t18 := 5 t19 := 10 * t18 t20 := t19 + k t21 := t20 * 2 b[t21] := t17 k := k + 1 goto B4

t17 [] t16 * a t15

[]

t9 * + t7, t20 t8, t21

t14

t13

+ k

t12

t6, t11 t19

10

t5, t10 t18

k0

33

34

Optimizacin de cdigo intermedio

Optimizacin de cdigo intermedio

B1

j := 0 t2 := 9
B7

B1

j := 0 t2 := 9
B7

B2

SIG if j > t2 goto B7

B2

SIG if j > t2 goto B7

B3

k := 0 t4 := 9

B3

k := 0 t4 := 9

B4

Pre_Int

if k > t4 goto B6
B6

t12 := 50 + j t13 := t12 * 10

B4

if k > t4 goto B6

B6

B5

t7 := 50 + k t8 := t7 * 2 t9 := b[t8] t12 := 50 + j t13 := t12 * 10 t14 := t13 + k t15 := t14 * 2 t16 := a[t15] t17 := t9 + t16 b[t8] := t17 k := k + 1 goto B4

j := j + 1 goto B2
B5

j := j + 1 goto B2 t7 := 50 + k t8 := t7 * 2 t9 := b[t8] t14 := t13 + k t15 := t14 * 2 t16 := a[t15] t17 := t9 + t16 b[t8] := t17 k := k + 1 goto B4

Instrucciones invariantes bucle interno

t12 := 50 + j , t13 := t12 * 10

Variable de induccin bsica del bucle interno Familia(k) t7 (k, 1, 50), t8 (k, 2, 100), t14 (k, 1, t13) y t15 (k, 2, 2*t13).

k (k, 1, 0)

Notar que ni t12 ni t13 estn activas a la salida del bucle.

35

36

Optimizacin de cdigo intermedio

Optimizacin de cdigo intermedio

B1

j := 0 t2 := 9
B7

B1

j := 0 t2 := 9
B7

B2

SIG if j > t2 goto B7 k := 0 t4 := 9

B2

SIG if j > t2 goto B7

B3

B3

k := 0 t4 := 9 t12 := 50 + j t13 := t12 * 10

Pre_Int

t12 := 50 + j t13 := t12 * 10 s7 := k + 50 s8 := k * 2 s8 := s8 + 100 s14 := k + t13 s15 := 2 * k t20 := 2 * t13 s15 := s15 + t20

Pre_Int

s8 := k * 2 s8 := s8 + 100 s15 := 2 * k t20 := 2 * t13 s15 := s15 + t20 t21 := t4 * 2 t22 := t21 + 100

B4

B4

if k > t4 goto B6
B6 B5

if s8 > t22 goto B6


B6 B5

t7 := s7 t8 := s8 t9 := b[t8] t14 := s14 t15 := s15 t16 := a[t15] t17 := t9 + t16 b[t8] := t17 k := k + 1 s15 := s15 + 2 s14 := s14 +1 s8 := s8 + 2 s7 := s7 + 1 goto B4

j := j + 1 goto B2

t9 := b[s8] t16 := a[s15] t17 := t9 + t16 b[s8] := t17 s15 := s15 + 2 s8 := s8 + 2 goto B4

j := j + 1 goto B2

37

38

Optimizacin de cdigo intermedio

Optimizacin de cdigo intermedio

B1

j := 0 t2 := 9
B7

B1

j := 0 t2 := 9
B7

B2

SIG if j > t2 goto B7

Pre_Ext

t22 := 118

SIG

B2
B3

if j > t2 goto B7

t12 := 50 + j t13 := t12 * 10 s8 := 100 s15 := 2 * t13 t22 := 118

B3

t12 := 50 + j t13 := t12 * 10 s8 := 100 s15 := 2 * t13

B4

B4

if s8 > t22 goto B6


B6 B5

if s8 > t22 goto B6


B6 B5

t9 := b[s8] t16 := a[s15] t17 := t9 + t16 b[s8] := t17 s15 := s15 + 2 s8 := s8 + 2 goto B4

j := j + 1 goto B2

t9 := b[s8] t16 := a[s15] t17 := t9 + t16 b[s8] := t17 s15 := s15 + 2 s8 := s8 + 2 goto B4

j := j + 1 goto B2

Bucle externo (B2, B3, B4, B5 y B6). Instrucciones invariantes s8:=100 (no extra !le) y t22:=118, "aria!le #e in#ucci$n !%sica #el !ucle externo 'a(ilia(&) t12 (&, 1, 50), y t13(&,10,500). (&,1,0)

s15 no es varia!le #e in#ucci$n #el !ucle externo (s15:=2)t13 y s15:=s15*2).

39

40

Optimizacin de cdigo intermedio

Optimizacin de cdigo intermedio

B1

j := 0 t2 := 9
B7

B1

j := 0 t2 := 9 t22 := 118 s13:= 10*j s13:= s13+500 r:= t2*10 r:= r+500
B7

Pre_Ext

t22 := 118 s12:= j+50 s13:= 10*j s13:= s13+500

Pre_Ext

SIG

SIG

B2

if j > t2 goto B7

B2

if s13 > r goto B7

B3

t12 := s12 t13 := s13 s8 := 100 s15 := 2 * t13

B3

s8 := 100 s15 := 2 * s13

B4

B4

if s8 > t22 goto B6


B6 B5

if s8 > t22 goto B6


B6 B5

t9 := b[s8] t16 := a[s15] t17 := t9 + t16 b[s8] := t17 s15 := s15 + 2 s8 := s8 + 2 goto B4

j := j + 1 s12:= s12+1 s13:= s13+10 goto B2

t9 := b[s8] t16 := a[s15] t17 := t9 + t16 b[s8] := t17 s15 := s15 + 2 s8 := s8 + 2 goto B4

s13:= s13+10 goto B2

41

42

Optimizacin de cdigo intermedio

B1

t22 := 118 s13:= 500 r:= 590

B7

SIG

B2

if s13 > r goto B7

Nombre de archivo: 9-optim11.doc Directorio: G:\Papa\My Dropbox\PDL\Transparencias Plantilla: C:\Users\Papa\AppData\Roaming\Microsoft\Plantillas\Normal.dotm Ttulo: Eliminacin de asignaciones inactivas (intiles , inservibles) Asunto: Autor: Dana Palabras clave: Comentarios: Fecha de creacin: 22/04/2012 22:35:00 Cambio nmero: 2 Guardado el: 22/04/2012 22:35:00 Guardado por: Papa Tiempo de edicin: 0 minutos Impreso el: 22/04/2012 22:35:00 ltima impresin completa Nmero de pginas: 43 Nmero de palabras: 2.383 (aprox.) Nmero de caracteres:13.110 (aprox.)

B3

s8 := 100 s15 := 2 * s13

B4

if s8 > t22 goto B6


B6 B5

t9 := b[s8] t16 := a[s15] t17 := t9 + t16 b[s8] := t17 s15 := s15 + 2 s8 := s8 + 2 goto B4

s13:= s13+10 goto B2

43