La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Reaching Definitions. Tino CortesiTecniche di Analisi di Programmi 2 Reaching definitions Dato un punto del programma, quali sono i comandi di assegnamento.

Presentazioni simili


Presentazione sul tema: "Reaching Definitions. Tino CortesiTecniche di Analisi di Programmi 2 Reaching definitions Dato un punto del programma, quali sono i comandi di assegnamento."— Transcript della presentazione:

1 Reaching Definitions

2 Tino CortesiTecniche di Analisi di Programmi 2 Reaching definitions Dato un punto del programma, quali sono i comandi di assegnamento (definizioni) che sono attuali quando la computazione raggiunge quel punto? Un punto del programma può uccidere una definizione: se il comando associato è un assegnamento, vengono uccisi gli altri assegnamenti alla stessa variabile Un punto del programma può generare nuove definizioni.

3 Tino CortesiTecniche di Analisi di Programmi 3 Formalizzazione La proprietà di interesse può essere rappresentata da insiemi di coppie {(x,p) | x è una variabile del programma p è un punto del programma} Il significato della coppia (x,p) nellinsieme associato al punto q è che lassegnamento di x nel punto p raggiunge il punto q.

4 Tino CortesiTecniche di Analisi di Programmi 4 Si tratta di unanalisi in avanti (forward analysis) Il valore iniziale è = {(x,?) | x è una variabile del programma} Percorrendo il grafo di flusso, ad ogni punto dovremo togliere le definizioni uccise e aggiungere quelle generate.

5 Tino CortesiTecniche di Analisi di Programmi 5 Specifica Lanalisi può essere specificata dalle seguenti equazioni: Per ogni punto p del programma... se p è il punto iniziale RD entry (p)= U { RD exit (q) | q precede p} RD exit (p)= (RD entry ( p ) \ kill RD (p) ) U gen RD (p)

6 Tino CortesiTecniche di Analisi di Programmi 6 RD entry (1)= {(n,?),(m,?)} RD exit (1) = {(n,?),(m,?)} RD entry (2)= {(n,?),(m,?)} RD exit (2)= {(n,?),(m,2)} RD entry (3)= RD exit (2) U RD exit (5) ={(n,?),(n,5),(m,2),(m,4)} RD exit (3)= {(n,?),(n,5),(m,2),(m,4)} RD entry (4)= {(n,?),(n,5),(m,2),(m,4)} RD exit (4)= {(n,?),(n,5),(m,4)} RD entry (5)= {(n,?),(n,5),(m,4)} RD exit (5)= {(n,5),(m,4)} RD entry (6)= {(n,?),(n,5),(m,2),(m,4)} RD exit (6)= {(n,?),(n,5),(m,2),(m,4)} input n; m:= 1; n>1; m:= m*n; n:= n-1; output m; 1 2 3 4 5 6

7 Tino CortesiTecniche di Analisi di Programmi 7 Algoritmo Input: grafo di controllo del programma Output : RD Strategia: Passo 1 (inizializzazione): assegna linsieme vuoto a RD entry (p) per ogni p RD entry (1) = = {(x,?) | x è una variabile del programma}

8 Tino CortesiTecniche di Analisi di Programmi 8 Passo 2 (iterazione) novità=TRUE; while novità novità = FALSE; per ogni punto p del programma new= U{f(RD,q) | (q,p) è un arco del grafo} if RD entry (p) != new novità = TRUE; RD entry (p) = new; dove f(RD,q)= (RD entry (q) \ kill RD (q) ) U gen RD (q)

9 Tino CortesiTecniche di Analisi di Programmi 9 Esempio RD entry (1)= {(n,?), (m,?)} RD entry (2)= {(n,?), (m,?)} RD entry (3)= {(n,?), (n,5), (m,2), (m,4)} RD entry (4)= {(n,?), (n,5), (m,4)} RD entry (5)= {(n,5), (m,4)} RD entry (6)= {(n,?), (n,5), (m,2), (m,4)} [ input n; ] 1 [ m:= 1; ] 2 [ while n>1 do ] 3 [ m:= m * n; ] 4 [ n:= n - 1; ] 5 [ output m; ] 6

10 Constant Folding

11 Tino CortesiTecniche di Analisi di Programmi 11 Constant Folding Constant Folding è una tecnica di trasformazione source-to-source: sulla base dellinformazione disponibile dallanalisi, il programma viene modificato in un programma più efficiente. Ci sono due ingredienti fondamentali: Sostituire luso di una variabile in certe espressioni con una costante se è noto che il valore di quella variabile assumerà sempre quel valore costante Semplificare le espressioni valutandole parzialmente: si possono valutare (a tempo di compilazione) sottoespressioni che non contengono variabili

12 Tino CortesiTecniche di Analisi di Programmi 12 Trasformazioni Trasformazioni di tipo Constant Folding possono essere realizzate sulla base di una Reaching Definitions Analysis. Dato un programma S*, consideriamo la minima soluzione RD della Reaching Definition Analysis per S*. Ogni comando S di S* può essere sostituito da un comando migliore S. Esprimiamo questo con la notazione: RD | S S

13 Tino CortesiTecniche di Analisi di Programmi 13 Regola 1 1. RD | [x := a] [x := a[y n]] se y FV(a) (y,?) RD entry ( ) per ogni (z, ) RD entry ( ): ( z=y [...] è [y:=n] ) Questa regola dice che una variabile può essere sostituita da una costante se si sa che la variabile avrà sempre quel valore. a[y n] significa che nellespressione a la variabile y è sostituita con il valore n FV(a) sono le variabili libere nellespressione a.

14 Tino CortesiTecniche di Analisi di Programmi 14 Regola 2 2. RD | [x := a] [x := n] se FV(a)= a Num il valore di a è n Questa regola dice che una espressione può essere valutata parzialmente se non contiene nessuna variabile libera, in quanto in questo caso assumerà sempre lo stesso valore

15 Tino CortesiTecniche di Analisi di Programmi 15 Regole di composizione 3. RD | S S RD | S ; S S ; S 4. RD | S S RD | S ; S S ; S Queste regole dicono come la trasformazione di un sottocomando (in questo caso di un comando sequenziale) può essere estesa allintero comando

16 Tino CortesiTecniche di Analisi di Programmi 16 Regole di composizione 5. RD | S S RD | if [b] then S else S if [b] then S else S 6. RD | S S RD | if [b] then S else S if [b] then S else S 7. RD | S S RD | while [b] do S while [b] do S

17 Tino CortesiTecniche di Analisi di Programmi 17 Esempio Il programma [x:=10] 1 ; [y:=x+10] 2 ; [z:=y+10] 3 ; La minima soluzione della Reaching Definition Analysis di questo programma è: RD entry (1) = {(x,?),(y,?),(z,?)} RD exit (1) = {(x,1),(y,?),(z,?)} RD entry (2) = {(x,1),(y,?),(z,?)} RD exit (2) = {(x,1),(y,2),(z,?)} RD entry (3) = {(x,1),(y,2),(z,?)} RD exit (3) = {(x,1),(y,2),(z,3)}

18 Tino CortesiTecniche di Analisi di Programmi 18 Utilizzando RD così calcolato, possiamo applicare le regole di trasformazione ed ottenere: RD | [x:=10] 1 ; [y:=x+10] 2 ; [z:=y+10] 3 [x:=10] 1 ; [y:=10+10] 2 ; [z:=y+10] 3 qui si applica la regola 1, con a=(x+10) RD entry (2) = {(x,1),(y,?),(z,?)} RD exit (2) = {(x,1),(y,2),(z,?)} RD | [y := a] [y := a[x 10]] se x FV(a) (x,?) RD entry ( ) per ogni (z, ) RD entry ( ): ( z=x [...] è [x:=10] )

19 Tino CortesiTecniche di Analisi di Programmi 19 RD | [x:=10] 1 ; [y:=x+10] 2 ; [z:=y+10] 3 [x:=10] 1 ; [y:=10+10] 2 ; [z:=y+10] 3 [x:=10] 1 ; [y:=20] 2 ; [z:=y+10] 3 qui si applica la regola 2, con a=(10+10) RD | [y := a] [y := n] se FV(a)= a Num il valore di a è n

20 Tino CortesiTecniche di Analisi di Programmi 20 RD | [x:=10] 1 ; [y:=x+10] 2 ; [z:=y+10] 3 [x:=10] 1 ; [y:=10+10] 2 ; [z:=y+10] 3 [x:=10] 1 ; [y:=20] 2 ; [z:=y+10] 3 [x:=10] 1 ; [y:=20] 2 ; [z:=20+10] 3 qui si riapplica la regola 1, con a=(y+10) RD | [z := a] [z := a[y 20]] se y FV(a) (y,?) RD entry ( ) per ogni (w, ) RD entry ( ): ( w=y [...] è [y:=20] )

21 Tino CortesiTecniche di Analisi di Programmi 21 RD | [x:=10] 1 ; [y:=x+10] 2 ; [z:=y+10] 3 [x:=10] 1 ; [y:=10+10] 2 ; [z:=y+10] 3 [x:=10] 1 ; [y:=20] 2 ; [z:=y+10] 3 [x:=10] 1 ; [y:=20] 2 ; [z:=20+10] 3 [x:=10] 1 ; [y:=20] 2 ; [z:=30] 3 qui si riapplica la regola 2 con a=(20+10) RD | [z := a] [z := n] se FV(a)= a Num il valore di a è n

22 Tino CortesiTecniche di Analisi di Programmi 22 Questo esempio mostra che in realtà si è interessati a realizzare una serie di trasformazioni: RD | S S S... S k In teoria, una volta calcolato S bisognerebbe rieseguire la Reaching Definition Analysis su S, e così via. Ma siamo fortunati: se RD è una soluzione della Reaching Def. Analysis per S i e RD | S i S i+1, allora RD è anche una soluzione della Reaching Def. Analysis per S i+1. Infatti, la trasformazione si applica a elementi che non sono osservati dalla Reaching Def. Analysis.

23 Available Expressions

24 Tino CortesiTecniche di Analisi di Programmi 24 Avaliable Expressions Analysis Vogliamo determinare, per ogni punto del programma, quali espressioni sono sicuramente già state valutate, e non sono state successivamente modificate. Ad esempio [x:=a+b] 1 ; [y:=a*b] 2 ; while [y>a+b] 3 do ([a:=a+1] 4 ; [x:=a+b] 5 ) Quando la computazione raggiunge il punto 3, lespressione a+b è già available, in quanto è già stata valutata precedentemente (in 1 prima della prima chiamata di while, ed in 5 per le chiamate successive) e non ha bisogno di essere valutata di nuovo.

25 Tino CortesiTecniche di Analisi di Programmi 25 Espressioni uccise e generate Diciamo che unespressione è uccisa (kill AE ) in un punto del programma se una qualsiasi delle variabili che vi compaiono viene modificata Diciamo che una espressione è generata (gen AE ) in un punto del programma se viene valutata in quel punto e nessuna delle variabili che vi compaiono viene modificata nello stesso punto. [x:=a+b] 1 ; [y:=a*b] 2 ; while [y>a+b] 3 do ([a:=a+1] 4 ; [x:=a+b] 5 ) nkill AE (n)gen AE (n) 1 {a+b} 2 {a*b} 3 {a+b} 4{a+b, a*b,a+1} 5 {a+b}

26 Tino CortesiTecniche di Analisi di Programmi 26 Specifica Lanalisi può essere specificata dalle seguenti equazioni: Per ogni punto p del programma... se p è il punto iniziale AE entry (p)= { AE exit (q) | (q,p) è un arco del grafo} AE exit (p)= (AE entry ( p ) \ kill AE (p)) U gen AE (p)

27 Tino CortesiTecniche di Analisi di Programmi 27 se p è il punto iniziale AE entry (p)= { AE exit (q) | (q,p) arco } AE exit (p)= (AE entry ( p ) \ kill AE (p)) U gen AE (p) nkill AE (n)gen AE (n) 1 {a+b} 2 {a*b} 3 {a+b} 4{a+b, a*b,a+1} 5 {a+b} AE entry (1)= AE entry (2)=AE exit (1) AE entry (3)=AE exit (2) AE exit (5) AE entry (4)=AE exit (3) AE entry (5)=AE exit (4) AE exit (1)= AE entry (1) U {a+b} AE exit (2)= AE entry (2) U {a*b} AE exit (3)= AE entry (3) U {a+b} AE exit (4)= AE entry (4) - {a+b, a*b, a+1} AE exit (5)= AE entry (5) U {a+b} Equazioni

28 Tino CortesiTecniche di Analisi di Programmi 28 Soluzione nAE entry (n)AE exit (n) 1 {a+b} 2 {a+b, a*b} 3{a+b} 4 5 {a+b} AE entry (1)= AE entry (2)=AE exit (1) AE entry (3)=AE exit (2) AE exit (5) AE entry (4)=AE exit (3) AE entry (5)=AE exit (4) AE exit (1)= AE entry (1) U {a+b} AE exit (2)= AE entry (2) U {a*b} AE exit (3)= AE entry (3) U {a+b} AE exit (4)= AE entry (4) - {a+b, a*b, a+1} AE exit (5)= AE entry (5) U {a+b}

29 Tino CortesiTecniche di Analisi di Programmi 29 Risultato [x:=a+b] 1 ; [y:=a*b] 2 ; while [y>a+b] 3 do ([a:=a+1] 4 ; [x:=a+b] 5 ) Anche se lespressione a è ridefinita allinterno del ciclo (in 4), lespressione a+b è sempre disponibile allentrata del ciclo (in 3). Viceversa, lespressione a*b è disponibile alla prima entrata nel ciclo, ma viene uccisa prima della successiva iterazione (in 4). nAE entry (n)AE exit (n) 1 {a+b} 2 {a+b, a*b} 3{a+b} 4 5 {a+b}

30 Very Busy Expressions

31 Tino CortesiTecniche di Analisi di Programmi 31 Very Busy Expressions Analysis Diciamo che una espressione è very busy alluscita da un certo punto del grafo di flusso di un programma se in qualsiasi cammino che parte da quel punto lespressione viene usata prima che una qualsiasi variabile che occorra in essa sia stata ridefinita Ad esempio if [a>b] 1 then ([x:=b-a] 2 ; [y:=a-b] 3 ) else ([y:=b-a] 4 ; [x:=a-b] 5 ) Le espressioni a-b e b-a sono entrambe very busy nel punto 1.

32 Tino CortesiTecniche di Analisi di Programmi 32 A cosa serve? Linformazione derivata da una very busy expression analysis può essere utilizzata per valutare lespressione ad un certo punto del grafo e memorizzarne il valore per un uso successivo. Questa ottimizzazione è anche chiamata hoisting di una espressione Ad esempio if [a>b] 1 then ([x:=b-a] 2 ; [y:=a-b] 3 ) else ([y:=b-a] 4 ; [x:=a-b] 5 ) Le espressioni a-b e b-a possono essere hoisted prima del comando condizionale: a questo punto il test non è più necessario e il programma può essere trasformato in uno più efficiente.

33 Tino CortesiTecniche di Analisi di Programmi 33 Espressioni uccise e generate Diciamo che unespressione è uccisa (kill VB ) in un punto del programma se una qualsiasi delle variabili che vi compaiono viene modificata (kill VB =kill AE ) Diciamo che una espressione è generata (gen VB ) in un punto del programma se appare in quel punto (gen VB !=gen AE ). if [a>b] 1 then ([x:=b-a] 2 ; [y:=a-b] 3 ) else ([y:=b-a] 4 ; [x:=a-b] 5 ) nkill VB (n)gen VB (n) 1 2 {b-a} 3 {a-b} 4 {b-a} 5 {a-b}

34 Tino CortesiTecniche di Analisi di Programmi 34 Specifica Lanalisi può essere specificata dalle seguenti equazioni: Per ogni punto p del programma... se p è un punto finale VB exit (p)= { VB entry (q) | (p,q) è un arco del grafo} VB entry (p)= (VB exit ( p ) \ kill VB (p)) U gen VB (p)

35 Tino CortesiTecniche di Analisi di Programmi 35 se p è il punto finale VB exit (p)= { VB entry (q) | (p,q) arco } VB entry (p)= (VB exit ( p ) \ kill VB (p)) U gen VB (p) VB entry (1)=VB exit (1) VB entry (2)=VB exit (2) U {b-a} VB entry (3)={a-b} VB entry (4)=VB exit (4) U {b-a} VB entry (5)={a-b} VB exit (1)= VB entry (2) VB entry (4) VB exit (2)= VB entry (3) VB exit (3)= VB exit (4)= VB entry (5) VB exit (5)= Equazioni nkill VB (n)gen VB (n) 1 2 {b-a} 3 {a-b} 4 {b-a} 5 {a-b} a>b x:=b-a y:=a-b y:=b-a x:=a-b 1 24 5 3

36 Tino CortesiTecniche di Analisi di Programmi 36 Risultato if [a>b] 1 then ([x:=b-a] 2 ; [y:=a-b] 3 ) else ([y:=b-a] 4 ; [x:=a-b] 5 ) Lanalisi è backward: segue il grafo di flusso dalle foglie alla radice: una espressione è very busy alluscita di un punto del grafo se è very busy allentrata di ogni punto immediatamente successivo Nessuna espressione è very busy alluscita di un punto finale del grafo. nVB entry (n)VB exit (n) 1{a-b, b-a} 2 {a-b} 3 4{a-b, b-a}{a-b} 5 a>b x:=b-a y:=a-b y:=b-a x:=a-b 1 24 5 3


Scaricare ppt "Reaching Definitions. Tino CortesiTecniche di Analisi di Programmi 2 Reaching definitions Dato un punto del programma, quali sono i comandi di assegnamento."

Presentazioni simili


Annunci Google