Respostas:
O LLVM é uma biblioteca usada para construir, otimizar e produzir código de máquina intermediário e / ou binário.
O LLVM pode ser usado como uma estrutura de compilador, na qual você fornece o "front end" (analisador e lexer) e o "back end" (código que converte a representação do LLVM em código de máquina real).
O LLVM também pode atuar como um compilador JIT - ele suporta a geração de conjuntos x86 / x86_64 e PPC / PPC64 com otimizações rápidas de código destinadas à velocidade de compilação.
Se você estiver interessado, pode jogar com o código de máquina do LLVM gerado a partir do código C ou C ++ na página de demonstração , mas a página de demonstração está desativada no momento desde 2013.
Um bom resumo do LLVM é este:
No frontend, você tem Perl e muitas outras linguagens de alto nível. No back-end, você tem o código nativo que é executado diretamente na máquina.
No centro está sua representação de código intermediária. Se todas as linguagens de alto nível puderem ser representadas nesse formato de IR LLVM, as ferramentas de análise baseadas nessa IR poderão ser facilmente reutilizadas - essa é a lógica básica.
LLVM (usado para significar "Máquina virtual de baixo nível", mas não mais) é uma infraestrutura de compilador, escrita em C ++, projetada para otimização de programas escritos em tempo de compilação, tempo de link, tempo de execução e "tempo ocioso" em linguagens de programação arbitrárias. Originalmente implementado para C / C ++, o design independente da linguagem (e o sucesso) do LLVM gerou uma grande variedade de front-ends, incluindo Objective C, Fortran, Ada, Haskell, bytecode Java, Python, Ruby, ActionScript, GLSL , e outros.
Leia isto para obter mais explicações.
Confira também Unladen Swallow
De acordo com o livro 'Introdução às bibliotecas principais do LLVM' (c):
De fato, o nome LLVM pode se referir a qualquer um dos seguintes:
O projeto / infraestrutura do LLVM: esse é um guarda-chuva para vários projetos que, juntos, formam um compilador completo: frontends, backends, otimizadores, assemblers, linkers, libc ++, compiler-rt e um mecanismo JIT. A palavra "LLVM" tem este significado, por exemplo, na seguinte frase: "LLVM é composto por vários projetos".
Um compilador baseado em LLVM: Este é um compilador construído parcial ou completamente com a infraestrutura LLVM. Por exemplo, um compilador pode usar LLVM para front-end e back-end, mas usar bibliotecas de sistema GCC e GNU para executar o link final. O LLVM tem esse significado na seguinte frase, por exemplo: "Eu usei o LLVM para compilar programas C em uma plataforma MIPS".
Bibliotecas LLVM: Esta é a parte do código reutilizável da infraestrutura LLVM. Por exemplo, o LLVM tem esse significado na frase: "Meu projeto usa o LLVM para gerar código por meio da estrutura de compilação Just-in-Time".
Núcleo do LLVM: as otimizações que ocorrem no nível da linguagem intermediária e os algoritmos de back-end formam o núcleo do LLVM onde o projeto foi iniciado. LLVM tem esse significado na seguinte frase: "LLVM e Clang são dois projetos diferentes".
O IR LLVM: Esta é a representação intermediária do compilador LLVM. O LLVM tem esse significado quando usado em frases como "Eu construí um frontend que traduz meu próprio idioma para o LLVM".
O LLVM é basicamente uma biblioteca usada para criar compiladores e / ou software orientado a linguagem. A essência básica é que, embora você tenha o gcc, que provavelmente é o conjunto mais comum de compiladores, ele não foi criado para ser reutilizável, ou seja. é difícil pegar componentes do gcc e usá-lo para criar seu próprio aplicativo. O LLVM aborda bem esse problema criando um conjunto de "tecnologias modulares e reutilizáveis de compiladores e cadeias de ferramentas" que qualquer pessoa poderia usar para criar compiladores e software orientado a linguagem.
A infraestrutura do compilador LLVM é particularmente útil para executar otimizações e transformações no código. Também consiste em várias ferramentas que servem usos distintos. O llvm-prof é uma ferramenta de criação de perfil que permite fazer o perfil da execução para identificar pontos de acesso do programa. Opt é uma ferramenta de otimização que oferece várias passagens de otimização (eliminação de código morto, por exemplo).
É importante ressaltar que o LLVM fornece as bibliotecas para você escrever seus próprios passes. Por exemplo, se você precisar adicionar uma verificação de intervalo em certos argumentos que são passados para determinadas funções de um programa, basta escrever um passe LLVM simples.
Para obter mais informações sobre como escrever seu próprio passe, consulte este http://llvm.org/docs/WritingAnLLVMPass.html