You are on page 1of 28

02/02/2011

1
CONTROL FLOW ANALYSIS
Analisi interprocedurale e trasformazioni
Trasformazioni
Programma programma ottimizzato
Lottimizzatore deve garantire
Programma programma ottimizzato
per controllare varie condizioni che garantiscono lequivalenza del
programma ottenuto e delloriginale.
Tali condizioni dipendono dalla natura delle singole istruzioni e dalla
struttura del programma
Rappresentazione del programma
Control Flow
Data Flow
02/02/2011
2
Approcci
Dominator-based
Grafo di flusso (Control flow graph) con relazioni di dominanza per
identificare i cicli
la tecnica pi utilizzata
Interval-based
Ricerca delle Nested regions (= intervals)
Control tree
Caso di interval_based analysis: analisi strutturale
tecnica pi sofisticata
classifica le strutture di controllo (non soli i cicli)
Dominator based analysis
Dominatori per scoprire i cicli
Ottimizzazione della analisi data
flow per iterazione
Interval-based
Metodo di eliminazione
Dominator based analysis versus Interval-based
1. Lanalisi Interval-based ha migliori prestazioni nel caso sia
necessario effettuare anche una analisi data flow in
particolare nel caso di analisi strutturale
2. Interval analysis rende semplice laggiornamento delle
informazioni nel caso di analisi data-flow gi effettuata
3. Analisi strutturale rende semplice lesecuzione delle
trasformazioni del control flow
02/02/2011
3
Blocchi basici e Control Flow
Graphs (CFGs)
Blocchi basici = massima sequenza di istruzioni con ununica
istruzione di ingresso
Entry possono essere
entry point di un sottoprogramma
istruzione target di una istruzione di selezione
istruzioni che seguono immediatamente una selezione o un
return
Le istruzioni di Entry sono chiamate leaders
Control Flow Graph
Ragruppare le istruzioni in blocchi basici
Due istruzioni sono nello stesso blocco
iff lesecuzione di una istruzione del blocco garantisce che
lesecuzione pu solo continuare con laltra istruzione.
Archi fra blocchi basici rappresentano potenziale flusso del
controllo.
Formalmente CFG = (V , E, Entry) dove
V = vertici o nodi, rappresentano una istruzione o un blocco
basico.
E = archi, potenziali flusso di controllo
E _ V x V
Entry e V , unico entry del programma
Supporremo che v eV raggiungibile da Entry ,
02/02/2011
4
Costruzione del Control Flow Graph
Costruzione di CFGs con blocchi basici (insiemi di
istruzioni)
Identificare i Leaders prima istruzione di un blocco basico
In ordine lessico-grafico costruire un blocco aggiungendo una
istruzione successiva fino ad incontrare il successivo leader (da
non includere nel blocco).
Identificazione dei Leader
1. Prima istruzione di un programma
2. Istruzione target di qualsiasi istruzione di branch condizionale o
non-condizionale
3. Listruzione che segue immediatamente un branch (condizionale o
non-condizionale. Tale istruzione un target implicito).
Algoritmo per il partizionamento in Blocchi basic
Input: insieme di istruzione, con instr(i) = i-th istruzione
Output: insieme dei leaders, insieme blocchi basici dove block(x) linsieme
delle istruzioni nel blocco con leader x.
leaders =1 //Leaders, prima istruzione
for (i=1; i <= |n|; i++) //n = numero delle istruzioni
if (instr(i) un branch)
leaders = leaders tutti i target potenziali di instr(i)
worklist = leaders
while worklist.not_empty() {
x = la prima instr in worklist
worklist = worklist - {x}
block(x) = {x}
for (i=x +1; i <= |n| and i e leaders; i++ )
block( x) = block( x) i
last = i 1
}
02/02/2011
5
Calcolo degli archi in un Control Flow Graph
- un arco diretto da B
1
a B
2
se:
- un branch dallultima istruzione di B
1
alla prima istruzione di B
2
B
2
segue immediatamente B
1
nellordine del programma e B
1
non termina con un
unconditional branch.
Input: block(), una sequenza di blocchi basici
Output: CFG dove i nodi sono i blocchi basici
Algorithm:
for each blocco {
x = ultima istruzione di block(i)
if (instr(x) un branch)
for each target y di instr(x)
creare un arco dal blocco i al blocco y
if (instr x) non un unconditional branch)
creare un arco fra i blocchi i e i +1
}
Dato il grafo G = {N, E}
dove
N linsieme di dei nodi
E _ N x N
Denotiamo linsieme dei successori di un blocco basico b e N
SUCC(b) = {n e N | - e e E tale che e = b n}
Denotiamo linsieme dei predecessori di un blocco basico b e
N
PRED(b) = {n e N | - e e E tale che e = n b}
02/02/2011
6
Esempio
receive m
f0 <- 0
f1 <- 1
if m <= 1 goto L3
i <- 2
L1: if i<= m goto L2
return f2
L2: f2 <- f0 + f1
f0 <- f1
f1 <- f2
i <- i+1
goto L1
L3: return m
02/02/2011
7
Esempio
Entry
B1
B2 B3
B4
B5
B6
exit
02/02/2011
8
Relazioni di dominanza
x DOM y (x domina y) in un CFG se cammino da Entry a y include x.
DOM(v) = insieme di tutti i vertici che dominano v.
La relazione di dominanza una relazione utili per determinare lesistenza di
un ciclo
La relazione di dominaza DOM
Riflessiva : d DOM d, i.e. d e DOM(d)
Transitiva : se a DOM b e b DOM c allora a DOM c
Antisimmetria : if a DOM b e b DOM a allora a = b
d, Entry e DOM(d)
Dominanza stretta
DOM!(v)= DOM(v) {v}
DOM! antisimmetrica e transitiva
Relazioni di dominanza
Dominanza immediata IDOM
IDOMv = il piu vicino elemento strettamente dominato da x.
d IDOM v se
d DOM(v) e (w e w DOM! v) [w DOM d ]
La dominanza immediata antisimmetrica
Per a b : a IDOM b iff
a DOM b e c: c DOM b e a DOM c c = a
02/02/2011
9
Relazioni di dominanza
Teorema: IDOM(v) unico
Dimostrazione (per assurdo)
Supponiamo esistano c = d tali che
c IDOM v e d IDOM v.
Dalla definizione si ha che, c = v e d = v, cosi
c DOM! v and d DOM! v.
Dalla definizione di IDOM,
d DOM! v e (w e w DOM! v) [w DOM d ]
Quindi, c DOM d e d DOM c, ma DOM antisimmetrica che
una contradizione con c = d.
Pertanto c e d devono essere lo stesso vertice
Dominanza inversa
DOM
-1
v = linsieme di tutti i vertici che sono dominati da v.
La dominanza inversa
Riflessiva
Antisimmetrica
Transitiva
02/02/2011
10
Calcolo della dominanza
(semplica ma lenta)
Inizializzare dom(i) = insieme di tutti i nodi per for i
entry, dom(entry) = {entry}
Calcolare
dom(i) = {i} U (dom(i) dom(pred(i)) per tutti i
predecessori di i)
piu efficiente se i nodi sono processati in ordine DFS
La complessit O(n
2
e) dove
n = il numero di nodi
e = numero di archi
Algortmo per trovare i dominanti
DOM(v) = {v} H
oepred(v)
DOM(p)
Algoritmo:
DOM(Entry) = Entry
for each (v eV - {Entry} ) DOM(v) = V
do
changed = false
for each (n e V - {Entry} ) {
olddom = DOM(n)
DOM(n) = n H
oepred(v)
DOM(p)
if DOM(n) = olddom then changed = true
}
While (changed = true)
Complexity: O(N
2
)
02/02/2011
11
Dominance Frontier
DF(v) = {w|- u e PRED(w) [v DOM u] . v DOM! w
v domina alcuni predecessori di w
v non domina strettamente w
DOM!
-1
(v)= DOM
-1
(v) - v, allora
DF(v) = SUCC(DOM
-1
(v)) - DOM!
-1
(v)
Algortmo per la Dominance Frontier
DF(v) = DF
local
(v)
ceChild(v)
DF
up
(c)
dove
Childv: figli di v nellalbero delle dominanze
DF
local
(v) = {w|we SUCC(v) v DOM!w}
DF
up
(w) il sottoinsieme di DF(w) cioe non e strettamente dominato da
IDOM(w) (IDOM(w) = v).
Algoritmo:
FindDF(v)
DF(w) = empty
for w e DomChild(v) {
FindDF(w)
for (u in DF(w)) if (not(v DOM! u)) add u to DF(v)
}
for (w in SUCC(v) ) if (not( v DOM! w)) add w to DF(v)
02/02/2011
12
Post-Dominanza
CFG = {V, E, Entry, Exit} v eV [v*Exit]
Exit raggiungibile da tutti gli altri nodi
p post-domina v, if ogni cammino da v ad Exit include p
p PDOM v implica v *Exit pu essere diviso in v * p e p *Exit
La post dominanza e riflessiva, antisimmetrica e transitiva
PDOM di un CFG equivalente a DOM del grafo inverso
post-dominanza stretta
p PDOM! v p PDOM v & p = v
post-dominance
v e PDF(p) if p PDOM SUCC(v) ma non p PDOM! v
Control Graph - G
cd
y control dependent su x, x e y e CFG, se:
- x *y, y post-domina ogni vertice p in x *y, p = x,
y non un post dominante stretto di x.
(x, y)
l
ha etichetta l, il primo arco x *y.
CDPRED(y) ={x|y control dependent su x}
CDSUCC(x) = {y|y control dependent su x}
Note: add edge (entry, exit) in CFG
02/02/2011
13
Cicli Regioni strettamente connesse (SCR)
Back edge = un arco che domina la sua coda
s1 s2 e S, se S un ciclo allora
s1 * s2 e s2 * s1
Calcolo della massima regione strettamente connessa su un
direct graph.
uses a depth-first spanning tree left-to-right pre-order
number in Number
tracks the lowest numbered v to which each vertex has a path
in Lowlink
determines a number for SCR to which v belongs.
Tarjans maximal SCR algorithm
i = 0
Lowlink() = 0
Number() = 0
SCRnum = 0
InStack() = false
Stack = empty
for v e V do
if Number(v) == 0 then
Tarjan(v)
endfor
02/02/2011
14
Tarjans maximal SCR algorithm
per la scoperta dei cicli
Procedure Tarjan(v)
Number(v) = Lowlink(v) = ++i
InStack(v) = true
push v on Stack
for w in SUCC(v) do
if Number(w) = 0 then
Tarjan(w)
Lowlink(v) = min (Lowlink(v), Lowlink(w))
else if InStack(w) then Lowlink(v) = min (Lowlink(v), Lowlink(w))
endfor
if Lowlink(v) = Number(v) then
SCRnum++
repeat w = pop(Stack)
InStack(w) = false
SCR(w) = SCRnum;
until w == v
end Tarjan
Tarjans maximal SCR algorithm -Example
02/02/2011
15
Identificazione dei cicli e degli Headers di un ciclo
DFST non trova un unico
header in un grafo
irriducibilei
SCR non differenzia
inner loops
Natural Loop
Single entry, lheader domina tutti i vertici nel ciclo.
dominates: v dom w iff v * w, e
Non - P tale che such P = entry x *w dove v not on P.
Esiste almeno un cammino dal header a se stesso.
Tutti i vertici e archi del cammino dallheader a qualsiasi back
edges allheader sono nel ciclo.
Due natural loops sono o interamente disgiunti o uno e un
subset dellaltro.
02/02/2011
16
Esempio di cicli naturali (natural loops)
Calcolo dei nodi di un Natural Loop
Dato un back edge, t h
addvertex (h)
addedge (t h)
insert (t)
procedure insert (v)
if v not in loop then
addvertex(v)
for p e PRED(v) do
addedge (pv)
insert (p)
endfor
end insert
02/02/2011
17
Improperly Nested Loops
Componenti strettamente connesse
(SCC)
Generalizzazione dei cicli
Una SCC un sottografo G
S
=(N
S
,E
S
) tale che ogni nodo in N
S

raggiungibile da ogni altro nodo in N
S
seguendo un cammino i
cui archi appartengono tutti a E
S
Un SCC massimo, iff ogni SCC che lo contiene il
componente strettamente connesso stesso
02/02/2011
18
Riducibilit
Un flow graph G=(N,E) riducibile (chiamati anche ben-
strutturato) iff
E pu essere partizionato in insiemi disgiunti E
B
, linsieme dei
forward edge e E
B,
, linsieme dei back edge, tale che (N, E
F
) formi
un DAG nel quale tutti i nodi siano raggiungibili dallentry node
Cio non ci sono salti nel mezzo di un ciclo, partanto lingesso in
un loop pu avvenire solo dal suo header
CFGs irriducibili sono chiamati regioni improprie
Impossibile lesistenza di regioni improprie in linguaggi come
Modula-2
CFG riducibili
Intuitivamente se tutti i cicli sono single entry, il CFG
riducibile.
02/02/2011
19
Come trattare lirriducibilit
Non possibile utilizzare direttamente una analisi strutturale
Utilizzare una analisi data flow in modo iterativo sulla regione
irriducibile e inserire i risultati nelle equazione di data flow per
il resto del data flow
Utilizzare una tecnica di node splitting che trasformi la regione
irriducibiile in una riducibile
Induced iteration on the lattice of monotone functions from the
lattice to itself (more on this later)
B1
B2 B3
B1
B2 B3
Bx
02/02/2011
20
Interval Analysis
Interval Analysis
Per il control flow, interval analysis si riferisce alla divisione del CFG in
diverse regioni (dipendenti dai diversi approcci) consolidando ogni regione
in un nuovo nodo chiamato abstract node ottenendo un abstract flow
graph
Dato che le trasformazioni sono applicate una alla volta o in parallelo su
regioni disgiunte le regioni risultanti sono nested
Il risultato finale chiamato control tree
Control tree
La radice del control tree un abstract flow graph che
rappresenta il flowgraph originale
Le foglie del control tree sono blocchi basici
I nodi fra la radice e le foglie rappresentano regioni del
flowgraph
Gli archi rappresentano relazioni fra i nodi astratti e i suoi
discendenti
02/02/2011
21
Analisi T1-T2
la forma pi semplice di interval analysis
Sono definite due trasformazioni
B1 B1a
T1 sostituisce un loop
con un singolo nodo
B1
B1a
B2
T2 sostituisce un sequenza
di due nodi con un singolo nodo
Esempio
B1
B2
B3
B4
B1a
B3a
B1a
B3b
B1b
B1 B2 B3 B4
B1a
B3a
B3b
B1b
02/02/2011
22
Interval Analysis
A (maximal) interval IM(h) con header h il sottografo single
entry massimo con h come il solo singolo entry e con tutti
sottocamini nel sottografo contenenti h
il natural loop con entry h piu alcune strutture acicliche
collegate alluscita di un loop
A (minimal) interval uno dei seguenti
natural loop
maximal acyclic subgraph
minimal irreducible region
Passi dellInterval Analysis
Iterare i seguenti 4 passi:
1. Visitare in post-ordine i nodi del CFG effetuando la ricerca di
headers di cicli
2. Per ogni header costruitre il natural loop e ridurrre il loop nel
abstract region
3. Per ogni insieme di entries di una regione impropria costruire lSCC
minmo e ridurlo ad una regione impropria
4. Per entry node e ogni immediato discendente di un nodo in un
natural loop o in una regione irrudicibile costruire maximal acyclic
graph con il nodo come radice, Se ci sono piu che in nodo ridurre la
acyclic region
02/02/2011
23
Analisi strutturale
una forma piu accurate dellinterval analysis
una forma di data flow analisys di tipo syntax directed
Vantaggi dellanalisi strutturale rispetto alla analisi data-flow
iterativa
Usa specializzate funzioni per riconoscere strutture
Le equazioni sono determinate dalla sintassi e semantica del
linguaggio sorgente
Riconosce pi strutture che linterval analysis standard
Region Types
Blocks
If-then
If-then-else
Case-switch
Self loop
While loop
Natural loop
Improper interval
Proper interval
02/02/2011
24
Entry
B1
B3
B4
B2
B5
B7
B6
Exit
Entry
B1
B3
B4
B2a
B5a
B7
Exit
Entry
B1
B3
B4
B2a
B5a
B7
Exit
Entry
B1a
B3
B4 B5b
Exit
02/02/2011
25
Entry
B1a
B3
B4 B5b
Exit
Entry
B1a
B3a
Exit
Entrya
Control tree
B1 B2a
B3 B4
B1a
B3a
entrya
entry
exit
B2
B5b
B7 B5a
B5 B6
02/02/2011
26
Spanning tree
B2
B1
entry
exit
B3
B4 B5
B6
B7
SPANNING TREE
02/02/2011
27
Spanning Trees
CFG = (V
G,
E
G,
Entry
G
Exit
G
), quindi noi possiamo costruire uno spanning tree, ST = V
T
E
T
Root
T
,Exit
T
with
V
T
= V
G
E
T
_ E
G
Root
T
= Entry
G
Exit
T
= Exit
G
Dato uno spanning tree, gli archi nel CFG possono esserepartizionati come segue:
1. Tree edges sono nel CFG e in ST
2. Advancing edges (v,w) non sono archi dellalbero ma w un
discendente di v in ST.
3. Back edges (v,w) tali che v = w o w un antenato di di v in ST.
4. Cross edges (v,w) tali che w non un antenato ne un discendente di v
nello spanning tree.
Spanning Tree Algorithm
procedure Span (v) {
for w in Succ(v) {
If not InTree(w) then
add w,v * w to ST
InTree(w) = true
Span(w)
}
} // end Span
for v e V do InTree = false
InTree(Root) = true
Span(Root)
02/02/2011
28
Spanning Tree Example
A_entry
C
D
B
E
F
G_exit
A_entry
C
D
B
E
F
G_exit
Spanning Edge Identification
procedure DFST(v) {
num(v) = vnum++
InStack(v) = true
for w Succ(v) do
if not InTree(w) then
add w,v * w to ST
InTree(w) = true
DFST(w)
else if
else if
else
endfor
InStack(v) = false
end DFST
vnum = 0
DFST(root)

You might also like