LLVM es un conjunto de tecnologías de compilador y cadena de herramientas [ 5 ] que se pueden usar para desarrollar un frontend para cualquier lenguaje de programación y un backend para cualquier arquitectura de conjunto de instrucciones . LLVM está diseñado en torno a una representación intermedia (IR) independiente del lenguaje que sirve como un lenguaje ensamblador portátil de alto nivel que se puede optimizar con una variedad de transformaciones en múltiples pasadas. [ 6 ] El nombre LLVM originalmente significaba Low Level Virtual Machine (Máquina Virtual de Bajo Nivel). Sin embargo, el proyecto se ha expandido desde entonces, y el nombre ya no es un acrónimo sino una sigla huérfana . [ 7 ]
LLVM está escrito en C++ y está diseñado para la optimización en tiempo de compilación , tiempo de enlace y tiempo de ejecución . Originalmente implementado para C y C++, el diseño independiente del lenguaje de LLVM ha generado desde entonces una amplia variedad de interfaces: los lenguajes con compiladores que usan LLVM (o que no usan directamente LLVM pero pueden generar programas compilados como LLVM IR) incluyen ActionScript , Ada , C# para .NET , [ 8 ] [ 9 ] [ 10 ] Common Lisp , [ 11 ] Crystal , CUDA , D , [ 12 ] Delphi , [ 13 ] Dylan , Forth , [ 14 ] Fortran , [ 15 ] FreeBASIC , Free Pascal , Halide , Haskell , Idris , [ 16 ] Jai (solo para compilaciones de lanzamiento optimizadas), bytecode de Java , Julia , Kotlin , lenguaje G de LabVIEW , [ 17 ] [ 18 ] Objective-C , OpenCL , [ 19 ] Odin, [ 20 ] PicoLisp , SQL y PL/pgSQL de PostgreSQL , [ 21 ] Ruby , [ 22 ] Rust , [ 23 ] Scala , [ 24 ] [ 25 ] Standard ML , [ 26 ] Swift , Wolfram Language , [ 27 ] Xojo y Zig .
Historia
El proyecto LLVM comenzó en 2000 en la Universidad de Illinois Urbana-Champaign , bajo la dirección de Vikram Adve y Chris Lattner . LLVM se desarrolló originalmente como una infraestructura de investigación para estudiar técnicas de compilación dinámica para lenguajes de programación estáticos y dinámicos . LLVM se publicó bajo la Licencia de Código Abierto de la Universidad de Illinois/NCSA , [ 3 ] una licencia de software libre permisiva . En 2005, Apple Inc. contrató a Lattner y formó un equipo para trabajar en el sistema LLVM para diversos usos dentro de los sistemas de desarrollo de Apple. [ 28 ] LLVM ha sido una parte integral de las herramientas de desarrollo Xcode de Apple para macOS e iOS desde Xcode 4 en 2011. [ 29 ]
En 2006, Lattner comenzó a trabajar en un nuevo proyecto llamado Clang . La combinación del frontend de Clang y el backend de LLVM se denomina Clang/LLVM o simplemente Clang.
El nombre LLVM era originalmente un acrónimo de Low Level Virtual Machine (Máquina Virtual de Bajo Nivel ). Sin embargo, el proyecto LLVM evolucionó hasta convertirse en un proyecto general que guarda poca relación con lo que la mayoría de los desarrolladores actuales consideran una máquina virtual . Esto hizo que el acrónimo resultara confuso e inapropiado, y desde 2011, LLVM ya no es oficialmente un acrónimo [ 30 ], sino una marca que se aplica al proyecto general LLVM [ 31 ] . El proyecto abarca la representación intermedia (IR) de LLVM, el depurador de LLVM , la implementación de LLVM de la biblioteca estándar de C++ (con soporte completo para C++11 y C++14 [ 32 ] ), etc. LLVM está administrado por la Fundación LLVM. La ingeniera de compiladores Tanya Lattner se convirtió en su presidenta en 2014 [ 33 ] y seguía siendo presidenta y directora ejecutiva en julio de 2026. . [ 34 ]
"Por diseñar e implementar LLVM" , la Association for Computing Machinery otorgó a Vikram Adve, Chris Lattner y Evan Cheng el premio ACM Software System Award 2012. [ 35 ]
El proyecto estaba disponible originalmente bajo la licencia UIUC . Después del lanzamiento de la versión 9.0.0 en 2019, [ 36 ] LLVM cambió su licencia a la Licencia Apache 2.0 con Excepciones LLVM. [ 3 ] A partir de noviembre de 2022 Aproximadamente 400 contribuciones no habían sido re-licenciadas. [ 37 ] [ 38 ]
Características
LLVM puede proporcionar las capas intermedias de un sistema de compilación completo, tomando el código de representación intermedia (IR) de un compilador y generando una IR optimizada. Esta nueva IR se puede convertir y enlazar a código de lenguaje ensamblador dependiente de la máquina para una plataforma de destino. LLVM puede aceptar la IR de la cadena de herramientas GNU Compiler Collection (GCC) , lo que permite su uso con una amplia gama de front-ends de compilación existentes escritos para ese proyecto. LLVM también se puede compilar con gcc a partir de la versión 7.5. [ 39 ]
LLVM también puede generar código máquina reubicable en tiempo de compilación o de enlace, o incluso código máquina binario en tiempo de ejecución.
LLVM admite un conjunto de instrucciones y un sistema de tipos independientes del lenguaje . [ 6 ] Cada instrucción está en forma de asignación única estática (SSA), lo que significa que cada variable (llamada registro tipado) se asigna una vez y luego se congela. Esto ayuda a simplificar el análisis de dependencias entre variables. LLVM permite compilar el código estáticamente, como en el sistema GCC tradicional, o dejarlo para compilación tardía desde IR a código máquina mediante compilación justo a tiempo (JIT), similar a Java . El sistema de tipos consta de tipos básicos como números enteros o de punto flotante y cinco tipos derivados : punteros , arreglos , vectores , estructuras y funciones . Una construcción de tipo en un lenguaje concreto puede representarse combinando estos tipos básicos en LLVM. Por ejemplo, una clase en C++ puede representarse mediante una mezcla de estructuras, funciones y arreglos de punteros a funciones .
El compilador JIT de LLVM puede optimizar las bifurcaciones estáticas innecesarias de un programa en tiempo de ejecución, lo que resulta útil para la evaluación parcial en casos donde un programa tiene muchas opciones, la mayoría de las cuales pueden determinarse fácilmente como innecesarias en un entorno específico. Esta característica se utiliza en la canalización de OpenGL de Mac OS X Leopard (v10.5) para brindar soporte a las características de hardware faltantes. [ 40 ]
El código gráfico dentro de la pila OpenGL puede dejarse en representación intermedia y luego compilarse al ejecutarse en la máquina de destino. En sistemas con unidades de procesamiento gráfico (GPU) de gama alta, el código resultante permanece bastante delgado, pasando las instrucciones a la GPU con cambios mínimos. En sistemas con GPU de gama baja, LLVM compilará procedimientos opcionales que se ejecutan en la unidad central de procesamiento (CPU) local y que emulan instrucciones que la GPU no puede ejecutar internamente. LLVM mejoró el rendimiento en máquinas de gama baja que utilizan chipsets Intel GMA . Se desarrolló un sistema similar bajo Gallium3D LLVMpipe y se incorporó al shell GNOME para permitir su ejecución sin un controlador de hardware 3D adecuado cargado. [ 41 ]
En 2011, los programas compilados por GCC superaron a los de LLVM en un 10%, en promedio. [ 42 ] [ 43 ] En 2013, Phoronix informó que LLVM había alcanzado a GCC, compilando binarios con un rendimiento aproximadamente igual. [ 44 ]
Componentes
LLVM se ha convertido en un proyecto paraguas que contiene múltiples componentes.
Interfaces
LLVM se escribió originalmente para reemplazar el generador de código existente en la pila de GCC, [ 45 ] y muchos de los front-ends de GCC se modificaron para funcionar con él, dando como resultado la suite LLVM-GCC, ahora desaparecida. Las modificaciones generalmente implicaban un paso de GIMPLE a LLVM IR para que los optimizadores y el generador de código de LLVM pudieran usarse en lugar del sistema GIMPLE de GCC. Apple fue un usuario importante de LLVM-GCC hasta Xcode 4.x (2013). [ 46 ]
Este uso del frontend de GCC se consideró una medida temporal; quedó prácticamente obsoleto con el desarrollo por parte de Apple de Clang , un frontend de compilador más reciente, con una base de código modular más moderna y mayor velocidad de compilación, compatible con C , C++ y Objective-C . La compatibilidad con LLVM-GCC se eliminó en Xcode 5. [ 47 ] Principalmente respaldado por Apple, Clang tenía como objetivo reemplazar el compilador de C/Objective-C en el sistema GCC con un sistema que se integrara más fácilmente con entornos de desarrollo integrados (IDE) y tuviera mayor compatibilidad con multihilo . La compatibilidad con directivas OpenMP se incluyó en Clang desde la versión 3.8. [ 48 ]
El gran interés que despierta LLVM ha dado lugar a varios esfuerzos por desarrollar nuevas interfaces para muchos otros lenguajes, incluidos Ada , D , Delphi , Fortran , Haskell , Julia , Rust , Swift y otros.
El compilador Utrecht Haskell puede generar código para LLVM. Si bien el generador se encontraba en las primeras etapas de desarrollo, en muchos casos era más eficiente que el generador de código C. [ 49 ] El backend del compilador Glasgow Haskell (GHC) utiliza LLVM y logra una aceleración del 30 % en el código compilado en comparación con la compilación de código nativo mediante GHC o la generación de código C seguida de compilación, careciendo solo de una de las muchas técnicas de optimización implementadas por GHC. [ 50 ]
Muchos otros componentes se encuentran en diversas etapas de desarrollo, incluyendo, entre otros, una interfaz de código de bytes Java , una interfaz de Lenguaje Intermedio Común (CIL), la implementación de Ruby 1.9 para MacRuby , varias interfaces para Standard ML y un nuevo asignador de registros de coloración de grafos .
Representación intermedia

El núcleo de LLVM es la representación intermedia (IR), un lenguaje de programación de bajo nivel similar al ensamblador. IR es un conjunto de instrucciones de computadora con conjunto de instrucciones reducido (RISC) fuertemente tipado que abstrae la mayoría de los detalles del objetivo. Por ejemplo, la convención de llamada se abstrae mediante callinstrucciones retcon argumentos explícitos. Además, en lugar de un conjunto fijo de registros, IR utiliza un conjunto infinito de variables temporales de la forma %0, %1, etc. LLVM admite tres formas equivalentes de IR: un formato de ensamblador legible por humanos, [ 51 ] un formato en memoria adecuado para front-ends y un formato de código de bits denso para serialización. Un programa simple de "¡Hola, mundo!" en el formato IR legible por humanos:
@.str = constante interna [ 14 x i8 ] c "Hola, mundo\0A\00"declare i32 @printf ( ptr , ...)define i32 @main ( i32 %argc , ptr %argv ) nounwind { entry: %tmp1 = getelementptr [ 14 x i8 ], ptr @.str , i32 0 , i32 0 %tmp2 = call i32 ( ptr , ...) @printf ( ptr %tmp1 ) nounwind ret i32 0 }Las numerosas convenciones y características que ofrecen los distintos destinos implican que LLVM no puede generar un IR verdaderamente independiente del destino y adaptarlo sin infringir algunas reglas establecidas. Ejemplos de dependencia del destino, más allá de lo que se menciona explícitamente en la documentación, se pueden encontrar en una propuesta de 2011 para "wordcode", una variante totalmente independiente del destino del IR de LLVM destinada a la distribución en línea. [ 52 ] Un ejemplo más práctico es PNaCl . [ 53 ]
El proyecto LLVM también introduce otro tipo de representación intermedia llamada MLIR [ 54 ] que ayuda a construir una infraestructura de compilador reutilizable y extensible mediante el empleo de una arquitectura de complementos llamada Dialect. [ 55 ] Permite el uso de información de nivel superior sobre la estructura del programa en el proceso de optimización, incluida la compilación poliédrica .
Sistemas de backend
En la versión 16, LLVM admite muchos conjuntos de instrucciones , incluidos IA-32 , x86-64 , ARM , Qualcomm Hexagon , LoongArch , M68K , MIPS , NVIDIA Parallel Thread Execution (PTX, también llamado NVPTX en la documentación de LLVM), PowerPC , AMD TeraScale , [ 56 ] las GPU AMD más recientes (también llamadas AMDGPU en la documentación de LLVM), [ 57 ] SPARC , z/Architecture (también llamado SystemZ en la documentación de LLVM) y XCore .
Algunas características no están disponibles en algunas plataformas. La mayoría de las características están presentes para IA-32, x86-64, z/Architecture, ARM y PowerPC. [ 58 ] RISC-V es compatible a partir de la versión 7.
En el pasado, LLVM también admitía otros backends, total o parcialmente, incluyendo el backend C, Cell SPU , mblaze (MicroBlaze) , [ 59 ] AMD R600, DEC/Compaq Alpha ( Alpha AXP ) [ 60 ] y Nios2 , [ 61 ] pero ese hardware está mayormente obsoleto y los desarrolladores de LLVM decidieron que los costos de soporte y mantenimiento ya no se justificaban.
LLVM también admite WebAssembly como destino, lo que permite que los programas compilados se ejecuten en entornos compatibles con WebAssembly, como Google Chrome / Chromium , Firefox , Microsoft Edge , Apple Safari o WAVM . Los compiladores WebAssembly compatibles con LLVM suelen admitir código fuente prácticamente sin modificar escrito en C, C++, D, Rust, Nim, Kotlin y otros lenguajes.
El subproyecto de código máquina (MC) de LLVM es el marco de trabajo de LLVM para traducir instrucciones de máquina entre formatos textuales y código máquina. Anteriormente, LLVM dependía del ensamblador del sistema, o de uno proporcionado por una cadena de herramientas, para traducir el lenguaje ensamblador a código máquina. El ensamblador integrado de LLVM MC es compatible con la mayoría de las arquitecturas de destino de LLVM, incluidas IA-32, x86-64, ARM y ARM64. Para algunas arquitecturas, como los distintos conjuntos de instrucciones MIPS, la compatibilidad con el ensamblador integrado es utilizable, pero aún se encuentra en fase beta.
Enlazador
El subproyecto lld es un intento de desarrollar un enlazador integrado e independiente de la plataforma para LLVM. [ 62 ] lld tiene como objetivo eliminar la dependencia de un enlazador de terceros. A partir de mayo de 2017 , lld admite ELF , PE/COFF , Mach-O y WebAssembly [ 63 ] en orden descendente de completitud. lld es más rápido que ambas variantes de GNU ld .
A diferencia de los enlazadores de GNU, lld tiene soporte integrado para la optimización en tiempo de enlace (LTO). Esto permite una generación de código más rápida, ya que evita el uso de un complemento del enlazador, pero, por otro lado, impide la interoperabilidad con otras variantes de LTO. [ 64 ]
Biblioteca estándar de C++
El proyecto LLVM incluye una implementación de la biblioteca estándar de C++ llamada libc++, con doble licencia bajo la licencia MIT y la licencia UIUC . [ 65 ]
Desde la versión 9.0.0, se cambió la licencia a la Licencia Apache 2.0 con Excepciones LLVM. [ 3 ]
Polly
Esto implementa un conjunto de optimizaciones de localidad de caché, así como autoparalelismo y vectorización utilizando un modelo poliédrico . [ 66 ]
Depurador
Biblioteca estándar de C
llvm-libc es una biblioteca estándar de C incompleta, en desarrollo e independiente de la ABI , diseñada por y para el proyecto LLVM. [ 67 ]
Derivados
Debido a su licencia permisiva, muchos proveedores lanzan sus propias versiones modificadas de LLVM. Esto está oficialmente reconocido por la documentación de LLVM, que desaconseja el uso de números de versión en las comprobaciones de características por este motivo. [ 68 ] Algunos de los proveedores incluyen:
- El compilador AMD Optimizing C/C++ de AMD se basa en LLVM, Clang y Flang.
- Apple mantiene una bifurcación de código abierto para Xcode . [ 69 ]
- Arm proporciona varias cadenas de herramientas basadas en LLVM, incluyendo Arm Compiler for Embedded, orientada al desarrollo bare-metal, y Arm Compiler for Linux, orientada al mercado de computación de alto rendimiento.
- Flang , proyecto Fortran en desarrollo a partir de 2022
- IBM está adoptando LLVM en sus compiladores de C/C++ y Fortran . [ 70 ]
- Intel ha adoptado LLVM para su compilador Intel C++ de próxima generación . [ 71 ]
- El Laboratorio Nacional de Los Alamos tiene una bifurcación de computación paralela de LLVM 8 llamada "Kitsune". [ 72 ]
- Nvidia utiliza LLVM en la implementación de su compilador NVVM CUDA . [ 73 ] El compilador NVVM es distinto del backend "NVPTX" mencionado en la sección Backends , aunque ambos generan código PTX para las GPU de Nvidia.
- Desde 2013, Sony ha estado utilizando el compilador Clang de interfaz principal de LLVM en el kit de desarrollo de software (SDK) de su consola PlayStation 4. [ 74 ]
Véase también
Referencias
- ↑ "Logotipo de LLVM" . El proyecto de infraestructura del compilador LLVM .
- ↑ "LLVM 22.1.8" . 16 de junio de 2026. Consultado el 16 de junio de 2026 .
- 1 2 3 4 "LICENSE.TXT" . llvm.org . Consultado el 24 de septiembre de 2019 .
- ↑ "Política para desarrolladores de LLVM — Documentación de LLVM 20.0.0git" . llvm.org . Consultado el 9 de noviembre de 2024 .
- ↑ "El proyecto de infraestructura del compilador LLVM" . Consultado el 11 de marzo de 2016 .
- 1 2 "Manual de referencia del lenguaje LLVM" . Consultado el 9 de junio de 2019 .
- ↑ "El proyecto de infraestructura del compilador LLVM" . llvm.org . Consultado el 13 de enero de 2025 .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ "Anuncio de LLILC: un nuevo compilador basado en LLVM para .NET" . dotnetfoundation.org . Archivado del original el 12 de diciembre de 2021. Consultado el 12 de septiembre de 2020 .
- ↑ "Mono LLVM" . Consultado el 10 de marzo de 2013 .
- ↑ Lattner, Chris (2011). "LLVM" . En Brown, Amy; Wilson, Greg (eds.). La arquitectura de las aplicaciones de código abierto .
- ↑ "Clap" . Desarrolladores de Clasp . Consultado el 2 de diciembre de 2024 .
- ↑ "LDC" . D Wiki . Consultado el 2 de diciembre de 2024 .
- ↑ "Compiladores Delphi basados en LLVM" . Embarcadero . Consultado el 26 de noviembre de 2024 .
- ↑ «MovForth» . GitHub . 28 de noviembre de 2021.
- ↑ "El compilador Flang" . Proyecto LLVM . Consultado el 2 de diciembre de 2024 .
- ↑ "Rápido" . Rápido . Consultado el 22 de noviembre de 2024 .
- ↑ Wong, William (23 de mayo de 2017). "¿Cuál es la diferencia entre LabVIEW 2017 y LabVIEW NXG?" . Diseño electrónico .
- ↑ "Compilador NI LabVIEW: Bajo el capó" .
- ↑ Larabel, Michael (11 de abril de 2018). "Khronos anuncia oficialmente su traductor LLVM/SPIR-V" . Phoronix.com .
- ↑ "Preguntas frecuentes" . odin-lang.org . Consultado el 26 de enero de 2026 .
- ↑ "32.1. ¿Qué es la compilación JIT?" . Documentación de PostgreSQL . 12 de noviembre de 2020 . Consultado el 25 de enero de 2021 .
- ↑ "Características" . RubyMotion . Scratchwork Development LLC . Consultado el 17 de junio de 2017. RubyMotion
transforma
el código fuente Ruby de su proyecto en... código máquina utilizando un compilador... de compilación anticipada (AOT), basado en LLVM.
- ↑ "Generación de código - Guía para el desarrollo en Rustc" . rust-lang.org . Consultado el 4 de enero de 2023 .
- ↑ Reedy, Geoff (24 de septiembre de 2012). "Compilación de Scala a LLVM" . St. Louis, Missouri, Estados Unidos . Recuperado el 19 de febrero de 2013 .
- ↑ "Scala Native" . Consultado el 26 de noviembre de 2023 .
- ↑ "LLVMCodegen" . MLton . Consultado el 26 de noviembre de 2024 .
- ↑ Documentación del lenguaje Wolfram
- ↑ Adam Treat (19 de febrero de 2005), mkspecs y parches para la compilación de Qt4 con LLVM , archivado del original el 4 de octubre de 2011 , recuperado el 27 de enero de 2012.
- ↑ "Descripción general de las herramientas para desarrolladores" . Apple Developer . Apple. Archivado del original el 23 de abril de 2011.
- ↑ Lattner, Chris (21 de diciembre de 2011). "El nombre de LLVM" . llvm-dev (Lista de correo) . Consultado el 2 de marzo de 2016 .
'LLVM' ya no es oficialmente un acrónimo. El acrónimo al que se expandió en su momento era confuso e inapropiado casi desde el principio. :) A medida que LLVM creció para abarcar otros subproyectos, se volvió aún menos útil y carente de significado.
- ↑ Lattner, Chris (1 de junio de 2011). "LLVM" . En Brown, Amy; Wilson, Greg (eds.). La arquitectura de las aplicaciones de código abierto . Lulu.com. ISBN 978-1257638017El nombre 'LLVM' fue en su día un acrónimo, pero
ahora es simplemente una marca que engloba el proyecto.
- ↑ ""libc++" Biblioteca estándar de C++" .
- ↑ Lattner, Chris (3 de abril de 2014). "La Fundación LLVM" . Blog del Proyecto LLVM .
- ↑ "Junta Directiva" . Fundación LLVM . Consultado el 4 de julio de 2026 .
- ↑ "Premio ACM al Sistema de Software" . ACM.
- ↑ Wennborg, Hans (19 de septiembre de 2019). " [ llvm-announce ] Lanzamiento de LLVM 9.0.0" .
- ↑ "Relicensing Long Tail" . foundation.llvm.org . 11 de noviembre de 2022. Archivado del original el 13 de mayo de 2024. Consultado el 1 de abril de 2022 .
- ↑ "Relicensing de LLVM - cola larga" . Google Docs . Proyecto LLVM. Archivado del original el 13 de mayo de 2024. Recuperado el 27 de noviembre de 2022 .
- ↑ "⚙ D156286 [ docs ] Aumentar la versión mínima de GCC a 7.5" . reviews.llvm.org . Consultado el 28 de julio de 2023 .
- ↑ Lattner, Chris (15 de agosto de 2006). "Un uso interesante de LLVM en Apple: la pila OpenGL" . llvm-dev (Lista de correo) . Consultado el 1 de marzo de 2016 .
- ↑ Michael Larabel, "GNOME Shell funciona sin soporte para controladores de GPU" , phoronix , 6 de noviembre de 2011
- ↑ Makarov, V. "SPEC2000: Comparación de LLVM-2.9 y GCC4.6.1 en x86" . Consultado el 3 de octubre de 2011 .
- ↑ Makarov, V. "SPEC2000: Comparación de LLVM-2.9 y GCC4.6.1 en x86_64" . Consultado el 3 de octubre de 2011 .
- ↑ Larabel, Michael (27 de diciembre de 2012). "Compilador LLVM/Clang 3.2 compitiendo con GCC" . Recuperado el 31 de marzo de 2013 .
- ↑ Lattner, Chris ; Adve, Vikram (mayo de 2003). Arquitectura para un GCC de próxima generación . Primera Cumbre Anual de Desarrolladores de GCC . Recuperado el 6 de septiembre de 2009 .
- ↑ "Descripción general del compilador LLVM" . developer.apple.com .
- ↑ "Notas de la versión de Xcode 5" . Apple Inc.
- ↑ "Notas de la versión 3.8 de Clang" . Consultado el 24 de agosto de 2016 .
- ↑ "Compilación de Haskell a LLVM" . Consultado el 22 de febrero de 2009 .
- ↑ "Blog del proyecto LLVM: El compilador Haskell de Glasgow y LLVM" . 17 de mayo de 2010. Consultado el 13 de agosto de 2010 .
- ↑ "Manual de referencia del lenguaje LLVM" . LLVM.org . 10 de enero de 2023.
- ↑ Kang, Jin-Gu. "Wordcode: bitcode LLVM más independiente del destino" (PDF) . Consultado el 1 de diciembre de 2019 .
- ↑ "PNaCl: Ejecutables de cliente nativo portátiles" (PDF) . Archivado del original (PDF) el 2 de mayo de 2012. Consultado el 25 de abril de 2012 .
- ↑ "MLIR" . mlir.llvm.org . Consultado el 7 de junio de 2022 .
- ↑ "Dialectos - MLIR" . mlir.llvm.org . Consultado el 7 de junio de 2022 .
- ↑ Stellard, Tom (26 de marzo de 2012). " [ LLVMdev ] RFC: R600, un nuevo backend para GPU AMD" . llvm-dev (Lista de correo).
- ↑ "Guía del usuario para el backend AMDGPU — Documentación de LLVM 15.0.0git" .
- ↑ Notas de implementación específicas del destino: Matriz de características del destino // El generador de código independiente del destino de LLVM, sitio de LLVM.
- ↑ "Eliminar el backend mblaze de llvm" . GitHub . 25 de julio de 2013. Consultado el 26 de enero de 2020 .
- ↑ "Eliminar el backend Alpha" . GitHub . 27 de octubre de 2011. Consultado el 26 de enero de 2020 .
- ↑ " [ Nios2 ] Eliminar el backend de Nios2" . GitHub . 15 de enero de 2019 . Consultado el 26 de enero de 2020 .
- ↑ "lld - El enlazador de LLVM" . El proyecto LLVM . Consultado el 10 de mayo de 2017 .
- ↑ "Puerto WebAssembly lld" .
- ↑ "42446 – lld no puede manejar archivos LTO de gcc" . bugs.llvm.org .
- ↑ ""libc++" Biblioteca estándar de C++" .
- ↑ "Polly - Optimizaciones poliédricas para LLVM" .
- ↑ "llvm-libc: Una biblioteca estándar compatible con ISO C — Documentación de libc 15.0.0git" . libc.llvm.org . Consultado el 18 de julio de 2022 .
- ↑ "Extensiones del lenguaje Clang" . Documentación de Clang 12.
Tenga en cuenta que los números de versión de marketing no deben usarse para comprobar las características del lenguaje, ya que los distintos proveedores utilizan diferentes esquemas de numeración. En su lugar, utilice las macros de comprobación de características.
- ↑ "apple/llvm-project" . Apple. 5 de septiembre de 2020.
- ↑ "Los compiladores de IBM C/C++ y Fortran adoptarán la infraestructura de código abierto LLVM" . 29 de julio de 2022.
- ↑ "Los compiladores Intel C/C++ completan la adopción de LLVM" . Intel . Consultado el 17 de agosto de 2021 .
- ↑ "lanl/kitsune" . Laboratorio Nacional de Los Alamos. 27 de febrero de 2020.
- ↑ "Especificación NVVM IR 1.5" .
La versión actual de NVVM IR se basa en LLVM 5.0.
- ↑ Conjunto de herramientas para desarrolladores de PS4 (PDF) , consultado el 24 de febrero de 2015.
Lecturas adicionales
- Chris Lattner - La arquitectura de las aplicaciones de código abierto - Capítulo 11 LLVM , ISBN 978-1257638017, publicado en 2012 bajo CC BY 3.0 ( Acceso abierto ). [ 1 ]
- LLVM: Un marco de compilación para el análisis y la transformación de programas a lo largo de su vida útil , un artículo publicado por Chris Lattner, Vikram Adve
Enlaces externos
- ↑ Lattner, Chris (15 de marzo de 2012). «Capítulo 11» . La arquitectura de las aplicaciones de código abierto . Amy Brown, Greg Wilson. ISBN 978-1257638017.
- Compiladores libres y de código abierto
- Máquinas virtuales basadas en registros
- Software que utiliza la licencia de código abierto de la Universidad de Illinois/NCSA.
- Software que utiliza la licencia Apache.