An - PowerPoint PPT Presentation

About This Presentation
Title:

An

Description:

An lisis de Control de Flujo Resumen Overview de Optimizaciones An lisis de Control de Flujo Dominators Recorrido de Grafos Grafos Reducibles An lisis de ... – PowerPoint PPT presentation

Number of Views:60
Avg rating:3.0/5.0
Slides: 164
Provided by: OscarB67
Category:
Tags: mismo | overview

less

Transcript and Presenter's Notes

Title: An


1
Análisis de Control de Flujo
2
Resumen
5
  • Overview de Optimizaciones
  • Análisis de Control de Flujo
  • Dominators
  • Recorrido de Grafos
  • Grafos Reducibles
  • Análisis de Intervalos
  • Algunas Definiciones

3
Anatomía de un Compilador
Arbol de Parseo
4
Ejemplo
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • x x (4a/b)i (i1)(i1)
  • x x by
  • return x

5
6
  • test
  • subu fp, 16
  • sw zero, 0(fp) x 0
  • sw zero, 4(fp) y 0
  • sw zero, 8(fp) i 0
  • lab1 for(i0iltN i)
  • mul t0, a0, 4 a4
  • div t1, t0, a1 a4/b
  • lw t2, 8(fp) i
  • mul t3, t1, t2 a4/bi
  • lw t4, 8(fp) i
  • adduit4, t4, 1 i1
  • lw t5, 8(fp) i
  • adduit5, t5, 1 i1
  • mul t6, t4, t5 (i1)(i1)
  • addu t7, t3, t6 a4/bi (i1)(i1)
  • lw t8, 0(fp) x
  • add t8, t7, t8 x x a4/bi
    (i1)(i1)
  • sw t8, 0(fp)

6
6
  • ...
  • lw t0, 4(fp) y
  • mul t1, t0, a1 by
  • lw t2, 0(fp) x
  • add t2, t2, t1 x x by
  • sw t2, 0(fp)
  • lw t0, 8(fp) i
  • adduit0, t0, 1 i1
  • sw t0, 8(fp)
  • ble t0, a3, lab1
  • lw v0, 0(fp)
  • addu fp, 16
  • b ra

7
Optimicemos...
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • x x (4a/b)i (i1)(i1)
  • x x by
  • return x

8
Constant Propagation
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • x x (4a/b)i (i1)(i1)
  • x x by
  • return x

9
Constant Propagation
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • x x (4a/b)i (i1)(i1)
  • x x by
  • return x

10
Constant Propagation
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • x x (4a/b)i (i1)(i1)
  • x x by
  • return x

11
Constant Propagation
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • x x (4a/b)i (i1)(i1)
  • x x b0
  • return x

12
Algebraic Simplification
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • x x (4a/b)i (i1)(i1)
  • x x b0
  • return x

13
Algebraic Simplification
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • x x (4a/b)i (i1)(i1)
  • x x b0
  • return x

14
Algebraic Simplification
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • x x (4a/b)i (i1)(i1)
  • x x 0
  • return x

15
Algebraic Simplification
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • x x (4a/b)i (i1)(i1)
  • x x 0
  • return x

16
Algebraic Simplification
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • x x (4a/b)i (i1)(i1)
  • x x 0
  • return x

17
Algebraic Simplification
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • x x (4a/b)i (i1)(i1)
  • x x
  • return x

18
Copy Propagation
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • x x (4a/b)i (i1)(i1)
  • x x
  • return x

19
Copy Propagation
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • x x (4a/b)i (i1)(i1)
  • return x

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 lt N i)
  • x x (4a/b)i (i1)(i1)
  • return x

21
Common Subexpression Elimination
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • x x (4a/b)i (i1)(i1)
  • return x

22
Common Subexpression Elimination
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y, t
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • t i1
  • x x (4a/b)i (i1)(i1)
  • return x

23
Common Subexpression Elimination
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y, t
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • t i1
  • x x (4a/b)i tt
  • return x

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 lt N i)
  • t i1
  • x x (4a/b)i tt
  • return x

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 lt N i)
  • t i1
  • x x (4a/b)i tt
  • return x

26
Dead Code Elimination
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y, t
  • x 0
  • for(i 0 i lt N i)
  • t i1
  • x x (4a/b)i tt
  • return x

27
Dead Code Elimination
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, t
  • x 0
  • for(i 0 i lt N i)
  • t i1
  • x x (4a/b)i tt
  • return x

28
Loop Invariant Removal
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, t
  • x 0
  • for(i 0 i lt N i)
  • t i1
  • x x (4a/b)i tt
  • return x

29
Loop Invariant Removal
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, t
  • x 0
  • for(i 0 i lt N i)
  • t i1
  • x x (4a/b)i tt
  • return x

30
Loop Invariant Removal
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, t, u
  • x 0
  • u (4a/b)
  • for(i 0 i lt N i)
  • t i1
  • x x ui tt
  • return x

31
Strength Reduction
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, t, u
  • x 0
  • u (4a/b)
  • for(i 0 i lt N i)
  • t i1
  • x x ui tt
  • return x

32
Strength Reduction
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, t, u
  • x 0
  • u (4a/b)
  • for(i 0 i lt N i)
  • t i1
  • x x ui tt
  • return x

u0, u1, u2, u3, u4, ...
v0, vvu, vvu, vvu, vvu, ...
33
Strength Reduction
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, t, u, v
  • x 0
  • u (4a/b)
  • v 0
  • for(i 0 i lt N i)
  • t i1
  • x x ui tt
  • v v u
  • return x

34
Strength Reduction
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, t, u, v
  • x 0
  • u (4a/b)
  • v 0
  • for(i 0 i lt N i)
  • t i1
  • x x v tt
  • v v u
  • return x

35
Strength Reduction
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, t, u, v
  • x 0
  • u (4a/b)
  • v 0
  • for(i 0 i lt N i)
  • t i1
  • x x v tt
  • v v u
  • return x

36
Strength Reduction
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, t, u, v
  • x 0
  • u (4a/b)
  • v 0
  • for(i 0 i lt N i)
  • t i1
  • x x v tt
  • v v u
  • return x

37
Strength Reduction
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, t, u, v
  • x 0
  • u ((altlt2)/b)
  • v 0
  • for(i 0 i lt N i)
  • t i1
  • x x v tt
  • v v u
  • return x

38
Register Allocation
39
Register Allocation
fp
  • t9 X
  • t8 t
  • t7 u
  • t6 v
  • t5 i

40
Ejemplo Optimizado
11
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, t, u, v
  • x 0
  • u ((altlt2)/b)
  • v 0
  • for(i 0 i lt N i)
  • t i1
  • x x v tt
  • v v u
  • return x

41
  • test
  • subu fp, 16
  • add t9, zero, zero x 0
  • sll t0, a0, 2 altlt2
  • div t7, t0, a1 u (altlt2)/b
  • add t6, zero, zero v 0
  • add t5, zero, zero i 0
  • lab1 for(i0iltN i)
  • adduit8, t5, 1 t i1
  • mul t0, t8, t8 tt
  • addu t1, t0, t6 v tt
  • addu t9, t9, t1 x x v tt
  • addu 6, 6, 7 v v u
  • adduit5, t5, 1 i i1
  • ble t5, a3, lab1

42
Codigo No Optimizado
Codigo Optimizado
  • test
  • subu fp, 16
  • add t9, zero, zero
  • sll t0, a0, 2
  • div 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, zero
  • addu fp, 16
  • b ra

43
Pregunta Pueden Optimizar...
12
  • int foobar(int N)
  • int i, j, k, x, y
  • x 0
  • y 0
  • k 256
  • for(i 0 i lt N i)
  • for(j i1 j lt N j)
  • x x 4(2ij)(i2k)
  • if(igtj)
  • y y 8(i-j)
  • else
  • y y 8(j-i)
  • return x

44
Pregunta Pueden Optimizar...
19
  • int foobar(int N)
  • int i, j, k, x, y
  • x 0
  • y 0
  • k 256
  • for(i 0 i lt N i)
  • for(j i1 j lt N j)
  • x x8ii4096ij(4i2048)
  • return x

45
Pregunta Pueden Optimizar...
  • int foobar(int N)
  • int i, j, x, t0, t1
  • x 0
  • t1 2048
  • for(i 0 i lt N-1 i)
  • t0 (ii)ltlt3 iltlt12
  • x x (N-i)t0
  • for(j i1 j lt N j)
  • x x t1j
  • t1 t1 4
  • return x

46
Pregunta Pueden Optimizar...
  • int foobar(int N)
  • int i, j, x, t0, t1
  • x 0
  • t1 1024
  • for(i 0 i lt N-1 i)
  • t0 (ii)ltlt3 iltlt12
  • x x (N-i)t0 t1(N(N1)-i(i1))
  • t1 t1 2
  • return x

47
Pregunta Pueden Optimizar...
19
  • Rendimiento
  • Programa Original 17,670 ciclos
  • Programa Optimizado 2,204 ciclos
  • Viabilidad
  • Hicimos algunas optimizaciones bastante agresivas
  • Puede gcc hacer estas optimizaciones?

48
Resumen
5
  • Overview de Optimizaciones
  • Análisis de Control de Flujo
  • Dominators
  • Recorrido de Grafos
  • Grafos Reducibles
  • Análisis de Intervalos
  • Algunas Definiciones

49
Constant Propagation
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • x x (4a/b)i (i1)(i1)
  • x x by
  • return x

50
Constant Propagation
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • x x (4a/b)i (i1)(i1)
  • x x by
  • return x

51
Constant Propagation
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • x x (4a/b)i (i1)(i1)
  • x x by
  • return x

52
Constant Propagation
  • int sumcalc(int a, int b, int N)
  • int i
  • int x, y
  • x 0
  • y 0
  • for(i 0 i lt N i)
  • x x (4a/b)i (i1)(i1)
  • x x b0
  • return x

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

54
Representando el control de flujo del progama
55
Representando el control de flujo del progama
  • Forma un grafo

56
Representando el control de flujo del progama
  • Forma un grafo

57
Representando el control de flujo del progama
  • Forma un grafo

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

59
(No Transcript)
60
Control Flow Graph (CFG)
  • Control-Flow Graph G ltN, Egt
  • 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

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

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

63
Retos en Control-Flow Analysis
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

65
Identificando loops de estructuras recursivas
66
Identificando loops de estructuras recursivas
  • Identificar aristas de retorno

67
Identificando loops de estructuras recursivas
  • Identificar aristas de retorno
  • Encontrar los nodos y aristas en el loop dado por
    la arista de retorno

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

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?

70
Resumen
5
  • Overview de Optimizaciones
  • Análisis de Control de Flujo
  • Dominators
  • Recorrido de Grafos
  • Grafos Reducibles
  • Análisis de Intervalos
  • Algunas Definiciones

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

72
Dominators
  • Es bb1 dom bb5?

73
Dominators
  • Es bb1 dom bb5?

74
Dominators
  • Es bb1 dom bb5?

75
Dominators
  • Es bb1 dom bb5?

76
Dominators
  • Es bb1 dom bb5?

77
Dominators
  • Es bb1 dom bb5? Sí!

78
Pregunta
  • Es bb1 dom bb5? Sí!
  • Es bb3 dom bb6?

79
Pregunta
  • Es bb1 dom bb5? Sí!
  • Es bb3 dom bb6?

80
Pregunta
  • Es bb1 dom bb5? Sí!
  • Es bb3 dom bb6?

81
Pregunta
  • Es bb1 dom bb5? Sí!
  • Es bb3 dom bb6?

82
Pregunta
  • Es bb1 dom bb5? Sí!
  • Es bb3 dom bb6? No!

83
Dominators
bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb5
bb1 bb2 bb5 bb6
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

85
Computando Dominators
  • 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

bb1
86
Computando Dominators
  • 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

bb1
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
87
Computando Dominators
  • 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

bb1
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
88
Computando Dominators
  • 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

bb1
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
89
Computando Dominators
  • 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

bb1
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
90
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
91
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
92
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
93
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3 bb4 bb5 bb6
94
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3
bb1 bb2 bb3 bb5
bb1 bb2 bb3 bb4 bb5 bb6
95
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3
bb1 bb2 bb3 bb5
bb1 bb2 bb3 bb4 bb5 bb6
96
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3
bb1 bb2 bb3 bb5
bb1 bb2 bb3 bb5 bb6
97
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb3 bb4 bb5 bb6
bb1 bb2 bb3
bb1 bb2 bb3 bb5
bb1 bb2 bb3 bb5 bb6
98
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb3 bb5
bb1 bb2 bb3 bb5 bb6
99
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb3 bb5
bb1 bb2 bb3 bb5 bb6
100
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb3 bb5
bb1 bb2 bb3 bb5 bb6
101
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb3 bb5
bb1 bb2 bb3 bb5 bb6
102
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb3 bb5
bb1 bb2 bb3 bb5 bb6
103
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb3 bb5
bb1 bb2 bb3 bb5 bb6
104
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb5
bb1 bb2 bb3 bb5 bb6
105
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb5
bb1 bb2 bb3 bb5 bb6
106
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb5
bb1 bb2 bb5 bb6
107
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb5
bb1 bb2 bb5 bb6
108
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb5
bb1 bb2 bb5 bb6
109
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb5
bb1 bb2 bb5 bb6
110
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb5
bb1 bb2 bb5 bb6
111
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb5
bb1 bb2 bb5 bb6
112
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb5
bb1 bb2 bb5 bb6
113
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb5
bb1 bb2 bb5 bb6
114
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb5
bb1 bb2 bb5 bb6
115
Computando Dominators
  • 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

bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb5
bb1 bb2 bb5 bb6
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

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

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

bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb5
bb1 bb2 bb5 bb6
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

bb1
bb1 bb2
bb1 bb2 bb4
bb1 bb2 bb3
bb1 bb2 bb5
bb1 bb2 bb5 bb6
120
Resumen
5
  • Overview de Optimizaciones
  • Análisis de Control de Flujo
  • Dominators
  • Recorrido de Grafos
  • Grafos Reducibles
  • Análisis de Intervalos
  • Algunas Definiciones

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

122
Depth-First Spanning Tree
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

124
Resumen
5
  • Overview de Optimizaciones
  • Análisis de Control de Flujo
  • Dominators
  • Recorrido de Grafos
  • Grafos Reducibles
  • Análisis de Intervalos
  • Algunas Definiciones

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.

126
CFGs Reducibles
127
CFGs Reducibles
128
CFGs Reducibles
129
CFGs Reducibles
130
CFGs Reducibles
131
CFGs Reducibles
132
CFGs Reducibles
133
CFGs Reducibles
134
CFGs Reducibles
135
CFGs Reducibles
136
Grafos Irreducibles
137
Grafos Irreducibles
138
Resumen
5
  • Overview de Optimizaciones
  • Análisis de Control de Flujo
  • Dominators
  • Recorrido de Grafos
  • Grafos Reducibles
  • Análisis de Intervalos
  • Algunas Definiciones

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)

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

141
Análisis Basado en Intervalos
142
Análisis Basado en Intervalos
143
Análisis Basado en Intervalos
144
Análisis Basado en Intervalos
145
Análisis Basado en Intervalos
146
Análisis Basado en Intervalos
147
Resumen
5
  • Overview de Optimizaciones
  • Análisis de Control de Flujo
  • Dominators
  • Recorrido de Grafos
  • Grafos Reducibles
  • Análisis de Intervalos
  • Algunas Definiciones

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

149
Dominators
  • Nodo x domina estrictamente al nodo y (x sdom y)
    si
  • x dom y
  • x ? y


bb1
bb1 bb2
bb1 bb2
bb1 bb2
bb1 bb2 bb5
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
bb2
bb2
bb5
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

bb6 bb5 bb2 bb1
bb6 bb5 bb2
bb6 bb5 bb4
bb6 bb5 bb3
bb6 bb5
bb6
152
Dominators(dom)
bb0
bb0 bb1
bb0 bb1 bb4
bb0 bb1 bb2
bb0 bb1 bb4 bb6
bb0 bb1 bb2 bb3
bb0 bb1 bb4 bb5
bb0 bb1 bb4 bb6 bb7
bb0 bb1 bb4 bb8
bb0 bb1 bb4 bb8 bb9
153
Strictly Dominates(sdom)
bb0
bb0 bb1
bb0 bb1
bb0 bb1 bb4
bb0 bb1 bb2
bb0 bb1 bb4
bb0 bb1 bb4 bb6
bb0 bb1 bb4
bb0 bb1 bb4 bb8
154
Immediately Dominates(idom)
bb0
bb1
bb2
bb4
155
Post Dominators(pdom)
bb0 bb1 bb4 bb8 bb9
bb1 bb4 bb8 bb9
bb4 bb8 bb9
bb1 bb2 bb3 bb8 bb9
bb6 bb7 bb8 bb9
bb1 bb3 bb4 bb8 bb9
bb5 bb8 bb9
bb7 bb8 bb9
bb8 bb9
bb9
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

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

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

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

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

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

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

163
Lecturas
  • Ballena
  • Capitulo 8
  • Dragon
  • Capitulos 10.5, 10.6
Write a Comment
User Comments (0)
About PowerShow.com