web-dev-qa-db-fra.com

En quoi consiste exactement LLVM?

J'entends parler de LLVM tout le temps. C'est en Perl, puis en Haskell, puis quelqu'un l'utilise dans une autre langue? Qu'Est-ce que c'est?

425
bodacydo

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

LLVM peut être utilisé en tant que structure de compilation, dans laquelle 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 en tant que compilateur JIT - il prend en charge la génération d’assemblages x86/x86_64 et PPC/PPC64 avec des optimisations de code rapides visant la vitesse de compilation.

Si cela vous intéresse, vous pouvez jouer avec le code machine de LLVM généré à partir de code C ou C++ dans leur page de démonstration , mais la page de démonstration est désactivée depuis 2013.

330
LiraNuna

Voici un bon résumé de LLVM:

enter image description here

Au début, vous avez Perl et de nombreux autres langages de haut niveau. Au fond, vous avez le code natif qui s'exécute directement sur la machine.

Au centre se trouve votre représentation du code intermédiaire. Si tous les langages de haut niveau peuvent être représentés dans ce format IR LLVM, les outils d'analyse basés sur cet IR peuvent être facilement réutilisés - c'est la raison fondamentale.

76
Peter Teoh

LLVM (utilisé pour signifier "machine virtuelle de bas niveau" mais plus maintenant) est une infrastructure de compilateur, écrite en C++, conçue pour l'optimisation des programmes écrits lors de la compilation, de la liaison, de l'exécution et des "périodes d'inactivité" dans des langages de programmation arbitraires. Initialement implémenté pour C/C++, la conception indépendante de la langue (et le succès) de LLVM a depuis engendré une grande variété de front-end, notamment Objective C, Fortran, Ada, Haskell, Java bytecode, Python. , Ruby, ActionScript, GLSL et autres.

Lisez ceci pour plus d'explications
Vérifiez aussi nladen Swallow

64
N 1.1

Selon 'Mise en route des bibliothèques principales de LLVM' book (c):

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

  • Le projet/l'infrastructure LLVM: Il s'agit d'un regroupement de plusieurs projets qui, ensemble, forment un compilateur complet: interfaces, backends, optimiseurs, assembleurs, lieurs, 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 front-end et le back-end mais utiliser les bibliothèques système GCC et GNU pour effectuer le dernier lien. LLVM a cette signification dans la phrase suivante, par exemple: "J'ai utilisé LLVM pour compiler 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 la signification suivante dans la phrase: "Mon projet utilise LLVM pour générer du code via son cadre de compilation Just-in-Time".

  • LLVM core: Les optimisations effectuées au niveau de langue intermédiaire et les algorithmes d'arrière-plan constituent le cœur de la LLVM à l'origine du projet. LLVM a cette signification 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 cette signification lorsqu'il est utilisé dans des phrases telles que "j'ai construit une interface qui traduit ma propre langue en LLVM".

49
Ittrin

LLVM est fondamentalement une bibliothèque utilisée pour construire des compilateurs et/ou des logiciels orientés langage. Le Gist de base est que bien que vous ayez 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 les utiliser pour créer votre propre application. LLVM résout bien ce problème en construisant un ensemble de "technologies de compilateur et de chaîne d'outils modulaires et réutilisables" que tout le monde peut utiliser pour créer des compilateurs et des logiciels orientés langage.

32
redbandit

L'infrastructure de compilation LLVM est particulièrement utile pour effectuer des optimisations et des transformations de code. Il comprend également un certain nombre d’outils servant des usages distincts. llvm-prof est un outil de profilage vous permettant de profiler l'exécution afin d'identifier les points chauds du programme. Opt est un outil d'optimisation proposant différentes passes d'optimisation (élimination du code mort, par exemple).

Fait important, LLVM vous fournit les bibliothèques pour écrire vos propres Passes. Par exemple, si vous souhaitez ajouter une vérification de plage sur certains arguments passés à certaines fonctions d'un programme, l'écriture d'un simple laissez-passer LLVM suffit.

Pour plus d’informations sur la rédaction de votre propre passe, consultez ceci http://llvm.org/docs/WritingAnLLVMPass.html

5
Hashim Sharif