Metody realizacji języków programowania/MRJP Wykład 8: Różnice pomiędzy wersjami
Linia 36: | Linia 36: | ||
Często kod martwy powstaje po propagacji kopii lub po zwijaniu stałych. | Często kod martwy powstaje po propagacji kopii lub po zwijaniu stałych. | ||
== | == Zwijanie stałych == | ||
Jest to proces upraszczania wyrażeń stałych. Przykład: | |||
* | x = 30 * 2 | ||
można zastąpić przez | |||
x = 60 | |||
Zwijanie stałych czasem wykonuje się na wcześniejszych etapach kompilacji. |
Wersja z 17:19, 14 lip 2006
Wprowadzenie
Przekształcenia poprawiające kod
Eliminacja wspólnych podwyrażeń
Wyrażenie postaci jest nazywane wspólnym podwyrażeniem jeśli występuje ono w kilku miejscach oraz wartości zmiennych i użytych w kolejnych wystąpieniach nie zmieniły się po poprzednim obliczeniu . W takiej sytuacji można zastąpić kolejne wystąpienia przez wartość wyliczoną za pierwszym razem.
Przykład:
a=4*i b=4*i c=a+b
Drugie wyliczenie można zastąpić przez . Przekształcony blok:
a=4*i b=a c=a+b
Eliminację wspólnych podwyrażeń można stosować
- lokalnie - gdy przeszukujemy jeden blok bazowy,
- globalnie - dla całego grafu przepływu (trudniejsze z powodu pętli).
Usuwanie martwego kodu
Zmienną nazywamy żywą w danym miejscu programu, jeżeli jej wartość może zostać użyta. W pozostałych przypadkach nazywamy zmienną martwą w tym miejscu. Analogicznie definiujemy kod martwy, tzn. taki który oblicza wartości bezużyteczne. Na przykład wyliczenie wartości dla zmiennej martwej lub instrukcja postaci
if (false) ...
to kod martwy.
W oczywisty sposób kod martwy usuwamy.
Często kod martwy powstaje po propagacji kopii lub po zwijaniu stałych.
Zwijanie stałych
Jest to proces upraszczania wyrażeń stałych. Przykład:
x = 30 * 2
można zastąpić przez
x = 60
Zwijanie stałych czasem wykonuje się na wcześniejszych etapach kompilacji.