Análisis de Control de Flujo
description
Transcript of Análisis de Control de Flujo
![Page 1: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/1.jpg)
CompiladoresAnálisis de Control de Flujo
![Page 2: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/2.jpg)
2
Resumen
• Overview de Optimizaciones• Análisis de Control de Flujo• Dominators• Recorrido de Grafos• Grafos Reducibles• Análisis de Intervalos• Algunas Definiciones
5
![Page 3: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/3.jpg)
3
Anatomía de un Compilador
Optimizador Codigo Intermedio
Generador de Codigo
Representación Intermedia Optimizada
Código en Assembler
Generador de Codigo Intermedio
Representación Intermedia
Analizador Lexico (Scanner)
Analizador Sintactico (Parser)
Token Stream
Arbol de Parseo
Programa (character stream)
![Page 4: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/4.jpg)
4
Ejemplo
int sumcalc(int a, int b, int N){ int i; int x, y;
x = 0; y = 0;
for(i = 0; i <= N; i++) { x = x + (4*a/b)*i + (i+1)*(i+1);
x = x + b*y; } return x;}
![Page 5: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/5.jpg)
5
test:subu $fp, 16sw zero, 0($fp) # x = 0sw zero, 4($fp) # y = 0sw zero, 8($fp) # i = 0
lab1: # for(i=0;i<N; i++)mul $t0, $a0, 4 # a*4div $t1, $t0, $a1 # a*4/blw $t2, 8($fp) # imul $t3, $t1, $t2 # a*4/b*ilw $t4, 8($fp) # iaddui$t4, $t4, 1 # i+1lw $t5, 8($fp) # iaddui$t5, $t5, 1 # i+1mul $t6, $t4, $t5 # (i+1)*(i+1)addu $t7, $t3, $t6 # a*4/b*i + (i+1)*(i+1)lw $t8, 0($fp) # xadd $t8, $t7, $t8 # x = x + a*4/b*i + (i+1)*(i+1)sw $t8, 0($fp)...
6
![Page 6: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/6.jpg)
6
...lw $t0, 4($fp) # ymul $t1, $t0, a1 # b*ylw $t2, 0($fp) # xadd $t2, $t2, $t1 # x = x + b*ysw $t2, 0($fp)
lw $t0, 8($fp) # iaddui$t0, $t0, 1 # i+1sw $t0, 8($fp)ble $t0, $a3, lab1
lw $v0, 0($fp)addu $fp, 16b $ra
6
![Page 7: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/7.jpg)
7
Optimicemos...
int sumcalc(int a, int b, int N){ int i; int x, y;
x = 0; y = 0;
for(i = 0; i <= N; i++) { x = x + (4*a/b)*i + (i+1)*(i+1);
x = x + b*y; } return x;}
![Page 8: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/8.jpg)
8
Constant Propagation
int sumcalc(int a, int b, int N){ int i; int x, y;
x = 0; y = 0;
for(i = 0; i <= N; i++) { x = x + (4*a/b)*i + (i+1)*(i+1);
x = x + b*y; } return x;}
![Page 9: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/9.jpg)
9
Constant Propagation
int sumcalc(int a, int b, int N){ int i; int x, y;
x = 0; y = 0;
for(i = 0; i <= N; i++) { x = x + (4*a/b)*i + (i+1)*(i+1);
x = x + b*y; } return x;}
![Page 10: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/10.jpg)
10
Constant Propagation
int sumcalc(int a, int b, int N){ int i; int x, y;
x = 0; y = 0;
for(i = 0; i <= N; i++) { x = x + (4*a/b)*i + (i+1)*(i+1);
x = x + b*y; } return x;}
![Page 11: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/11.jpg)
11
Constant Propagation
int sumcalc(int a, int b, int N){ int i; int x, y;
x = 0; y = 0;
for(i = 0; i <= N; i++) { x = x + (4*a/b)*i + (i+1)*(i+1);
x = x + b*0; } return x;}
![Page 12: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/12.jpg)
12
Algebraic Simplification
int sumcalc(int a, int b, int N){ int i; int x, y;
x = 0; y = 0;
for(i = 0; i <= N; i++) { x = x + (4*a/b)*i + (i+1)*(i+1);
x = x + b*0; } return x;}
![Page 13: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/13.jpg)
13
Algebraic Simplification
int sumcalc(int a, int b, int N){ int i; int x, y;
x = 0; y = 0;
for(i = 0; i <= N; i++) { x = x + (4*a/b)*i + (i+1)*(i+1);
x = x + b*0; } return x;}
![Page 14: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/14.jpg)
14
Algebraic Simplification
int sumcalc(int a, int b, int N){ int i; int x, y;
x = 0; y = 0;
for(i = 0; i <= N; i++) { x = x + (4*a/b)*i + (i+1)*(i+1);
x = x + 0; } return x;}
![Page 15: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/15.jpg)
15
Algebraic Simplification
int sumcalc(int a, int b, int N){ int i; int x, y;
x = 0; y = 0;
for(i = 0; i <= N; i++) { x = x + (4*a/b)*i + (i+1)*(i+1);
x = x + 0; } return x;}
![Page 16: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/16.jpg)
16
Algebraic Simplification
int sumcalc(int a, int b, int N){ int i; int x, y;
x = 0; y = 0;
for(i = 0; i <= N; i++) { x = x + (4*a/b)*i + (i+1)*(i+1);
x = x + 0; } return x;}
![Page 17: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/17.jpg)
17
Algebraic Simplification
int sumcalc(int a, int b, int N){ int i; int x, y;
x = 0; y = 0;
for(i = 0; i <= N; i++) { x = x + (4*a/b)*i + (i+1)*(i+1);
x = x; } return x;}
![Page 18: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/18.jpg)
18
Copy Propagation
int sumcalc(int a, int b, int N){ int i; int x, y;
x = 0; y = 0;
for(i = 0; i <= N; i++) { x = x + (4*a/b)*i + (i+1)*(i+1);
x = x; } return x;}
![Page 19: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/19.jpg)
19
Copy Propagation
int sumcalc(int a, int b, int N){ int i; int x, y;
x = 0; y = 0;
for(i = 0; i <= N; i++) { x = x + (4*a/b)*i + (i+1)*(i+1);
}
return x;}
![Page 20: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/20.jpg)
20
Common Subexpression Elimination
int sumcalc(int a, int b, int N){ int i; int x, y;
x = 0; y = 0;
for(i = 0; i <= N; i++) { x = x + (4*a/b)*i + (i+1)*(i+1);
}
return x;}
![Page 21: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/21.jpg)
21
int sumcalc(int a, int b, int N){ int i; int x, y;
x = 0; y = 0;
for(i = 0; i <= N; i++) { x = x + (4*a/b)*i + (i+1)*(i+1);
}
return x;}
Common Subexpression Elimination
![Page 22: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/22.jpg)
22
int sumcalc(int a, int b, int N){ int i; int x, y, t;
x = 0; y = 0;
for(i = 0; i <= N; i++) { t = i+1;
x = x + (4*a/b)*i + (i+1)*(i+1); }
return x;}
Common Subexpression Elimination
![Page 23: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/23.jpg)
23
int sumcalc(int a, int b, int N){ int i; int x, y, t;
x = 0; y = 0;
for(i = 0; i <= N; i++) { t = i+1;
x = x + (4*a/b)*i + t*t; }
return x;}
Common Subexpression Elimination
![Page 24: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/24.jpg)
24
Dead Code Elimination
int sumcalc(int a, int b, int N){ int i; int x, y, t;
x = 0; y = 0;
for(i = 0; i <= N; i++) { t = i+1;
x = x + (4*a/b)*i + t*t; }
return x;}
![Page 25: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/25.jpg)
25
Dead Code Elimination
int sumcalc(int a, int b, int N){ int i; int x, y, t;
x = 0; y = 0;
for(i = 0; i <= N; i++) { t = i+1;
x = x + (4*a/b)*i + t*t; }
return x;}
![Page 26: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/26.jpg)
26
Dead Code Elimination
int sumcalc(int a, int b, int N){ int i; int x, y, t;
x = 0;
for(i = 0; i <= N; i++) { t = i+1;
x = x + (4*a/b)*i + t*t; }
return x;}
![Page 27: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/27.jpg)
27
Dead Code Elimination
int sumcalc(int a, int b, int N){ int i; int x, t;
x = 0;
for(i = 0; i <= N; i++) { t = i+1;
x = x + (4*a/b)*i + t*t; }
return x;}
![Page 28: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/28.jpg)
28
Loop Invariant Removal
int sumcalc(int a, int b, int N){ int i; int x, t;
x = 0;
for(i = 0; i <= N; i++) { t = i+1;
x = x + (4*a/b)*i + t*t; }
return x;}
![Page 29: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/29.jpg)
29
Loop Invariant Removal
int sumcalc(int a, int b, int N){ int i; int x, t;
x = 0;
for(i = 0; i <= N; i++) { t = i+1;
x = x + (4*a/b)*i + t*t; }
return x;}
![Page 30: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/30.jpg)
30
Loop Invariant Removal
int sumcalc(int a, int b, int N){ int i; int x, t, u;
x = 0; u = (4*a/b);
for(i = 0; i <= N; i++) { t = i+1;
x = x + u*i + t*t; }
return x;}
![Page 31: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/31.jpg)
31
Strength Reduction
int sumcalc(int a, int b, int N){ int i; int x, t, u;
x = 0; u = (4*a/b);
for(i = 0; i <= N; i++) { t = i+1;
x = x + u*i + t*t; }
return x;}
![Page 32: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/32.jpg)
32
Strength Reduction
int sumcalc(int a, int b, int N){ int i; int x, t, u;
x = 0; u = (4*a/b);
for(i = 0; i <= N; i++) { t = i+1;
x = x + u*i + t*t; }
return x;}
u*0, u*1, u*2, u*3, u*4,...
v=0, v=v+u,v=v+u,v=v+u,v=v+u,...
![Page 33: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/33.jpg)
33
Strength Reduction
int sumcalc(int a, int b, int N){ int i; int x, t, u, v;
x = 0; u = (4*a/b); v = 0;
for(i = 0; i <= N; i++) { t = i+1;
x = x + u*i + t*t; v = v + u;
} return x;}
![Page 34: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/34.jpg)
34
Strength Reduction
int sumcalc(int a, int b, int N){ int i; int x, t, u, v;
x = 0; u = (4*a/b); v = 0;
for(i = 0; i <= N; i++) { t = i+1;
x = x + v + t*t; v = v + u;
} return x;}
![Page 35: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/35.jpg)
35
Strength Reduction
int sumcalc(int a, int b, int N){ int i; int x, t, u, v;
x = 0; u = (4*a/b); v = 0;
for(i = 0; i <= N; i++) { t = i+1;
x = x + v + t*t; v = v + u;
} return x;}
![Page 36: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/36.jpg)
36
Strength Reduction
int sumcalc(int a, int b, int N){ int i; int x, t, u, v;
x = 0; u = (4*a/b); v = 0;
for(i = 0; i <= N; i++) { t = i+1;
x = x + v + t*t; v = v + u;
} return x;}
![Page 37: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/37.jpg)
37
Strength Reduction
int sumcalc(int a, int b, int N){ int i; int x, t, u, v;
x = 0; u = ((a<<2)/b); v = 0;
for(i = 0; i <= N; i++) { t = i+1;
x = x + v + t*t; v = v + u;
} return x;}
![Page 38: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/38.jpg)
38
Register Allocation
fpVariable local X Variable local Y Variable local I
![Page 39: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/39.jpg)
39
Register Allocation
$t9 = X$t8 = t$t7 = u$t6 = v$t5 = i
fpVariable local X Variable local Y Variable local I
![Page 40: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/40.jpg)
40
Ejemplo Optimizado
int sumcalc(int a, int b, int N){ int i; int x, t, u, v;
x = 0; u = ((a<<2)/b); v = 0;
for(i = 0; i <= N; i++) { t = i+1;
x = x + v + t*t; v = v + u;
} return x;}
11
![Page 41: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/41.jpg)
41
test:subu $fp, 16add $t9, zero, zero # x = 0sll $t0, $a0, 2 # a<<2div $t7, $t0, $a1 # u = (a<<2)/badd $t6, zero, zero # v = 0add $t5, zero, zero # i = 0
lab1: # for(i=0;i<N; i++)addui$t8, $t5, 1 # t = i+1mul $t0, $t8, $t8 # t*taddu $t1, $t0, $t6 # v + t*taddu $t9, t9, $t1 # x = x + v + t*t
addu $6, $6, $7 # v = v + u
addui$t5, $t5, 1 # i = i+1ble $t5, $a3, lab1
addu $v0, $t9, zeroaddu $fp, 16b $ra
![Page 42: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/42.jpg)
42
test:subu $fp, 16add $t9, zero, zero sll $t0, $a0, 2div $t7, $t0, $a1 add $t6, zero, zero add $t5, zero, zero
lab1: addui $t8, $t5, 1 mul $t0, $t8, $t8 addu $t1, $t0, $t6 addu $t9, t9, $t1 addu $6, $6, $7 addui $t5, $t5, 1 ble $t5, $a3, lab1
addu $v0, $t9, zeroaddu $fp, 16b $ra
test:subu $fp, 16sw zero, 0($fp) sw zero, 4($fp) sw zero, 8($fp)
lab1: mul $t0, $a0, 4 div $t1, $t0, $a1 lw $t2, 8($fp) mul $t3, $t1, $t2 lw $t4, 8($fp) addui $t4, $t4, 1 lw $t5, 8($fp) addui $t5, $t5, 1 mul $t6, $t4, $t5 addu $t7, $t3, $t6 lw $t8, 0($fp) add $t8, $t7, $t8 sw $t8, 0($fp)lw $t0, 4($fp) mul $t1, $t0, a1 lw $t2, 0($fp) add $t2, $t2, $t1 sw $t2, 0($fp)lw $t0, 8($fp) addui $t0, $t0, 1 sw $t0, 8($fp)ble $t0, $a3, lab1
lw $v0, 0($fp)addu $fp, 16b $ra
4*ld/st + 2*add/sub + br +N*(9*ld/st + 6*add/sub + 4* mul + div + br)= 7 + N*21
6*add/sub + shift + div + br +N*(5*add/sub + mul + br)= 9 + N*7
Codigo No Optimizado Codigo Optimizado
Tiempo de Ejecución = 17 secTiempo de Ejecución = 43 sec
![Page 43: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/43.jpg)
43
Pregunta: Pueden Optimizar...int foobar(int N){ int i, j, k, x, y; x = 0; y = 0; k = 256; for(i = 0; i <= N; i++) { for(j = i+1; j <= N; j++) {
x = x + 4*(2*i+j)*(i+2*k);if(i>j)
y = y + 8*(i-j);else
y = y + 8*(j-i); }
} return x;}
12
![Page 44: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/44.jpg)
44
Pregunta: Pueden Optimizar...int foobar(int N){ int i, j, k, x, y; x = 0; y = 0; k = 256; for(i = 0; i <= N; i++) { for(j = i+1; j <= N; j++) {
x = x+8*i*i+4096*i+j*(4*i+2048); }
} return x;}
19
![Page 45: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/45.jpg)
45
Pregunta: Pueden Optimizar...int foobar(int N){ int i, j, x, t0, t1; x = 0;
t1 = 2048; for(i = 0; i <= N-1; i++) { t0 = (i*i)<<3 + i<<12;
x = x + (N-i)*t0; for(j = i+1; j <= N; j++) {
x = x + t1*j; }
t1 = t1 + 4; }
return x;}
![Page 46: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/46.jpg)
46
Pregunta: Pueden Optimizar...int foobar(int N){ int i, j, x, t0, t1; x = 0;
t1 = 1024; for(i = 0; i <= N-1; i++) { t0 = (i*i)<<3 + i<<12;
x = x + (N-i)*t0 + t1*(N*(N+1)-i*(i+1));
t1 = t1 + 2; }
return x;}
![Page 47: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/47.jpg)
47
Pregunta: Pueden Optimizar...
• Rendimiento– Programa Original: 17,670 ciclos– Programa Optimizado: 2,204 ciclos
• Viabilidad– Hicimos algunas optimizaciones bastante
agresivas– ¿Puede gcc hacer estas optimizaciones?
19
![Page 48: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/48.jpg)
48
Resumen
• Overview de Optimizaciones• Análisis de Control de Flujo• Dominators• Recorrido de Grafos• Grafos Reducibles• Análisis de Intervalos• Algunas Definiciones
5
![Page 49: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/49.jpg)
49
Constant Propagation
int sumcalc(int a, int b, int N){ int i; int x, y;
x = 0; y = 0;
for(i = 0; i <= N; i++) { x = x + (4*a/b)*i + (i+1)*(i+1);
x = x + b*y; } return x;}
![Page 50: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/50.jpg)
50
Constant Propagation
int sumcalc(int a, int b, int N){ int i; int x, y;
x = 0; y = 0;
for(i = 0; i <= N; i++) { x = x + (4*a/b)*i + (i+1)*(i+1);
x = x + b*y; } return x;}
![Page 51: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/51.jpg)
51
Constant Propagation
int sumcalc(int a, int b, int N){ int i; int x, y;
x = 0; y = 0;
for(i = 0; i <= N; i++) { x = x + (4*a/b)*i + (i+1)*(i+1);
x = x + b*y; } return x;}
![Page 52: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/52.jpg)
52
Constant Propagation
int sumcalc(int a, int b, int N){ int i; int x, y;
x = 0; y = 0;
for(i = 0; i <= N; i++) { x = x + (4*a/b)*i + (i+1)*(i+1);
x = x + b*0; } return x;}
![Page 53: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/53.jpg)
53
Implementando constant propagation
• Encontrar una expresión LHS que sea constante
• Reemplazar el uso de la variable RHS con la constante LHS dado que:– Todos los caminos al uso del RHS pasan por la
asignación del RHS como constante– No hay definiciones intermedias de la variable RHS
• Necesitamos saber el “control de flujo” del programa
![Page 54: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/54.jpg)
54
• Instrucciones Jump– Ejecutan una localidad diferente– Salto en el control de flujo
Representando el control de flujo del progama
• La mayoria de instrucciones – Se ejecuta la siguiente instrucción– Control de flujo es una linea recta
• Instrucciones Branch– Ejecutan ya sea la siguiente intrucción o una
localidad diferente– Fork en el control de flujo
![Page 55: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/55.jpg)
55
Representando el control de flujo del progama
• Forma un grafo
• Un grafo muy grande
• Observación– Muchas conexiones de línea recta– Simplificamos el grafo agrupando algunas
instrucciones
![Page 56: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/56.jpg)
56
Representando el control de flujo del progama
• Forma un grafo
• Un grafo muy grande
• Observación– Muchas conexiones de línea recta– Simplificamos el grafo agrupando algunas
instrucciones
![Page 57: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/57.jpg)
57
Representando el control de flujo del progama
• Forma un grafo
• Un grafo muy grande
• Observación– Muchas conexiones de línea recta– Simplificamos el grafo agrupando algunas
instrucciones
![Page 58: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/58.jpg)
58
Bloques Básicos
• Un bloque básico es una secuencia máxima de instrucciones tales que– Sólo la primera instruccion puede ser alcanzada
desde afuera del bloque básico– Si la primera instrucción es ejecutada, todas las
demás instrucciones son ejecutadas consecutivamente
• No hay instrucciones branch o jump en el bloque básico– Excepto en la última instruccion
• No hay etiquetas en el bloque básico– Excepto antes de la primera instrucción
![Page 59: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/59.jpg)
59
test:subu $fp, 16sw zero, 0($fp)
sw zero, 4($fp)
sw zero, 8($fp)
lab1:
mul $t0, $a0, 4
div $t1, $t0, $a1
lw $t2, 8($fp)
mul $t3, $t1, $t2
lw $t4, 8($fp)
addui $t4, $t4, 1lw $t5,
8($fp) addui $t5, $t5, 1
mul $t6, $t4, $t5 addu $t7, $t3, $t6
lw $t8, 0($fp) add $t8, $t7, $t8 sw $t8, 0($fp)lw $t0, 4($fp)
mul $t1, $t0, a1 lw $t2, 0($fp) add $t2, $t2, $t1 sw $t2, 0($fp)lw $t0, 8($fp)
addui $t0, $t0, 1 sw $t0, 8($fp)ble $t0, $a3, lab1
lw $v0, 0($fp)addu $fp, 16b $ra
![Page 60: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/60.jpg)
60
Control Flow Graph (CFG)• Control-Flow Graph G = <N, E>
• Nodes(N): Bloques Básicos
• Edges(E): (x,y) E ssi la primera instrucción en el bloque básico y sigue a una instrucción en el bloque básico x– Primera instrucción en y es el target de una
instrucción branch o jump (última instrucción) en el bloque básico x
– Primera instrucción de y es la siguiente a la última instrucción de x en memoria y la última instrucción de x no es una instrucción jump
![Page 61: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/61.jpg)
61
Control Flow Graph (CFG)
• El bloque con la primera instrucción de un procedimiento es un entry node (bloque con la etiqueta del procedimiento)
• Los bloques con la instrucción de retorno (jr) son los exit nodes– Se puede hacer un solo exit node agregando un
nodo especial
![Page 62: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/62.jpg)
62
¿Por qué hacerControl-flow Analysis?
• Es importante optimizar los loops– Los programas pasan mucho tiempo en loops y
ciclos recursivos– Se pueden hacer muchas optimizaciones
especiales en los loops
• Los programadores organizan el código usando estructuras de control de flujo (if-then-else, for-loops etc.)– Optimizador puede aprovecharse de esto– Pero hay que descubrirlos primero
![Page 63: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/63.jpg)
63
Retos en Control-Flow Analysis
• Control de flujo no estructurado– Uso de goto’s por el programador– Unica forma de construir ciertas
estructuras de control
L1: x = 0
if (y > 0) goto L3
L2: if (y < 0) goto L1
L3: y = y + z
goto L2
• Control de flujo obscurecido– Invocaciones de metodos– Variables de procedimiento– Funciones de alto orden– Tablas de jumps
Myobject->run()
![Page 64: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/64.jpg)
64
Construyendo CFGs
• Simple:– Programas son escritos usando control de flujo
estructurado– Tienen patrones simples de CFG
• ¡No es así!– Gotos pueden crear patrones de control de flujo
diferentes a lo que está dado por el control de flujo estructurado
– Necesitamos hacer análisis para identificar los verdaderos patrones de control de flujo
![Page 65: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/65.jpg)
65
Identificando loops de estructuras recursivas
bb1
bb2
bb4bb3
bb5
bb6
![Page 66: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/66.jpg)
66
Identificando loops de estructuras recursivas
• Identificar aristas de retornobb1
bb2
bb4bb3
bb5
bb6
![Page 67: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/67.jpg)
67
Identificando loops de estructuras recursivas
• Identificar aristas de retorno
• Encontrar los nodos y aristas en el loop dado por la arista de retorno
bb1
bb2
bb4bb3
bb5
bb6
![Page 68: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/68.jpg)
68
Identificando loops de estructuras recursivas
• Identificar aristas de retorno
• Encontrar los nodos y aristas en el loop dado por la arista de retorno
• Aparte de la arista de retorno– Aristas entrantes sólo al bloque
básico con la cabeza de la arista de retorno
– Una arista saliente del bloque básico a la cola de la arista de retorno
bb1
bb2
bb4bb3
bb5
bb6
![Page 69: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/69.jpg)
69
Identificando loops de estructuras recursivas
• Identificar aristas de retorno• Encontrar los nodos y aristas en el
loop dado por la arista de retorno• Aparte de la arista de retorno
– Aristas entrantes sólo al bloque básico con la cabeza de la arista de retorno
– Una arista saliente del bloque básico a la cola de la arista de retorno
• ¿Cómo encontramos las aristas de retorno?
bb1
bb2
bb4bb3
bb5
bb6
![Page 70: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/70.jpg)
70
Resumen
• Overview de Optimizaciones• Análisis de Control de Flujo• Dominators• Recorrido de Grafos• Grafos Reducibles• Análisis de Intervalos• Algunas Definiciones
5
![Page 71: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/71.jpg)
71
Dominators
• El nodo x domina al nodo y (x dom y) si todo camino de ejecución posible desde la entrada hasta el nodo y incluye el nodo x
![Page 72: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/72.jpg)
72
Dominators
• ¿Es bb1 dom bb5?
bb1
bb2
bb4bb3
bb5
bb6
![Page 73: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/73.jpg)
73
Dominators
• ¿Es bb1 dom bb5?
bb1
bb2
bb4bb3
bb5
bb6
![Page 74: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/74.jpg)
74
Dominators
• ¿Es bb1 dom bb5?
bb1
bb2
bb4bb3
bb5
bb6
![Page 75: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/75.jpg)
75
Dominators
• ¿Es bb1 dom bb5?
bb1
bb2
bb4bb3
bb5
bb6
![Page 76: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/76.jpg)
76
Dominators
• ¿Es bb1 dom bb5?
bb1
bb2
bb4bb3
bb5
bb6
![Page 77: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/77.jpg)
77
Dominators
• ¿Es bb1 dom bb5? ¡Sí!
bb1
bb2
bb4bb3
bb5
bb6
![Page 78: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/78.jpg)
78
Pregunta
• ¿Es bb1 dom bb5? ¡Sí!
• ¿Es bb3 dom bb6?bb1
bb2
bb4bb3
bb5
bb6
![Page 79: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/79.jpg)
79
Pregunta
• ¿Es bb1 dom bb5? ¡Sí!
• ¿Es bb3 dom bb6?bb1
bb2
bb4bb3
bb5
bb6
![Page 80: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/80.jpg)
80
Pregunta
• ¿Es bb1 dom bb5? ¡Sí!
• ¿Es bb3 dom bb6?bb1
bb2
bb4bb3
bb5
bb6
![Page 81: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/81.jpg)
81
Pregunta
• ¿Es bb1 dom bb5? ¡Sí!
• ¿Es bb3 dom bb6?bb1
bb2
bb4bb3
bb5
bb6
![Page 82: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/82.jpg)
82
Pregunta
• ¿Es bb1 dom bb5? ¡Sí!
• ¿Es bb3 dom bb6? ¡No!bb1
bb2
bb4bb3
bb5
bb6
![Page 83: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/83.jpg)
83
Dominators
bb1
bb2
bb4bb3
bb5
bb6
bb1bb2
{bb1}
bb1bb2bb3
bb1bb2bb4
bb1bb2bb5
bb1bb2bb5bb6
![Page 84: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/84.jpg)
84
Computando Dominators
• a dom b ssi– a = b o– a es el unico predecesor inmediato de b o– a es un dominador de todos los predecesores inmediatos de b
• Algoritmo– Hacer que el conjunto de dominators del nodo de entrada
sólo contenga ese nodo– Hacer que el conjunto de dominators del resto de los nodos
contenga todos los nodos– Visitar los nodos en cualquier orden– Hacer que el conjunto de dominators del nodo actual sea la
intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
![Page 85: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/85.jpg)
85
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
![Page 86: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/86.jpg)
86
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
![Page 87: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/87.jpg)
87
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
![Page 88: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/88.jpg)
88
Computando Dominators
bb1
bb2
bb4bb3
bb5
bb6
{bb1}
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
![Page 89: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/89.jpg)
89
Computando Dominators
bb1
bb2
bb4bb3
bb5
bb6
{bb1}
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
![Page 90: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/90.jpg)
90
Computando Dominators
bb1
bb2
bb4bb3
bb5
bb6
{bb1}
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2
![Page 91: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/91.jpg)
91
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2
bb1bb2bb3bb4bb5bb6
![Page 92: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/92.jpg)
92
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3
bb1bb2bb3bb4bb5bb6
bb1bb2
![Page 93: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/93.jpg)
93
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3
bb1bb2
bb1bb2bb3bb4bb5bb6
![Page 94: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/94.jpg)
94
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5
![Page 95: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/95.jpg)
95
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb3bb4bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5
![Page 96: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/96.jpg)
96
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb3bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5
![Page 97: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/97.jpg)
97
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb3bb5bb6
bb1bb2bb3bb4bb5bb6
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5
![Page 98: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/98.jpg)
98
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5bb6
bb1bb2bb3bb5
![Page 99: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/99.jpg)
99
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5bb6
bb1bb2bb3bb5
![Page 100: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/100.jpg)
100
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5bb6
bb1bb2bb3bb5
![Page 101: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/101.jpg)
101
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5bb6
bb1bb2bb3bb5
![Page 102: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/102.jpg)
102
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5bb6
bb1bb2bb3bb5
![Page 103: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/103.jpg)
103
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5bb6
bb1bb2bb3bb5
![Page 104: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/104.jpg)
104
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5bb6
bb1bb2bb5
![Page 105: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/105.jpg)
105
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb3bb5bb6
bb1bb2bb5
![Page 106: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/106.jpg)
106
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
![Page 107: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/107.jpg)
107
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
![Page 108: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/108.jpg)
108
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
![Page 109: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/109.jpg)
109
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
![Page 110: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/110.jpg)
110
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
![Page 111: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/111.jpg)
111
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
![Page 112: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/112.jpg)
112
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
![Page 113: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/113.jpg)
113
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
![Page 114: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/114.jpg)
114
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
![Page 115: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/115.jpg)
115
Computando Dominators
bb2
bb4bb3
bb5
bb6
{bb1} bb1
• Algoritmo– Hacer que el conjunto de
dominators del nodo de entrada sólo contenga ese nodo
– Hacer que el conjunto de dominators del resto de los nodos contenga todos los nodos
– Visitar los nodos en cualquier orden
– Hacer que el conjunto de dominators del nodo actual sea la intersección del conjunto de dominators del nodo predecesor y el nodo actual
– Repetir hasta que no hayan cambios
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
![Page 116: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/116.jpg)
116
Computando Dominators
• Lo que vimos fue un algoritmo iterativo de análisis de flujo de datos en acción– Inicializa todos los nodos a un valor dado– Visita los nodos en algún orden– Calcula el valor del nodo– Se repite hasta que no cambie ningún valor
• Vamos a hablar de esto en la próxima clase
![Page 117: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/117.jpg)
117
¿Qué es una arista de retorno?
• Un edge (x, y) E es una arista de retorno ssi y dom x– el nodo y está en el
conjunto de dominators del nodo x
![Page 118: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/118.jpg)
118
¿Qué es una arista de retorno?
• Un edge (x, y) E es una arista de retorno ssi y dom x– el nodo y está en el
conjunto de dominators del nodo x
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
![Page 119: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/119.jpg)
119
¿Qué es una arista de retorno?
• Un edge (x, y) E es una arista de retorno ssi y dom x– el nodo y está en el
conjunto de dominators del nodo x
bb2
bb4bb3
bb5
bb6
{bb1} bb1
bb1bb2bb4
bb1bb2bb3
bb1bb2
bb1bb2bb5bb6
bb1bb2bb5
![Page 120: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/120.jpg)
120
Resumen
• Overview de Optimizaciones• Análisis de Control de Flujo• Dominators• Recorrido de Grafos• Grafos Reducibles• Análisis de Intervalos• Algunas Definiciones
5
![Page 121: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/121.jpg)
121
Recorriendo el CFG
• Depth-First Traversal – Visita todos los descendientes del nodo ántes de
visitar a los hermanos
• Depth-first spanning tree– Un conjunto de aristas correspondientes a una visita
depth-first del CFG
![Page 122: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/122.jpg)
122
Depth-First Spanning Tree
bb2
bb4bb3
bb5
bb6
bb1
![Page 123: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/123.jpg)
123
Preorder y Postorder
• En recorrido preorder, cada nodo es procesado antes que sus descendientes en el árbol depth-first
• En recorrido postorder, cada nodo es procesado después que sus descendientes en el árbol depth-first
![Page 124: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/124.jpg)
124
Resumen
• Overview de Optimizaciones• Análisis de Control de Flujo• Dominators• Recorrido de Grafos• Grafos Reducibles• Análisis de Intervalos• Algunas Definiciones
5
![Page 125: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/125.jpg)
125
CFGs Reducibles
• La reducibilidad formaliza la buena estructuración de un programa
• Un grafo es reducible ssi aplicar múltiples veces las siguientes dos acciones resulta en un grafo con un solo nodo– Reemplazar loops a él mismo con un solo nodo– Reemplazar una secuencia de nodos en la que todas
las aristas entrantes son al primer nodo y todas las aristas salientes son del último nodo, por un solo nodo.
![Page 126: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/126.jpg)
126
CFGs Reducibles
bb2
bb4bb3
bb5
bb6
bb1
bb2
bb4bb3
bb5
bb6
bb1
![Page 127: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/127.jpg)
127
CFGs Reducibles
bb2
bb4bb3
bb5
bb6
bb1
bb6
bb1
bb2
bb4bb3
bb5
![Page 128: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/128.jpg)
128
CFGs Reducibles
bb2
bb4bb3
bb5
bb6
bb1
bb2x
bb6
bb1
![Page 129: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/129.jpg)
129
CFGs Reducibles
bb6
bb1
bb2
bb4bb3
bb5bb6
bb1
bb2x
![Page 130: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/130.jpg)
130
CFGs Reducibles
bb6
bb1
bb2
bb4bb3
bb5
bb2x
bb6
bb1
![Page 131: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/131.jpg)
131
CFGs Reducibles
bb6
bb1
bb2
bb4bb3
bb5
bb2y
bb6
bb1
![Page 132: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/132.jpg)
132
CFGs Reducibles
bb6
bb1
bb2
bb4bb3
bb5bb6
bb1
bb2y
![Page 133: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/133.jpg)
133
CFGs Reducibles
bb6
bb1
bb2
bb4bb3
bb5bb6
bb1
bb2y
![Page 134: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/134.jpg)
134
CFGs Reducibles
bb6
bb1
bb2
bb4bb3
bb5bb6
bb1
bb1z
![Page 135: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/135.jpg)
135
CFGs Reducibles
bb6
bb1
bb2
bb4bb3
bb5
bb1z
![Page 136: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/136.jpg)
136
Grafos Irreducibles
![Page 137: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/137.jpg)
137
Grafos Irreducibles
![Page 138: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/138.jpg)
138
Resumen
• Overview de Optimizaciones• Análisis de Control de Flujo• Dominators• Recorrido de Grafos• Grafos Reducibles• Análisis de Intervalos• Algunas Definiciones
5
![Page 139: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/139.jpg)
139
Approaches para análisis de control de flujo
• Análisis Iterativo– Usar un CFG– Propagar valores– Iterar hasta que no hayan cambios
• Análisis Basado en Intervalos– Usar un CFG reducible– Calcular en grafos jerárquicos– No hay iteraciones (más rápido)
![Page 140: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/140.jpg)
140
Análisis Basado en Intervalos
• Si un nodo no incluye un grafo:– Calcular el valor
• Si un nodo incluye un grafo– Calcular valores de los nodos en el grafo– Propagar valores (no aristas de retorno no
iteracion)– Usar valor de entrada (o salida) como valor del
nodo que contiene este grafo
![Page 141: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/141.jpg)
141
Análisis Basado en Intervalos
bb6
bb1
bb2
bb4bb3
bb5
![Page 142: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/142.jpg)
142
Análisis Basado en Intervalos
bb6
bb1
bb2
bb4bb3
bb5
![Page 143: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/143.jpg)
143
Análisis Basado en Intervalos
bb6
bb1
![Page 144: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/144.jpg)
144
Análisis Basado en Intervalos
bb6
bb1
![Page 145: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/145.jpg)
145
Análisis Basado en Intervalos
bb6
bb1
![Page 146: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/146.jpg)
146
Análisis Basado en Intervalos
![Page 147: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/147.jpg)
147
Resumen
• Overview de Optimizaciones• Análisis de Control de Flujo• Dominators• Recorrido de Grafos• Grafos Reducibles• Análisis de Intervalos• Algunas Definiciones
5
![Page 148: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/148.jpg)
148
Dominators
• Nodo x domina al nodo y (x dom y) si todo camino de ejecución posible desde la entrada hasta el nodo y incluye al nodo x
bb1
bb2
bb4bb3
bb5
bb6
bb1bb2
{bb1}
bb1bb2bb3
bb1bb2bb4
bb1bb2bb5
bb1bb2bb5bb6
![Page 149: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/149.jpg)
149
Dominators
• Nodo x domina estrictamente al nodo y (x sdom y) si– x dom y– x y bb1
bb2
bb4bb3
bb5
bb6
bb1
{}
bb1bb2
bb1bb2
bb1bb2
bb1bb2bb5
![Page 150: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/150.jpg)
150
Dominators
• Nodo x domina inmediatamente al nodo y (x idom y) si – x dom y– x y– c N tal que
c x & c y & x dom c & c dom y
bb1
bb2
bb4bb3
bb5
bb6
bb1
{}
bb2 bb2
bb2
bb5
![Page 151: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/151.jpg)
151
Dominators
• Nodo x post domina al nodo y (x pdom y) si todo camino de ejecucion posible desde el nodo y hasta el nodo de salida incluye al nodo x bb1
bb2
bb4bb3
bb5
bb6
bb6bb5bb2
bb6bb5bb3
bb6bb5bb4
bb6bb5
bb6
bb6bb5bb2bb1
![Page 152: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/152.jpg)
152
Dominators(dom)
bb1
bb4
bb6
bb5
bb8
bb9
bb0bb1bb4
bb0bb1bb4bb5
bb0bb1bb4bb6
bb0bb1bb4bb8
bb0bb1bb4bb8bb9
bb0bb1
bb0bb0
bb3bb0bb1bb2bb3
bb2bb0bb1bb2
bb7bb0bb1bb4bb6bb7
![Page 153: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/153.jpg)
153
Strictly Dominates(sdom)
bb1
bb4
bb6
bb5
bb8
bb9
bb0bb1
bb0bb1bb4
bb0bb1bb4
bb0bb1bb4
bb0bb1bb4bb8
bb0
bb0
bb3bb0bb1bb2
bb2bb0bb1
bb7bb0bb1bb4bb6
![Page 154: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/154.jpg)
154
Immediately Dominates
(idom) bb1
bb4
bb6
bb5
bb8
bb9
bb0
bb0
bb3
bb2
bb7
bb1
bb2
bb1
bb4
bb4
bb8
bb4
bb6
![Page 155: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/155.jpg)
155
Post Dominators(pdom)
bb1
bb4
bb6
bb5
bb8
bb9
bb4bb8bb9
bb5bb8bb9
bb6bb7bb8bb9
bb8bb9
bb9
bb1bb4bb8bb9
bb0
bb0bb1bb4bb8bb9
bb3bb1bb3bb4bb8bb9
bb2
bb1bb2bb3bb8bb9
bb7bb7bb8bb9
![Page 156: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/156.jpg)
156
Bloques Básicos• Un bloque básico es una secuencia
máxima de instrucciones tal que– Sólo la primera instrucción puede
alcanzarse desde fuera del bloque
– Si la primera instrucción es ejecutada, todas las demás instrucciones son ejecutadas consecutivamente
• No instrucciones branch ni jump en el bloque básico
– Excepto la última instruccion
• No etiquetas dentro del bloque básico– Excepto antes de la primera instrucción
![Page 157: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/157.jpg)
157
Bloques Básicos• Un bloque básico es una secuencia
máxima de instrucciones tal que– Sólo la primera instrucción puede
alcanzarse desde fuera del bloque
– Si la primera instrucción es ejecutada, todas las demás instrucciones son ejecutadas consecutivamente
• No instrucciones branch ni jump en el bloque básico
– Excepto la última instruccion
• No etiquetas dentro del bloque básico– Excepto antes de la primera instrucción
![Page 158: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/158.jpg)
158
Bloques Básicos Extendidos• Un bloque básico extendido es una
secuencia máxima de instrucciones tal que– Sólo la primera instrucción puede
alcanzarse desde fuera del bloque• No etiquetas dentro del bloque básico
excepto ántes de la primera instrucción
![Page 159: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/159.jpg)
159
Bloques Básicos Extendidos• Un bloque básico extendido es una
secuencia máxima de instrucciones tal que– Sólo la primera instrucción puede
alcanzarse desde fuera del bloque• No etiquetas dentro del bloque básico
excepto ántes de la primera instrucción
![Page 160: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/160.jpg)
160
Bloques Básicos Extendidos• Un bloque básico extendido es una
secuencia máxima de instrucciones tal que– Sólo la primera instrucción puede
alcanzarse desde fuera del bloque• No etiquetas dentro del bloque básico
excepto ántes de la primera instrucción
![Page 161: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/161.jpg)
161
Bloques Básicos Extendidos• Un bloque básico extendido es una
secuencia máxima de instrucciones tal que– Sólo la primera instrucción puede
alcanzarse desde fuera del bloque• No etiquetas dentro del bloque básico
excepto ántes de la primera instrucción
• Rearreglamos el grafo para reducir el número de bloques básicos
![Page 162: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/162.jpg)
162
Bloques Básicos Extendidos• Un bloque básico extendido es una
secuencia máxima de instrucciones tal que– Sólo la primera instrucción puede
alcanzarse desde fuera del bloque• No etiquetas dentro del bloque básico
excepto ántes de la primera instrucción
• Rearreglamos el grafo para reducir el número de bloques básicos
![Page 163: Análisis de Control de Flujo](https://reader036.fdocuments.ec/reader036/viewer/2022081417/568146af550346895db3cb57/html5/thumbnails/163.jpg)
163
Lecturas
• Ballena– Capitulo 8
• Dragon– Capitulos 10.5, 10.6