Réponses:
LLVM est une bibliothèque utilisée pour construire, optimiser et produire du code machine intermédiaire et / ou binaire.
LLVM peut être utilisé comme cadre de compilation, où vous fournissez le "front end" (analyseur 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'assemblys x86 / x86_64 et PPC / PPC64 avec des optimisations de code rapides visant la vitesse de compilation.
Si vous êtes intéressé, vous pouvez jouer avec le code machine de LLVM qui est généré à partir du code C ou C ++ dans leur page de démonstration , mais la page de démonstration est actuellement désactivée depuis l'année 2013.
Voici un bon résumé de LLVM:
Au frontend, vous avez Perl et de nombreux 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 chaque langage de haut niveau peut être représenté dans ce format IR LLVM, les outils d'analyse basés sur cet IR peuvent être facilement réutilisés - c'est la raison d'être de base.
LLVM (qui signifiait auparavant «machine virtuelle de bas niveau» mais pas plus) est une infrastructure de compilation, écrite en C ++, conçue pour l'optimisation au moment de la compilation, de la liaison, de l'exécution et de «l'inactivité» 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, y compris Objective C, Fortran, Ada, Haskell, Java bytecode, Python, Ruby, ActionScript, GLSL , et d'autres.
Lisez ceci pour plus d'explications
Consultez également Hirondelle à vide
Selon le livre `` Mise en route avec les 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 parapluie pour plusieurs projets qui, ensemble, forment un compilateur complet: frontends, backends, optimiseurs, assembleurs, linkers, libc ++, compiler-rt et un moteur JIT. Le mot "LLVM" a cette signification, par exemple, dans la phrase suivante: "LLVM est composé de plusieurs projets".
Un compilateur basé sur LLVM: il s'agit d'un compilateur construit partiellement ou complètement avec l'infrastructure LLVM. Par exemple, un compilateur peut 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 compiler des programmes C sur une plateforme 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".
Cœur LLVM: Les optimisations qui se produisent au niveau du langage intermédiaire et les algorithmes backend forment le cœur LLVM où le projet a commencé. LLVM a ce sens dans la phrase suivante: "LLVM et Clang sont deux projets différents".
LLVM IR: il s'agit de la représentation intermédiaire du compilateur LLVM. LLVM a ce sens lorsqu'il est utilisé dans des phrases telles que "J'ai construit un frontend qui traduit mon propre langage 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'est-à-dire. il est difficile de prendre des composants de gcc et de l'utiliser pour construire votre propre application. LLVM résout bien ce problème en créant un ensemble de «technologies de compilation et de chaîne d'outils modulaires et réutilisables» que n'importe qui pourrait utiliser pour créer des compilateurs et des logiciels orientés langage.
L'infrastructure du compilateur LLVM est particulièrement utile pour effectuer des optimisations et des transformations sur le code. Il se compose également d'un certain nombre d'outils servant des usages distincts. llvm-prof est un outil de profilage qui vous permet de faire du profilage d'exécution afin d'identifier les points chauds du programme. Opt est un outil d'optimisation qui propose différentes passes d'optimisation (élimination du code mort par exemple).
Surtout LLVM vous fournit les bibliothèques, pour écrire vos propres passes. Par exemple, si vous devez ajouter une vérification de plage sur certains arguments qui sont passés dans certaines fonctions d'un programme, l'écriture d'un simple passage LLVM suffira.
Pour plus d'informations sur la rédaction de votre propre Pass, consultez ce http://llvm.org/docs/WritingAnLLVMPass.html