Analýza toku dat. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 15. listopad, 2012

Podobné dokumenty
Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Algoritmizace prostorových úloh

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

Paralelní programování

VISUAL BASIC. Přehled témat

Algoritmizace. 1. Úvod. Algoritmus

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Přednáška 3. Rekurze 1

Denotační sémantika. Marek Běhálek

Dijkstrův algoritmus

Automaty a gramatiky(bi-aag) Formální překlady. 5. Překladové konečné automaty. h(ε) = ε, h(xa) = h(x)h(a), x, x T, a T.

Dynamické programování

Definice 7.2. Nejmenší přirozené číslo k, pro které je graf G k-obarvitelný, se nazývá chromatické číslo (barevnost) grafu G a značí se χ(g).

PODPROGRAMY PROCEDURY A FUNKCE

Algoritmizace a programování

Vzdálenost uzlů v neorientovaném grafu

GENEROVÁNÍ KÓDU 9. SHRNUTÍ - PŘÍKLAD POSTUPU PŘEKLADU VSTUPNÍHO PROGRAMU (ZA POUŽITÍ DOSUD ZNÁMÝCH TECHNIK)

2. lekce Algoritmus, cyklus Miroslav Jílek

Algoritmizace prostorových úloh

Řídicí struktury. alg3 1

Binární vyhledávací stromy II

Vlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost

Úvod do programování. Lekce 3

Dynamické datové struktury III.

Programovací jazyk Pascal

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Definice 9.4. Nedeterministický algoritmus se v některých krocích může libovolně rozhodnout pro některé z několika možných různých pokračování.

10. Složitost a výkon

Optimalizace & soft omezení: algoritmy

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Obsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest

Maturitní otázky z předmětu PROGRAMOVÁNÍ

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

Konzistentnost. Přednášky z distribuovaných systémů

Úvod do programovacích jazyků (Java)

Algoritmy. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 15. dubna / 39

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

4. NP-úplné (NPC) a NP-těžké (NPH) problémy

Sada 1 - Základy programování

3 Co je algoritmus? Trocha historie Definice algoritmu Vlastnosti algoritmu... 3

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

NPRG030 Programování I, 2010/11

Funkce, podmíněný příkaz if-else, příkaz cyklu for

Vyvažování a rotace v BVS, všude se předpokládá AVL strom

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

NPRG030 Programování I, 2016/17 1 / :58:13

Algoritmizace a programování

IV113 Validace a verifikace

3. Třídy P a NP. Model výpočtu: Turingův stroj Rozhodovací problémy: třídy P a NP Optimalizační problémy: třídy PO a NPO MI-PAA

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Algoritmizace prostorových úloh

Funkce jedn e re aln e promˇ enn e Derivace Pˇredn aˇska ˇr ıjna 2015

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Pracovní listy - programování (algoritmy v jazyce Visual Basic) Algoritmus

Základy umělé inteligence

PŘEDNÁŠKA 2 POSLOUPNOSTI


Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

PROGRAMOVÁNÍ V SHELLU

1. D Y N A M I C K É DAT O V É STRUKTUR Y

Matice sousednosti NG

Algoritmizace. Obrázek 1: Přeložení programu překladačem

Přijímací zkoušky z matematiky pro akademický rok 2018/19 NMgr. studium Učitelství matematiky ZŠ, SŠ

Diferenciální počet funkcí jedné proměnné

Automatická segmentace slov s pomocí nástroje Affisix. Michal@Hrusecky.net, Hlavacova@ufal.mff.cuni.cz

Algoritmy na ohodnoceném grafu

Matematika (KMI/PMATE)

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I

Matematická analýza pro informatiky I. Limita posloupnosti (I)

Regulace frekvence a napětí

Teorie měření a regulace

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

Výukový materiál zpracován v rámci projektu EU peníze školám

Úvod do teorie grafů

= je prostý orientovaný graf., formálně c ( u, v) 0. dva speciální uzly: zdrojový uzel s a cílový uzel t. Dále budeme bez

12. Automatické vyhodnocení derivací. jaro 2012

Úloha ve stavovém prostoru SP je <s 0, C>, kde s 0 je počáteční stav C je množina požadovaných cílových stavů

Paradigmata programování 1

Rekonstrukce diskrétního rozdělení psti metodou maximální entropie

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Konečný automat. Jan Kybic.

Diferenciální počet funkcí jedné proměnné

Funkce a limita. Petr Hasil. Podpořeno projektem Průřezová inovace studijních programů Lesnické a dřevařské fakulty MENDELU v Brně (LDF)

Regulární výrazy. Filtry grep, sed a awk.

Rekurzivní algoritmy

Prohledávání do šířky = algoritmus vlny

Stromy, haldy, prioritní fronty

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Soustavy linea rnı ch rovnic

Transkript:

Překladače 2 Analýza toku dat Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci 15. listopad, 2012 Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 1 / 33

Lokální analýza: živost proměnných neformálně: proměnná je živá, pokud její hodnota bude přečtena nějakou operací předtím, než její hodnota bude opět změněna pro operaci x = y op z platí: x těsně před touto operací není živá proměnná y a z jsou živé před touto operací Eliminace mrtvého kódu určí se živost proměnných všechna přiřazení k proměnným, které nejsou živé, se odstraní Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 2 / 33

Příklad: živé proměnné (1/3) a = b c = a d = a + b e = d d = a f = e Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 3 / 33

Příklad: živé proměnné (2/3) 6. {b} a = b 5. {a, b} c = a 4. {a, b} d = a + b 3. {a, b, d} e = d 2. {a, b, e} d = a 1. {b, d, e} f = e 0. {b, d} Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 4 / 33

Příklad: živé proměnné (3/3) 6. {b} a = b 5. {a, b} c = a 4. {a, b} d = a + b 3. {a, b, d} e = d 2. {a, b, e} d = a 1. {b, d, e} f = e 0. {b, d} Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 5 / 33

Analýza toku dat běh programu posloupnost transformací stavu programů provedení operace IR transformace vstupního stavu na výstupní = bod programu před a po operaci má smysl uvažovat vstupní a výstupní bod bloku platí: v rámci základního bloku je bod programu za operací shodný s bodem před následující operací pokud vede hrana z bloku B 1 do B 2, pak bod programu za poslední operací bloku B 1 může být okamžitě následován bodem před prvním operací bloku B 2 Definition Cesta z bodu p 1 do p n je posloupnost bodů programu p 1,..., p n taková, že pro každé i = 1,..., n 1 platí bud : 1 p i předchází operaci a p i+1 okamžitě následuje dané operaci, 2 p i představuje konec bloku a p i+1 představuje začátek bloku následujícího. Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 6 / 33

Analýza toku dat obecně lze aplikovat na různé problémy (propagace kopíı, eliminace shodných podvýrazů) hodnota datového toku abstrakce všech možných stavů v daném bodě programu doména množina možných hodnot datového toku (např. potenční množina všech proměnných) závisí na typu problému analýza datového toku: pro každý příkaz s najít hodnoty IN[s] a OUT[s] představující hodnoty datového toku před provedením příkazu a po jeho provedení hodnoty jsou určeny (1) sémantikou operace s, (2) tokem řízení programu problém se řeší zakódováním do tzv. tokových rovnic, respektujícím (1), (2) rovnice řešeny iterativním způsobem Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 7 / 33

Přechodová funkce a základní bloky vztah hodnot IN[s] a OUT[s] je určen přechodovou funkcí f s podle směru předávání informací určujeme dopředný tok: OUT[s] = f s (IN[s]) zpětný tok: IN[s] = f s (OUT[s]) Základní bloky v případě základních bloků operace zprácovávány v řadě za sebou: pro základní blok B s příkazy s 1, s 2,..., s n platí: IN[s i+1 ] = OUT[s i ] pro všechna i = 1, 2,..., n 1 budeme označovat: IN[B] = IN[s 1 ] OUT[B] = OUT[s n ] přechodová funkce pro blok B: f B = f sn... f s1 Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 8 / 33

Přechodová funkce a základní bloky dopředná analýza: zpětná analýza: OUT[B] = f B (IN[B]) IN[B] = OUT[P] P predchudce B IN[B] = f B (OUT[B]) OUT[B] = IN[S] S naslednik B Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 9 / 33

Dosah definice (1/2) pokud víme, kde mohla být definována proměnná x, když se program dostal do bodu p, lze určit, zda x je v bodě p konstanta nebo, zda je vůbec inicializována definice proměnné x je operace, která přiřazuje nebo může přiřazovat proměnné x hodnotu definice d proměnné x dosahuje do bodu p, pokud na cestě jdoucí přímo z d do p není jiná definice proměnné x uvažujme definici: d : u = v + w operace,,generuje definici d proměnné u a odstraňuje ostatní definice proměnné u přechodová funkce pro d: f d (x) = gen d (x kill d ) kde gen d = {d}, kill d množina všech ostatních definic proměnné u v programu. Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 10 / 33

Dosah definice (2/2) skládáním přechodových funkcí lze rozšířit na základní bloky, viz str. 604 pro základní bloky platí následující rovnice: OUT[Entry] = pro ostatní základní bloky B: OUT[B] = gen B (IN[B] kill B ) IN[B] = P predchudce B OUT[P] hledáme nejmenší pevný bod: Algoritmus 1 OUT[Entry] = 2 pro každý blok B mimo Entry: OUT[B] = 3 pokud došlo ke změně nějaké OUT[B], opakuj: 4 pro každý blok B mimo Entry: 5 IN[B] = P predchudce B OUT[P] 6 OUT[B] = gen B (IN[B] kill B ) Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 11 / 33

Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 12 / 33

Analýza živých proměnných (1/2) Proměnná x je živá v bodě p pokud existuje cesta začínající v bodě p, kde může být proměnná x použita, jinak je proměnná v daném bodě mrtvá. def B množina všech definovaných proměnných v bloku B předtím, než byly v bloku B použity use B množina proměnných, jejichž hodnoty mohou být použity v B, aniž by byly definovány pro základní bloky platí následující rovnice: IN[Exit] = pro ostatní základní bloky B: IN[B] = use B (IN[B] def B ) OUT[B] = S naslednik B IN[S] na konci programu jsou všechny proměnné mrtvé proměnná je živá, pokud vstupuje do bloku před svou redefinicí nebo není v bloku předefinována proměnná je živá, pokud je použita v bloku, který je následovníkem Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 13 / 33

Analýza živých proměnných (2/2) 1 IN[Exit] = 2 pro každý blok B mimo Exit: IN[B] = 3 pokud došlo ke změně nějaké IN[B], opakuj: 4 pro každý blok B mimo Exit: 5 OUT[B] = S naslednik B IN[S] 6 IN[B] = use B (OUT[B] def B ) Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 14 / 33

Analýza dostupných výrazů (1/2) Výraz x op y je dostupný v bodě p, pokud na každé cestě z počátečního uzlu do p dojde k vyhdnocení x op y a po posledním vyhodnocením před p nedojde ke změně x nebo y. Blok,,zabíjí výraz, pokud může měnit x nebo y. Blok,,generuje výraz x op y, pokud vždy daný výraz vyhodnotí a následně nezmění x nebo y. egen B množina všech generovaných výrazů v bloku B ekill B množina zabitých výrazů v bloku B pro základní bloky platí následující rovnice: OUT[Entry] = pro ostatní základní bloky B: IN[B] = P predchuce B OUT[P] OUT[B] = egen B (IN[B] ekill B ) Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 15 / 33

Analýza dostupných výrazů (2/2) 1 OUT[Entry] = 2 pro každý blok B mimo Entry: OUT[B] = U 3 pokud došlo ke změně nějaké OUT[B], opakuj: 4 pro každý blok B mimo Entry: 5 OUT[B] = egen B (IN[B] ekill B ) 6 IN[B] = P predchuce B IN[P] U množina všech výrazů, které se mohou objevit na pravé straně operace (,,počáteční odhad ) Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 16 / 33

Framework analýzy datového toku Definition Framework analýzy datového toku je čtveřice D, V,, F, kde D je směr toku (Dopředný, Zpětný) V je polosvaz s operací průsek F množina přechodových funkcí f : V V taková, že obsahuje funkci I (x) = x pro všechna x z V a F je uzavřená vzhledem k operaci skládání funkcí. Definition Framework analýzy toku dat D, V,, F je monotonní pokud pro všechna x a y z V a f z F platí: x y f (x) f (y) Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 17 / 33

Iterativní algoritmus pro obecný framework Vstup Výstup Postup graf toku dat s uzly Entry a Exit směr toku D množin hodnot V, operátor množina funkcí F, kde f B z F je přechodová funkce pro blok B konstanta v Entry nebo v Exit představující mezní případ pro dopřednou nebo zpětnou analýzu hodnoty V pro IN[B] a OUT[B] pro každý blok B v grafu toku dat pro každý blok B se opakovaně aproximují hodnoty IN[B] a OUT[B] Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 18 / 33

Algoritmus Dopředný tok 1 OUT[Entry] = v Entry 2 pro každý blok B mimo Entry: OUT[B] = 3 pokud došlo ke změně nějaké OUT[B], opakuj: 4 pro každý blok B mimo Entry: 5 IN[B] = P predchudce B OUT[P] 6 OUT[B] = f B (IN[B]) Zpětný tok 1 IN[Exit] = v Exit 2 pro každý blok B mimo Exit: IN[B] = 3 pokud došlo ke změně nějaké IN[B], opakuj: 4 pro každý blok B mimo Exit: 5 OUT[B] = S naslednik B IN[S] 6 IN[B] = f B (OUT[B]) Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 19 / 33

Vlastnosti algoritmu pokud algoritmus konverguje, výsledek je řešením tokových rovnic pokud je framework monotonní, pak řešení je maximální pevný bod tokových rovnic (tj. pro jiná řešení platí, že hodnoty IN[B] a OUT[B] jsou vzhledem k maximálnímu pevnému bodu) pokud je framework monotonní a polosvaz je konečné výšky, pak algoritmus konverguje Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 20 / 33

Propagace konstant pro každý datový typ proměnné zavedeme polosvaz L t = D t {NAC, UNDEF},, kde Dt je množina hodnot, kterých může proměnná nabývat NAC představuje hodnotu,,není konstanta UNDEF představuje hodnotu,,hodnota není definována a platí: NAC v = NAC UNDEF v = v pro všechny hodnoty proměnné v c c = c pro všechny konstanty c c1 c 2 = NAC pro všechny vzájemně různé konstanty c 1 a c 2 Parametry algoritmu: Hodnoty datového toku doména: součin polosvazů L = L t1... L tn, kde každá složka představuje jednu proměnnou programu hodnota datového toku budeme označovat jako m, kde m(v) představuje hodnotu proměnné v z definice: m m = m pokud m (v) = m(v) m (v) pro všechny proměnné v Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 21 / 33

Další parametry algoritmu směr: dopředný Množina přechodových funkcí uvažujeme pouze přechodové funkce pro jednotlivé operace (pro bloky lze odvodit skládáním) funkce ve tvaru: f : L L F obsahuje funkce: fi (m) = m, pro všechna m L (identita) f0 (m) = m 0, pro všechna m L, kde m 0 (v) = UNDEF pro všechny proměnné v přechodové funkce fs pro obecný příkaz s pro přechodovou funkci f s a všechna m a m z L taková, že m = f s (m) platí: (1) pokud s není přiřazení, pak f s = f i (2) pokud s je přiřazení proměnné x, pak m (v) = m(v) pro všechny proměnné v x a m (x) je definováno: Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 22 / 33

Další parametry algoritmu...dokončení bodu (2)... a m (x) je definováno: (a) pokud je pravá strana výrazu konstanta: m (x) = c (b) pokud je pravá strana výrazu ve tvaru y z m (x) = m(y) m(z), pokud m(y) a m(z) jsou konstanty m (x) = NAC, pokud m(y) nebo m(z) jsou NAC m (x) = UNDEF, jinak (c) pokud je pravá stran jiný typ výrazu (např. volání fce.), pak m (x) = NAC. Poznámky funkce z F jsou monotonní algoritmus konverguje (viz (B)) pokud se objeví UNDEF v kódu, neexistuje cesta, na které by byla definice dané proměnné pokud existuje cesta s definicí proměnná, proměnná nemá hodnotu UNDEF (plyne z definice ) algoritmus může nalézt více konstant než by měl v případě nedefinovaných hodnot může zvolit tuto konstantu jako hodnotu (viz str. 638) Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 23 / 33

Odstraňování redundance Globální společné podvýrazy výraz y z je (plně) redundantní v bodě p pokud je v daném bodě dostupný (bude spočítaný na všech cestách do p a nedojde následně po tomto výpočtu k redefinici y a z) výraz y z je částečně redundantní v bodě p pokud existuje cesta do p, kde je výraz y z spočítaný a nedošlo následně k redefinici y a z Invariant cyklu výraz x = y z je invariant cyklu, pokud y a z nejsou v cyklu redefinovány přesun výrazu mimo smyčku a uložení hodnoty do pomocné proměnné v optimalizovaném kódu by se nemělo by se provést víc instrukcí než v neoptimalizovaném (problém, pokud smyčka končí dřív než dojde k vyhodnocení výrazu) jedno z možných řesení pro while while (c) { if (c) { S; ----> do { S;} while (c); } } Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 24 / 33

Líné přesouvání kódu odstranění redundance požadujeme následující vlasnosti: všechny redundantní výpočty, které lze odstranit bez duplikace kódu, jsou odstraněny program neprovádí žadný výpočet, který by nebyl proveden v originálním kódu výrazy jsou vyhodnoceny v nejzazším možném bodě algoritmus se snaží vložit kopii výrazu, aby byl výraz plně redundantní Umístění výrazu Výraz x y je očekávaný (anticipated) v bodě p, pokud všechny cesty vedoucí z tohoto bodu v nějakém bodě spočítají hodnotu x y s použitím hodnot x a y, které jsou dostupné v bodě p. Výraz x y je odložitelný (postponable) v bodě p, pokud je očekávaný a bude použitý na každé cestě jdoucí tímto bodem. Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 25 / 33

Nástin algoritmu 1 nalezení očekávaných výrazů pro každý bod programu 2 vložení očekávaných výrazů, kde jsou poprvé očekávány + analýza dostupnosti 3 přesun výrazů na místa, kde už nejsou odložitelné 4 odstranění proměnných, které jsou použité pouze jednou Přípravný krok každý příkaz je ve svém bloku pokud má blok více předků, je vložen nový blok mezi počátek a konec této každé hrany pro každý blok máme množiny: euseb množina výrazů spočítaných v B ekillb množina výrazů, jejichž operandy jsou definovány v B Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 26 / 33

Očekávané výrazy udávají místo, kam lze vložit výpočet výrazu dřívější umístění umožní redukovat více redundance pozdější umístění redukuje čas nutnný k držení výpočtu výrazu v registru výraz je očekávaný na vstupu do bloku, pokud je generovaný daným blokem (euse B ) výraz je očekávaný na výstupu z bloku, pokud je očekávaný na vstupu do bloku a nejsu předefinovány jeho operandy v daném bloku (ekill B ) Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 27 / 33

Nalezení očekávaných výrazů Parametry algoritmu Doména množina výrazů Směr zpětný Přechodová funkce f B (x) = euse B (x ekill B ) Hraniční stav IN[Exit] = Průsek Rovnice IN[B] = f B (OUT[B]) OUT[B] = S naslednik B IN[S] Inicializace IN[B] = U Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 28 / 33

Dostupnost výrazů mírně odlišná přechodová funkce: výraz je dostupný na výstupu z bloku, pokud: je dostupný na vstupu do bloku nebo je očekávaný v daném bloku (tj. lze jej spočítat) a není,,zabitý v daném bloku Doména Směr Přechodová funkce Hraniční stav Průsek Rovnice Inicializace množina výrazů dopředný f B (x) = (anticipated[b].in x) ekill B OUT[Entry] = OUT[B] = f B (IN[B]) IN[B] = P predchudce B OUT[P] OUT[B] = U anticipated[b].in výsledek předchozího kroku algoritmu earliest[b] = anticipated[b].in available[b].in první místa vhodná pro výpočet výrazu Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 29 / 33

Odložitelnost výrazů odloží vykonání výrazu na nejzazší mez výraz x y je odložitelný (postponeable) do bodu p, pokud dřívější umístění x y leží na každé cestě z Entry do p a neexistuje další použítí x y za tímto umístěním výraz je odložitelný na konci bloku, pokud není použitý v daném bloku a pokud je výraz odložitelný na vstupu do daného bloku nebo je v earliest[b] výraz je odložitelný na začátek bloku, pokud je odložitelný ve všech jeho předchůdcích (na výstupu z bloku) Doména množina výrazů Směr dopředný Přechodová funkce f B (x) = (erliest[b].in x) euse B Hraniční stav OUT[Entry] = Průsek Rovnice OUT[B] = f B (IN[B]) IN[B] = P predchudce B OUT[P] Inicializace OUT[B] = U Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 30 / 33

Odložitelnost výrazů umístění výrazu e na hranici, kde se výraz stáva z odložitelného,,neodložitelným výraz e může být umístěn na začátek bloku B pokud e není v postponable[b].in, tj. e je použito e nelze přesunout do některého z následníků Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 31 / 33

Použité výrazy výraz je použitý (used) v bodě p, pokud existuje cesta z p taková, že výraz je použit předtím, než je opět vyhodnocen analýza živosti (ale pro výrazy) Doména Směr Přechodová funkce Hraniční stav Průsek Rovnice Inicializace množina výrazů zpětný f B (x) = (euse B x) latest[b] IN[Exit] = IN[B] = f B (OUT[B]) OUT[B] = S naslednik B IN[S] IN[B] = earliest[b] = anticipated[b].in available[b].in latest[b] = (earliest[b] postponable[b].in) (euse B ( S naslednik B (earliest[s] postponable[s].in))) latest[b]... poslední místo, kam lze umístit výrazy Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 32 / 33

Přesun Pro každý výraz x y proved : pro všechny bloky B takové, že x y je v latest[b] used[b].out přidej t = x y na začátek B pro všechny bloky B takové, že x y je v nahrad x y proměnnou t euse B ( latest[b] used[b].out]) Petr Krajča (UP) KMI/PRKL2: Přednáška I. 15. listopad, 2012 33 / 33