Efficient Alias Set Analysis Using SSA Form Proseminar Programmanalyse WS 11/12 André Hunke.

Post on 06-Apr-2015

106 views 0 download

Transcript of Efficient Alias Set Analysis Using SSA Form Proseminar Programmanalyse WS 11/12 André Hunke.

Efficient Alias Set Analysis Using SSA Form

Proseminar ProgrammanalyseWS 11/12

André Hunke

2Efficient Alias Set Analysis Using SSA Form

• Ziele• Alias Sets• SSA Form• Verwendete Datenstruktur• Benchmark-Ergebnisse

16.12.2011

Übersicht

3Efficient Alias Set Analysis Using SSA Form

• Alias Sets werden vom Compiler genutzt• Effiziente Alias Set Analyse– nur intra-prozedual– hierfür: Nutzung der SSA-Form

• Nutzung einer geeigneten Datenstruktur

16.12.2011

Ziele

4Efficient Alias Set Analysis Using SSA Form

• Menge der lokalen Pointer-Variablen, die auf ein gemeinsames Objekt zeigen

• Zu einem gegebenen konkreten Objekt o: o# = { p | p zeigt auf o}

• Jedes alias set repräsentiert höchstens ein Objekt• ρ#: Menge aller alias sets• falls für Variablen x, y: {x,y} o⊆ #, so ist x ein Alias von y• Sichere Entscheidung, falls x und y immer gemeinsam

in einem o#, oder nie gemeinsam in einem o#

16.12.2011

Alias Sets

5Efficient Alias Set Analysis Using SSA Form

• betrachten Zuweisungen s der Forms ::= v1 ← v2 | v ← e | e ← v | v ← null | v ← new

wobeiv, v1, v2 lokale Variablen sind und e eine Position auf

dem Heap repräsentiert• Heap wird als Black-Box behandelt

16.12.2011

Alias Sets

6Efficient Alias Set Analysis Using SSA Form

• Bei Unsicherheit, ob ein alias set eine Variable enthält, wird es aufgeteilt

16.12.2011

Alias Sets - Übergangsfunktion

7Efficient Alias Set Analysis Using SSA Form

class Node {int value;Node next;

Node (int v, Node n) {value = v;next = n;

}

}16.12.2011

Alias Sets - Beispiel

8Efficient Alias Set Analysis Using SSA Form

…void foo(int i) {

Node a, b, c;a = new Node(i, null);c = a;if (i < 42)

b = new Node(42+i, a);else

b = a;c = b;b = b.next;

}…

16.12.2011

Alias Sets - Beispiel

a = new Node(i, null);

b = new Node(42+i,a);

c = b;

b = a;

b = b.next;

Kontrollflussgraph

c = a;

9Efficient Alias Set Analysis Using SSA Form16.12.2011

Alias Sets – Beispiel

ρ# = {{a}}

ρ# = {{a,c},{b}} ρ# = {{a,b,c}}

ρ# = {{a}, {a,b}, {c}, {b,c}, {a,c}, {a,b,c}}

a = new Node(i, null);

b = new Node(42+i,a);

c = b;

b = a;

b = b.next;

c = a;

ρ# = {{a,c}}

ρ# = {{a}, {b,c}, {a,b,c}}

10Efficient Alias Set Analysis Using SSA Form

• SSA = Single Static Assignment• pro Variable höchstens eine Zuweisung– Jede Zuweisung erzeugt eine neue Variable

• Transformation in SSA form

16.12.2011

SSA Form

11Efficient Alias Set Analysis Using SSA Form16.12.2011

SSA Form - Beispiel

Lösung?

a = new Node(i, null);

b = new Node(42+i,a);

c = b;

b = a;

b = b.next;

c = a;

a1 = new Node(i, null);

b1 = new Node(42+i,a1);

c2 = b?;

b2 = a1;

b? = b?.next;

c1 = a1;

12Efficient Alias Set Analysis Using SSA Form

• Problem: Zuweisungen mit mehr als einer reaching definition

• Lösung: „φ-Funktion“ einfügen– wählt den Wert des tatsächlich genommenen

Kontrollflusses– Zuweisung dann an eine neue Variable

• Hier: φ-Funktion an jedem Merge-Knoten 16.12.2011

SSA Form

13Efficient Alias Set Analysis Using SSA Form16.12.2011

SSA Form - Beispiel

a = new Node(i, null);

b = new Node(42+i,a);

c = b;

b = a;

b = b.next;

c = a;

a1 = new Node(i, null);

b1 = new Node(42+i,a1);

b3 = φ(b1,b2)c2 = b3;

b2 = a1;

b4 = b3.next;

c1 = a1;

14Efficient Alias Set Analysis Using SSA Form

• Erweiterung der Übergangsfunktion für Knoten mit φ-Funktion nötig

• Strategie:– für jede Eingehende Kante p:– aktualisiere die Alias-Sets entsprechend der

Auswahl der φ-Funktion für p

16.12.2011

Alias Sets & SSA Form

15Efficient Alias Set Analysis Using SSA Form16.12.2011

Alias Sets & SSA Form

a1 = new Node(i, null);

b1 = new Node(42+i,a1);

b3 = φ(b1,b2)c2 = b3;

b2 = a1;

b4 = b3.next;

c1 = a1;

ρ# = {{a1}}

ρ# ={{a1,c1}}

ρ# = {{a1,c1},{b1}} ρ# = {{a1,c1,b2}}

ρ# = {{a1,c1}, {b1,b3,c2}} {{a1,c1,b2,b3,c2}}∪

ρ# = {{a1,c1}, {a1,c1,b4}, {b1,b3,c2}, {b1,b3,c2,b4},{a1,c1,b2,b3,c2}, {a1,c1,b2,b3,c2,b4}}

16Efficient Alias Set Analysis Using SSA Form

• Beobachtung: Für nicht φ-Knoten ist die Mengendifferenz in der Übergangsfunktion überflüssig

• Weitere Analyse für φ-Knoten nötig

16.12.2011

Alias Sets & SSA Form

17Efficient Alias Set Analysis Using SSA Form

• es können lineare Listen verwendet werden• eine Liste repräsentiert ein alias set• neues Element hinzufügen: neuer Listenkopf

– Restliste bleibt unverändert• Element entfernen: nicht nötig!Þ gemeinsame Nutzung von Restlisten möglich

16.12.2011

Datenstruktur

ec dba

gf

drei alias sets: {d,e}, {a,b,c,d,e},{d,e,f,g}

Beachte: Für φ-Knoten gibt es eine andere Übergangsfunktion, d.h. es ist eine andere Listenoperation nötig

18Efficient Alias Set Analysis Using SSA Form16.12.2011

Alias Set-Analyse mit Listen

a1 = new Node(i, null);

b1 = new Node(42+i,a1);

b3 = φ(b1,b2)c2 = b3;

b2 = a1;

b4 = b3.next;

c1 = a1;a1

a1

a1b2

c1

c1

a1c1

b1

a1b2 c1b3c2

b1b3c2

a1b2 c1b3c2

b1b3c2b4

b4

b4

19Efficient Alias Set Analysis Using SSA Form

Laufzeit:

• Im Schnitt etwa doppelt so schnell

16.12.2011

Benchmark-Ergebnisse

20Efficient Alias Set Analysis Using SSA Form

Speicherverbrauch (nur Alias-Analyse):

• Im Schnitt etwa 45% weniger Speicher• etwa 7% zusätzlicher Speicherverbrauch für SSA-Form16.12.2011

Benchmark-Ergebnisse

21Efficient Alias Set Analysis Using SSA Form16.12.2011

Vielen Dank für die Aufmerksamkeit

Noch Fragen?