DataFlow Analysis cheatsheet


Frameworks

Type of framework equations
Forward in[b] = \(\land\) out[preds]
  out[b] = Gen(b) \(\cup\) (in[b] - kill[b])
Type of framework equations
Backwards out[b] = \(\land\) in[succ]
  in[b] = Gen(b) \(\cup\) (out[b] - kill[b])

1 Reaching definitions

Idea

Una definizione \(D\) raggiunge un punto \(P\) se esiste un percorso da \(D\) a \(P\) tale per cui \(D\) non è uccisa (sovrascritta). In forma SSA, la reaching definition di un'istruzione è l'istruzione stessa, semplicemente rappresentata in un'altro modo.

Implementazione

Analysis Reaching Definitions
Dominio Definizioni
Direzione Forward
Gen Definizioni localmente disponibili
Kill Definizioni i cui LHS sono gli stessi LHS delle definizioni nel BB
Meet Operator \(\cup\)
  • Definizione localmente disponibile: ultima definizione di una variabile all'interno di un BB.

2 Available Expressions

Idea

Un'espressione \(x \otimes y\) è available in un punto \(P\) se viene valutata in ogni percorso che da entry porta a P. Quando durante il flow di un programma viene richiesta della computazione per calcolare un valore, ci si chiede se quella particolare espressione è già stata calcolata in passato (con gli stessi operandi ovviamente). In tal caso, si possono evitare calcoli ridondanti.

Implementazione

Analysis Available Expressions
Dominio Espressioni
Direzione Forward
Gen espressioni del tipo \(x \otimes y\) se non vengono riassegnati gli operandi
Kill un blocco uccide \(x \otimes y\) se riassegna \(x\) o \(y\) e non ricalcola \(x \otimes y\)
Meet Operator \(\cap\)

3 Live Variables

Idea

Una variabile \(V\) è alive in un punto \(P\) se esiste almeno un percorso che da \(P\) porta a exit che usa il valore di quella variabile. (La variabile stessa se si considera la forma SSA). Altrimenti la variabile viene definita dead.

Implementazione

Analysis Live Variables
Dominio Variables
Direzione Backwards
Gen Operandi(RHS) delle espressioni
Kill Destinazioni(LHS) delle espressioni
Meet Operator \(\cup\)

4 Dominator Analysis

Idea

Un blocco \(B\) domina un blocco \(A\) se partendo da entry per arrivare ad \(A\) si passa necessariamente per \(B\).

Implementazione

Analysis Dominator Analysis
Dominio Blocks
Direzione Forward
Gen Gen[bb] = bb
Kill \(\emptyset\)
Meet Operator \(\cap\)

5 Very Busy Expressions

Idea

Una espressione \(E\) è very busy in un punto \(P\) se \(E\) viene valutata in ogni percorso a partire da \(P\) prima che uno dei suoi operandi venga ridefinito. Il concetto è che se un'espressione è very busy in un certo punto \(P\), nel caso in cui ci siano più punti in cui essa viene valutata, si possono "accorpare" le varie valutazioni dell'espressione in una unica nel punto \(P\). Questo passo potrebbe essere propedeutico per la realizzazione di ulteriori ottimizzazioni.

Implementazione

Analysis Very Busy Expressions
Dominio Espressioni
Direzione Backwards
Gen \(x \otimes y\) se \(x \otimes y\) viene valutata prima che \(x\) o \(y\) siano ri-definiti
Kill Espressioni i cui operandi sono ri-definiti all'interno del BB
Meet Opereator \(\cap\)