TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 17. marraskuuta 2009
Sisällys
Sisällys
Seuraava deadline Vaihe E tiistai 1.12. klo 10 koodigenerointi (ilman ta) Vaihe F maanantai 14.12. klo 10
Kääntäjän rakenne lähdeohjelma SELAAJA sanasjono JÄSENTÄJÄ rakennepuu VÄLIKOODIN GENEROIJA välikoodi KOHDEKOODIN GENEROIJA kohdeohjelma TARKASTAJA SOKERINPILKKOJA OPTIMOIJA OPTIMOIJA
Sisällys
Parempi tapa tehdä pseudoassemblyä Muistiosoitukset kovakoodataan, mutta rekisterien sijasta käytetään väliaikaismuuttujia. Käsky ei ilmaise sallittuja rekistereitä. Nimetään jokaiselle rekisterille yksi yksikäsitteinen väliaikaismuuttuja. Rekisterivaatimukset ilmaistaan rekisteri rekisteri-kopioinnilla. Merkitään myös, onko käsky rekisteri rekisteri-kopiointi.
Impressionistinen esimerkki push rbp ; defn=rsp, use=rsp,rbp mov rbp, rsp mov $f, rdi ; defn=$f, use=rdi, move mov $a, rsi ; defn=$a, use=rsi, move xor $rv, $rv ; defn=$rv cmp $a, 0 ; use=$a jna.l2 mov $rv, 1 ; defn=$rv.l1: cmp $a, 0 ; use=$a jna.l2 mov rdi, $a ; defn=rdi, use=$a, move call [$f] ; defn=rax,rdi,rsi,rdx,rcx,r8,r9,r10,r11, use=$f,rdi mul $rv ; defn=rax,rdx use=$rv mov $rv, rax ; defn=$rv, use=rax, move dec $a ; defn=$a, use=$a jump.l1.l2: mov rax, $rv ; defn=rax, use=$rv, move leave ret ; use=rbx,rsp,rbp,r12,r13,r14,r15
Sisällys
engl. interference graph suuntaamaton graafi Kukin paikallinen muuttuja, parametri ja kääntäjän generoima väliaikaismuuttuja on yksi solmu. Kahden solmun välillä on kaari, jos niiden esittämiä muuttujia ei voi laittaa samaan rekisteriin. tyypillisesti koska ne ovat elossa samaan aikaan
n konstruointi Jokaiselle aliohjelman käskylle n: Jos se on kopiointikäsky a := c, lisää kaari (a, b) jokaiselle b out(n) {c}. Muutoin lisää kaari (a, b) jokaiselle a defn(n) ja b out(n).
Sisällys
Olkoon kohdekielessä k yleiskäyttöistä rekisteriä. Jos häirintägraafi voidaan värittää k:lla värillä siten, että solmuilla, joita yhdistää kaari, on eri väri, niin...... kukin väri voidaan tulkita rekisteriksi, ja sijoittaa samanväriset muuttujat samaan rekisteriin! Valitettavasti graafinväritys (ja siten globaali ) on NP-täydellinen ongelma. Seuraavassa kuitenkin hyväksi osoittautunut lineaarinen algoritmi.
Vaiheet Rakenna Rakenna aliohjelmaa kuvaava häirintägraafi. Tässä tarvitaan eloisuusanalyysiä. Yksinkertaista Valitse jokin solmu, jolla on vähemmän kaaria kuin koneessa on rekistereitä. Poista kyseinen solmu graafista, ja lisää se pinoon. Läikytä Jos kaikilla solmuilla on vähintään niin monta kaarta kuin koneessa on rekistereitä, yksinkertaistus ei onnistu. Tällöin poista jokin sellainen solmu graafista, jonka pitäminen muistissa on vähiten huono idea. Lisää se pinoon. Valitse Jos graafi on tyhjä, palauta pinossa olevat solmut takaisin graafiin värittäen kukin solmu vuorollaan. Tämä onnistuu varmasti kaikille yksinkertaistetuille solmuille. Jos jotakin läikytettyä solmua ei saa väritettyä, jätä se värittämättä ja jatka pinojärjestyksessä. Yritä uudelleen Jos solmuja jäi värittämättä, muokkaa ohjelmaa siten, että kyseiset solmut säilytetään muistissa ja ladataan rekistereihin vain silloin kun sitä tarvitaan. Aja sitten koko algoritmi alusta uudestaan.
Turhien kopiointien poisto Yhdistä Yksinkertaistusaskeleen jälkeen etsi jokin kopiointikäsky a := b ja yhdistä solmut a ja b, jos se on sallittua. Poista tämän jälkeen ohjelmasta kyseinen kopiointikäsky. Solmujen yhdistäminen on kiellettyä, jos ne ovat naapureita. Muutoin sovelletaan jompaa kumpaa seuraavista: Kaksi solmua saadaan yhdistää, jos yhdistetyllä solmulla on vähemmän kuin k sellaisia naapuria, jolla on vähintään k naapuria, missä k on koneen rekisterien määrä. (Briggsin kriteeri) Solmut a ja b saadaan yhdistää, jos jokaiselle a:n naapurille t pätee, että t ja b ovat naapureita tai t:llä on vähintään k naapuria. (Georgen kriteeri) Jäädytä Jos yksinkertaistus ja yhdistäminen ei kumpikaan onnistu, valitse jokin sellainen solmu, jolla on vähän naapureita, ja joka on osallisena kopiointikäskyssä. Merkitse ko. kopiointikäsky ei-kopiointikäskyksi.
Esiväritetyt solmut Solmut, jotka edustavat rekistereitä, ovat esiväritettyjä (engl. precolored). Yksinkertaistusaskel ei saa koskaan valita esiväritettyä solmua. Esiväritettyä solmua ei saa koskaan läikyttää. Valinta-askel aloitetaan, kun graafissa on vain esiväritetyt solmut.
Sisällys
Seuraava deadline Vaihe E tiistai 1.12. klo 10 koodigenerointi (ilman ta) Vaihe F maanantai 14.12. klo 10