Upload
joie
View
41
Download
0
Embed Size (px)
DESCRIPTION
Lexikalsk- analyse. Syntax- analyse. Semantik- analyse. Mellemk.- optimering. Kode- generering. Kode- optimering. Compiler/fortolker struktur. - - - - - - - Front end - - - - - - - - -. Mellem- kode. - - - - - - - Back end - - - - - - - - -. Mellemkode. Tree-based repræsentation. - PowerPoint PPT Presentation
Citation preview
Compiler/fortolker struktur
Mellem-kode
Mellemk.-optimering
Kode-generering
Kode-optimering
Lexikalsk-analyse
Syntax-analyse
Semantik-analyse
- - - - - - - Front end - - - - - - - - -
- - - - - - - Back end - - - - - - - - -
Mellemkode.
Tree-based repræsentation.Mellemkode som et parsertræ.
Three-address koder:A:= b + c
int main (){ int a=0,b=2; while (b) { a= a+b; b--; }}
a= 0 b= 2l1: ifz b goto l2 a= a + b b= b – 1 goto l1l2:
Three-address kodeoptimering.
1. Find basic blokke.
2. Optimer hver basic blok:– Commom sub-expression
– Copy propagation
– Dead-code elimination
– Arithmetic transform• Constant folding
• Algebraic transform
• Reduction in strength
– Packing af mellemvariable.
3. Loop optimering.
Basic blokke
a= 0 b= 2l1: ifz b goto l2 a= a + b b= b – 1 goto l1l2:
Blok start:• Første statement• Label, der hoppes til• Statement efter et branch
Basic blok optimering.– Commom sub-expression
Samme beregning flere gange.
– Copy propagationSamme værdi i flere variable. Erstat alle med en.
– Dead-code eliminationVariable, der ikke bruges, slettes.
– Arithmetic transform• Constant folding
Beregn konstanter
• Algebraic transform+ 0, - 0, * 1 og /1
• Reduction in strengthFx: 2*x -> x+x
– Packing af mellemvariableFrigiv overflødig plads til mellemvariable.
Commom sub-expression
b := 4 - 2t1 := b / 2t2 := a * t1t3 := t2 * bt4 := t3 + ct5 := t2 * bt6 := t5 + cd := t4 * t6
b := 4 - 2t1 := b / 2t2 := a * t1t3 := t2 * bt4 := t3 + ct5 := t3t6 := t5 + cd := t4 * t6
Copy propagation
b := 4 - 2t1 := b / 2t2 := a * t1t3 := t2 * bt4 := t3 + ct5 := t3t6 := t5 + cd := t4 * t6
b := 4 - 2t1 := b / 2t2 := a * t1t3 := t2 * bt4 := t3 + ct5 := t3t6 := t3 + cd := t4 * t6
b := 4 - 2t1 := b / 2t2 := a * t1t3 := t2 * bt4 := t3 + ct5 := t3t6 := t4d := t4 * t4
Dead-code elimination
b := 4 - 2t1 := b / 2t2 := a * t1t3 := t2 * bt4 := t3 + ct5 := t3t6 := t4d := t4 * t4
b := 4 - 2t1 := b / 2t2 := a * t1t3 := t2 * bt4 := t3 + cd := t4 * t4
Arithmetic transform
b := 4 - 2t1 := b / 2t2 := a * t1t3 := t2 * bt4 := t3 + cd := t4 * t4
b := 2t1 := b / 2t2 := a * t1t3 := t2 * bt4 := t3 + cd := t4 * t4
t1 := 1t2 := a * t1t3 := t2 * 2t4 := t3 + cd := t4 * t4
t2 := a t3 := t2 * 2t4 := t3 + cd := t4 * t4
Loop optimering.
1
2
3 4
5
6
1
2b
3 4
5
6
2a
Kodegenerering.
a= 0 b= 2l1: ifz b goto l2 a= a + b b= b – 1 goto l1l2:
Globale og static variable:Når navn indsættes i symboltabellenså SymAdr= Nextstatic;
Nextstatic=+ VarSize;Lokal variable:
Hvis første: NextLokal= 0;Ellers: SymAdr= NextLokal;
NextLokal=+ VarSize;
For hver linie i mellemkode: Generer koden vha informationer fra symboltabellen.
Labels:Anvendelse: Kik i symboltabellen om den er defineret ellers gem i tabellen, hvor den bruges.Oprettelse: Labeladr= LC. Hvis gemte anvendelser, så sæt referencer til LabelAdr.