sta TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 8. joulukuuta 2009
Sisällys
Sisällys
Seuraava deadline Vaihe F maanantai 14.12. klo 12 rekisteriallokaatio Arvostelukappale torstai 14.1. klo 16 valmis kääntäjä arviointiaikataulu: palautus 31.12. mennessä, arviointi 14.1. mennessä palautus 14.1. mennessä, arviointi 28.1. mennessä
Sisällys
lähdekielessä erilaisia silmukkarakenteita myös mahdollista tehdä gotoilla, jos kieli sallii optimoinnin kannalta ei ole olennaista, miten silmukka on tehty tunnistetaan silmukat kontrollivuograafista
Hallitsijat 1 Määritelmä Kontrollivuograafin solmu d hallitsee toista solmua n (merk. d dom n) jos jokainen (suunnattu) polku graafin alkusolmusta n:ään kulkee d:n kautta. Huomioita Hallintarelaatio on refleksiivinen, transitiivinen ja antisymmetrinen; se on siis osittaisjärjestys. Jokaisella solmulla (paitsi alkusolmulla) on yksikäsitteinen välitön hallitsija: hallitsija, jolle pätee, että solmun ja sen välittömän hallitsijan välissä ei ole muita hallitsijoita. Hallintarelaatio on siten puu! Tätä puuta kutsutaan hallitsijapuuksi. Kaari solmusta sen hallitsijaan (joka ei ole kyseinen solmu itse) on paluukaari (engl. back edge). 1 engl. dominators
Algoritmi hallitsijoiden löytämiseksi Syöte Kontrollivuograafi. Tulos out(n): kullekin solmulle n sen hallitsijat. Algoritmi Kiintopisteiteraatio seuraavien yhtälöiden kautta: in(n) = out(n) p pred(n) out(n) = in(n) {n}
Syvyyden ensin virittävä puu 2 Virittävä puu on mikä tahansa graafin kaikista solmuista kaareja poistamalla muodostettu puu. Syvyyden ensin virittävä puu on virittävä puu, jossa puun kaaret ovat ne kaaret, jota pitkin syvyyshaku etenee. Graafin muut kaaret voidaan luokitella seuraavasti: kaari solmusta n solmuun m on etenevä (engl. advancing), jos n:stä m:ään on puun kaaria käyttävä suunnattu polku ja n = m; takautuva (engl. retreating), jos m:stä n:ään on puun kaaria käyttävä suunnattu polku; tai vastakkainen (engl. cross), jos se ei ole etenevä eikä takautuva. 2 engl. depth-first spanning tree
Sievenevät kontrollivuograafit Kontrollivuograafi on sievenevä (engl. reducible), jos sen kaikki takautuvat kaaret jokaisessa syvyyden ensin virittävässä puussa ovat paluukaaria. Sievenevässä graafissa riittää muodostaa yksi syvyyden ensin virittävä puu; sen takautuvien kaarien joukko on myös paluukaarien joukko. Tietovuoanalyysit ovat primitiivirekursiivisia, jos rajoitutaan tarkastelemaan vain sieveneviä kontrollivuograafeja. Rakenteiset silmukkarakenteet (myös break ja continue sekä niiden monitasoiset variantit) tuottavat vain sieveneviä kontrollivuograafeja.
Luonnolliset silmukat Luonnollinen silmukka (engl. natural loop) koostuu solmusta h (silmukan aloittaja, engl. header), paluukaaresta h:hon, sekä jokaisesta sellaisesta solmusta m, jonka jokainen polku h:hon sisältää kyseisen paluukaaren. Jokaiseen paluukaareen liittyy yksikäsitteinen luonnollinen silmukka. Silmukkan aloittajasolmusta usein pilkotaan esialoittaja (preheader) silmukkaoptimointeja varten. Kahdelle luonnolliselle silmukalle pätee: Jos niillä on yhteisiä solmuja, mutta niillä ei ole yhteistä aloittajasolmua, niin toinen niistä sisältyy kokonaan toiseen; se on sisäsilmukka (engl. inner loop)
Sisällys
lausekkeet Jos silmukan sisällä lasketaan määritelmä L : t := a b siten, että a:n ja b:n arvo ei muutu, L on silmukkainvariantti. Täsmällinen määritelmä: käsky L : t := a 1 a 2 on silmukkainvariantti, jos kullekin a i pätee: a i on vakio, tai mikään a i :n saavuttavista määritelmistä ei sisälly silmukkaan, tai vain yksi a i :n määritelmistä saavuttaa L:n ja se on silmukkainvariantti.
Silmukkainvariantin nosto Silmukkainvariantin L : t := a b saa siirtää silmukan ulkopuolelle (tavallisesti esialoittajan ja aloittajan väliin), jos: L hallitsee kaikkia silmukan päättäviä solmuja, joissa t on live-out, ja silmukassa on vain yksi t:n määritelmä, ja t ei ole live-in aloittajassa.
Sisällys
Muuttuja i on silmukan perusinduktiomuuttuja, jos i:n ainoat silmukan sisällä olevat määritelmät ovat muotoa i := i + c tai i := i c, missä c on silmukkainvariantti. Muuttuja k on silmukan johdannaisinduktiomuuttuja i:n perheessä (missä i on perusinduktiomuuttuja), jos silmukassa on vain yksi k:n määritlmä, ja se on muotoa k := i c tai k := i + c, missä c on silmukkainvariantti; tai silmukassa on vain yksi k:n määritlmä, ja se on muotoa k := j c tai k := j + c, missä c on silmukkainvariantti ja j on johdannaisinduktiomuuttuja i:n perheessä, ainoa k:n määritelmän saavuttava j:n määritelmä on silmukassa ja j:n ja k:n määritelmien välissä ei ole i:n määritelmää.
Induktiomuuttujan karakterisointi Induktiomuuttujan arvo voidaan karakterisoida kolmikkona seuraavasti. Olkoot j ja k induktiomuuttujia, olkoon j:n kolmikko (i, a, b), ja olkoon c silmukkainvariantti: Jos k on perusinduktiomuuttuja, sen kolmikko on (k, 0, 1). Jos k:n määritelmä on muotoa k := j + c, sen kolmikko on (i, a + c, b). Jos k:n määritelmä on muotoa k := j c, sen kolmikko on (i, a c, b c).
Voiman vähentäminen 3 Tarkastellaan johdannaisinduktiomuuttujia j 1,..., j n, joilla on sama kolmikko (i, a, b). Luodaan uusi muuttuja j. Alustetaan esialoittajan ja aloittajan välissä j := a + i b. Lisätään silmukan sisällä jokaisen käskyn i := i + c jälkeen käsky j := j + c b. Huomaa, että c b on silmukkainvariantti ja voidaan nostaa silmukasta pois! Jos b ja c ovat vakioita, c b voidaan laskea käännösaikana. Korvtan kunkin j k silmukan sisällä oleva määrittely lauseella j k := j. 3 engl. strength reduction
(Melkein) hyödyttömät muuttujat Muuttuja on hyödytön silmukassa, jos se ei ole live-out missään silmukan poistumissolmussa, ja sitä käytetään ainoastaan omassa määritelmässään. Hyödyttömän muuttujan määritelmät saadaan aina poistaa silmukasta. Muuttuja on melkein hyödytön, jos sitä käytetään vain omassa määritelmässään sekä vertailuissa silmukkainvarianttia vastaan, ja jos ainakin yksi muu induktiomuuttuja samassa perheessä ei ole hyödytön.
Melkein hyödyttömien muuttujien poisto Tarkastellaan saman perheen induktiomuuttujia j ja k, joiden kolmikot ovat (i, a j, b j ) ja (i, a k, b k ) ja joille pätee j a j b j = k a k b k kaikkialla paitsi k:n ja j:n päivityskäskyjen välissä 4. Tällöin vertailu k < n, missä n on silmukkainvariantti, voidaan korvata vertailulla j b j b k (n a k ) + a j, mikäli oikea puoli on kokonaisluku ja b j /b k :n etumerkki on käännösaikana tiedossa. Oikea puoli on silmukkainvariantti. Vertailun suunta riippuu b j /b k :n etumerkistä. 4 Tämä pätee voimanvähennyksen lisäämille muuttujille toistensa ja perheen perusinduktiomuuttujan suhteen.
Sisällys
Seuraava deadline Vaihe F maanantai 14.12. klo 12 rekisteriallokaatio Arvostelukappale torstai 14.1. klo 16 valmis kääntäjä arviointiaikataulu: palautus 31.12. mennessä, arviointi 14.1. mennessä palautus 14.1. mennessä, arviointi 28.1. mennessä