LLVM Assembly programozási nyelv

Alprogramok, modulok

Szintaxis

define [linkelés] [láthatóság] [hívási konvenció] [visszatérési attribútumok] <visszatérési típus> @<függvény név> ([argumentum lista]) [függvény attribútumok] [section "name"] [align N] [gc] { ... }

A különböző attribútumok lehetséges értékei:

linkelés: private, linker_private, linker_private_weak, linker_private_weak_def_auto, internal, available_externally, linkonce, weak, common, appending, extern_weak, linkonce_odr, weak_odr, external, dllimport, dllexport

láthatóság: default, hidden, protected

hívási konvenció: ccc, fastcc, coldcc, cc 10 (GHC), cc <n> (Numbered)

visszatérési attribútumok: zeroext, signext, inreg, byval, sret, noalias, nocapture, nest

függvény attribútumok: address_safety, alignstack(<n>), alwaysinline, nonlazybind, inlinehint, naked, noimplicitfloat, noinline, noredzone, noreturn, nounwind, optsize, readnone, readonly, returns_twice, ssp, sspreq, uwtable

Az attribútumok részletes leírása a nyelv referencia dokumentációjában található.

Függvény típusok

A függvények típusát a következőképpen jelölhetjük: <visszatérési érték típus> (<paraméterek típusa>). Például: {i32, i32} (float*, i1) egy olyan függvény típusát jelöli, ami egy 32 bites egészekből álló párt ad vissza, és egy lebegőpontos szám mutatóját, illetve egy logikai értéket vár paraméterül.

Függvényhívás

Függvényhívást a call utasítás segítségével végezhetünk. Az utasításnak meg kell adni egy függvény-mutatót és a paramétereket. Opcionálisan egyéb paraméterek is megadhatók (hívási konvenció, visszatérési attribútumok, a függvény típusa). Példa:

%r = call i32 @fibonacci(i32 %n)