Risposte:
LLVM è una libreria utilizzata per costruire, ottimizzare e produrre codice macchina intermedio e / o binario.
LLVM può essere utilizzato come framework di compilazione, in cui viene fornito il "front-end" (parser e lexer) e il "back-end" (codice che converte la rappresentazione di LLVM in codice macchina effettivo).
LLVM può anche fungere da compilatore JIT - ha il supporto per la generazione di assiemi x86 / x86_64 e PPC / PPC64 con rapide ottimizzazioni del codice volte alla velocità di compilazione.
Se sei interessato, puoi giocare con il codice macchina di LLVM che viene generato dal codice C o C ++ nella loro pagina demo , ma la pagina demo è attualmente disabilitata dall'anno 2013.
Un buon riassunto di LLVM è questo:
Al frontend hai Perl e molte altre lingue di alto livello. Nel backend, hai il codice nativo che viene eseguito direttamente sulla macchina.
Al centro è la rappresentazione del codice intermedio. Se ogni linguaggio di alto livello può essere rappresentato in questo formato IR LLVM, gli strumenti di analisi basati su questo IR possono essere facilmente riutilizzati - questa è la logica di base.
LLVM (usato per indicare "Macchina virtuale di basso livello" ma non più) è un'infrastruttura di compilazione, scritta in C ++, progettata per l'ottimizzazione in fase di compilazione, tempo di collegamento, tempo di esecuzione e "tempo di inattività" dei programmi scritti in linguaggi di programmazione arbitrari. Originariamente implementato per C / C ++, il design indipendente dal linguaggio (e il successo) di LLVM da allora ha generato una grande varietà di front-end, tra cui Objective C, Fortran, Ada, Haskell, Java bytecode, Python, Ruby, ActionScript, GLSL , e altri.
Leggi questo per ulteriori spiegazioni Guarda
anche Unladen Swallow
Secondo il libro "Introduzione a LLVM Core Libraries" (c):
In effetti, il nome LLVM potrebbe riferirsi a uno dei seguenti:
Il progetto / infrastruttura LLVM: questo è un ombrello per diversi progetti che, insieme, formano un compilatore completo: frontend, backend, ottimizzatori, assemblatori, linker, libc ++, compilatore-rt e un motore JIT. La parola "LLVM" ha questo significato, ad esempio, nella seguente frase: "LLVM comprende diversi progetti".
Un compilatore basato su LLVM: questo è un compilatore creato parzialmente o completamente con l'infrastruttura LLVM. Ad esempio, un compilatore potrebbe utilizzare LLVM per il frontend e il backend ma utilizzare le librerie di sistema GCC e GNU per eseguire il collegamento finale. LLVM ha questo significato nella frase seguente, ad esempio: "Ho usato LLVM per compilare programmi C su una piattaforma MIPS".
Librerie LLVM: questa è la parte di codice riutilizzabile dell'infrastruttura LLVM. Ad esempio, LLVM ha questo significato nella frase: "Il mio progetto usa LLVM per generare codice attraverso il suo framework di compilazione Just-in-Time".
Core LLVM: le ottimizzazioni che si verificano a livello di linguaggio intermedio e gli algoritmi di backend formano il core LLVM da cui è partito il progetto. LLVM ha questo significato nella seguente frase: "LLVM e Clang sono due progetti diversi".
IR LLVM: questa è la rappresentazione intermedia del compilatore LLVM. LLVM ha questo significato quando usato in frasi come "Ho costruito un frontend che traduce la mia lingua in LLVM".
LLVM è fondamentalmente una libreria utilizzata per compilare compilatori e / o software orientati al linguaggio. L'essenza di base è che sebbene tu abbia gcc che è probabilmente la suite di compilatori più comune, non è costruita per essere riutilizzabile, ad es. è difficile prendere componenti da gcc e usarlo per creare la propria applicazione. LLVM affronta bene questo problema costruendo una serie di "tecnologie di compilatore e toolchain modulari e riutilizzabili" che chiunque potrebbe usare per costruire compilatori e software orientato al linguaggio.
L'infrastruttura del compilatore LLVM è particolarmente utile per eseguire ottimizzazioni e trasformazioni sul codice. Consiste anche in una serie di strumenti che servono usi distinti. llvm-prof è uno strumento di profilazione che consente di eseguire la profilazione dell'esecuzione al fine di identificare gli hotspot del programma. Opt è uno strumento di ottimizzazione che offre vari passaggi di ottimizzazione (eliminazione del codice morto ad esempio).
È importante sottolineare che LLVM ti fornisce le librerie per scrivere i tuoi Pass. Ad esempio, se è necessario aggiungere un controllo di intervallo su determinati argomenti passati a determinate funzioni di un programma, è sufficiente scrivere un semplice passaggio LLVM.
Per ulteriori informazioni sulla scrittura del proprio pass, consultare questo http://llvm.org/docs/WritingAnLLVMPass.html