tutorial mac for llvm

mac - ¿Qué es exactamente LLVM?



llvm tutorial (6)

Sigo escuchando sobre LLVM todo el tiempo. Está en Perl, luego está en Haskell, ¿entonces alguien lo usa en otro idioma? ¿Qué es?


De acuerdo con el libro ''Cómo empezar con las bibliotecas principales de LLVM'' (c):

De hecho, el nombre LLVM puede referirse a cualquiera de los siguientes:

  • El proyecto / infraestructura de LLVM: Este es un paraguas para varios proyectos que, juntos, forman un compilador completo: frontends, backends, optimizadores, ensambladores, enlazadores, libc ++, compiler-rt y un motor JIT. La palabra "LLVM" tiene este significado, por ejemplo, en la siguiente oración: "LLVM se compone de varios proyectos".

  • Un compilador basado en LLVM: este es un compilador construido parcial o completamente con la infraestructura de LLVM. Por ejemplo, un compilador podría usar LLVM para el frontend y el backend pero usar las bibliotecas de los sistemas GCC y GNU para realizar el enlace final. LLVM tiene este significado en la siguiente oración, por ejemplo: "Utilicé LLVM para compilar programas C en una plataforma MIPS".

  • Bibliotecas LLVM: esta es la parte del código reutilizable de la infraestructura de LLVM. Por ejemplo, LLVM tiene este significado en la oración: "Mi proyecto usa LLVM para generar código a través de su marco de compilación Just-in-Time".

  • Núcleo de LLVM: las optimizaciones que se producen en el nivel de idioma intermedio y los algoritmos de backend forman el núcleo de LLVM donde se inició el proyecto. LLVM tiene este significado en la siguiente oración: "LLVM y Clang son dos proyectos diferentes".

  • El LLVM IR: Esta es la representación intermedia del compilador LLVM. LLVM tiene este significado cuando se usa en oraciones como "Construí una interfaz que traduce mi propio idioma a LLVM".


LLVM es básicamente una biblioteca que se usa para compilar compiladores y / o software orientado al idioma. La idea básica es que si bien tiene gcc, que es probablemente el conjunto de compiladores más común, no está diseñado para ser reutilizable, es decir. es difícil tomar componentes de gcc y usarlos para construir su propia aplicación. LLVM aborda bien este problema al construir un conjunto de "compilaciones modulares y reutilizables y tecnologías de cadenas de herramientas" que cualquier persona podría usar para compilar compiladores y software orientado a idiomas.


LLVM es una biblioteca que se utiliza para construir, optimizar y producir código de máquina intermedio y / o binario.

LLVM se puede usar como un marco de compilación, donde se proporciona el "front-end" (analizador y lexer) y el "back-end" (código que convierte la representación de LLVM en código de máquina real).

LLVM también puede actuar como un compilador JIT: es compatible con la generación de ensamblajes x86 / x86_64 y PPC / PPC64 con rápidas optimizaciones de código destinadas a la velocidad de compilación.

Si está interesado, puede jugar con el código de máquina de LLVM que se genera a partir del código C o C ++ en su página de demostración .


La Máquina virtual de bajo nivel (LLVM) es una infraestructura de compilación, escrita en C ++, que está diseñada para la optimización de programas escritos en lenguajes de programación arbitrarios en tiempo de compilación, tiempo de enlace, tiempo de ejecución y tiempo de inactividad. Originalmente implementado para C / C ++, el diseño independiente del lenguaje (y el éxito) de LLVM ha generado una amplia variedad de front-ends, incluyendo Objective C, Fortran, Ada, Haskell, bytecode Java, Python, Ruby, ActionScript, GLSL , y otros.

Lee esto para más explicación.
También puedes ver Unladen Swallow


La infraestructura del compilador LLVM es particularmente útil para realizar optimizaciones y transformaciones en el código. También consta de una serie de herramientas que sirven usos distintos. llvm-prof es una herramienta de creación de perfiles que le permite hacer un perfil de la ejecución para identificar los puntos de acceso de los programas. Opt es una herramienta de optimización que ofrece varias pasadas de optimización (por ejemplo, eliminación de código muerto).

Es importante destacar que LLVM le proporciona las bibliotecas para escribir sus propios pases. Por ejemplo, si necesita agregar una verificación de rango en ciertos argumentos que se pasan a ciertas funciones de un Programa, basta con escribir un simple pase de LLVM.

Para obtener más información sobre cómo escribir su propio pase, visite este http://llvm.org/docs/WritingAnLLVMPass.html


Un buen resumen de LLVM es este:

En el frontend tienes Perl, y muchos otros lenguajes de alto nivel. En el backend, tiene el código nativo que se ejecuta directamente en la máquina.

En el centro está su representación de código intermedio. Si todos los lenguajes de alto nivel se pueden representar en este formato de LLVM IR, entonces las herramientas de análisis basadas en este IR se pueden reutilizar fácilmente, eso es lo racional básico.