Notes sur la représentation intermédiaire (IR)
IR de la définition d'une fonction :
define zeroext i1 @_Z9is_sortedPii(i32* %a, i32 %n) #0 {
zeroext
spécifie que la valeur de retour est sans extension et a la longueur que l'ABI du backend définie#0
connecte la fonction au groupe d'attributs#0
Le code qui suit constitue les basic blocks qui sont l'équivalent LLVM de blocs définis et appelés avec des instructions goto
.
Toutes les instructions LLVM doivent être placées dans un bloc basic et chaque bloc basique (placé entre les accolades de la fonction) doit se terminer par une terminator instruction.
Groupes d'attributs
Les groupes d'attributs permettent de simplifier l'IR en regroupant certains attributs ensemble et rendent donc l'IR plus lisible. Par exemple :
attributes #0 = { alwaysinline alignstack=4 }
attributes #1 = { "no-sse" }
Terminator instructions
Ces instructions sont placées à la fin des basic blocks et permettent d'indiquer quel bloc doit être exécuté après le bloc courant.