Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
10
ROZDZIAŁ1.WPROWADZENIE
narysunku1.7składasięzsekwencjikodutrójadresowego
t1=inttofloat(60)
t2=id3*t1
t3=id2+t2
id1=t3
(1.3)
Istniejekilkazagadnieńdotyczącychinstrukcjitrójadresowych,októrychwarto
wspomnieć.Popierwsze,każdatrójadresowainstrukcjaprzypisaniamożeza-
wieraćconajwyżejjedenoperatorpoprawejstronie.Tymsamyminstrukcjete
ustalająkolejność,wktórejoperacjemająbyćwykonane;mnożeniepoprzedza
dodawanie,choćwźródłowymprogramiezostałoumieszczonepóźniej(1.1).Po
drugie,kompilatormusiwygenerowaćtymczasowenazwydoprzechowaniawar-
tościobliczanejprzezinstrukcjętrójadresową.Potrzecie,niektórentrójadresowe
instrukcje”,jakpierwszaiostatniawpowyższejsekwencji(1.3),mająmniejniż
trzyoperandy.
Wrozdziale6przedstawimygłównereprezentacjepośrednieużywanewkom-
pilatorach.Wrozdziale5wprowadzimytechnikitłumaczeniasterowaneskładnią,
którezostanązastosowanewrozdziale6dosprawdzaniatypówigenerowania
kodupośredniegodlatypowychkonstrukcjijęzykówprogramowania,takichjak
wyrażenia,instrukcjesterowaniaprzepływemiwywołaniaprocedur.
1.2.5.Optymalizacjakodu
Fazaniezależnejodarchitekturymaszynowejoptymalizacjikodumanacelu
ulepszeniekodupośredniego,dziękiczemulepszybędzierównieżkodwynikowy.
Zazwyczajnlepszy”oznaczanszybszy”,alemożliweteżinnepożądanecele,
takiejakmniejszadługośćlubmniejszezużycieenergiiprzezkodwynikowy.Na
przykładbezpośredni(niezoptymalizowany)algorytmgenerujekodpośredni
(1.3),używającpojedynczejinstrukcjidlakażdegooperatorawystępującego
wreprezentacjidrzewapochodzącejzanalizatorasemantycznego.
Użycieprostegoalgorytmudogenerowaniakodupośredniego,poktórym
następujefazaoptymalizacji,jestrozsądnąmetodąwygenerowaniadobrego
koduwynikowego.Optymalizatormożewydedukować,żekonwersjaliczby60
ztypucałkowitoliczbowegonazmiennoprzecinkowymożezostaćwykonanaraz
nazawszewczasiekompilacji,zatemoperację
inttofloat
możnawyeliminować,
zastępująccałkowitąstałą60liczbązmiennoprzecinkową60.0.Cowięcej,
t3
jest
używanatylkorazwceluprzekazaniaswojejwartościdoid1,zatemoptymalizator
możeprzekształcićsekwencję(1.3)wkrótszą:
t1=id3*60.0
id1=id2+t1
(1.4)
Istniejewielkiezróżnicowanietego,jakwieleoptymalizacjikoduwykonująróżne
kompilatory.Wprzypadkutych,którerobiąnajwięcejoptymalizacjitak
zwanychnoptymalizującychkompilatorów”fazatazajmujeistotnąilośćczasu.