62
Kapitel 9 Registerzuteilung Registerzuteilung Sommersemester 2012 1 / 38

Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Embed Size (px)

Citation preview

Page 1: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Kapitel 9Registerzuteilung

Registerzuteilung Sommersemester 2012 1 / 38

Page 2: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Kapitel 9: Registerzuteilung

1 Aufgabe

2 Grundlagen

3 Lokale Registerzuteilung

4 Linear Scan Register Allokation

5 Graphfärbung

6 Constraints

Registerzuteilung Sommersemester 2012 2 / 38

Page 3: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Registerzuteilung (engl. Register Allocation)

x ← param0y ← param1t0 ← add x , yt1 ← mul t0, y...

Gegeben: Programm mit angeordneten Befehlen der Zielmachine.(Temporäre) Variablen als Operanden.Problem: Annahme während der Optimierungsphase: Anzahlverfügbarer Register ist unbeschränkt – es werden beliebig vieleVariablen benutzt.Aufgabe: Reduktion auf die tatsächlich verfügbaren Register.Prinzip: Weise den Variablen Register zu. Falls nicht möglich,lagere Werte in Hauptspeicher aus.

Registerzuteilung Sommersemester 2012 3 / 38

Page 4: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Registerklassen

Register können nicht beliebig verwendet werden:Gebrauch der Register durch Hardware festgelegt:

Gleitkomma-/Integer RegisterSpezialregister: Befehlszähler, BedingungsanzeigeAdressregister. . .

Gebrauch durch Konventionen des Laufzeitsystem festgelegtDringend benötigte Werte (z.B. Kellerpegel) können nicht inden Speicher ausgelagert werden.

Registerklassen:Teile Register in Klassen mit ähnlichen Beschränkungen ein.Typisch: Integer, Gleitkomma, Spezialregister (Rahmenzeiger,Bedingungsanzeige). Zuteilungsverfahren betrachten die Klassenseparat.

Registerzuteilung Sommersemester 2012 4 / 38

Page 5: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Registerzuteilung: Wann/Wo„Wann“:

Nach Befehlsauswahl; Probleme:Kosten in Befehlsauswahl von Registerzuteilung abhängigAuslagerungscode (spill-code) von Registerzuteilung abhängigBestimmter Code nur mit bestimmten Registern auswählbar

Vor Befehlsauswahl; Probleme:Befehlsauswahl definiert Anzahl der benötigten RegisterManche Werte werden nie explizit berechnet, z.B. Werte aufAdressierungspfaden

Befehlsauswahl – Registerzuteilung – BefehlsauswahlWährend der Befehlsauswahl (on the fly)Aber Lebendigkeit nur definiert nach Anordnung der Befehle

„Wo“:AusdrückeGrundblöcke (lokal)SchleifenProzeduren (global)Programme

Registerzuteilung Sommersemester 2012 5 / 38

Page 6: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Registerzuteilung – Aufgaben

Aufgabe der Registerzuteilung ist Abbildung derProgrammvariablen auf ProzessorregisterAufgaben im Detail:

Zuteilen Finde Abbildung von Programmvariablen aufProzessorregister

Auslagern Lagere Variablen in den Hauptspeicher aus, fallsnicht genug Register verfügbar sind

Verschmelzen Eliminiere unnötiges Kopieren von Variablen imProgramm (Kopien mit gleichem Quell- undZielregister entfernen)

Beschränkungen Stelle sicher dass Beschränkungen für dieVerwendung der Register eingehalten werden

Registerzuteilung Sommersemester 2012 6 / 38

Page 7: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Kapitel 9: Registerzuteilung

1 Aufgabe

2 Grundlagen

3 Lokale Registerzuteilung

4 Linear Scan Register Allokation

5 Graphfärbung

6 Constraints

Registerzuteilung Sommersemester 2012 7 / 38

Page 8: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Grundlagen: Lebendigkeit

Definition:Eine Variable heißt lebendig wenn der in ihr enthaltene Wert(möglicherweise) später gelesen wird.

Beispiel: Lebendigkeit für x, y, t

x ← param0y ← param1t ← add x , yprint tx ← read()t ← add x , yprint t

Registerzuteilung Sommersemester 2012 8 / 38

Page 9: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Berechnung Lebendigkeit, Interferenz

BerechnungLokal: Durchlaufe Grundblock rückwärts (von Ende zumAnfang):

Bei Verwendung wird Variable lebendig.Bei Definition „stirbt“ Variable.

Global: Datenflussanalyse nötig (hier nicht behandelt).

Definition:2 Variablen interferieren wenn sie an einem Programmpunkt beidelebendig sind.Interferieren 2 Variablen so müssen sie unterschiedliche Registernzugeteilt bekommen!

Registerzuteilung Sommersemester 2012 9 / 38

Page 10: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Grundlagen: Auslagern

Was tun wenn Register nicht ausreichen? In den Speicher(Activation Record) auslagern.Übliches Verfahren:

Nach jeder Definition Wert in Activation Record sichernVor jeder Verwendung Wert aus Activation Record laden⇒ Lebenszeit minimal

Welche Variable zum Auslagern wählen? Kostenmaß:1 Wert kann einfach wieder berechnet werden (Konstanten,

Parameter)2 Wert wird lange nicht benötigt3 Wert interferiert mit vielen anderen4 . . .

Registerzuteilung Sommersemester 2012 10 / 38

Page 11: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Auslagern – Beispiel

x ← 5mx ← store(x)

x ← load(mx )print(x)

x ← 42mx ← store(x)

x ← load(mx )print(x)x ← load(mx )x ← x + 5mx ← store(x)

Gute Platzierung der Speicher- und LadebefehleNP-vollständig ⇒ Forschungsthema

Registerzuteilung Sommersemester 2012 11 / 38

Page 12: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Verfahren zur Zuteilung von Registern

Lokale Registerzuteilung mit Freiliste (on the fly)linear-scan register allocationGraphfärben

Registerzuteilung Sommersemester 2012 12 / 38

Page 13: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Kapitel 9: Registerzuteilung

1 Aufgabe

2 Grundlagen

3 Lokale Registerzuteilung

4 Linear Scan Register Allokation

5 Graphfärbung

6 Constraints

Registerzuteilung Sommersemester 2012 13 / 38

Page 14: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Lokale Registerzuteilung mit Freiliste (on the fly)

Bestimme letzte Verwendungen von Werten im Grundblock.Hilfsfunktionen:

allocReg(): Gibt ein freies Register zurück, falls keines mehrfrei ist, löse Ausnahme aus. Entferne Register aus der Freiliste.freeReg(r): Füge Register r in die Freiliste ein.

Durchlaufe Grundblock von Anfang bis Ende:Falls Register benötigt wird rufe allocReg() aufNach letzter Verwendung rufe freeReg(r).

Am Ende des Grundblocks (teilweise auch Ausdrucks) werdenalle Variablen in den Speicher geschrieben.Achtung: Falls Register fehlen, kann kein Programm erzeugtwerden (die ersten Turbo Pascal Compiler funktioniertenwirklich so), ggf. muss dieses Verfahren um die Möglichkeitdes Auslagerns erweitert werden.

Registerzuteilung Sommersemester 2012 14 / 38

Page 15: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Lokale Registerzuteilung – Beispiel

b3 ← xor b3, b2b4 ← b2b1 ← and b1, b3b1 ← xor b4, b2b4 ← and b3, b2b0 ← or b0, b3b1 ← xor b1, b4b1 ← xor b1, b3b3 ← or b3, b0jmp otherBlock

1 Letzte Verwendungen bestimmen.2 Grundblock durchlaufen.3 Werte zurückschreiben.

Freiliste:Allokation:

b3 – R0b2 – R1b4 – R2b1 – R3b0 – R1

Registerzuteilung Sommersemester 2012 15 / 38

Page 16: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Lokale Registerzuteilung – Beispiel

b3 ← xor b3, b2b4 ← b2b1 ← and b1, b3b1 ← xor b4, b2b4 ← and b3, b2b0 ← or b0, b3b1 ← xor b1, b4b1 ← xor b1, b3b3 ← or b3, b0jmp otherBlock

1 Letzte Verwendungen bestimmen.2 Grundblock durchlaufen.3 Werte zurückschreiben.

Freiliste: {R0,R1,R2,R3,R4}Allokation:

b3 – R0b2 – R1b4 – R2b1 – R3b0 – R1

Registerzuteilung Sommersemester 2012 15 / 38

Page 17: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Lokale Registerzuteilung – Beispiel

R0 ← load %fp + $b3R1 ← load %fp + $b2b3 ← xor b3, b2b4 ← b2b1 ← and b1, b3b1 ← xor b4, b2b4 ← and b3, b2b0 ← or b0, b3b1 ← xor b1, b4b1 ← xor b1, b3b3 ← or b3, b0jmp otherBlock

1 Letzte Verwendungen bestimmen.2 Grundblock durchlaufen.3 Werte zurückschreiben.

Freiliste: {R2,R3,R4}Allokation:

b3 – R0b2 – R1

b4 – R2b1 – R3b0 – R1

Registerzuteilung Sommersemester 2012 15 / 38

Page 18: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Lokale Registerzuteilung – Beispiel

R0 ← load %fp + $b3R1 ← load %fp + $b2b3 ← xor b3, b2b4 ← b2b1 ← and b1, b3b1 ← xor b4, b2b4 ← and b3, b2b0 ← or b0, b3b1 ← xor b1, b4b1 ← xor b1, b3b3 ← or b3, b0jmp otherBlock

1 Letzte Verwendungen bestimmen.2 Grundblock durchlaufen.3 Werte zurückschreiben.

Freiliste: {R3,R4}Allokation:

b3 – R0b2 – R1b4 – R2

b1 – R3b0 – R1

Registerzuteilung Sommersemester 2012 15 / 38

Page 19: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Lokale Registerzuteilung – Beispiel

R0 ← load %fp + $b3R1 ← load %fp + $b0b3 ← xor b3, b2b4 ← b2R3 ← load %fp + $b1b1 ← and b1, b3b1 ← xor b4, b2b4 ← and b3, b2b0 ← or b0, b3b1 ← xor b1, b4b1 ← xor b1, b3b3 ← or b3, b0jmp otherBlock

1 Letzte Verwendungen bestimmen.2 Grundblock durchlaufen.3 Werte zurückschreiben.

Freiliste: {R4}Allokation:

b3 – R0b2 – R1b4 – R2b1 – R3

b0 – R1

Registerzuteilung Sommersemester 2012 15 / 38

Page 20: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Lokale Registerzuteilung – Beispiel

R0 ← load %fp + $b3R1 ← load %fp + $b0b3 ← xor b3, b2b4 ← b2R3 ← load %fp + $b1b1 ← and b1, b3b4 ← xor b4, b2b4 ← and b3, b2store R1, %fp + $b2b0 ← or b0, b3b1 ← xor b1, b4b1 ← xor b1, b3b3 ← or b3, b0jmp otherBlock

1 Letzte Verwendungen bestimmen.2 Grundblock durchlaufen.3 Werte zurückschreiben.

Freiliste: {R1,R4}Allokation:

b3 – R0b2 – R1 (geschrieben)b4 – R2b1 – R3

b0 – R1

Registerzuteilung Sommersemester 2012 15 / 38

Page 21: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Lokale Registerzuteilung – Beispiel

R0 ← load %fp + $b3R1 ← load %fp + $b2b3 ← xor b3, b2b4 ← b2R3 ← load %fp + $b1b1 ← and b1, b3b1 ← xor b4, b2b4 ← and b3, b2store R1, %fp + $b2R1 ← load %fp + $b0b0 ← or b0, b3b1 ← xor b1, b4b1 ← xor b1, b3b3 ← or b3, b0jmp otherBlock

1 Letzte Verwendungen bestimmen.2 Grundblock durchlaufen.3 Werte zurückschreiben.

Freiliste: {R1,R4}Allokation:

b3 – R0b2 – R1 (geschrieben)b4 – R2b1 – R3b0 – R1

Registerzuteilung Sommersemester 2012 15 / 38

Page 22: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Lokale Registerzuteilung – Beispiel

R0 ← load %fp + $b3R1 ← load %fp + $b2b3 ← xor b3, b2b4 ← b2R3 ← load %fp + $b1b1 ← and b1, b3b4 ← xor b4, b2b4 ← and b3, b2store R1, %fp + $b2R1 ← load %fp + $b0b0 ← or b0, b3b1 ← xor b1, b4b1 ← xor b1, b3b3 ← or b3, b0store R0, %fp + $b3store R1, %fp + $b0store R2, %fp + $b4store R3, %fp + $b1jmp otherBlock

1 Letzte Verwendungen bestimmen.2 Grundblock durchlaufen.3 Werte zurückschreiben.

Freiliste: {R0,R1,R2,R3,R4}Allokation:

b3 – R0b2 – R1 (geschrieben)b4 – R2b1 – R3b0 – R1

Registerzuteilung Sommersemester 2012 15 / 38

Page 23: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Erweiterungen

Oft Kombination von lokalen mit globalen Methoden:Teile Variablen, deren Lebenszeiten komplett innerhalb einesGrundblocks liegen, mit lokalem Verfahren zu.Teile übrige Variablen mit globalem Verfahren zu. Beachtedabei Interferenzen mit bereits lokal vergebenen Registern.Lokales Verfahren kann oft mit Befehlsauswahl kombiniertwerden.

Nutze höhere Geschwindigkeit/besseres Auslagerungsverhalten fürlokale Variablen, ohne dass Werte an Grundblockgrenzen zurück inden Speicher geschrieben werden.

Registerzuteilung Sommersemester 2012 16 / 38

Page 24: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Kapitel 9: Registerzuteilung

1 Aufgabe

2 Grundlagen

3 Lokale Registerzuteilung

4 Linear Scan Register Allokation

5 Graphfärbung

6 Constraints

Registerzuteilung Sommersemester 2012 17 / 38

Page 25: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Linear Scan Register Allokation

Die Laufzeit der Graphfärbung ist (sehr) hoch.Codequalität von rein lokalen Verfahren schlecht.Linear-scan register allocation ist eine Erweiterung des on thefly Ansatzes.

Registerzuteilung Sommersemester 2012 18 / 38

Page 26: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Wiederholung: Grundblöcke

Grundblock: Befehlsfolge maximaler Länge mit Eigenschaft: wennein Befehl ausgeführt wird, dann alle genau einmal, also:

Grundblock beginnt mit einer Sprungmarke,enthält keine weiteren Sprungmarkenendet mit (bedingten) Sprüngen, enthält sonst keine weiterenSprüngeUnterprogrammaufrufe zählen nicht als Sprünge!

Registerzuteilung Sommersemester 2012 19 / 38

Page 27: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Ablaufgraph

Ablaufgraph (engl. Control Flow Graph):

Enthält einen Knoten für jeden Grundblock.Kanten zwischen Knoten repräsentieren mögliche Sprüngezwischen Grundblöcken.Es existieren 2 zusätzliche Knoten Start und EndEs gibt eine Kante von Start zu jedem Grundblock mit demdas Programm betreten werden kann.Es gibt eine Kante von jedem Grundblock mit dem dasProgramm verlassen werden kann zu End.

Der Ablaufgraph ist eine konservative Approximation: Allemöglichen Programmabläufe sind enthalten, kann allerdingszusätzliche Kanten enthalten.

Registerzuteilung Sommersemester 2012 20 / 38

Page 28: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel Ablaufgraph

int gcd(int a, int b){

while(b != a) {if(a > b)

a = a − b;else

b = b − a;}return a;

}

Start

while (b != a)

if (a > b)

a = a − b; b = b − a;

return a;

End

true false

Registerzuteilung Sommersemester 2012 21 / 38

Page 29: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Grundlagen: Graphtraversierung

Tiefensuche auf (Kontroll-)Flussgraph ergibt TiefensuchbaumBaumtraversierungsverfahren damit auf Graphen erweitert:

Präfixordnung Betrachte erst Knoten, dann seine Kinder (imTiefensuchbaum)Postfixordnung Betrachte erst Kinder dann den Knoten

Spezialfall: Umgekehrte Postfixordnung erzeugt für DAGs einetopologische Sortierung (vor jedem Kind kommen alle Eltern)Bei Ablaufgraphen gilt das auch, bis auf Schleifenköpfe

Registerzuteilung Sommersemester 2012 22 / 38

Page 30: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel Tiefensuchbaum

Start

A

B C

D

E

End

Präfixordnung:Start, A, B, E, End, C, DPostfixordnung:End, E, B, D, C, A, StartUmgekehrte Postfixordnung:Start, A, C, D, B, E, End

Tiefensuchbaum: Knoten + blaue KantenUmgekehrte Postfixordnung alle Vorgänger bevor Knoten betretenwird (abgesehen von Rückwärtskanten)

Registerzuteilung Sommersemester 2012 23 / 38

Page 31: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel Tiefensuchbaum

Start

A

B C

D

E

End

Präfixordnung:Start, A, B, E, End, C, DPostfixordnung:End, E, B, D, C, A, StartUmgekehrte Postfixordnung:Start, A, C, D, B, E, End

Tiefensuchbaum: Knoten + blaue KantenUmgekehrte Postfixordnung alle Vorgänger bevor Knoten betretenwird (abgesehen von Rückwärtskanten)

Registerzuteilung Sommersemester 2012 23 / 38

Page 32: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Linear Scan Algorithmus

AlgorithmusBerechne (globale) LebendigkeitsinformationErstelle Liste von Grundblöcken in umgekehrterPostfixordnung⇒ Position von Befehlen als Zahl darstellbarErzeuge Lebendigkeitsinterval für jede Variable. Intervalenthält alle Punkte an denen Variable lebendig istDurchlaufe sortierte Intervalliste:

Verwende allocReg() und freeReg() wie beim on the fly AnsatzAuslagern bei Bedarf. Lagere längstes verbleibende Intervallzuerst aus

Registerzuteilung Sommersemester 2012 24 / 38

Page 33: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Linear Scan – Linearisierung

w ← param0x ← param1y ← param2

print wprint x

print y

use w

z ← . . .

use z

w ← param0x ← param1y ← param2

print w

print x

print y

use w

z ← . . .

use z

Eine Linearisierung kann Grundblöcke unnötigerweise überdecken.

Registerzuteilung Sommersemester 2012 25 / 38

Page 34: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Linear Scan – Erweiterungen

Es existieren verschiedene Verbesserungen um Schwächen desoriginalen Linear-Scan Ansatz zu beheben:

Mehrere Intervalle pro Variablen: Ausnutzen von „Lücken“ inden Lebenszeiten.Handhabung von Register-BeschränkungenKein Freihalten von Registern für Reloads; erzeuge stattdessenneue IntervalleSplitten von Intervallen

Registerzuteilung Sommersemester 2012 26 / 38

Page 35: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Kapitel 9: Registerzuteilung

1 Aufgabe

2 Grundlagen

3 Lokale Registerzuteilung

4 Linear Scan Register Allokation

5 Graphfärbung

6 Constraints

Registerzuteilung Sommersemester 2012 27 / 38

Page 36: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Registerzuteilung mit Graphfärbung (nach Chaitin)

Prinzip (Chaitin 1981):Konstruiere für jede Prozedur einen InterferenzgraphKnoten sind die Variablen (auch temporäre) des ProgrammsKnoten e, e′ durch Kante verbinden falls VariableninterferierenGraphfärbung mit minimaler Farbanzahl (chromatische Zahlχ(G)) liefert die Minimalanzahl benötigter Register undgleichzeitig die Registerzuteilung.

Registerzuteilung Sommersemester 2012 28 / 38

Page 37: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Algorithmus nach Chaitin

Ist Register-Interferenz-Graph mit k (=Anzahl der Register)Farben färbbar?Aber: Bestimmung der chromatischen Zahl ist NP-vollständigHinreichendes Kriterium liefert folgende lineare Heuristik:

1 Wähle Knoten n mit Grad kleiner k aus.2 Nicht möglich? Ausgabe: Weiß nicht, ob k-färbbar.

(⇒ Auslagern)3 Sonst eliminiere n und seine Kanten.4 Gehe zu 1. wenn Graph nicht leer.

Sonst Ausgabe: k-färbbar.Färbe Graphen in umgekehrter Eliminierungsfolge

Registerzuteilung Sommersemester 2012 29 / 38

Page 38: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel – Interferenzgraph

t25

t27 t24

t5 t7

t4

t10

t11

t5 = 1

t27 = 3t7 = 2

t4 = 0

t24 = 5call(&x,t5,t7,t27,t25,t24)

st(t10, &z)t10 = t5 + t7st(t11, &y)

t25 = 4

t11 = t5 + t7

call(&printf,“%x“,t4)

Lebens-

zeiten Programm

Interferenzgraph

call(&printf,“%x%x“,t5,t10)

Registerzuteilung Sommersemester 2012 30 / 38

Page 39: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel: Knoten eliminieren und färben (k = 5)

t24

t25

t27

t5

t7

t11

t4

t10

Registerallokation:

t10: R1t24: R1t11: R1t4: R2t5: R3t7: R4t25: R2t27: R5

Eliminiert:

Registerzuteilung Sommersemester 2012 31 / 38

Page 40: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel: Knoten eliminieren und färben (k = 5)

t24

t25

t27

t5

t7

t11

t4

t10

Registerallokation:

t10: R1t24: R1t11: R1t4: R2t5: R3t7: R4t25: R2t27: R5

Eliminiert: t27,

Registerzuteilung Sommersemester 2012 31 / 38

Page 41: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel: Knoten eliminieren und färben (k = 5)

t24

t25

t27

t5

t7

t11

t4

t10

Registerallokation:

t10: R1t24: R1t11: R1t4: R2t5: R3t7: R4t25: R2t27: R5

Eliminiert: t27, t25,

Registerzuteilung Sommersemester 2012 31 / 38

Page 42: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel: Knoten eliminieren und färben (k = 5)

t24

t25

t27

t5

t7

t11

t4

t10

Registerallokation:

t10: R1t24: R1t11: R1t4: R2t5: R3t7: R4t25: R2t27: R5

Eliminiert: t27, t25, t7,

Registerzuteilung Sommersemester 2012 31 / 38

Page 43: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel: Knoten eliminieren und färben (k = 5)

t24

t25

t27

t5

t7

t11

t4

t10

Registerallokation:

t10: R1t24: R1t11: R1t4: R2t5: R3t7: R4t25: R2t27: R5

Eliminiert: t27, t25, t7, t5,

Registerzuteilung Sommersemester 2012 31 / 38

Page 44: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel: Knoten eliminieren und färben (k = 5)

t24

t25

t27

t5

t7

t11

t4

t10

Registerallokation:

t10: R1t24: R1t11: R1t4: R2t5: R3t7: R4t25: R2t27: R5

Eliminiert: t27, t25, t7, t5, t4,

Registerzuteilung Sommersemester 2012 31 / 38

Page 45: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel: Knoten eliminieren und färben (k = 5)

t24

t25

t27

t5

t7

t11

t4

t10

Registerallokation:

t10: R1t24: R1t11: R1t4: R2t5: R3t7: R4t25: R2t27: R5

Eliminiert: t27, t25, t7, t5, t4, t11,

Registerzuteilung Sommersemester 2012 31 / 38

Page 46: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel: Knoten eliminieren und färben (k = 5)

t24

t25

t27

t5

t7

t11

t4

t10

Registerallokation:

t10: R1t24: R1t11: R1t4: R2t5: R3t7: R4t25: R2t27: R5

Eliminiert: t27, t25, t7, t5, t4, t11, t24,

Registerzuteilung Sommersemester 2012 31 / 38

Page 47: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel: Knoten eliminieren und färben (k = 5)

t24

t25

t27

t5

t7

t11

t4

t10

Registerallokation:

t10: R1t24: R1t11: R1t4: R2t5: R3t7: R4t25: R2t27: R5

Eliminiert: t27, t25, t7, t5, t4, t11, t24, t10

Registerzuteilung Sommersemester 2012 31 / 38

Page 48: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel: Knoten eliminieren und färben (k = 5)

t24

t25

t27

t5

t7

t11

t4

t10

Registerallokation:t10: R1

t24: R1t11: R1t4: R2t5: R3t7: R4t25: R2t27: R5

Eliminiert: t27, t25, t7, t5, t4, t11, t24,

Registerzuteilung Sommersemester 2012 31 / 38

Page 49: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel: Knoten eliminieren und färben (k = 5)

t24

t25

t27

t5

t7

t11

t4

t10

Registerallokation:t10: R1t24: R1

t11: R1t4: R2t5: R3t7: R4t25: R2t27: R5

Eliminiert: t27, t25, t7, t5, t4, t11,

Registerzuteilung Sommersemester 2012 31 / 38

Page 50: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel: Knoten eliminieren und färben (k = 5)

t24

t25

t27

t5

t7

t11

t4

t10

Registerallokation:t10: R1t24: R1t11: R1

t4: R2t5: R3t7: R4t25: R2t27: R5

Eliminiert: t27, t25, t7, t5, t4,

Registerzuteilung Sommersemester 2012 31 / 38

Page 51: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel: Knoten eliminieren und färben (k = 5)

t24

t25

t27

t5

t7

t11

t4

t10

Registerallokation:t10: R1t24: R1t11: R1t4: R2

t5: R3t7: R4t25: R2t27: R5

Eliminiert: t27, t25, t7, t5,

Registerzuteilung Sommersemester 2012 31 / 38

Page 52: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel: Knoten eliminieren und färben (k = 5)

t24

t25

t27

t5

t7

t11

t4

t10

Registerallokation:t10: R1t24: R1t11: R1t4: R2t5: R3

t7: R4t25: R2t27: R5

Eliminiert: t27, t25, t7,

Registerzuteilung Sommersemester 2012 31 / 38

Page 53: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel: Knoten eliminieren und färben (k = 5)

t24

t25

t27

t5

t7

t11

t4

t10

Registerallokation:t10: R1t24: R1t11: R1t4: R2t5: R3t7: R4

t25: R2t27: R5

Eliminiert: t27, t25,

Registerzuteilung Sommersemester 2012 31 / 38

Page 54: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel: Knoten eliminieren und färben (k = 5)

t24

t25

t27

t5

t7

t11

t4

t10

Registerallokation:t10: R1t24: R1t11: R1t4: R2t5: R3t7: R4t25: R2

t27: R5

Eliminiert: t27,

Registerzuteilung Sommersemester 2012 31 / 38

Page 55: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Beispiel: Knoten eliminieren und färben (k = 5)

t24

t25

t27

t5

t7

t11

t4

t10

Registerallokation:t10: R1t24: R1t11: R1t4: R2t5: R3t7: R4t25: R2t27: R5

Eliminiert:

Registerzuteilung Sommersemester 2012 31 / 38

Page 56: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Iteratives Auslagern/Färben

Was, wenn kein Knoten mit Grad < k existiert?

1 Entferne Knoten aus Interferenz-Graph bis ein Knoten mitGrad < k existiert.

2 Entfernte Werte kommen nicht in Register, sondern werden inden Speicher ausgelagert. Dazu Lade- undSpeicheroperationen erzeugen.

3 Neuer Versuch: Interferenzgraph neu aufbauen und Heuristikerneut anwenden.

Lebendigkeit IG-Bauen Färben

Auslagern

nicht k-färbbar

Registerzuteilung Sommersemester 2012 32 / 38

Page 57: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Optimistisches Färben

Problemfall: Offensichtlich 2-färbbar aber kein Knoten mitGrad < 2Verbesserung: Optimistisches Färben (Briggs et.al.)

Falls kein Knoten mit Grad < k vorhanden, eliminiere Knotenmit Grad kWenn später keine Farbe frei ist zurück zum Auslagern

Registerzuteilung Sommersemester 2012 33 / 38

Page 58: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Kapitel 9: Registerzuteilung

1 Aufgabe

2 Grundlagen

3 Lokale Registerzuteilung

4 Linear Scan Register Allokation

5 Graphfärbung

6 Constraints

Registerzuteilung Sommersemester 2012 34 / 38

Page 59: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Constraints: 2-Adress Code Z2-Adress Code: Zielregister gleich einem Operandenregister.Beispiel: subl reg0, reg1 hat Semantik reg0 ←reg0 − reg1Mögliche Modelierungen:

Zähle Instruktion nicht als Definition sondern nimm Operand.Falls Operand nach Instruktion noch lebendig füge Kopie vorInstruktion ein und zähle diese als Definition.Modelliere als 3-Address Code und repariere nach Zuteilung:

op R0, R1 →R0 erfüllt 2-Adress Constraintsop R0, R1 →R1 falls op kommutativ: op R1, R0sub R0, R1 →R1 umformen zu neg R1; add R1, R0op R0, R1 →R1 falls op nicht kommutativ => Problem(Vermeiden durch Einfügen von zusätzlichen Kopien möglich)op R0, R1 →R2 umformen zu mov R0 →R2; op R2, R1

Registerzuteilung Sommersemester 2012 35 / 38

Page 60: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Constraints: Aufrufkonventionen, beschränkte Befehle ZTeilweise sind nur Teilmengen einer Registerklasse alsOperand/Ziel zulässig:

call-Argumente durch Aufrufkonventionen auf RegisterfestgelegtMaschinenspezifische Beschränkungen

Behandlung:Nur Teilmengen im Registerallokator erlauben:⇒ schränkt eventuell lange lebende Variablen stark ein:unnötiges Auslagern.Einfügen von Kopien, kurz vor beschränkter Instruktion. Führteventuell zu unnötigen Kopien.Benutze intelligenten Registerallokator der bei Bedarf Wertezwischen Registern verschiebt.

⇒ Forschungsthema: Beziehung zwischen einfügen vonzusätzlichen Kopien („Live Range Splitting“) und Eliminationunnötiger Kopien („Copy Elimination“).

Registerzuteilung Sommersemester 2012 36 / 38

Page 61: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Literatur I

Preston Briggs, Keith D. Cooper, and Linda Torczon.Improvements to graph coloring register allocation.ACM Transactions on Programming Languages and Systems,16(3):428–455, May 1994.

G. J. Chaitin.Register allocation & spilling via graph coloring.In SIGPLAN ’82: Proceedings of the 1982 SIGPLANsymposium on Compiler construction, pages 98–105, NewYork, NY, USA, 1982. ACM Press.Sebastian Hack, Daniel Grund, and Gerhard Goos.Register allocation for programs in SSA-form.In Compiler Construction, volume 3923. Springer, March 2006.

Registerzuteilung Sommersemester 2012 37 / 38

Page 62: Sprachtechnologie und Compiler - pp.ipd.kit.edu fileRegisterzuteilung(engl.RegisterAllocation) x ←param0 y ←param1 t 0 ←add x,y t 1 ←mul t 0,y... Gegeben:ProgrammmitangeordnetenBefehlenderZielmachine

Literatur II

Massimiliano Poletto and Vivek Sarkar.Linear scan register allocation.ACM Transactions on Programming Languages and Systems,21(5):895–913, 1999.

Christian Wimmer and Hanspeter Mössenböck.Optimized interval splitting in a linear scan register allocator.In VEE ’05: Proceedings of the 1st international conference onVirtual execution environments, pages 132–141, New York,NY, USA, 2005. ACM.

Registerzuteilung Sommersemester 2012 38 / 38