96
Fordító részei Optimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október 9. Izsó Tamás Fordítás –Optimalizálás / 1

Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Fordító –OptimalizálásKód visszafejtés.

Izsó Tamás

2013. október 9.

Izsó Tamás Fordítás –Optimalizálás / 1

Page 2: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Section 1

Fordító részei

Izsó Tamás Fordítás –Optimalizálás / 2

Page 3: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Irodalom

Izsó Tamás Fordítás –Optimalizálás / 3

Page 4: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Irodalom

Izsó Tamás Fordítás –Optimalizálás / 4

Page 5: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Irodalom“01-fm-i-viii-9780120884780” — 2011/1/13 — 15:54 — page ii — #2

Izsó Tamás Fordítás –Optimalizálás / 5

Page 6: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Miért kell ismerni a fordítót?

általában a fordító által generált kódot kell visszafejteni;ha ismerjük a fordító által alkalmazott kódtranszformációt,hamarabb rájöhetünk az eredeti tartalomra;tesztelni kell a fordítót;mert a fordító is azokat az algoritmusokat használja akód elemzéshez, melyeket a modern decompiler-ek.(Miért, amikor a fordító rendelkezésére áll az eredetiforrás?)

Izsó Tamás Fordítás –Optimalizálás / 6

Page 7: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Fordító részei

karakter sorozat

Lexikaielemzo

tokenek sorozata

Szintaktikaianalízis

absztrakt szintaktikai fa

Szemantikaiellenorzés

absztrakt szintaktikai fa

Közbensokódge-nerálás

szimbólum-tábla

hiba logolás

közbenso ábrázolás

Gépfüggetlenkódopti-malizáló

közbenso ábrázolás

Kódgenerátor

processzor függo kód

Gépi kódfüggo

optimalizálás

processzor függo kód

Izsó Tamás Fordítás –Optimalizálás / 7

Page 8: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Lexikai elemzo

1 double calc( double initial, double rate )2 {3 double position;4 position = initial+rate*100;5 return position;6 }

Izsó Tamás Fordítás –Optimalizálás / 8

Page 9: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Lexikai elemzo

double calc( double initial, double rate ) \n{ \n double position; \n position = initial+rate*100; \n return position; \n } \n

DOUBLEID

calc"(" DOUBLE

ID

initial

"," DOUBLEID

rate")" "{"

DOUBLEID

position";"

ID

position "="

ID

position "+"ID

rate"*"

NUMBER

100

";" "RETURN"ID

position";"

Izsó Tamás Fordítás –Optimalizálás / 9

Page 10: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Token

token – szintaktikai kategória, csoport;élo nyelvben: ige, fonév, melléknév, tárgy;programozási nyelvekben: egész konstans, valós konstans,string, azonosító, operátor, kulcsszó, írásjelek;

lexéma – konkrét megvalósulása egy tokennek;attribútum – tokenhez rendelt tulajdonság, érték

elmaradhat (pl. T_FOR)típusegész konstans , valós konstans , sztring értéke;méret;élettartam;láthatóságstb.

nem token: szóköz, megjegyzés

Izsó Tamás Fordítás –Optimalizálás / 10

Page 11: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Blokk struktúra

i n t main ( ){

i n t a=1;i n t b=1;{

i n t a=3;p r i n t f ("%d %d \ n " , a , b ) ;

}

{i n t b=4;p r i n t f ("%d %d \ n " , a , b ) ;

}p r i n t f ("%d %d \ n " , a , b ) ;r e t u r n 0 ;

}

Izsó Tamás Fordítás –Optimalizálás / 11

Page 12: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Szimbólum tábla

a tokenizálás során keletkezett azonosítókat, és azazokhoz kapcsolódó attribútumokat tárolja;megorzi a blokkstruktúrát;OOP esetén a származtatást;gyorsan lehet benne keresni;

sokszor a kulcsszavakat is tartalmazza (pl. for, while).

Izsó Tamás Fordítás –Optimalizálás / 12

Page 13: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Szintaktikia analízis

lexikai elemzés után tokenek sorozatát kapjuk;cél a program szerkezetének az értelmezése akörnyezetfüggetlen nyelvtani szabályok (context-freegrammar CFG) alapján (muveletek, precedencia);cél a hibák felderítése;absztrakt szintaxisfa (abstract syntax tree – AST)elkészítése.

Izsó Tamás Fordítás –Optimalizálás / 13

Page 14: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Szintaktikia analízisre eredménye

function

body

stmtlist

stmtlist

endRETURN

NUM100

=

+

*

NUM100

identrate

identinitial

identposition

declist

endidentposition

paramlist

paramlist

endidentrate

identinitial

identcalc

Izsó Tamás Fordítás –Optimalizálás / 14

Page 15: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Szemantikai analízis célja

Olyan hibák felderítése, amit a CFG-ben nehéz, vagy nemlehet megadni.További információk gyujtése.

1 extern void f ( i n t n ) ;2 double calc ( )3 { i n t ∗p1 , ∗p2 ;4 i n t i , j ;5 . . . .6 p1 = p1 + i ; /∗ OK ∗ /7 p1 = p1 + p2 ; /∗ Hiba ∗ /8 i f ( f (∗p1 ) ) /∗ Hiba f ( ) void ∗ /9 {

10 i = j [ 2 ] ; /∗ Hiba ∗ /11 i = j [ p1 ] ; /∗ OK ∗ /12 }13 /∗ Nincs visszatérési érték ∗ /14 }

Izsó Tamás Fordítás –Optimalizálás / 15

Page 16: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Miért használunk közbenso kódot (Intermediatereprezentáció)

Assemblyelony – alkalmas az optimalizálásra;hátrány – gépfüggo;hátrány – minden egyes processzorra újrakellene írni az optimalizálót.

IRelony – alkalmas az optimalizálásra;elony – gépfüggetlen.

Izsó Tamás Fordítás –Optimalizálás / 16

Page 17: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

IR fajtái

Forrás program és a gépi kód közötti átmenet.Magas szintu — eredeti program visszaállítható (kivételmegjegyzések, tagolások). Felhasználják szintaxisvezérelt editorokban, pretty printing funkciókban. (pl.AST). A parser a fordításnál ezt állítja elo;Alacsony szintu — minden sora majdnem egy gépiutasításra fordítható;Közepes szintu — bizonyos struktúrákat megöriznek a jobboptimalizálás érdeképen. Például a magasszintu vezérlésiszerkezeteket vagy index operátorokat tartalmaznak.

Reprezentáció:

gráf alapú (AST, vezérlés-áram gráf, adatáram gráf) ;lineáris;vegyes.

Izsó Tamás Fordítás –Optimalizálás / 17

Page 18: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Intermediate Language (IL)

IL a közbenso ábrázolás (IR) nyelvtani szabályait tartalmazzaminden fordító saját IL-t használ, akár többet is;IL = magasszintu assembly nyelv

felhasználható regiszterek száma nincs korlátozva;assembly nyelv szintu vezérlési szerkezetekgépi utasításokat használnak, de egyes utasítások lehetnekmagasszintuek is

pl. call több assembly utasításra fordullegtöbb IL utasítás egy gépi utasításra fordítható

Izsó Tamás Fordítás –Optimalizálás / 18

Page 19: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Lineáris Intermediate Language típusai

egy operandusú (stack szervezésu gépek pl. JVM);két operandusú x ← x < op > y ;három operandusú z ← x < op > y ;

push 2push ymulpush xsub

egy operandusú

t1 = 2t2 = yt1 = t1 ∗ t2t3 = xt3 = t3 − t1

két operandusú

t1 = 2t2 = yt3 = t1 ∗ t2t4 = xt5 = t4 − t1

három operandusú

x − 2 ∗ y

Izsó Tamás Fordítás –Optimalizálás / 19

Page 20: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Adatfüggoségi gráf

1. loadAI r0, 0 → r12. add r1, r1 → r13. loadAI r0, 8 → r24. mult r1, r2 → r15. loadAI r0, 16 → r26. mult r1, r2 → r17. loadAI r0, 24 → r28. mult r1, r2 → r19. storeAI r1 → r0,0

ILOC kód

1

2

4

6

8

9

3

5

7

Izsó Tamás Fordítás –Optimalizálás / 20

Page 21: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Quadruples (négyes)

Muvelet Op1 Op2 EredményloadI 2 t1load y t2mult t1 t2 t3load x t4sub t4 t3 t5

Izsó Tamás Fordítás –Optimalizálás / 21

Page 22: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Triples (hármas)

A triples, indirekt triples ábrázolás csak ciklus éselágazásmentes, azaz alapblokkban alkalmazható. (Alapblokkdefiníciója késobb lesz.)

Zárójelben írt érték az adott utasítás eredményére hivatkozik.

(1) loadI 2(2) load y(3) mult (1) (2)(4) load x(5) sub (4) (3)

Hátránya, hogy a sorok átrendezése nehézkes.

Izsó Tamás Fordítás –Optimalizálás / 22

Page 23: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Indirekt triples

Zárójelbe írt érték az adott utasításhoz rendelt [j] indexenkeresztül hivatkozik arra az utasításra, melynek az eredményéthasználja. Ha az utasítás sorrendje változik, akkor az indexértéke is módosul.

Index sorszám[1] (1) loadI 2[2] (2) load y[3] (3) mult (1) (2)[4] (4) load x[5] (5) sub (4) (3)

Izsó Tamás Fordítás –Optimalizálás / 23

Page 24: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

SSA static single assignment

x ← ...y ← ...whi le ( x < k ){

x ← x + 1 ;y ← y + x ;

}

x0 ← ...y0 ← ...i f (x0 ≥ k ) goto nextloop : x1 ← φ(x0, x2) ;

y1 ← φ(y0, y2) ;x2 ← x1 + 1 ;y2 ← y1 + x2 ;i f (x2 < k ) goto loop

next : . . . .

Izsó Tamás Fordítás –Optimalizálás / 24

Page 25: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

SSA static single assignment

Fordítókkal foglalkozó tudomány a változó definiciós pontjának(def) azt a helyet nevezi, ahol a változó értéket kap. Egyváltozóhoz több helyen is rendelhetünk új értéket.A kifejezések jobb oldalán meghivatkozott változó a változóhasználatát (use) jelenti.SSA esetén a többször definiált változókat a definiálás helyénegy egyedi indexszel különböztetjük meg.A változók használatakor megmondjuk, hogy a használt (use)változó melyik utasításban kapott értéket, azaz hol definiáltuk.Ha a használt változó definiciós pontja nem egyértelmu, mert aprogram különbözo ágán eljutva, több ágon is definiáltuk aváltozót, akkor ennek leírására egy φ függvényt használunk.

1 A φ függvény megadja, hogy a változó értéke mely pontokbankaphatott értéket.

2 A φ függvény a fordítónak szól, belole kód nem keletkezik.3 A φ függvény paramétere minimum ketto, maximum akármennyi,

de csak indexben eltéro változó lehet.Izsó Tamás Fordítás –Optimalizálás / 25

Page 26: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Példa 3 operandusú IL-re

int a;int b; t0 = b + c;int c; a = t0 + d;int d; t1 = a * a;a = b + c + d; t2 = b * b;b = a * a + b * b b = t1 + t2;

temporális változók: t0, t1, t2

Izsó Tamás Fordítás –Optimalizálás / 26

Page 27: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

3 operandusú Intermediate Language

egy utasításnak maximum 3 operandusa lehet;összetett kifejezésnél temporális változókat kell bevezetni;van két operandusú utasítás, pl. t1 = 5;

Izsó Tamás Fordítás –Optimalizálás / 27

Page 28: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Intermediate Language utasításkészlete

Értékadás:

var = constant;var = string ;var1 = var2;var = label ;

Izsó Tamás Fordítás –Optimalizálás / 28

Page 29: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Intermediate Language utasításkészlete

Aritmetikai operátorok:

var1 = var2 op var3;var1 = constant op var2;var1 = var2 op constant;var = constant1 op constant2;operátorok +.−.∗./,%,|,& stb;

Izsó Tamás Fordítás –Optimalizálás / 29

Page 30: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Intermediate Language utasításkészlete

Logikai értékek0 – hamis;nem 0 – igaz.

Logikai muveletek:var3 = var2 == var1;var3 = var2 < var1;var3 = var2 || var1;var3 = var2 && var1;a többi logikai kifejezést ezek segítségével kell eloállítani.

Izsó Tamás Fordítás –Optimalizálás / 30

Page 31: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Intermediate Language

Vezérlésátadó utasítások:

névvel rendelkezo cimke L1:Goto label;IfZ value Goto label;IfZ csak a Goto utasítással együtt fordulhat elo;

Izsó Tamás Fordítás –Optimalizálás / 31

Page 32: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Intermediate Language

Függvényhívó utasítás:

LCall L1 – esetén a hívott függvény címe fordítási idobenismert.ACall t1 – t1 függvény címe futáskor áll elo (pl. virtuálisfüggvénytábla).

LCall L1;t1 = LCall L1;ACall t1 ;t0 = ACall t1 ;

Izsó Tamás Fordítás –Optimalizálás / 32

Page 33: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Intermediate Language

Függvény definiálás:

BeginFunc n; – Függvény törzsének a kezdete, ahol n alokális adatok számára szükséges hely bájtokan.EndFunc – függvény vége;Return t1 – visszatérés visszaadott értékkel;Return – visszatérés a függvénybol.

Izsó Tamás Fordítás –Optimalizálás / 33

Page 34: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Intermediate Language

Memória címzés:

t1 = ∗t2t1 = ∗(t2+offset )∗t1 = ∗t2∗(t1 + offset ) = ∗t2offset – negatív vagy pozitív egész érték.

Tömb:t1 [ t2 ] = t3t3 = t1 [ t2 ]az index operátor a C-ben megismert módon muködik.

Izsó Tamás Fordítás –Optimalizálás / 34

Page 35: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Példa 3 operandusú IL-re

int x;int y;

L0:t0 = x < y;t1 = x == y;

while(x<=y) { t2 = t0 || t1;x = x + 2; IfZ t2 Goto L1;

} x = x + 2;Goto L0

L1:y = x; y = x;

Izsó Tamás Fordítás –Optimalizálás / 35

Page 36: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Section 2

Optimalizálás

Izsó Tamás Fordítás –Optimalizálás / 36

Page 37: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Miért van szükség optimalizálásra

AST-bol IR-re való egyszeru áttérés redundanciát okoz;egyes részszámításokat

fel lehet gyorsítani;közös részeket össze lehet vonni;felesleges részeket ki lehet hagyni

mert a programozók lustákfor ciklusba, vagy a feltétel részbe írnak a ciklusvégrehajtása során nem változó kifejezéseket;

Izsó Tamás Fordítás –Optimalizálás / 37

Page 38: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

A kód optimalizálása kihívást jelent

Cél:az eredményeket helyességét ne befolyásolja ;a leheto leghatékonyabb IR-t állítsa elo;ne tartson sok ideig.

Valóság:néha hibát okoz a kód futásánál;sokáig tart a kódgenerálás.

Legtöbb optimalizálási algoritmus NP-teljes, ha egyáltalánlétezik megoldás.

Izsó Tamás Fordítás –Optimalizálás / 38

Page 39: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

A program szemamtikáját nem befolyásolóoptimalizálás

felesleges temporális változók megszüntetése;fordítási idoben ismert konstans kifejezések kiszámítása;ciklusban lévo invariáns részek kiemelése;ellenpéldaként meg lehet említeni (szemantikátbefolyásoló optimalizálás) a buborékos rendezéskicserélése gyorsrendezésre.

Izsó Tamás Fordítás –Optimalizálás / 39

Page 40: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Példa IR optimalizálására

t0 = x + x;int x; t1 = y;int y; b1 = t0 < t1;bool b1;bool b2; t2 = x + x;bool b3; t3 = y;

b2 = t2 == t3;b1 = x + x < y;b2 = x + x == y; t4 = x + x;b3 = x + x > y; t5 = y;

b3 = t5 < t4;

Izsó Tamás Fordítás –Optimalizálás / 40

Page 41: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Példa IR optimalizálására

t0 = x + x;int x; t1 = y;int y; b1 = t0 < t1;bool b1;bool b2; t2 = x + x;bool b3; t3 = y;

b2 = t2 == t3;b1 = x + x < y;b2 = x + x == y; t4 = x + x;b3 = x + x > y; t5 = y;

b3 = t5 < t4;

Izsó Tamás Fordítás –Optimalizálás / 41

Page 42: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Példa IR optimalizálására

t0 = x + x;int x; t1 = y;int y; b1 = t0 < t1;bool b1;bool b2; t2 = x + x;bool b3; t3 = y;

b2 = t2 == t3;b1 = x + x < y;b2 = x + x == y; t4 = x + x;b3 = x + x > y; t5 = y;

b3 = t5 < t4;

Izsó Tamás Fordítás –Optimalizálás / 42

Page 43: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Példa IR optimalizálására

t0 = x + x;int x; t1 = y;int y; b1 = t0 < t1;bool b1;bool b2; t2 = x + x;bool b3; t3 = y;

b2 = t0 == t1;b1 = x + x < y;b2 = x + x == y; t4 = x + x;b3 = x + x > y; t5 = y;

b3 = t1 < t0;

Izsó Tamás Fordítás –Optimalizálás / 43

Page 44: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Példa IR optimalizálására

t0 = x + x;int x; t1 = y;int y; b1 = t0 < t1;bool b1;bool b2;bool b3;

b2 = t0 == t1;b1 = x + x < y;b2 = x + x == y;b3 = x + x > y;

b3 = t1 < t0;

Izsó Tamás Fordítás –Optimalizálás / 44

Page 45: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Lusta programozó munkájának az optimalizálása

L0:while( x < y+ z ) { t0 = y + z;

x = x - y; t1 = x < t0;} IfZ t1 Goto L1

x = x - y;Goto L0;

L1:

Izsó Tamás Fordítás –Optimalizálás / 45

Page 46: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Lusta programozó munkájának az optimalizálása

L0:while( x < y+ z ) { t0 = y + z;

x = x - y; t1 = x < t0;} IfZ t1 Goto L1

x = x - y;Goto L0;

L1:

Izsó Tamás Fordítás –Optimalizálás / 46

Page 47: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Lusta programozó munkájának az optimalizálása

t0 = y + z;while( x < y+ z ) { L0:

x = x - y; t1 = x < t0;} IfZ t1 Goto L1

x = x - y;Goto L0;

L1:

Izsó Tamás Fordítás –Optimalizálás / 47

Page 48: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Lusta programozó munkájának az optimalizálása

t0 = y + z;while( x < y+ z ) { L0:

x = x - y; t1 = x < t0;} IfZ t1 Goto L1

x = x - y;Goto L0;

L1:

Izsó Tamás Fordítás –Optimalizálás / 48

Page 49: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

IR megjelenítése

BeginFunc 40;t0 = LCal l ReadInteger ;a = t0 ;t1 = LCal l ReadInteger ;b = t1 ;

L0 :t2 = 0;t3 = b == t2 ;t4 = 0 ;t5 = t3 == t4 ;I f Z t5 Goto L1 ;

c = a ;a = b ;t6 = c % a ;b = t6 ;Goto L0 ;

L1 :PushParam a ;LCal l P r i n t I n t ;PopParams 4;

EndFunc ;

Izsó Tamás Fordítás –Optimalizálás / 49

Page 50: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

IR megjelenítése

BeginFunc 40;t0 = LCal l ReadInteger ;a = t0 ;t1 = LCal l ReadInteger ;b = t1 ;

L0 :t2 = 0;t3 = b == t2 ;t4 = 0 ;t5 = t3 == t4 ;I f Z t5 Goto L1 ;

c = a ;a = b ;t6 = c % a ;b = t6 ;Goto L0 ;

L1 :PushParam a ;LCal l P r i n t I n t ;PopParams 4;

EndFunc ;

Izsó Tamás Fordítás –Optimalizálás / 50

Page 51: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

IR megjelenítése

t0 = LCal l ReadInteger ;a = t0 ;t1 = LCal l ReadInteger ;b = t1 ;

t2 = 0 ;t3 = b == t2 ;t4 = 0 ;t5 = t3 == t4 ;I f Z t5 Goto L1 ;

c = a ;a = b ;t6 = c % a ;b = t6 ;Goto L0 ;

PushParam a ;LCal l P r i n t I n t ;PopParams 4;

L1

L0

Izsó Tamás Fordítás –Optimalizálás / 51

Page 52: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Alapblokk (Basic Block)

az IR utasításainak a lineáris sorozata;egy belépési ponttal rendelkezik;egy kilépési pontja van, és ez a sorozat végén található;olyan utasítások sorozata, amelyek a blokk végrehajtásasorán biztosan végrehajtódnak.Alapblokkok kezdete és vége :

a program elso utasítása az elso blokk kezdete;minden olyan hely, amelyre távolról át lehet adni a vezérlést(Goto, LCall, ACall ) egy új blokk kezdetét jelenti;ugró utasítás csak a blokk végén lehet;minden blokk vége után egy új blokk kezdodik (kivéve azutolsót).

Izsó Tamás Fordítás –Optimalizálás / 52

Page 53: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Vezérlési folyamatgráf – Control Flow Gráf (CFG)

irányított gráfcsomópontjai az alapblokkok halmaza;az élek a blokkok végpontjából egy másik blokk belépésipontjára mutatnak;egy csomópontból több él léphet ki;egy csomópontba több alapblokkból is el lehet jutni.

Izsó Tamás Fordítás –Optimalizálás / 53

Page 54: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Optimalizálás fajtái

lokális – egy blokkon belül;globális – teljes vezérlési folyamatgráfra.

Izsó Tamás Fordítás –Optimalizálás / 54

Page 55: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Lokális optimalizálás

i n t f ( i n t x ) {i n t y ;i n t z ;y = 137;i f ( x == 0)

z = y ;e lse

x = y ;}

t0 = 137;y = t0;IfZ x Goto L0;

t1 = y;z = t1;

t2 = y;x = t2;

end

Izsó Tamás Fordítás –Optimalizálás / 55

Page 56: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Lokális optimalizálás

i n t f ( i n t x ) {i n t y ;i n t z ;y = 137;i f ( x == 0)

z = y ;e lse

x = y ;}

t0 = 137;y = t0;IfZ x Goto L0;

t1 = y;z = t1;

t2 = y;x = t2;

end

Izsó Tamás Fordítás –Optimalizálás / 55

Page 57: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Lokális optimalizálás

i n t f ( i n t x ) {i n t y ;i n t z ;y = 137;i f ( x == 0)

z = y ;e lse

x = y ;}

t0 = 137;y = 137;IfZ x Goto L0;

t1 = y;z = t1;

t2 = y;x = t2;

end

Izsó Tamás Fordítás –Optimalizálás / 55

Page 58: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Lokális optimalizálás

i n t f ( i n t x ) {i n t y ;i n t z ;y = 137;i f ( x == 0)

z = y ;e lse

x = y ;}

t0 = 137;y = 137;IfZ x Goto L0;

t1 = y;z = t1;

t2 = y;x = t2;

end

Izsó Tamás Fordítás –Optimalizálás / 55

Page 59: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Lokális optimalizálás

i n t f ( i n t x ) {i n t y ;i n t z ;y = 137;i f ( x == 0)

z = y ;e lse

x = y ;}

t0 = 137;y = 137;IfZ x Goto L0;

t1 = y;z = y;

t2 = y;x = t2;

end

Izsó Tamás Fordítás –Optimalizálás / 55

Page 60: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Lokális optimalizálás

i n t f ( i n t x ) {i n t y ;i n t z ;y = 137;i f ( x == 0)

z = y ;e lse

x = y ;}

t0 = 137;y = 137;IfZ x Goto L0;

t1 = y;z = y;

t2 = y;x = t2;

end

Izsó Tamás Fordítás –Optimalizálás / 55

Page 61: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Lokális optimalizálás

i n t f ( i n t x ) {i n t y ;i n t z ;y = 137;i f ( x == 0)

z = y ;e lse

x = y ;}

t0 = 137;y = 137;IfZ x Goto L0;

t1 = y;z = y;

t2 = y;x = y;

end

Izsó Tamás Fordítás –Optimalizálás / 55

Page 62: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Lokális optimalizálás

i n t f ( i n t x ) {i n t y ;i n t z ;y = 137;i f ( x == 0)

z = y ;e lse

x = y ;}

t0 = 137;y = 137;IfZ x Goto L0;

t1 = y;z = y;

t2 = y;x = y;

end

Izsó Tamás Fordítás –Optimalizálás / 55

Page 63: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Globális optimalizálás

i n t f ( i n t x ) {i n t y ;i n t z ;y = 137;i f ( x == 0)

z = y ;e lse

x = y ;}

t0 = 137;y = 137;IfZ x Goto L0;

t1 = y;z = y;

t2 = y;x = y;

end

Izsó Tamás Fordítás –Optimalizálás / 56

Page 64: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Globális optimalizálás

i n t f ( i n t x ) {i n t y ;i n t z ;y = 137;i f ( x == 0)

z = y ;e lse

x = y ;}

t0 = 137;y = 137;IfZ x Goto L0;

t1 = y;z = y;

t2 = y;x = y;

end

Izsó Tamás Fordítás –Optimalizálás / 56

Page 65: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Globális optimalizálás

i n t f ( i n t x ) {i n t y ;i n t z ;y = 137;i f ( x == 0)

z = y ;e lse

x = y ;}

t0 = 137;y = 137;IfZ x Goto L0;

t1 = y;z = 137;

t2 = y;x = 137;

end

Izsó Tamás Fordítás –Optimalizálás / 56

Page 66: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Globális optimalizálás

i n t f ( i n t x ) {i n t y ;i n t z ;y = 137;i f ( x == 0)

z = y ;e lse

x = y ;}

t0 = 137;y = 137;IfZ x Goto L0;

t1 = y;z = 137;

t2 = y;x = 137;

end

Izsó Tamás Fordítás –Optimalizálás / 56

Page 67: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Ismétlodo kifejezések kiszurése

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = Call Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;x = t1 ;t3 = 4 ;a = t3 ;t4 = a + b ;c = t4 ;t5 = a + b ;PushParam t5 ;PushParam x ;Call set ;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 57

Page 68: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Ismétlodo kifejezések kiszurése

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = Call Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;x = t1 ;t3 = 4 ;a = t3 ;t4 = a + b ;c = t4 ;t5 = a + b ;PushParam t5 ;PushParam x ;Call set ;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 57

Page 69: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Ismétlodo kifejezések kiszurése

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = Call Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;x = t1 ;t3 = 4 ;a = t3 ;t4 = a + b ;c = t4 ;t5 = t4 ;PushParam t5 ;PushParam x ;Call set ;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 57

Page 70: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Ismétlodo kifejezések kiszurése

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = Call Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;x = t1 ;t3 = 4 ;a = t3 ;t4 = a + b ;c = t4 ;t5 = t4 ;PushParam t5 ;PushParam x ;Call set ;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 57

Page 71: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Ismétlodo kifejezések kiszurése

Ha van két értékadás

v1 = a op b· · ·

v2 = a op b

és az a és b operandusok értéke közben nem változik,akkor a következo transzformációt hajthatjuk végre

v1 = a op b· · ·

v2 = v1

Ezzel elhagyjuk az ismétlodo számításokat.lehetoséget teremtünk egy késobbi optimalizáláshoz.

Izsó Tamás Fordítás –Optimalizálás / 58

Page 72: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Másolat továbbterjedés

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;x = t1 ;t3 = 4;a = t3 ;t4 = a + b ;c = t4 ;t5 = t4;PushParam t5 ;PushParam x ;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 59

Page 73: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Másolat továbbterjedés

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;x = t1 ;t3 = 4;a = t3 ;t4 = a + b ;c = t4 ;t5 = t4;PushParam t5 ;PushParam x ;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 59

Page 74: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Másolat továbbterjedés

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;x = t1 ;t3 = 4;a = t3 ;t4 = a + b ;c = t4 ;t5 = t4;PushParam t5 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 59

Page 75: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Másolat továbbterjedés

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;x = t1 ;t3 = 4;a = t3 ;t4 = a + b ;c = t4 ;t5 = t4;PushParam t5 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 59

Page 76: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Másolat továbbterjedés

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;x = t1 ;t3 = 4;a = t3 ;t4 = t3 + b ;c = t4 ;t5 = t4;PushParam t5 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 59

Page 77: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Másolat továbbterjedés

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;x = t1 ;t3 = 4;a = t3 ;t4 = t3 + b ;c = t4 ;t5 = t4;PushParam t5 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 59

Page 78: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Másolat továbbterjedés

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;x = t1 ;t3 = 4;a = t3 ;t4 = t3 + b ;c = t4 ;t5 = t4;PushParam t4 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 59

Page 79: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Másolat továbbterjedés

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;x = t1 ;t3 = 4;a = t3 ;t4 = t3 + b ;c = t4 ;t5 = t4;PushParam t4 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 59

Page 80: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Másolat továbbterjedés

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;x = t1 ;t3 = 4;a = 4 ;t4 = 4 + b ;c = t4 ;t5 = t4;PushParam t4 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 59

Page 81: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Másolat továbbterjedés

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;x = t1 ;t3 = 4;a = 4 ;t4 = 4 + b ;c = t4 ;t5 = c;PushParam t4 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 59

Page 82: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Másolat továbbterjedés

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;x = t1 ;t3 = 4;a = 4 ;t4 = 4 + b ;c = t4 ;t5 = t4;PushParam t4 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 59

Page 83: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Másolat továbbterjedés

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;x = t1 ;t3 = 4;a = 4 ;t4 = 4 + b ;c = t4 ;t5 = t4;PushParam t4 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 59

Page 84: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Másolat továbbterjedés

angol szakirodalomban a Copy Propagation kifejezés él;ha lehet, akkor máshol is az eredeti példányra szeretnénkhivatkozni;Ha van egy értékadás

v1 = v2

és a továbbiakban a v1 és v2 operandusok értéke nemváltozik, akkor a következo transzformációt hajthatjukvégre

a = · · · v1 · · ·

lecseréljük:

a = · · · v2 · · ·

Ez a transzformáció késobb a segítségünkre lesz.

Izsó Tamás Fordítás –Optimalizálás / 60

Page 85: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Felesleges utasítások törlése (Dead Code Elimination)

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;x = t1 ;t3 = 4;a = 4 ;t4 = 4 + b ;c = t4 ;t5 = t4;PushParam t4 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 61

Page 86: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Felesleges utasítások törlése (Dead Code Elimination)

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;x = t1 ;t3 = 4;a = 4 ;t4 = 4 + b ;c = t4 ;t5 = t4;PushParam t4 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 61

Page 87: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Felesleges utasítások törlése (Dead Code Elimination)

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;

t3 = 4;a = 4 ;t4 = 4 + b ;c = t4 ;t5 = t4;PushParam t4 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 61

Page 88: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Felesleges utasítások törlése (Dead Code Elimination)

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;

t3 = 4;a = 4 ;t4 = 4 + b ;c = t4 ;t5 = t4;PushParam t4 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 61

Page 89: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Felesleges utasítások törlése (Dead Code Elimination)

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;

a = 4 ;t4 = 4 + b ;c = t4 ;t5 = t4;PushParam t4 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 61

Page 90: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Felesleges utasítások törlése (Dead Code Elimination)

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;

a = 4 ;t4 = 4 + b ;c = t4 ;t5 = t4;PushParam t4 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 61

Page 91: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Felesleges utasítások törlése (Dead Code Elimination)

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;

t4 = 4 + b ;c = t4 ;t5 = t4;PushParam t4 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 61

Page 92: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Felesleges utasítások törlése (Dead Code Elimination)

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;

t4 = 4 + b ;c = t4 ;t5 = t4;PushParam t4 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 61

Page 93: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Felesleges utasítások törlése (Dead Code Elimination)

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;

t4 = 4 + b ;

t5 = t4;PushParam t4 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 61

Page 94: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Felesleges utasítások törlése (Dead Code Elimination)

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;

t4 = 4 + b ;

t5 = t4;PushParam t4 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 61

Page 95: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Felesleges utasítások törlése (Dead Code Elimination)

int* x;int a;int b;int c;x = new int(2);a = 4;c = a + b;set(x,a + b);

t0 = 4 ;PushParam t0 ;t1 = LCall Alloc ;PopParams 4 ;t2 = 2 ;*(t1) = t2 ;

t4 = 4 + b ;

PushParam t4 ;PushParam t1;Call set;PopParams 8 ;

Izsó Tamás Fordítás –Optimalizálás / 61

Page 96: Fordító Optimalizálás - Kód visszafejtés.izso/rec/ea04_v2.pdf · Fordító részeiOptimalizálás Fordító –Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október

Fordító részei Optimalizálás

Felesleges utasítások törlése

Értékadás bal oldalán található változó akkor felesleges,ha az értékét a késobbiekben nem használjuk fel.Ha az értékadás bal oldalán található változó felesleges,akkor az egész utasítást el lehet hagyni.

Izsó Tamás Fordítás –Optimalizálás / 62