Vhod: zaporedje kanoničnih dreves posamezne funkcije (za vse funkcije)
Izhod: zaporedje strojnih ukazov z začasnimi spremenljivkami posamezne funkcije (za vse funkcije)

Poddrevesa vmesne kode predstavljajo eno ali več osnovnih operacij, ki jih lahko procesor izvede v enem ali večih ukazih
Tlakovci: drevesni vzorci, ki se skladajo s strojnimi ukazi izbrane arhitekture, s katerimi “pokrijemo” poddrevesa

  • ukazi, ki rezultat shranijo v register (npr. ADD, SUBI, LOAD)
  • ukazi, ki izvajajo stranske učinke na pomnilniku (npr. STORE)

Vzorec pravila tlakovca: preslikava poddrevo ukaz + rezultat (vrednost ali naslov)

Tlakovanje: “pokrivanje” delov drevesa s tlakovci, ki se ne prekrivajo
Učinkovitost najdene rešitve “pokritja” ocenjujemo: najmanjše število ukazov / najmanjša skupna zahtevnost ukazov / …

  • optimalno pokritje: nobena sosednja ukaza se ne moreta združiti v ukaz z manjšo ceno
  • optimum: globalno optimalna razdelitev (ki jo vseeno gradimo na približkih ocen, ki ne morejo upoštevati vseh zapletenih vrst medsebojne interakcije ukazov)

Algoritem za izbiranje ukazov

Algoritmi za iskanje optimalnih razdelitev so lažji kot algoritmi za iskanje optimumov

  • CISC: ukaz izvrši veliko operacij tile-i so veliki razlika med optimalnim pokritjem in optimumom se lahko bolj pozna
  • RISC: ukaz izvrši malo operacij tile-i so majhni (primerljiva cena) enostavnejši algoritmi

Maximal munch

Algoritem za optimalen tiling, ki generira strojne ukaze v obratnem vrstnem redu (od korena drevesa navzdol)
Od korena drevesa po vseh poddrevesih izbereš največji prilegajoč se tlakovec, nato ponovi za vsa nepokrita poddrevesa

Če za vsako posamezno vozlišče obstaja single-node tile, se tak algoritem ne more “zaplezati” (priti do tega, da noben tile ne bi mogel pokriti poddrevesa)

Dinamično programiranje

Dinamično programiranje: tehnika, ki optimum išče na podlagi optimumov vseh podproblemov TODO-LINKS

Algoritem za iskanje optimuma, ki generira strojne ukaze v pravilnem vrstnem redu (od listov drevesa navzgor)
Vsakemu vozlišču priredi ceno - cena tile-a na vozlišču + vsota cen zaporedja ukazov, po katerih smo priplezali do danega vozlišča

Drevesne gramatike

Generalizacija algoritma dinamičnega programiranja za kompleksnejše arhitekture z veliko ukazi, tipi registrov in načini naslavljanj
Algoritem tako hrani optimume za vse variante in uporabi le potrebne, variante pa najlažje raziskujemo s kontekstno neodvisno gramatiko

CISC računalniki

RISCCISC
Število registrov
Tipi registrovUniform tip registrovVeč tipov registrov, vsak uporabljen za druge naloge
Aritmetične operacijeSamo med registriDostop do registrov in/ali pomnilnika preko načinov naslavljanj
Oblika ukazov
Dostop do pomnilnikaPreko load in store ukazov s predpisano obliko Različni načini naslavljanja
Dolžina ukazovVsi ukazi iste dolžineRazlične dolžine ukzaov (opcode, naslov, …)
UčinekEn rezultat ali efekt na ukazUkazi imajo stranske učinke
Slabosti CISCa (npr. določeni tipi registrov, oblika ukazov z dvema registroma, …) zaobidemo z dodatnimi prenosi vrednostmi med registri (alokator registrov bo moral bolj delati)