Az LLVM modulok felépítését az alábbi ábra szemlélteti:
Ebben a részben a BasicBlock-ok belsejében használható legfontosabb utasítások leírása található.
Szintaxis: <eredmény> = <utasítás-név> <típus> <operandus1>, <operandus2>
Utasítás neve | Leírás |
---|---|
add, fadd | összeadás – egész és lebegőpontos |
sub, fsub | kivonás – egész és lebegőpontos |
mul, fmul | szorzás – egész és lebegőpontos |
udiv | egész osztás |
sdiv | egész osztás (előjeles) |
fdiv | lebegőpontos osztás |
urem | egész maradék |
srem | egész maradék (előjeles) |
frem | lebegőpontos maradék |
shl | balra tolás |
lshr | jobbra tolás, nullákkal kiegészítve |
ashr | jobbra tolás, előjelet tartva |
and | logikai és művelet, bitenként elvégezve |
or | logikai vagy művelet, bitenként elvégezve |
xor | logikai kizáró vagy művelet, bitenként elvégezve |
Eredményük mindig i1, azaz logikai típusú. Két külön összehasonlító operátor létezik:
Memória foglalás az aktuális hívási vermen:
<eredmény> = alloca <típus>[, <egész-típus> <elemszám>]
Az aktuális függvény visszatérésekor az így foglalt memória felszabadul.
Memória olvasás:
<eredmény> = load <típus>* <mutató>
Memória írás:
store <típus> <érték>, <típus>* <mutató>
Memória cím számítás:
<eredmény> = getelementptr <típus>* <mutató>
{, <egész-típus> <index>}*
A nyelvben nincs utasítások elválasztására vagy lezárására szolgáló karakter. Egy utasítást egy sorba kell írni, az egymás alatt, egy blokkban leírt utasítások szekvenciálisan hajtódnak végre. A BasicBlock-ok nem feltétlen a leírás sorrendjében hajtódnak végre, mert mindegyiknek valamilyen vezérlő utasítással kell végetérnie.
Ugrás (feltételes):
br i1 <feltétel> label <igaz-címke>, label <hamis-címke>
Többágú elágazás:
switch <egész-típus> <érték>,
label <alapértelmezett-címke> [ <egész-típus> <érték1>,
label <címke1> … ]
A nyelv nem tartalmaz ciklust, de ugró utasítások segítségével természetesen megvalósíthatók. Például:
Ugrás (feltétel nélküli):
br label <címke>
Visszatérés függvényhívásból:
ret <típus> <érték> vagy ret void
Feltételes értékkiválasztás:
<eredmény> = select i1 <feltétel>,
<típus1> <érték1>,
<típus2> <érték2>
Értékkiválasztás vezérléstől függően:
<eredmény> = phi <típus>
[ <érték1>, <címke1> ], …