69
Seminar „Übersetzung von künstlichen Sprachen“ SS09 Code- Erzeugung Arne Kostulski ( [email protected] )

Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( [email protected] )

Embed Size (px)

Citation preview

Page 1: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Code-ErzeugungArne Kostulski

( [email protected] )

Page 2: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

2

Seminar „Übersetzung von künstlichen Sprachen“ SS09

1. Abgrenzung, Motivation, Einordnung2. Grundlagen3. Code-Repräsentation4. Code-Erzeugung5. Fazit und weiterführende Themen

Page 3: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

3

Seminar „Übersetzung von künstlichen Sprachen“ SS09

1. Abgrenzung, Motivation, Einordnung2. Grundlagen3. Code-Repräsentation4. Code-Erzeugung5. Fazit und weiterführende Themen

Page 4: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

4

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Abgrenzung und Motivation

Effizienz durch Automatisierung

Page 5: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

5

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Einordnung innerhalb des Kompilierungsprozesses

Page 6: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

6

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Einordnung innerhalb des Kompilierungsprozesses

Page 7: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

7

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Einordnung innerhalb des Kompilierungsprozesses

1.

Page 8: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

8

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Einordnung innerhalb des Kompilierungsprozesses

1.

2.

3.

Page 9: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

9

Seminar „Übersetzung von künstlichen Sprachen“ SS09

1. Abgrenzung, Motivation, Einordnung2. Grundlagen * Zielgrößen * Entwurfsfaktoren * Kernaufgaben * Referenzmaschine3. Code-Repräsentation4. Code-Erzeugung 5. Fazit und weiterführende Themen

Page 10: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

10

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Zielgrößen

Semantische Korrektheit

Laufzeiteffizienz

Virtuelle Speichernutzung

Physische Speichernutzung

Kompilierzeit

Heuristiken für komplexe Optimierungsprobleme

konträr

Page 11: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

11

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Speicherhierarchie

Page 12: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

12

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Speicherhierarchie

Page 13: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

13

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Registerverwendung

AufgabenRegisterzuteilung

Registerauswahl

ZielTotale Lade- und Speicherzeiten minimieren

Architekturparameter

Registeranzahl

Kernaufgabe

Registerverwendung

Page 14: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

14

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Instruktionsselektion

AufgabeAuswahl von Instruktionskombination

ZielMinimiere totale Instruktionskosten!

BeispielZwischencode: a := a + 1

Zielcode: LD R, aADD R, R, #1ST a, R

121

111

∑ 4 ∑ 3

Architekturparameter

Befehlssatz

Kernaufgabe

Instruktionsselektion

LD R, aINC aST a, R

Page 15: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

15

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Architekturparameter

Anzahl der Prozessorkerne

Kernaufgabe

Instruktionsanordnung

Instruktionsanordnung

AufgabeBefehlsfolgen reorganisieren

ZieleCode-Vereinfachung

Bessere Registerausnutzung

Parallelisierung unabhängiger Befehle

Page 16: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

16

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Instruction Set Architecture (ISA)Complex Instruction Set Computer (CISC)

Reduced Set Computer (RISC)

Very Long Instruction Word (VLIW)

Architekturparameter

RegisteranzahlBefehlssatzAnzahl der Prozessorkerne

Kernaufgaben

RegisterzuteilungInstruktionsselektionInstruktionsanordnung

Kernaufgaben und ISA

Page 17: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

17

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Abstrakte Zielmaschine - Zielsprache

Notation für Operationen:

Bsp.: MUL R3, R1, R2

OP <destination>, <source>, <source>, mit

<destination> = Ri

| { Kleinbuchstabe }

<source> = Ri

| { Kleinbuchstabe }

| „#“ { Ziffer }

OP = ADD | SUB | MUL | DIV

Ausnahmen:LD R, x ST x, R

Page 18: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

18

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Abstrakte Zielmaschine

DefinitionZielsprache

Universalregister: R1, …,Rn

Administrative Register separat

Adressierungen

Page 19: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

19

Seminar „Übersetzung von künstlichen Sprachen“ SS09

1. Abgrenzung, Motivation, Einordnung 2. Grundlagen3. Code-Repräsentation * Basisblöcke * Flussgraphen * DAG4. Code-Erzeugung 5. Fazit und weiterführende Themen

Page 20: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

20

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Code-Repräsentation: Basisblöcke

Strukturierung des ZwischencodesKontrollfluss

Variablenverwendung

BasisblockMinimale Sequenz von Instruktionen

Blockanfänge definiert durch:a) Die erste Instruktion des Zwischencodes.

b) Jede direkte Nachfolge-Instruktion eines Sprunges.

c) Jede Zielinstruktion eines (bedingen oder unbedingten) Sprungbefehls.

Page 21: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

21

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Code-Repräsentation: BasisblöckeBeispiel

a) Die erste Instruktion des Zwischencodes.

Page 22: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

22

Seminar „Übersetzung von künstlichen Sprachen“ SS09

// B1: Fall a)

// B2: Fall c)

// B3: Fall b)

// B4: Fall b)

// B5: Fall b)

// B6: Fall b)

Code-Repräsentation: BasisblöckeBeispiel

a) Die erste Instruktion des Zwischencodes.

Page 23: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

23

Seminar „Übersetzung von künstlichen Sprachen“ SS09

// B1: Fall a)

// B2: Fall c)

// B3: Fall b)

// B4: Fall b)

// B5: Fall b)

// B6: Fall b)

Code-Repräsentation: BasisblöckeBeispiel

b) Jede direkte Nachfolge-Instruktion eines Sprunges.

Page 24: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

24

Seminar „Übersetzung von künstlichen Sprachen“ SS09

// B1: Fall a)

// B2: Fall c)

// B3: Fall b)

// B4: Fall b)

// B5: Fall b)

// B6: Fall b)

Code-Repräsentation: BasisblöckeBeispiel

b) Jede direkte Nachfolge-Instruktion eines Sprunges.

Page 25: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

25

Seminar „Übersetzung von künstlichen Sprachen“ SS09

// B1: Fall a)

// B2: Fall c)

// B3: Fall b)

// B4: Fall b)

// B5: Fall b)

// B6: Fall b)

Code-Repräsentation: BasisblöckeBeispiel

c) Jede Zielinstruktion eines (bedingen oder unbedingten) Sprungbefehls.

Page 26: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

26

Seminar „Übersetzung von künstlichen Sprachen“ SS09

// B1: Fall a)

// B2: Fall c)

// B3: Fall b)

// B4: Fall b)

// B5: Fall b)

// B6: Fall b)

Code-Repräsentation: BasisblöckeBeispiel

c) Jede Zielinstruktion eines (bedingen oder unbedingten) Sprungbefehls.

Page 27: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

27

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Code-Repräsentation: BasisblöckeErgebnis

// B1: Fall a)

// B2: Fall c)

// B3: Fall b)

// B4: Fall b)

// B5: Fall b)

// B6: Fall b)

Page 28: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

28

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Code-Repräsentation: Flussgraphen

Flussgraph gerichteter, zyklischer Graph G=(V,E) mit

Knotenmenge V: Menge aller Basisblöcke (Block als Blackbox)

Kantenmenge E: e(Bi, Bj) Є E genau dann, wenn:

a) Bj folgt direkt auf Bi in der Programmfolge und Bi ohne unbedingten Sprung.

b) Bj ist Ziel eines Sprungbefehls.

Page 29: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

29

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Code-Repräsentation: Flussgraphen

B1

B2

B3

B4

B5

B6

Beispiel:a) Bj folgt direkt auf Bi in der Programmfolge und Bi enthält keinen

unbedingten Sprung.

Page 30: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

30

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Code-Repräsentation: Flussgraphen

B1

B2

B3

B4

B5

B6

Beispiel:b) Bj ist Ziel eines Sprungbefehls.

Page 31: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

31

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Code-Repräsentation: Blockoptimierung mit DAG

Innendarstellung eines Blocksgerichteter, azyklischer Graph (DAG)

ZieleRegisterausnutzung verbessern

Code-Vereinfachung

Toten Code eliminieren

Elemente

Initiale Variable

Operation Label

Page 32: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

32

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Code-Repräsentation: Blockoptimierung mit DAG

DAG-Konstruktion

1. a := b * c2. c := a + d3. b := a * b

Erzeuge

- Blatt / Blätter- Operationssymbol- Kanten- Label

Page 33: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

33

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Code-Repräsentation: Blockoptimierung mit DAG

DAG-Konstruktion

1. a := b * c2. c := a + d3. b := a * b

Erzeuge

- Blatt / Blätter - Operationssymbol- Kanten- Label

Page 34: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

34

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Code-Repräsentation: Blockoptimierung mit DAG

DAG-Konstruktion

1. a := b * c2. c := a + d3. b := a * b

Erzeuge

- Blatt / Blätter - Operationssymbol- Kanten- Label

Page 35: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

35

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Code-Repräsentation: Blockoptimierung mit DAG

Code-Vereinfachung

, d1. a := b * c2. c := a + d3. b := a * b4. d := a + d

1. a := b * c2. c := a + d3. b := a * b4. d := c

Erzeuge

- Blätter- Operationssymbol- Kanten- Label

Page 36: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

36

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Code-Repräsentation: Blockoptimierung mit DAG

Lebendigkeit von Variablen

Eine Variable x ist lebendig in Anweisung Ai (1 ≤ i < n), wenn:

x in Anweisung A1 ein Wert zugewiesen wird,

x in Anweisung An als Operand benutzt bzw. gelesen wird,

x zwischen A1 und An kein Wert zugewiesen wird.

x hat bei Ai die nächste Verwendung in An, wenn An der erste Lesezugriff auf x nach A1 ist.

Eine am Basisblockende lebendige Variable heißt live on exit.

Page 37: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

37

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Code-Repräsentation: Blockoptimierung mit DAG

Toter CodeInstruktionen mit nicht benötigten Ergebnissen

Beispielc, d nicht live on exit

XX

X

X

Page 38: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

38

Seminar „Übersetzung von künstlichen Sprachen“ SS09

1. Abgrenzung, Motivation, Einordnung 2. Grundlagen3. Code-Repräsentation4. Code-Erzeugung * Elementare Code-Erzeugung * Globale Registerzuteilung * Optimale Code-Erzeugung * Peephole-Optimierung5. Fazit und weiterführende Themen

Page 39: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

39

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Elementare Code-Erzeugung

Register-DeskriptorZuordnungen: Register Variablennamen

Adressen-DeskriptorZuordnungen: Variablen Speicheradresse

Annahmen für ZielmaschineLD und ST explizit

keine globalen RegisterVariablen mit nächster Verwendung am Blockanfang zu laden

live on exit-Variablen zu speichern

Page 40: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

40

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Elementare Code-Erzeugung

Hilfsfunktion getReggetReg(B) mit Drei-Adress-Befehl B

Für a := b OP cLade nötige Variablen

Führe den Befehl OP Ra, Rb, Rc aus.

Fallunterscheidungen für Code-Erzeugung1. LD R, a

2. ST a, R

3. a := b OP c

4. a := b

Page 41: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

41

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Elementare Code-Erzeugung

Register-Deskriptor Adress-Deskriptor

¬live on exit live on exit

Zwischencode Zielcode Regel R1 R2 R3a b c d

Beispiel: a := b * c

Page 42: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

42

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Elementare Code-ErzeugungRegister-

Deskriptor

Adress-Deskriptor

¬lebendig

Blockende

lebendig

Blockende

Zwischencode Zielcode Regel R1 R2 R3a b c d

1. a := b * c b c d

2. LD R1, b 1 b b,R1 c d

3. LD R2, c 1 b c b,R1 c, R2 d

4.a := b OP c (mit den Registern Ra, Rb, Rc)4.1 Falls b bzw. c nicht im Register, führe LD Rb, b bzw. LD Rc, c aus.[…]

5.LD R, a1.1 Der Inhalt von R im Register-Deskriptor ist durch a zu ersetzen1.2 Füge im Adress-Deskriptor R zu a hinzu.

Page 43: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

43

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Elementare Code-ErzeugungRegister-

Deskriptor

Adress-Deskriptor

¬lebendig

Blockende

lebendig

Blockende

Zwischencode Zielcode Regel R1 R2 R3a b c d

1. a := b * c b c d

2. LD R1, b 1 b b,R1 c d

3. LD R2, c 1 b c b,R1 c, R2 d

4. MUL R2, R1, R2 3 b c, a R2 b,R1 c, R2 d

4. a := b OP c (mit den Registern Ra, Rb, Rc)4.1 Falls b bzw. c nicht im Register, führe LD Rb, b bzw. LD Rc, c aus.4.2 Der Inhalt von Ra im Register-Deskriptor ist durch a zu ersetzen.4.3 Der Inhalt von a im Adress-Deskriptor ist durch Ra zu ersetzen.4.4 Entferne Ra von allen anderen Variablen im Adress-Deskriptor.

Page 44: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

44

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Elementare Code-Erzeugung

Register-

Deskriptor

Adress-Deskriptor

¬lebendig

Blockende

lebendig

Blockende

Zwischencode Zielcode Regel R1 R2 R3a b c d

4. MUL R2, R1, R2 3 b a R2 b,R1 c, R2 d

5. EXIT

6. ST a, R2 c a a, R2 b, R1 c d

2.ST a, RDer Inhalt von a im Adress-Deskriptor ist durch R zu ersetzen.

Page 45: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

45

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Globale Register

ProblemViele Hauptspeicherzugriffe

ST a, R1

LD R1, a

LösungST a, R1

LD R1, a

ProblemST a, R1

if … then goto …

LD R1, a

Page 46: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

46

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Globale Register

BeispielBetrachte Variable b

Lesezugriff LD R, a

Page 47: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

47

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Globale Register

BeispielBetrachte Variable b

Lesezugriff LD R, a

Schreibzugrifflive on exit

LösungRegisterinhalte überdauern Basisblöcke

Registerzuteilung?Bewertung:

Page 48: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

48

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Graphfärbung

ProblemRegister voll

Registerauswahl?

Lebensspanne für ideelle Register

Hier: Graph 2-fach färbbar

Kollisionen unvermeidbar Zwischenspeicherung

Page 49: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

49

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Instruktionsselektion

Idee: Alternative Instruktionskombinationen

+Ma

C1Ri

=

Page 50: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

50

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Optimale Code-Erzeugung

ZielCode mit minimaler Registeranzahl

BerücksichtigtRegisterzuteilung

Registerauswahl

Instruktionsanordnung

BasisDirected Acyclic Graph (DAG)

Procedere:1. Annotiere Ershov-Nummern an Graph-Knoten

2. Führe Generierungsalgorithmus aus

Page 51: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

51

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Optimale Code-Erzeugung

Ershov-Nummer für Knoten v:

val(v) =

a := b * cc := a * bd := a + de := c + d

Page 52: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

52

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Optimale Code-Erzeugung

Ershov-Nummer für Knoten v:

val(v) =

a := b * cc := a * bd := a + de := c + d

1 1

1

Page 53: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

53

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Optimale Code-Erzeugung

Ershov-Nummer für Knoten v:

val(v) =

a := b * cc := a * bd := a + de := c + d

1 1

12

Page 54: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

54

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Optimale Code-Erzeugung

Ershov-Nummer für Knoten v:

val(v) =

a := b * cc := a * bd := a + de := c + d

1 1

12

2 2

3

Page 55: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

55

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Optimale Code-Erzeugunggencode(v, b)

1. if v hat Kindknoten vl, vr mit label(vl) = label(vr) then

1.1 k := label(vl)

1.2 Rb+k := gencode(vr, b+1)

1.3 Rb+k-1 := gencode(vl, b)

1.4 print(name(v), Rb+k, Rb+k-1, Rb+k)

2. else if v hat Kindknoten vl, vr mit label(vl) < label(vr) then

2.1 k := label(vr)

2.2 Rb+k-1 := gencode(vr, b)

2.3 m := label(vl)

2.4 Rb+m-1 := gencode(vl, b)

2.5 print(name(v), Rb+k-1, Rb+m-1, Rb+k-1)

3. else if v hat Kindknoten vl, vr mit label(vl) > label(vr) then

3.1 k := label(vl)

3.2 Rb+k-1 := gencode(vl, b)

3.3 m := label(vr)

3.4 Rb+m-1 := gencode(vr, b)

3.5 print(name(v), Rb+k-1, Rb+k-1, Rb+m-1)

4. else // v ist Blattknoten

4.1 print(„LD“, Rb, name(v))

gencode-Algorithmus

fRegel Code v b vl vrk R1 R2 R3

a) k := label(v1) v11 v2 v3

3

b) R3:= gencode(v1, 1) v11 v2 v3

3

1.1 k := label(v2) v11 v2 v3

2

1.2 R3 := gencode(v3, 2) v11 v2 v3

2

   3.1 k := label(v4) v32 v4 v5

2

   3.2 R3 := gencode(v4, 2) v32 v4 v5

2

      1.1 k := label(v6) v42 v6 v7

1

      1.2 R3 := gencode(v7, 3) v73 - - 1

         4.1 print(„LD“, R3, c) v73 - - 1 c0

      1.3 R2 := gencode(v6, 2) v62 - - 1 c0

         4.1 print(„LD“, R2, b) v62 - - 1 b0 c0

      1.4 print(„MUL“, R3, R2, R3) v42 v6 v7

1 b0a

   3.3 m := label(v5) // m := 1 v32 v4 v5

2 b0a

   3.4 R2 := gencode(v5, 2) v32 v4 v5

2 b0a

      4.1 print(„LD“, R2, d) v52 - - 1 d0

a

   3.5 print(„ADD“, R3, R2, R3) v32 v4 v5

2 d0d

1.3 R2 := gencode(v2, 1) v11 v2 v3

2 d0d

   2.1 k := label(v4) v21 v6 v4

2 d0d

   2.2 R2 := gencode(v4, 2) v21 v6 v4

2 d0d

Beispiel

Page 56: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

56

Seminar „Übersetzung von künstlichen Sprachen“ SS09

gencode

Optimale Code-Erzeugung

Regel Code v b vl vrk R1 R2 R3

LD R3, c

LD R2, b

1 1

12

2 2

3

Page 57: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

57

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Optimale Code-Erzeugung

MUL“, R3, R2, R3

1 1

12

2 2

3

Page 58: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

58

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Optimale Code-Erzeugung

1 1

12

2 2

3

1 1

12

2 2

3

Page 59: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

59

Seminar „Übersetzung von künstlichen Sprachen“ SS09

…c := a * bd := a + de := c + da := b * cST a, R1

LD R1, ac := a * bd := a + de := c + d…

ProblemKomplexität

IdeeLokale Suche im “Gucklock”

BeispielViele HauptspeicherzugriffeST a, R1

LD R1, a

Peephole Optimization

Page 60: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

60

Seminar „Übersetzung von künstlichen Sprachen“ SS09

1. Abgrenzung, Motivation, Einordnung 2. Grundlagen3. Code-Repräsentation * Basisblöcke * Flussgraphen4. Code-Erzeugung 5. Fazit und weiterführende Themen

Page 61: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

61

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Fazit

GelöstElementare Codeerzeugung

Erzeugung mit minimaler Registeranzahl

AnsätzeRegisterverwendung

Instruktionsselektion

Instruktionsanordnung

OffenErweiterte Heuristiken

Parallelisierung

Just-In-Time-Compilation

Page 62: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

62

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Diskussion

Page 63: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

63

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Code-Repräsentation

DAG-KonstruktionFür jeden Drei-Adress-Befehl der Form a := b OP c eines Basisblocks B:

1. Suche nach Vorkommen von b und c in Blättern, Knoten und Labels des Graphs (dies entspricht einer vorigen Benutzung der Variablen). Erzeuge für nicht existierende Variablen neue Blätter mit ihrem Variablennamen und dem Index 0 als Kennzeichnung der Erstverwendung.

2. Erzeuge für OP einen Knoten mit dem Operationssymbol und setze b als linken, c als rechten Kindknoten für OP.

3. Füge a als Label an OP an.

BACKUP

Page 64: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

64

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Elementare Code-Erzeugung

Eintragung in die Deskriptoren1. LD R, a

1.1 Der Inhalt von R im Register-Deskriptor ist durch a zu ersetzen.

1.2 Füge im Adress-Deskriptor R zu a hinzu.

2. ST a, RDer Inhalt von a im Adress-Deskriptor ist durch R zu ersetzen.

3. a := b OP c (mit den Registern Ra, Rb, Rc)3.1 Falls b bzw. c nicht im Register, führe LD Rb, b bzw. LD Rc, c aus.

3.2 Der Inhalt von Ra im Register-Deskriptor ist durch a zu ersetzen.

3.3 Der Inhalt von a im Adress-Deskriptor ist durch Ra zu ersetzen.

3.4 Entferne Ra von allen anderen Variablen im Adress-Deskriptor.

4. a := b (mit den Registern Ra, Rb)4.1 Falls b nicht im Register, führe LD Rb, b aus (siehe 1.).

4.2 Der Inhalt von Rb im Register-Deskriptor ist durch a zu ergänzen.

4.3 Der Inhalt von a im Adress-Deskriptor ist durch Rb zu ersetzen.

BACKUP

Page 65: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

65

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Elementare Code-ErzeugungRegister-Deskriptor Adress-Deskriptor

¬lebendig

Blockende

lebendig Blockende

Zwischencode Zielcode Regel R1 R2 R3a b c d

1. a := b * c b c d

2. LD R1, b 1 b b,R1 c d

3. LD R2, c 1 b c b,R1 c,R2 d

4. MUL R2, R1, R2 3 b a R2 b,R1 c,R2 d

5. c := a + d

6. LD R3, d 1 b a d R2 b,R1 c R3

7. ADD R3, R2, R3 3 b a c R2 b,R1 R3 R3

8. EXIT

9. ST c, R1 c a c,d R2 b c,R1 R3

10. ST d, R3 c a c,d R2 b c,R1 d,R3

BACKUP

Page 66: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

66

Seminar „Übersetzung von künstlichen Sprachen“ SS09

Elementare Code-ErzeugungRegister-Deskriptor Adress-Deskriptor

¬lebendig

Blockende

lebendig Blockende

Zwischencode Zielcode Regel R1 R2 R3a b c d

10. ST d, R3 c a c,d R2 b c,R1 d,R3

11. MUL R1, R2, R1 3 c a c,d R2 b,R1 R1 R3

12. EXIT

13. ST c, R1 c a c,d R2 b c,R1 R3

14. ST d, R3 c a c,d R2 b c,R1 d,R3

15. c d

BACKUP

Page 67: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

67

Seminar „Übersetzung von künstlichen Sprachen“ SS09

BACKUP Optimale CodeerzeugungFunktionsaufruf:a) k := label(vroot)b) Rk := gencode(vroot, 1)Funktionsdeklaration:gencode(v, b)1. if v hat Kindknoten vl, vr mit label(vl) = label(vr) then1.1. k := label(vl)1.2. Rb+k := gencode(vr, b+1)1.3. Rb+k-1 := gencode(vl, b)1.4. print(name(v), Rb+k, Rb+k-1, Rb+k)2. else if v hat Kindknoten vl, vr mit label(vl) < label(vr) then2.1. k := label(vr)2.2. Rb+k-1 := gencode(vr, b)2.3. m := label(vl)2.4. Rb+m-1 := gencode(vl, b)2.5. print(name(v), Rb+k-1, Rb+m-1, Rb+k-1)3. else if v hat Kindknoten vl, vr mit label(vl) > label(vr) then3.1. k := label(vl)3.2. Rb+k-1 := gencode(vl, b)3.3. m := label(vr)3.4. Rb+m-1 := gencode(vr, b)3.5. print(name(v), Rb+k-1, Rb+k-1, Rb+m-1)4. else // v ist Blattknoten4.1. print(„LD“, Rb, name(v))

Page 68: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

68

Seminar „Übersetzung von künstlichen Sprachen“ SS09

BACKUP Optimale CodeerzeugungRegel Code v b vl vr

k R1 R2 R3

a) k := label(v1) v11 v2 v3

3

b) R3:= gencode(v1, 1) v11 v2 v3

3

1.1 k := label(v2) v11 v2 v3

2

1.2 R3 := gencode(v3, 2) v11 v2 v3

2

   3.1 k := label(v4) v32 v4 v5

2

   3.2 R3 := gencode(v4, 2) v32 v4 v5

2

      1.1 k := label(v6) v42 v6 v7

1

      1.2 R3 := gencode(v7, 3) v73 - - 1

         4.1 print(„LD“, R3, c) v73 - - 1 c0

      1.3 R2 := gencode(v6, 2) v62 - - 1 c0

         4.1 print(„LD“, R2, b) v62 - - 1 b0 c0

      1.4 print(„MUL“, R3, R2, R3) v42 v6 v7

1 b0a

   3.3 m := label(v5) // m := 1 v32 v4 v5

2 b0a

   3.4 R2 := gencode(v5, 2) v32 v4 v5

2 b0a

      4.1 print(„LD“, R2, d) v52 - - 1 d0

a

   3.5 print(„ADD“, R3, R2, R3) v32 v4 v5

2 d0d

1.3 R2 := gencode(v2, 1) v11 v2 v3

2 d0d

   2.1 k := label(v4) v21 v6 v4

2 d0d

   2.2 R2 := gencode(v4, 2) v21 v6 v4

2 d0d

Page 69: Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( arne@kostulski.net )

69

Seminar „Übersetzung von künstlichen Sprachen“ SS09

BACKUP Optimale Codeerzeugung

… … siehe Schritte 6-12 mit b=1 … … … … . … … …

   2.3 m := label(v6) // m := 1 v21 v6 v4

2 b0a d

   2.4 R1 := gencode(v6, 1) v21 v6 v4

2 b0a d

      4.1 print(„LD“, R1, b) v61 - - 1 b0

a d

   2.5 print(„MUL“, R2, R1, R2) v21 v6 v4

2 b0c d

1.4 print(„ADD“, R3, R2, R3) v11 v2 v3

2 b0c e