LLVM (anteriormente "Low Level Virtual Machine") es un proyecto de infraestructura de compiladores que proporciona un conjunto de herramientas y bibliotecas para el desarrollo de compiladores, optimizadores y generadores de código. Su componente central es la LLVM Intermediate Representation (IR), un lenguaje de bajo nivel fuertemente tipado, similar al ensamblador, que sirve como formato universal para la representación de código entre las fases de frontend (parsing y análisis semántico) y backend (generación de código máquina y optimización). Esta IR permite que cualquier lenguaje de programación pueda ser compilado a LLVM IR, y que esta IR pueda ser optimizada y luego traducida a código máquina para diversas arquitecturas, desacoplando así el frontend del backend del compilador.

LLVM se ha adoptado ampliamente en la industria. El compilador Clang, que reemplaza a GCC para C, C++, Objective-C y Objective-C++, es un frontend de LLVM. Swift, Rust y Kotlin/Native utilizan LLVM como su backend de compilación. Apple lo integra profundamente en sus toolchains de desarrollo para iOS y macOS. Además, proyectos como WebAssembly (Wasm) utilizan LLVM para compilar código de alto nivel a Wasm, y GPUs de NVIDIA y AMD lo emplean en sus toolchains para la compilación de kernels de cómputo paralelo. También es fundamental en la implementación de Just-In-Time (JIT) compilers para lenguajes como Julia.

Para un Arquitecto de Sistemas, LLVM es una pieza estratégica por su modularidad y capacidad de optimización. Permite la creación de lenguajes de dominio específico (DSLs) con compiladores de alto rendimiento, o la extensión de lenguajes existentes con nuevas arquitecturas de hardware. La flexibilidad de su IR facilita la implementación de optimizaciones avanzadas, tanto estáticas (AOT) como dinámicas (JIT), lo que puede resultar en mejoras significativas de rendimiento y eficiencia energética. La elección de LLVM como base para una toolchain reduce la complejidad de desarrollar un compilador desde cero y asegura una base robusta y bien mantenida, aunque requiere una comprensión profunda de la optimización de compiladores para explotar todo su potencial. Su adopción generalizada también garantiza una amplia compatibilidad y un ecosistema maduro.