Vhod: zaporedje strojnih ukazov z začasnimi spremenljivkami + interferenčni graf spemenljivk
Izhod: zaporedje strojnih ukazov z registri

Dodeljevanje registrov ~ barvanje interferenčnega grafa
Faze dodeljevanja registrov (za registrov):

  1. Build: Gradnja interferenčnega grafa
    Neortogonalni registri: “umetna” vozlišča registrov, spremenljivke povežemo s prepovedanimi (da ne morejo biti dodeljena vanje)
  2. Simplify: Umik ne-MOVE vozlišč z < sosedi na sklad (graf čim bolj zmanjšujemo)
  3. Coalesce: Združitev MOVE vozlišča v en register na sklad (če obstaja / če možno) simplify
  4. Freeze: Izbris izbrane MOVE povezave (če obstaja) simplify
  5. Potential spill: Umik vozlišča (npr. z največ povezavami) na sklad z označbo za “morebitni preliv” (skupaj z vozliščem izginejo tudi njegove povezave drugim vozliščem se stopnje znižajo kaka vozlišča imajo lahko spet < sosedov) simplify
  6. Dodeljevanje registrov: Premik vozlišč s sklada na graf, neoznačena vozlišča se zagotovo da pobarvati, označena le mogoče:
    • Vozlišče se da pobarvati barvanje
    • Vozlišča se ne da pobarvati barvanje z naključno/transparentno barvo in umestitev med “dejanske prelive”
    Če obstajajo “dejanski prelivi”:
    • popravek strojne kode: shranitev spremenljivke v klicnem zapisu namesto v registru
    • ponovitev vseh faz analize aktivnosti registrov in dodeljevanja registrov

Algoritmi združevanja MOVE ukazov

Osnova

Ne upoštevamo MOVE ukazov

Briggs

Vozlišči in (povezani v MOVE ukazu) lahko združimo v , če velja:

  • stopnja <

Po združitvi se bo še zmeraj zagotovo dalo pobarvati

George

Vozlišči in (povezani v MOVE ukazu) lahko združimo v , če za vsakega soseda od velja bodisi:

  • stopnja < (ali)
  • je tudi sosed

Dokaz s primerom

Cel graf , … sosedi vozlišča s stopnjo < :

takoj odstranimo (stopnje < ) ostane graf

  • Če in ne združimo: se lahko pobarva s barvami
  • Če in združimo: se tudi lahko pobarva s barvami