96
| Vezérlésfolyam analízis Kód struktúra visszafejtése Fordítás – Kódoptimalizálás Kód visszafejtés. Izsó Tamás 2015. október 15. Izsó Tamás Fordítás – Kódoptimalizálás / 1

Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

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

Izsó Tamás

2015. október 15.

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

Page 2: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók

Angol irodalomban a Live Variables kifejezést használják,míg az azt felhasználó elemzést Liveness Analysis-nekhívják.Az aktív változók ismeretében lehet a feleslegesutasításokat megszüntetni.Egy változó a program egy pontján aktív, ha késobb azértéke felhasználásra kerül.

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

Page 3: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállítása

A feldolgozás az alapblokk végétol az eleje felé halad.A blokk végén lévo aktív változók halmazát az algoritmusalapján mi határozzuk meg.Amikor az a = b + c1 kifejezéshez érünk:

az a változót ki kell venni;a b és c változókat be kell tenni az az aktív változókhalmazába.

1Összeadás helyett tetszoleges egy és kétoperandusú kifejezés isszerepelhet.

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

Page 4: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változó

v változó definiálásav változó használatav változó újradefiniálásav változó értéke felesleges

v=x+y;

c=v+5;

v=z+w

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

Page 5: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változó

v változó definiálása

v változó használatav változó újradefiniálásav változó értéke felesleges

v=x+y;

c=v+5;

v=z+w

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

Page 6: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változó

v változó definiálásav változó használata

v változó újradefiniálásav változó értéke felesleges

v=x+y;

c=v+5;

v=z+w

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

Page 7: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változó

v változó definiálásav változó használatav változó újradefiniálása

v változó értéke felesleges

v=x+y;

c=v+5;

v=z+w

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

Page 8: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változó

v változó definiálásav változó használatav változó újradefiniálásav változó értéke felesleges

v=x+y;

c=v+5;

v=z+w

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

Page 9: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változó globális analízise

start

p

v=x+y;

a=v+5;

end

v változó aktíva p pontban

start

p

v=x+y;

v=x+5;

end

v változó nem aktíva p pontban

start

p

v=v+5;

end

v változó aktíva p pontban

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

Page 10: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállítása

a = b;

c = a;

d = a + b;

e = d;

d = a;

f = e;

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

Page 11: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállítása

a = b;

c = a;

d = a + b;

e = d;

d = a;

f = e;{b , d }

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

Page 12: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállítása

a = b;

c = a;

d = a + b;

e = d;

d = a;{ b, d, e}

f = e;{b , d }

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

Page 13: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállítása

a = b;

c = a;

d = a + b;

e = d;{ a, b, e}

d = a;{ b, d, e}

f = e;{b , d }

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

Page 14: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállítása

a = b;

c = a;

d = a + b;{ a, b, d }

e = d;{ a, b, e}

d = a;{ b, d, e}

f = e;{b , d }

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

Page 15: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállítása

a = b;

c = a;{ a, b }

d = a + b;{ a, b, d }

e = d;{ a, b, e}

d = a;{ b, d, e}

f = e;{b , d }

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

Page 16: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállítása

a = b;{ a, b }c = a;{ a, b }

d = a + b;{ a, b, d }

e = d;{ a, b, e}

d = a;{ b, d, e}

f = e;{b , d }

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

Page 17: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállítása

{ b }a = b;{ a, b }c = a;{ a, b }

d = a + b;{ a, b, d }

e = d;{ a, b, e}

d = a;{ b, d, e}

f = e;{b , d }

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

Page 18: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Felesleges kód törlése

{ b }a = b;{ a, b }c = a;{ a, b }

d = a + b;{ a, b, d }

e = d;{ a, b, e}

d = a;{ b, d, e}

f = e;{b , d }

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

Page 19: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Felesleges kód törlése

{ b }a = b;{ a, b }c = a;{ a, b }

d = a + b;{ a, b, d }

e = d;{ a, b, e}

d = a;{ b, d, e}

f = e;{b , d }

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

Page 20: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Felesleges kód törlése

{ b }a = b;{ a, b }c = a;{ a, b }

d = a + b;{ a, b, d }

e = d;{ a, b, e}

d = a;{ b, d, e}

{b , d }

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

Page 21: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Felesleges kód törlése

{ b }a = b;{ a, b }c = a;{ a, b }

d = a + b;{ a, b, d }

e = d;{ a, b, e}

d = a;{ b, d, e}

{b , d }

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

Page 22: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Felesleges kód törlése

{ b }a = b;{ a, b }

{ a, b }d = a + b;{ a, b, d }

e = d;{ a, b, e}

d = a;{ b, d, e}

{b , d }

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

Page 23: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Felesleges kód törlése

a = b;

d = a + b;

e = d;

d = a;

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

Page 24: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállítása II

a = b;

d = a + b;

e = d;

d = a;

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

Page 25: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállítása II

a = b;

d = a + b;

e = d;

d = a;

{b , d }

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

Page 26: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállítása II

a = b;

d = a + b;

e = d;{a , b }d = a;

{b , d }

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

Page 27: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállítása II

a = b;

d = a + b;{a , b, d }

e = d;{a , b }d = a;

{b , d }

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

Page 28: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállítása II

a = b;

{a , b }d = a + b;{a , b, d }

e = d;{a , b }d = a;

{b , d }

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

Page 29: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállítása II

{ b }a = b;

{a , b }d = a + b;{a , b, d }

e = d;{a , b }d = a;

{b , d }

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

Page 30: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Felesleges kód törlése

{ b }a = b;

{a , b }d = a + b;{a , b, d }

e = d;{a , b }d = a;

{b , d }

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

Page 31: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Felesleges kód törlése

{ b }a = b;

{a , b }d = a + b;{a , b, d }

e = d;{a , b }d = a;

{b , d }

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

Page 32: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Felesleges kód törlése

{ b }a = b;

{a , b }d = a + b;{a , b, d }

{a , b }d = a;

{b , d }

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

Page 33: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Felesleges kód törlése

a = b;

d = a + b;

d = a;

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

Page 34: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállítása III

a = b;

d = a + b;

d = a;

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

Page 35: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállítása III

a = b;

d = a + b;

d = a;

{b , d }

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

Page 36: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállítása III

a = b;

d = a + b;

{a , b }d = a;

{b , d }

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

Page 37: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállítása III

a = b;

{a , b }d = a + b;

{a , b }d = a;

{b , d }

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

Page 38: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállítása III

{ b }a = b;

{a , b }d = a + b;

{a , b }d = a;

{b , d }

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

Page 39: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Felesleges kód törlése

{ b }a = b;

{a , b }d = a + b;

{a , b }d = a;

{b , d }

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

Page 40: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Felesleges kód törlése

{ b }a = b;

{a , b }d = a + b;

{a , b }d = a;

{b , d }

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

Page 41: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Felesleges kód törlése

{ b }a = b;

{a , b }

{a , b }d = a;

{b , d }

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

Page 42: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Felesleges kód törlése

a = b;

d = a;

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

Page 43: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aktív változók eloállításának a formalizálása

Inn = (Outn − Killn) ∪Genn

Outn =

{BI n az utolsó blokk végén .

∪x∈succ(n)Inx máskülönben.

A kimenet van összehuzalozva az n után következobemenetek uniójával.∪-ból következik, hogy az inicializálás az üres halmazzaltörténik, kivéve a kezdo állapotot.Outn alapján számítjuk az Inn-t, tehát a számítás visszafelehalad.

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

Page 44: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Reaching Definition analízis

Az analízis megadja, hogy a program egy adott pontján az xváltozó hol kapott értéket. Elágazások és ciklusok miatt többponton is definiálva2 lehet.

RDentry(p) =

{RDinit kezdetben .

∪p′∈pred(p) RDexit(p′) máskülönben.

RDexit(p) = (RDentry(p)\KillRD(p)) ∪GenRD(p)

2Itt a definíciót bovebb értelemben használjuk. Minden pont, ahol egyváltozó értéket kap definíciós pontnak hívjuk.

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

Page 45: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Reaching Definition jelölések

Ha az x változót a p pontban definiálva van, akkor ezt a tényt a(x ,p) párral fejezzük ki. Az RDentry(p) és az RDexit(p) ezekneka pároknak a halmazát tartalmazza.

Inicializálás

RDinit = {(x , ?)|x ∈ programváltozó.}

A kérdojel azt jelenti, hogy még nem lett inicializálva a változó.

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

Page 46: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Példa Reaching Definition-ra

[m := 2 ] 1 ;while [ n > 1 ] 2 do

[m := m ∗ n ] 3 ;[ n := n − 1] 4

end while[ stop ] 5

RDentry(1) = {(m, ?), (n, ?)}RDexit(1) = {(m,1), (n, ?)}

RDentry(2) = RDexit(1) ∪ RDexit(4)

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

Page 47: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

RD végeredmény

RDentry RDexit1 {(m,?),(n,?)} {(m,1),(n,?)}2 {(m,1),(m,3),(n,?),(n,4)} {(m,1),(m,3),(n,?),(n,4)}3 {(m,1),(m,3),(n,?),(n,4)} {(m,3),(n,?),(n,4)}4 {(m,3),(n,?),(n,4)} {(m,3),(n,4)}5 {(m,1),(m,3),(n,?),(n,4)} {(m,1),(m,3),(n,?),(n,4)}

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

Page 48: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Konstans kiértékelés fordítási idoben I

RD ` [x := a]` B [x := a[y 7→ n]]`

ha

y ∈ FV (a) ∧ (y , ?) /∈ RDentry(`) ∧∀(y ′

, `′) ∈ RDentry(`) ∧

y′= y ⇒ [. . .]`

′= [y := n]`

RD ` [x := a]` B [x := n]`

ha

{FV (a) = ∅ ∧ a nem konstans ∧a kifejezés értéke n

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

Page 49: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Konstans kiértékelés fordítási idoben II

RD ` S1 B S′

1

RD ` S1;S2 B S′1;S2

RD ` S2 B S′

2

RD ` S1;S2 B S1;S′2

RD ` S1 B S′

1

RD ` if[b`] then S1 else S2 B if[b`] then S′1 else S2

RD ` S2 B S′

2

RD ` if[b`] then S1 else S2 B if[b`] then S1 else S′2

RD ` S B S′

RD ` while[b`] do S Bwhile[b`] do S′

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

Page 50: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Konstans kiértékelés példa I.

Program:

[ x :=10 ] 1 ; [ y := x+10]2 ; [ z := y+10]3 ;

RD analízis eredménye:

RDentry(1) = {(x , ?), (y , ?), (z, ?)}RDexit(1) = {(x ,1), (y , ?), (z, ?)}

RDentry(2) = {(x ,1), (y , ?), (z, ?)}RDexit(2) = {(x ,1), (y ,2), (z, ?)}

RDentry(3) = {(x ,1), (y ,2), (z, ?)}RDexit(2) = {(x ,1), (y ,2), (z,3)}

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

Page 51: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Konstans kiértékelés példa II.

RD ` [x := 10]1; [y := x + 10]2; [z := y + 10]3;

B [x := 10]1; [y := 10 + 10]2; [z := y + 10]3;

B [x := 10]1; [y := 20]2; [z := y + 10]3;

B [x := 10]1; [y := 20]2; [z := 20 + 10]3;

B [x := 10]1; [y := 20]2; [z := 30]3;

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

Page 52: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Konstans kiértékelés példa II.

Visual Studio C eredménye

1 int funcion() {2 int x,y,z;3 x=1;4 y=100*x;5 z=100*y-y;6 while( x < 4 ) {7 z = z +y;8 y = 2*x;9 x++;

10 }11 return z;12 }

Lefordított kód:_func ion :

00000000: mov eax ,2710h00000005: r e t

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

Page 53: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Section 1

Vezérlésfolyam analízis

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

Page 54: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Domináns alapblokk

A Bi alapblokk akkor domináns Bj felett, ha az entrypontból a j-edik blokkig minden lehetséges úton eljutvaérinteni kell a Bi blokkot.Minden blokk domináns önmagával.(a dom b) ∧ (b dom c)→ (a dom c).Közvetlen, vagy szomszédos dominanciáról akkorbeszélünk, ha a dom b és a 6= b esetén nem létezik olyanc, hogy (a dom c) ∧ (c dom b).Posztdominanciáról akkor beszélünk, ha a Bj blokkból azexit, blokk fele haladva minden úton érintjük a Bk blokkot.

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

Page 55: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Struktúrális analízis – dominancia

fib(m)

f1=1

f0=0

m<=1

return f2

f1=1

m >= 1

f2=f0+f1

f0=f1

f1=f2

m=m-1

return 1

Entry

exit

B1

B2

B3

B4

B5

B6

Entry

B1

B2 exit B3

B4

B5 B6

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

Page 56: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Domináns alapblokk

m

n

D(n) az n-re domináns alapblokkokhalmazaPred(n) az irányított vezérlésifolyamatgráf alapján az n-be meno élekforrás csomópontjai

D(n) = {n} ∪⋂

p∈pred(n)

D(p)

Izsó Tamás Fordítás – Kódoptimalizálás / 25

Page 57: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Dominancia meghatározása

procedure Dom_Comp( N, Pred, r )N : in set of Node;Pred : in Node→ set of Node;r : in Node;

beginD, T : set of Node;n, p : Node;change:=true: boolean;Domin : Node→ set of Node;for each n ∈ N - {r} do Domin(n):=N;repeat

change := false;for each n ∈ N - {r} do

T:=N;for each p ∈ Pred(n) do

T ∩ = Domin(p) ;od;D := { n } ∪ T;if D 6= Domin(n) then

change := true;Domin(n) := D;

fi;od;

until !changereturn Domin

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

Page 58: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Depth-First Search

Mélységi keresés

A

B

C

D

E

F

G

H

A

B

C

D

E

F

G

H

A B C D E E D C B A F G H H G F A

A F D E E D F G H H G F A B C C B A

előre

hátra

keresztbe

Jelölés:PRE: APOST: A

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

Page 59: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

DFS algoritmusN : in set of Node;r, x : Nodei:=1, j:=1 : integer;Pre, Post : Node→ integer;Visit: Node→ boolean;Etype: (Node x Node )→ enum{ tree, forward, back, cross };

procedure Deap_First_Search( N, Succ, x )N : in set of Node;Succ : in Node→ set of Node;x : in Node;

beginy : Node;Visit(x) := true;Pre(x) := j;j = j + 1;

for each y ∈ Succ(x) doif !Visit(y) then

Deep_First_Search(N,Succ,y);EType(x→ y) := tree;

elif Pre(x) < Pre(y) thenEType(x→ y) := forward;

elif Post(y) = 0 thenEType(x→ y) := back;

elseEType(x→ y) := cross;

fi;od;Post(x) := i; i :+= 1;

end

beginfor each x ∈ N do;

Visit(x) := false;Pre(x) := Post(x) := 0;

odDeep_First_Search(N,Succ,r);

end

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

Page 60: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Section 2

Kód struktúra visszafejtése

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

Page 61: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

CFG struktúrájának az analízis

célja felismerni a magasszintu vezérlési szerkezeteketif ... then ..., if ... then ... else ..., switch ... case ...for, while, repeat;

nem struktúrált részben lévo blokkok számának aminimalizálása.

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

Page 62: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Gráf alapfogalmak

A

B

C

D

E

F

G

H

G – irányított gráf, N –csomópontok halmaza, E – élekhalmaza;G = 〈N,E〉 ;N = {A,B,C,D,E ,F ,G,H}E ⊆ N × N = {A→ B,A→F ,B → C,C → B,C → D,C →E ,D → E ,F → D,F → G,G→H,G→ H}Succ(b) = {n ∈ N|∃e ∈ E hogye = b → n}Pred(b) = {n ∈ N|∃e ∈ E hogye = n→ b}

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

Page 63: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aciklikus struktúrák

B1

B3

B2B3

B4

B5

B6

B7

B2

B4

B2

B4

B1

B2 B3 B4 B5 B6blokk

if-the-else if-then

case-switch

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

Page 64: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Ciklikus struktúrák

B1

B0

self-loop

B2

while-loop

B1

B2

természetes loop

B1

B2

(improper) nem struktúrált szerkezet

B3

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

Page 65: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Struktúra meghatározása

Globális adatok:

Succ, Pred : Node→ set of Node;RegionType = enum { Block, IfThen, IfThenElse, Case, Proper, SelfLoop,

WhileLoop, NaturalLoop, Improper } ;// Blokk hozzárendelése az ot tartalmazó összevont struktúráhozStructOf: Node→ Node;// Összevont struktúra típusa (pl. if-then)StructType: Node→ RegionType;// Összevont struktúrák halmazaStructures: set of Node;// Összevont struktúra alá tartozó blokkokStructNodes : Node→ set of Node;// Összevont struktúra hierarchiájaCTNodes: set of Node;CTEdges : set of Node x Node;PostCtr, PostMax:integer;Post: integer→ Node;Visit: Node→ boolean;

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

Page 66: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Ciklus keresés

k

n

m

vissza

n pont a ciklus kezdete;∃k ∈ N pont, ahol

Pred(n) = k ;∃ olyan m pont, hogy n-bolm-be és m-bol k -ba van út.

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

Page 67: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Ciklus keresés

k

n

m

vissza n pont a ciklus kezdete;

∃k ∈ N pont, aholPred(n) = k ;∃ olyan m pont, hogy n-bolm-be és m-bol k -ba van út.

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

Page 68: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Ciklus keresés

k

n

m

vissza n pont a ciklus kezdete;∃k ∈ N pont, ahol

Pred(n) = k ;

∃ olyan m pont, hogy n-bolm-be és m-bol k -ba van út.

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

Page 69: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Ciklus keresés

k

n

m

vissza n pont a ciklus kezdete;∃k ∈ N pont, ahol

Pred(n) = k ;∃ olyan m pont, hogy n-bolm-be és m-bol k -ba van út.

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

Page 70: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Strukturális analízis

Procedure StructuralAnalysis(N, E, entry)N : in set of Node;E: in set of (Node x Node);entry: in Node;

beginm, n, p : Node;rtype : RegionType;NodeSet, ReachUnder: set of Node;StuctOf := StructType := ∅;Stuctures := StructNodes := ∅;CTNodes := N; CTEdges := ∅;repeat

Post := ∅; Visit := ∅PostMax := 0; PostCtr := 1DFS_Postorder(N, E, entry );while |N| > 1∧ PostCtr ≤ PostMax do

n := Post(PostCtr) ;rtype :=AcyclicRType(N,E,rtype,NodeSet);if rtype 6= nil then

p:= Reduce(N,E,rtype,NodeSet) ;if entry ∈ NodeSet then entry := p; fi;

else

ReachUnder := {n};for each n ∈ N do

// ∃k amely vissza élen eljut n-be és,// ∃m pont, amihez van n→ m,// és m→ k -ba él.if PathBack(m,n) then

ReachUnder ∪ = {m};fi;

od;rtype :=CyclicRType(N,E,rtype,

ReachUnder);if rtype 6= nil then

p:= Reduce(N,E,rtype,ReachUnder) ;if entry ∈ ReachUnder then

entry := p;fi

elsePostCtr += 1;

fifiod;

until |N| = 1;end

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

Page 71: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Blokkok DFS bejárása

Procedure DFS_Postorder(N, E, x)N : in set of Node;E: in set of (Node x Node);x: in Node;

beginy : Node;Visit(x):=true;for each y ∈ Succ(x) do

if !Visit(y) thenDFS_Postorder(N,E,y);

if;od;PostMax+= 1;Post(PostMax) := x;

end

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

Page 72: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Aciklikus struktúrák feltérképezése

Procedure AcyclicRType(N,E,node,nset) : RegionTypeN : in set of Node;E: in set of (Node x Node);node: inout Node;nset: out set of Node;

beginm, n : Node;p, s: boolean;nset := ∅;n := node; p := true; s := |Succ(n)| = 1;while p ∧ s do

nset ∪ = {n}; n := �Succ(n);p := |Pred(n)| = 1; s := |Succ(n)| = 1;

od;if p then

nset ∪ = {n};fin := node; p := |Pred(n)| = 1; s:=true;while p ∧ s do

nset ∪ = {n}; n := �Pred(n);p := |Pred(n)| = 1; s := |Succ(n)| = 1;

od

if s thennset ∪ = {n};

finode := n;if |nset | ≥ 2 then

return Block;elif |Succ(node)| = 2 then

m := Succ(node); n:= (Succ(node)-{m});if Succ(m) = Succ(n)∧ |Succ(m)| = 1∧ |Succ(n)| = 1∧ |Pred(m)| = 1∧ |Pred(n) = 1| thennset := {node,m,n};return IfThenElse;

elif . . .. . .

elsereturn nil;

fi;fi;

end

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

Page 73: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Ciklikus struktúrák feltérképezése

Procedure CyclicRType(N,E,node,nset) : RegionTypeN : in set of Node;E: in set of (Node x Node);node: in Node;nset: inout set of Node;

beginm : Node;if |nset | = 1 then

if node→ node ∈ E thenreturn SelfLoop;

elsereturn nil;

fi;fi;if ∃m ∈ nset !Path(node,m,N) then

nset := MinimizeImproper(N,E,node,nset);return Improper;

fi

m := �(nset - { node });if |Succ(node)| = 2∧ |Succ(m)| = 1∧|Pred(node)| = 2 ∧ |Pred(m) = 1| thenreturn WhileLoop;

elsereturn NaturalLoop;

fi;end

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

Page 74: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Redukció

B1

Entry

B2

exit

B3

B4 B5

B6

B7

Entrya

B2a

exit

B3

B4 B5a

B7

Entryb

exit

B3

B4 B5b

Entryb

exit

B3a

Entryc

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

Page 75: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Improper struktúrák kezelése

Fubo Zhang és Erik H. D’Hollander bebizonyították, hogy az általuk definiálthárom elemi programtranszformációs lépés

Forward Copy,Backward Copy,Cut

segítségével minden nem strukturált programrész strukturált formává alakítható.Módszerüket magasszintu blokk strukturált programozási nyelvre alkalmazták.

Haicheng Wu és társai kisebb átalakításokkal a módszert assembly szintuprogramra is alkalmazhatóvá tették.

Cikkek:Fubo Zhang and Erik H. D’Hollander. Using hammock graphs to structureprograms. IEEE Trans. Software Eng., 30(4):231-245, 2004.

Haicheng Wu, Gregory Diamos, Jin Wang, Si Li, and Sudhakar Yalamanchili.Characterization and transformation of unstructured control flow in bulksynchronous gpu applications. Int. J. High Perform. Comput. Appl.,26(2):170-185, May 2012.

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

Page 76: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Forward CopyA következo ábrán a {B1,B2} és a {B3,B4} blokkok IfThenszerkezetet alkotnának, ha az E1 és E2 szaggatott élek nemszerepelnének.

Forward Copy transzformáció:1 Forward copy transzformáció során az IfThen szerkezetet

alkotó {B1,B2} részgráf közös pontja B3 és az E2 él közötttalálható gráfot le kell másolni.

2 A (B2,B3) él végpontját a megismételt struktúra B‘3 pontjáraállítani.

Az így kapott jobb oldali ábra {B3,B4} szerkezetére a forwardcopy transzformációt megismételve a gráf reducibilissé válik.

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

Page 77: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Forward Copy transzformáció

E'1E2E1E2E1

B'3

B'4

B'5

Exit

Entry

B4

B5

B3

B2

B1

Exit

Entry

B4

B5

B3

B2

B1

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

Page 78: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Backward CopyA következo ábrán található ciklus improper, mivel a belsejébe aB1 blokkokból az E1 élen keresztül be tudunk ugrani.

Backward Copy transzformáció:1 A ciklust alkotó blokkokat meg kell ismételni (backward copy).

Ezzel megszüntethetjük a ciklus belsejébe történo ugrást.2 A C1 élet a megismételt ciklusra kell állítani.

A struktúra továbbra is irreducibilis maradt, mivel a {B1,B2,B3}IfThen szerkezetnek két kilépési pontja van, de ezt már az elobbismertetett forward copy transzformációval megszüntethetjük.

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

Page 79: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Backward Copy transzformáció

C'1

C1

C1

B'2B2

E1

Exit

Entry

B4

B5

B3

B1

B'5

B'3

B'4

B2

E1

Exit

Entry

B4

B5

B3

B1

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

Page 80: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

CutA következo ábrán a ciklus belsejébol az E1 és az E2 élekenkeresztül is kiléphetünk, tehát ciklust több kilépési ponttal isrendelkezik.

1 Ciklus végét és a kilépés okát tartalmazó változók bevezetése.2 "compare cycle" blokk bevezetése. A ciklus szervezését erre

kell építeni.3 "compare from" blokk bevezetése. Kilépés okának megfelelo

folytatás elkészítése.

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

Page 81: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Cut transzformáció

from==B5

from==B4 B6

compare from

B6 cycle==false

cycle:=falsefrom:=B5

cycle:=truefrom:=B5

B5

cycle==true

cycle:=falsefrom:=b4

cycle==false

E2

B2

E1

Exit

Entry

B4

compare cycle

B3

B1

cycle==true

B2

E1

Exit

Entry

B4B5

B3

B1

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

Page 82: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Gondolatok a strukturált programozásról

improper — keresztél — irreducibilis — nem struktúráltDahl – Dijkstra – Hoare , Strukturált programozás 7.fejezet, A programok megértésérolwww.hit.bme.hu/~izso/struct_prog.pdf

Donald E. Knuth, Stuctured Programming with gotoStatesmentsLinux: Using goto In Kernel CodeC-ben a break, continue valóban megsérti a strukturáltprogramozás elvét, avagy irreducibilis lesz a CFG(vezérlésfolyan gráf) ?

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

Page 83: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Regiszter hozzárendelés

Intel x86 processzor utasításkészlete kevés regiszterttartalmaz;néhány regiszter használata korlátozott;a gyors futás érdekében az adatokat érdemes aregiszterben tartani;ha nincs elég regiszter, ki kell menteni a memóriába;minimalizálni kell az egyidejuleg használt regiszterekszámát;általában színezési problémára vezetheto vissza.

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

Page 84: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Regiszter hozzárendelés

s1 = 2

s2 = 4

s3 = s1 + s2

s4 = s3 + 1

s5 = s1 * s2

s6 = s4 * s5

s1 s2 s3 s4 s5 s6

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

Page 85: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Regiszter hozzárendelés

s1 = 2

s2 = 4

s3 = s1 + s2

s4 = s3 + 1

s5 = s1 * s2

s6 = s4 * s5

s1 s2 s3 s4 s5 s6

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

Page 86: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Regiszter hozzárendelés

s1 = 2

s2 = 4

s3 = s1 + s2

s4 = s3 + 1

s5 = s1 * s2

s6 = s4 * s5

s1 s2 s3 s4 s5 s6

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

Page 87: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Regiszter hozzárendelés

s1 = 2

s2 = 4

s3 = s1 + s2

s4 = s3 + 1

s5 = s1 * s2

s6 = s4 * s5

s1 s2 s3 s4 s5 s6

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

Page 88: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Regiszter hozzárendelés

s1 = 2

s2 = 4

s3 = s1 + s2

s4 = s3 + 1

s5 = s1 * s2

s6 = s4 * s5

s1 s2 s3 s4 s5 s6

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

Page 89: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Regiszter hozzárendelés

s1 = 2

s2 = 4

s3 = s1 + s2

s4 = s3 + 1

s5 = s1 * s2

s6 = s4 * s5

s1 s2 s3 s4 s5 s6

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

Page 90: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Regiszter hozzárendelés

s1 = 2

s2 = 4

s3 = s1 + s2

s4 = s3 + 1

s5 = s1 * s2

s6 = s4 * s5

s1 s2 s3 s4 s5 s6

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

Page 91: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Regiszter hozzárendelés

s1 = 2

s2 = 4

s3 = s1 + s2

s4 = s3 + 1

s5 = s1 * s2

s6 = s4 * s5

s1 s2 s3 s4 s5 s6

s1

s2

s3

s4

s6

s5

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

Page 92: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Regiszter hozzárendelés

s1 = 2

s2 = 4

s3 = s1 + s2

s4 = s3 + 1

s5 = s1 * s2

s6 = s4 * s5

s1 s2 s3 s4 s5 s6

s1

s2

s3

s4

s6

s5

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

Page 93: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Regiszter hozzárendelés

s1 = 2

s2 = 4

s3 = s1 + s2

s4 = s3 + 1

s5 = s1 * s2

s6 = s4 * s5

s1 s2 s3 s4 s5 s6

s1

s2

s3

s4

s6

s5

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

Page 94: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Regiszter hozzárendelés

s1 = 2

s2 = 4

s3 = s1 + s2

s4 = s3 + 1

s5 = s1 * s2

s6 = s4 * s5

s1 s2 s3 s4 s5 s6

s1

s2

s3

s4

s6

s5

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

Page 95: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Egyéb optimalizálási eljárások

aritmetikai egyszerusítés: x = 4 * a;→ x = a « 2;konstans kifejezés kiértékelése: 4 * 1024→ 4096

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

Page 96: Fordítás – Kódoptimalizálásizso/rec/ea05.pdf · |Vezérlésfolyam analízisKód struktúra visszafejtése Aktív változók Angol irodalomban a Live Variables kifejezést használják,

| Vezérlésfolyam analízis Kód struktúra visszafejtése

Optimalizált kód visszafejthetosége

megjegyzések elvesznek;szimbólikus nevek elvesznek;adattípusok elvesznek;ciklus átrendezés, és kifejtés (unrolling);különbözo lokális változók azonos regiszterekben cserélikegymást ;algebrai átírás;kódmozgás;

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