2011-03-24 5 views
6

Je viens de découvrir LLVM et je n'en sais pas encore grand chose. Je l'ai essayé en utilisant llvm in browser. Je peux voir que tout code C que j'écris est converti en code octet LLVM qui est ensuite converti en code natif. La page montre une représentation textuelle du code d'octet. Par exemple, pour le code C suivant:Ecriture de l'octet llvm code

int array[] = { 1, 2, 3}; 

int foo(int X) { 
    return array[X]; 
} 

Il affiche le code d'octet suivant:

target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" 
target triple = "x86_64-linux-gnu" 

@array = global [3 x i32] [i32 1, i32 2, i32 3] ; <[3 x i32]*> [#uses=1] 

define i32 @foo(i32 %X) nounwind readonly { 
entry: 
    %0 = sext i32 %X to i64       ; <i64> [#uses=1] 
    %1 = getelementptr inbounds [3 x i32]* @array, i64 0, i64 %0 ; <i32*> [#uses=1] 
    %2 = load i32* %1, align 4      ; <i32> [#uses=1] 
    ret i32 %2 
} 

Ma question est la suivante: Puis-je écrire le code d'octets et donner à l'assembleur de LLVM pour convertir en natif code sauter la première étape de l'écriture de code C tout à fait? Si oui, comment puis-je le faire? Est-ce que quelqu'un a des pointeurs pour moi?

+1

http://llvm.org/docs /CommandGuide/index.html –

Répondre

6

Oui, sûrement vous pouvez. D'abord, vous pouvez écrire LLVM IR à la main. Tous les outils comme llc (qui va générer un code natif pour vous) et opt ​​(LLVM IR => LLVM IR optimiseur) acceptent la représentation textuelle de LLVM IR en entrée.

7

Une caractéristique très importante (et objectif de conception) de la langue LLVM IR est sa représentation 3 voies:

  • La représentation textuelle vous pouvez voir ici
  • La représentation bytecode (ou binaire)
  • La représentation en mémoire

Tous les 3 sont en effet complètement interchangeables. Rien de ce qui peut s'exprimer ne peut être exprimé dans les deux autres. Par conséquent, aussi longtemps que vous vous conformez à la syntaxe, vous pouvez écrire vous-même l'IR. Cela ne sert cependant à rien, à moins d'être utilisé comme un exercice pour vous familiariser avec le format, soit pour mieux lire (et diagnostiquer) l'IR soit pour produire votre propre compilateur :)

Questions connexes