fordító optimalizálás - kód visszafejtés.izso/rec/ea04_v2.pdf · fordító...

Post on 10-Feb-2020

14 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

Section 1

Fordító részei

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

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

Irodalom

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

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

Irodalom

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Section 2

Optimalizálás

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

top related