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 {

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.

Liens utiles