Qu’est-ce que LLVM?

Je continue à entendre parler de LLVM tout le temps. C’est dans Perl, alors c’est dans Haskell, alors quelqu’un l’utilise dans une autre langue? Qu’Est-ce que c’est?

LLVM est une bibliothèque utilisée pour construire, optimiser et produire du code machine intermédiaire et / ou binary.

LLVM peut être utilisé en tant que framework de compilateur, où vous fournissez le “frontal” (parsingur et lexer) et le “back end” (code qui convertit la représentation de LLVM en code machine réel).

LLVM peut également agir comme un compilateur JIT – il prend en charge la génération d’assemblages x86 / x86_64 et PPC / PPC64 avec des optimisations de code rapides destinées à la vitesse de compilation.

Si cela vous intéresse, vous pouvez jouer avec le code machine de LLVM généré à partir du code C ou C ++ dans leur page de démonstration .

La machine virtuelle de bas niveau (LLVM) est une infrastructure de compilateur, écrite en C ++, conçue pour la compilation, la liaison, l’exécution et l’optimisation des programmes écrits dans des langages de programmation arbitraires. Initialement implémentée pour C / C ++, la conception indépendante du langage (et le succès) de LLVM a depuis engendré une grande variété de frontaux, notamment Objective C, Fortran, Ada, Haskell, Java bytecode, Python, Ruby, ActionScript, GLSL. , et d’autres.

Lisez ceci pour plus d’explications
Jetez également un coup d’ oeil à Hirondelle à vide

Selon le livre “Mise en route des bibliothèques de base LLVM” (c):

En fait, le nom LLVM peut faire référence à l’un des éléments suivants:

  • Le projet / infrastructure LLVM: Il s’agit d’un ensemble de projets qui, ensemble, forment un compilateur complet: frontends, backends, optimiseurs, assembleurs, lieurs, libc ++, comstackr-rt et un moteur JIT. Le mot “LLVM” a cette signification, par exemple dans la phrase suivante: “LLVM comprend plusieurs projets”.

  • Un compilateur basé sur LLVM: Il s’agit d’un compilateur construit partiellement ou totalement avec l’infrastructure LLVM. Par exemple, un compilateur pourrait utiliser LLVM pour le frontend et le backend, mais utiliser les bibliothèques système GCC et GNU pour effectuer le lien final. LLVM a cette signification dans la phrase suivante, par exemple: “J’ai utilisé LLVM pour comstackr des programmes C sur une plate-forme MIPS”.

  • Bibliothèques LLVM: il s’agit de la partie de code réutilisable de l’infrastructure LLVM. Par exemple, LLVM a cette signification dans la phrase: “Mon projet utilise LLVM pour générer du code via son framework de compilation Just-in-Time”.

  • LLVM core: les optimisations intervenant au niveau du langage intermédiaire et des algorithmes dorsaux constituent le kernel LLVM où le projet a démarré. LLVM a ce sens dans la phrase suivante: “LLVM et Clang sont deux projets différents”.

  • LLVM IR: Représentation intermédiaire du compilateur LLVM. LLVM a ce sens lorsqu’il est utilisé dans des phrases telles que “J’ai construit une interface qui traduit ma propre langue en LLVM”.

LLVM est essentiellement une bibliothèque utilisée pour construire des compilateurs et / ou des logiciels orientés langage. L’essentiel est que même si vous avez gcc, qui est probablement la suite de compilateurs la plus courante, il n’est pas conçu pour être réutilisable, c.-à-d. Il est difficile de prendre des composants de gcc et de les utiliser pour créer votre propre application. LLVM répond bien à ce problème en créant un ensemble de “technologies de compilation et de chaîne d’outils modulaires et réutilisables” que tout le monde pourrait utiliser pour créer des compilateurs et des logiciels orientés langage.

Voici un bon résumé de LLVM:

entrer la description de l'image ici

Au frontend vous avez Perl, et beaucoup d’autres langages de haut niveau. Au niveau du backend, vous avez le code natif qui s’exécute directement sur la machine.

Au centre se trouve votre représentation de code intermédiaire. Si tous les langages de haut niveau peuvent être représentés dans ce format IR LLVM, les outils d’parsing basés sur ce RI peuvent être facilement réutilisés, ce qui est la base rationnelle.

L’infrastructure du compilateur LLVM est particulièrement utile pour effectuer des optimisations et des transformations sur le code. Il comprend également un certain nombre d’outils servant des usages distincts. llvm-prof est un outil de profilage qui vous permet de faire un profil d’exécution pour identifier les zones sensibles du programme. Opt est un outil d’optimisation qui propose différents passages d’optimisation (élimination du code mort par exemple).

Surtout, LLVM vous fournit les bibliothèques pour écrire vos propres Pass. Par exemple, si vous devez append une vérification de plage à certains arguments transmis à certaines fonctions d’un programme, il suffirait d’écrire un simple Pass LLVM.

Pour plus d’informations sur l’écriture de votre propre Pass, consultez le http://llvm.org/docs/WritingAnLLVMPass.html