Fact-checked by Grok 2 weeks ago

LLVM

LLVM is a collection of modular and reusable and technologies designed to support static and dynamic of arbitrary programming languages. Originally named for "Low Level Virtual Machine," the project has evolved far beyond that concept and now uses LLVM simply as its full name, with no acronymic meaning. At its core, LLVM provides a language-independent (IR) based on static single assignment (SSA) form, enabling powerful optimizations, for numerous target architectures, and integration into diverse compiler pipelines. The LLVM project originated in 2000 as a research initiative at the University of at Urbana-Champaign, spearheaded by under the guidance of , with the goal of creating a flexible infrastructure for multi-stage . Lattner's 2002 master's thesis, titled "LLVM: An Infrastructure for Multi-Stage Optimization," formalized the foundational design, emphasizing lifelong program analysis and transformation across compilation stages. The first open-source release, LLVM 1.0, occurred in October 2003 under the University of Illinois/NCSA Open Source License, marking its transition from academia to broader adoption. Over time, it grew into an umbrella project incorporating subprojects like (a C, C++, and frontend initiated by Apple in 2007), LLDB (a ), and MLIR (a multi-level IR for domain-specific compilers). LLVM's impact stems from its versatility and performance, powering compilers for languages including , , and , as well as tools like for compilation. Major companies have integrated it extensively: Apple uses and LLVM in for iOS and macOS development; Google employs it in OS and Android's backend; and Intel leverages it for oneAPI compilers targeting heterogeneous computing. In recognition of its lasting influence on software systems, LLVM received the 2012 ACM Software System Award, awarded to Vikram Adve, Evan Cheng, and for developing a persistent, language-independent program representation that can be reused throughout a program's lifetime. Licensed under the Apache 2.0 License with LLVM exceptions since 2019, the project remains actively maintained by a global community, with its latest release, LLVM 21.1.5, issued on November 4, 2025.

History

Origins and Founding

LLVM originated as a research project in December 2000 at the University of Illinois at Urbana-Champaign (UIUC), spearheaded by graduate student under the supervision of Professor within the IMPACT research group, a prominent center for and innovations at the institution. The project emerged from Lattner's master's thesis work, aiming to create a modular infrastructure that could support advanced and optimization techniques beyond the capabilities of contemporary tools. The primary motivation behind LLVM's development was to overcome key limitations in existing compilers, such as the , which were largely monolithic and lacked mechanisms for persistent, language-independent program representations suitable for lifelong analysis and transformation across compile-time, link-time, runtime, and even idle periods. Traditional compilers like provided little support for retaining detailed program information after compilation, hindering in areas like whole-program optimization, user-directed , and transparent for arbitrary applications. By designing LLVM as a collection of reusable libraries with well-defined interfaces, Adve and Lattner sought to enable more flexible experimentation in , facilitating across different languages and optimization stages without the constraints of rigid, special-purpose tools. Initial development of LLVM was supported by funding from the (NSF) through the Next Generation Software program, including grants EIA-0093426 (an NSF award to Adve) and EIA-0103756, which backed the foundational work on multi-stage optimization infrastructures. This sponsorship aligned with broader efforts in the IMPACT group to advance compiler technologies for parallel and embedded systems. The project's first public release, LLVM 1.0, occurred on October 24, 2003, introducing a stable C frontend, a beta C++ frontend, and backends for x86 and V9 architectures, with support for both static compilation and just-in-time () code generation. From its inception, LLVM was distributed as under a permissive , allowing immediate adoption by researchers and developers for building custom compilers and analysis tools.

Key Milestones and Releases

The LLVM project marked its initial public release with version 1.0 in October 2003, establishing a foundation for modular research focused on lifelong code optimization. LLVM , released on May 23, 2007, introduced substantial enhancements to optimization capabilities, including a complete rewrite of the pass manager for greater extensibility, improved loop with expression sinking, and advanced scalar replacement for unions and vectors. Apple's involvement began in 2005 when project creator joined the company, accelerating LLVM's practical adoption in production environments; this culminated in the start of frontend development in July 2007 to provide a C/C++/ parser integrated with LLVM's backend. In December 2011, LLVM 3.0 brought key advancements in through the introduction of MC-JIT, an in-memory emitter leveraging the MC framework for improved and dynamic linking support. The LLVM Foundation was established in 2014 as a dedicated to advancing compiler education and project sustainability through events, grants, and community support. Building on MC-JIT, the (On-Request Compilation) JIT APIs landed in LLVM's mainline in January 2015 (with LLVM 3.7), offering a more flexible and performant layer for runtime code generation by enabling modular compilation and lazy symbol resolution. A major licensing shift occurred in 2019, with LLVM adopting the Apache 2.0 License with LLVM Exceptions starting from the LLVM 8.0 release in March, replacing the prior University of Illinois/NCSA Open Source License to broaden compatibility and patent protections while maintaining open-source principles. LLVM 9.0.0, released in September 2019, integrated MLIR (Multi-Level ) as a core component, enabling dialect-based representations for domain-specific optimizations and facilitating compiler infrastructure reuse across hardware targets. LLVM 10.0.0 followed in March 2020, featuring the addition of the freeze instruction for handling, the Attributor framework for interprocedural optimizations, and matrix math intrinsics to support emerging and HPC workloads. By LLVM 18.1.0 in March 2024, GPU support saw significant enhancements, including initial targeting for AMD's GFX12/RDNA4 architecture, improved NVPTX backend for , and expanded offloading capabilities for in tools like . LLVM 19.1.0, released in September 2024, advanced support with full Zabha extension and Ztso ratification, alongside enhancements for new processors and improved symbol handling in tools. LLVM 20.1.0, released in March 2025, promoted the SPIR-V backend to official status for and , introduced the IRNormalizer pass for module standardization, and added support for Armv9.6-A and new extensions. LLVM 21.1.0, released in August 2025, further expanded with execute-only memory features, enhanced for uC extensions, and removed legacy elements like recursive types to modernize the infrastructure.

Evolution and Institutional Support

LLVM's community has grown substantially since its early years, evolving from a small of approximately 10 developers in 2003 to over 2,000 active contributors by 2025. This expansion reflects the project's increasing adoption across industry and academia, with significant contributions from major organizations including Apple, which has driven much of the frontend development; , focusing on optimizations for and ; , enhancing x86 backend support; and , advancing GPU code generation capabilities. The total number of unique authors committing code reached a record 2,138 in 2024 alone, underscoring the vibrant and collaborative nature of the ecosystem. Funding for LLVM has come from diverse sources, supporting its development and sustainability. Early work at the University of Illinois at Urbana-Champaign (UIUC) was backed by grants from the (NSF), enabling foundational research into lifelong program optimization. Corporate sponsorships from tech giants like Apple, , and have provided ongoing resources through the LLVM Foundation, which manages donations and facilitates community initiatives. Additionally, specialized research efforts, such as those at UIUC's centers exploring compiler technologies, have further bolstered institutional support. The annual LLVM Developers' Meetings, starting in 2007, have been instrumental in unifying the community and standardizing processes. These events, now held multiple times a year across regions like the , Europe, and Asia, bring together hundreds of developers for technical talks, birds-of-a-feather sessions, and planning discussions, fostering innovation and resolving key challenges in compiler infrastructure. By 2012, LLVM had achieved widespread integration into major Linux distributions, including Ubuntu 12.04 and , where it became readily available via package managers for building and optimizing software. This accessibility accelerated its adoption among open-source projects and system tools. Furthermore, since 2019 with the release of r19, LLVM-based tools like and LLD have served as the default for native development, enabling efficient cross-compilation for Android's diverse architectures.

Overview and Design Principles

Core Objectives and Philosophy

LLVM's core objectives center on providing a robust for lifelong and transformation, enabling optimizations across compile-time, link-time, run-time, and offline stages in a transparent and language-independent manner. This framework aims to support both static and dynamic compilation for arbitrary programming languages, fostering reusable components that can be applied in diverse environments without imposing runtime dependencies. The design philosophy emphasizes creating a that combines , whole-program optimization, and profile-guided transformations, addressing limitations in traditional compilers by preserving intermediate representations for extended use. A foundational principle of LLVM is its modular , which decomposes the into interchangeable libraries for front-ends, optimizers, and back-ends, promoting reusability across different tools and projects. This modularity allows developers to leverage the same optimization passes for multiple languages, reducing redundancy and enabling rapid experimentation in . Language independence is achieved through a low-level (IR) that abstracts away high-level language specifics, making LLVM suitable for compiling diverse languages such as C++, , and even scripting languages like in production settings. Key tenets include the use of a type-safe , which incorporates a language-independent to support type-safe operations and facilitate advanced analyses, including those for verifying memory access safety, with showing that a significant portion of memory accesses in benchmarks like SPECINT 2000 can be verified as type-safe. LLVM supports aggressive optimization through interprocedural passes that operate on the preserved , enabling techniques like link-time optimization that are more efficient than those in monolithic systems. Additionally, built-in support for just-in-time () compilation via an execution engine allows for dynamic at runtime, which is particularly valuable for applications requiring on-the-fly compilation, such as virtual machines and embedded systems. Compared to monolithic compilers like , LLVM offers advantages in easier testing, retargeting to new architectures, and performing static analyses due to its component-based , which avoids the tight found in traditional systems and results in faster whole-program optimizations—for instance, reducing optimization time for benchmarks like 164.gzip from over 3 seconds in to mere milliseconds. This makes LLVM an ideal target for researchers experimenting with novel analyses, tool developers building static analyzers or debuggers, and production environments such as systems where aids in customizing toolchains for specific hardware constraints.

Modular Architecture

LLVM's modular architecture is organized around a three-stage compiler pipeline that separates concerns to enhance reusability and maintainability. The frontend stage handles from various programming languages and translates it into LLVM (IR), a platform-independent form that captures the program's semantics. This IR then flows to the middle-end stage, where optimizations are applied to improve performance, such as through instruction selection and , without regard to the target hardware. Finally, the backend stage takes the optimized IR and generates machine-specific code, including or object files, tailored to the intended like x86 or . This separation allows independent development of each stage, enabling LLVM to support diverse languages and targets efficiently. Central to the middle-end's modularity is the pass manager system, which orchestrates a sequence of transformation that operate on the . Each performs a specific or optimization, such as constant propagation or loop vectorization, and the pass manager composes these into pipelines, scheduling them to minimize redundant computations and ensure dependencies are resolved. The new pass manager, introduced to replace the legacy version, uses a concept-based approach with managers to track preserved analyses after each , allowing for more efficient and flexible of transformations. This infrastructure enables developers to chain passes modularly, fostering extensibility while maintaining the pipeline's integrity. LLVM supports multiple compilation modes to accommodate different use cases, including static ( for producing optimized executables, dynamic compilation for runtime linking of libraries, and just-in-time () compilation for on-the-fly in interpreters or virtual machines. In static mode, the full generates persistent ; dynamic mode leverages components for shared libraries; and JIT mode uses the ExecutionEngine to emit and execute code immediately, balancing speed and optimization depth. These modes are unified through the , allowing the same core infrastructure to serve both offline and online compilation scenarios. The architecture's extensibility is facilitated through plugins and that allow of custom components without modifying system. Developers can implement new passes as dynamic libraries loaded via the plugin interface, registering them with the pass manager for inclusion in pipelines. for frontends, backends, and passes provide hooks for extending functionality, such as adding for novel optimizations or targets, making LLVM suitable for prototypes and compilers alike. This has enabled widespread , with contributions from and enhancing its capabilities over time.

Intermediate Representation

Structure of LLVM IR

LLVM Intermediate Representation (IR) is a low-level, platform-independent that serves as the core for the LLVM compiler infrastructure, designed in (SSA) form to facilitate optimizations. In SSA, each variable is assigned exactly once, with uses referencing that single definition, enabling efficient analysis and transformation; values are represented as either named registers (e.g., %x) or unnamed temporaries (e.g., %0). LLVM IR supports two primary formats: a human-readable textual , which resembles a low-level programming with syntax for declarations and operations, and a binary bitcode format for compact serialization and storage, both of which are equivalent in expressiveness. The structure of LLVM IR is hierarchical, beginning with a module as the top-level that encompasses all and for a translation unit. A includes global variables (e.g., @global_var = global i32 42), functions, nodes, and attributes, along with optional specifications like the target layout (e.g., target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128") and triple (e.g., target triple = "x86_64-unknown-linux-gnu"). Functions within a are declared or defined with a specifying the return type, types, and optional variadic arguments (e.g., define i32 @foo(i32 %a, i32 %b) { ... }), and they may carry attributes for optimization guidance. Each function body consists of one or more basic blocks, which are linear sequences of instructions that start after a label (e.g., entry:) and end with a terminator instruction like ret or br, ensuring is explicit and block boundaries align with potential jumps. Instructions form the atomic operations within basic blocks, including arithmetic (e.g., %sum = add i32 %a, %b), access (e.g., %val = load i32, ptr %ptr or store i32 %val, ptr %ptr), (e.g., call void @bar()), and conversions, all typed and in form where the result is a new value. The of LLVM is strongly typed and supports a range of , derived types, and aggregates to represent data at a low level. Primitive types include integers of arbitrary bit width (e.g., i1 for booleans, i32 for 32-bit signed integers), floating-point types (e.g., [float](/page/Float), double), and void for functions without return values. Pointers are denoted as ptr (opaque by default since LLVM 15 and the only supported form since LLVM 17) with optional address spaces for memory regions (e.g., ptr addrspace(1) for global memory), allowing representation of addresses without specifying pointee types in modern . Aggregate types include structs, defined as packed or unpacked collections of types (e.g., %{ i32, float } for a literal struct or %MyStruct = type { i32, float } for an , which can be recursive or opaque), and other aggregates like fixed-size arrays (e.g., [10 x i32]) and vectors (e.g., <4 x float> for SIMD operations). These types enable modeling of complex data structures while maintaining throughout the . LLVM IR incorporates and attributes as annotations that provide supplementary information without affecting core computation, primarily for optimization and debugging. Metadata nodes are distinct entities (e.g., !0 = !{ i32 42, metadata !"debug info" }) referenced via ! attachments to instructions or globals (e.g., load i32, ptr %p, !dbg !0), often used for source-level details like line numbers. Attributes, grouped into sets (e.g., #0 = { nounwind }), annotate functions, parameters, or callsites with hints such as nounwind (indicating no unwind exceptions), readonly (for functions without side effects), or align 16 (for memory alignment), allowing passes to apply targeted transformations like inlining or dead code elimination. Note that as of LLVM 21, the nocapture attribute has been replaced by the captures attribute (e.g., captures(none)), and inspecting uses of ConstantData is no longer permitted.

Semantics and Operations

LLVM IR employs a flat address space model, where all memory accesses occur through pointers in a single linear address space (default address space 0), with target-specific semantics possible in non-zero address spaces. This model assumes no inherent types for memory locations, relying instead on metadata and attributes for type-based alias analysis (TBAA) to enable optimizations while preventing invalid aliasing assumptions. Strict aliasing is enforced through attributes such as noalias on function parameters and return values, which guarantee that memory locations accessed via one pointer do not overlap with those accessed via unrelated pointers, allowing aggressive optimizations without introducing undefined behavior. Undefined behavior arises from actions like dereferencing null or misaligned pointers, accessing memory outside an object's lifetime, or violating pointer attributes (e.g., nonnull or dereferenceable), ensuring that the IR remains a sound foundation for compiler transformations. For concurrent operations, LLVM adopts a memory model based on a happens-before partial order, where atomic instructions provide synchronization points to establish visibility and ordering guarantees across threads. Control flow in LLVM IR is structured around basic blocks, which are sequences of instructions ending in a terminator that dictates the next block, forming a static single assignment (SSA) graph. Unconditional and conditional branches use the br instruction to transfer control to labeled basic blocks, while function calls employ the call instruction, which continues execution immediately after the call unless specified otherwise, supporting various calling conventions like ccc (C) or fastcc. Phi nodes, placed at the start of basic blocks, select values based on the incoming predecessor edge, enabling SSA form to merge control paths without explicit variables. Exception handling integrates via the invoke instruction, which calls a function but specifies an unwind destination (a landing pad) in case of an exception; upon unwinding, control transfers to the landingpad instruction in that block, which processes the exception using clauses like catch for type matching or filter for exclusion, potentially resuming unwinding with resume if unhandled. This mechanism ensures precise exception propagation while maintaining SSA properties through the personality function defined per module. Intrinsic functions in LLVM IR provide a mechanism for low-level, platform-specific operations that cannot be expressed through standard instructions, always declared as external and invoked via call or invoke. Examples include memory manipulation intrinsics like llvm.memcpy, which copies a specified number of bytes between pointers with optional volatile semantics to preserve side effects, and llvm.memmove for overlapping regions. Atomic intrinsics, such as atomicrmw for read-modify-write operations (e.g., add or xchg) and cmpxchg for , support concurrency with constraints like monotonic for weak consistency or seq_cst for , ensuring thread-safe access without races leading to . These intrinsics map to hardware instructions or library calls during , bridging high-level semantics to target-specific behaviors. Verification passes in LLVM ensure IR well-formedness by checking syntactic and semantic rules, including , operand validity, and structural integrity, with the verifier automatically invoked on module loading or pass execution. Dominance rules require that every use of a value is reachable only after its defining instruction in the , verified through dominator tree analysis to prevent invalid optimizations. Reachability is enforced by confirming all basic blocks are accessible from the function entry, eliminating and ensuring the SSA graph's coherence without unreachable terminators or phi nodes with undefined predecessors. These checks, including validation of terminator instructions and constructs, maintain the IR's reliability across pipelines.

Compiler Pipeline Components

Frontends

In the LLVM compiler infrastructure, frontends serve as language-specific translators that convert high-level source code into LLVM Intermediate Representation (IR). These components are responsible for lexical analysis to tokenize input, parsing to construct an Abstract Syntax Tree (AST), semantic analysis to verify type correctness and resolve symbols, and finally emitting IR through AST-to-IR conversion. This modular design allows LLVM to support diverse programming languages by isolating language-specific logic from the target-independent optimization and code generation stages. The primary example of an LLVM frontend is , which targets , , , and Objective-C++. Development of Clang began in 2007 at Apple to address limitations in existing compilers, such as poor diagnostics and licensing issues, with initial language support achieved by 2009 and production-quality support by 2012. Clang performs production-quality compilation for these languages, leveraging LLVM's for subsequent processing. Full support for the standard, including features like lambda expressions, rvalue references, and auto declarations, was realized in Clang 3.1, released in 2012. Other notable LLVM frontends include rustc for the Rust programming language, which has used LLVM as its primary backend since its inception in 2006, with LLVM integration from early development to generate efficient, safe systems code. Apple's Swift compiler, introduced in 2014, also employs an LLVM frontend to translate Swift's syntax—emphasizing safety and performance—directly into optimized IR, enabling seamless interoperability with C and C++ ecosystems. Similarly, the Julia language, initiated in 2012, utilizes an LLVM-based frontend in its just-in-time compiler to handle dynamic, high-level code for numerical and scientific computing, producing native machine code via IR. Another significant frontend is Flang, the Fortran compiler, which achieved full integration in LLVM by 2019 and received major updates in 2024-2025 for Fortran 2023 standard support, enhancing scientific computing capabilities. Designing LLVM frontends presents challenges, particularly in accommodating language-specific features that demand intricate semantic processing. For instance, C++ templates require complex mechanisms for , two-phase name lookup, and resolution, which must be faithfully mapped to LLVM without introducing inefficiencies or errors during AST traversal. These aspects necessitate robust error recovery and diagnostics to ensure compatibility with LLVM's type-safe semantics.

Optimizer and Middle-End

The LLVM middle-end, often referred to as the optimizer, processes LLVM () generated by frontends to apply a series of and passes that improve code quality, such as reducing execution time, memory usage, and binary size, while preserving semantics. This stage operates on portable , enabling optimizations independent of target architectures. The infrastructure is built around the PassManager, which orchestrates these passes in a modular, extensible manner. LLVM employs two pass manager implementations, with the New Pass Manager serving as the primary system for the middle-end optimization pipeline since LLVM 10, replacing the legacy PassManager for this stage. The New Pass Manager supports sequential execution of passes organized by IR hierarchy—module, call-graph strongly connected component (CGSCC), function, and loop levels—along with parallelization opportunities, such as running independent function passes concurrently. It facilitates scalar optimizations (e.g., instruction simplification), vector optimizations (e.g., loop vectorization), and loop-specific transformations through dedicated managers and adaptors, allowing developers to customize pipelines via the PassBuilder . Key transformation passes include , which removes unreachable or unused instructions to shrink code size; function inlining, which integrates caller-callee bodies to eliminate call overhead and enable further optimizations; constant propagation, which substitutes variables with known constant values to simplify expressions; and , which hoists computations outside loops when they do not depend on iteration variables. For instance, aggressive (ADCE) can eliminate thousands of instructions in benchmarks like SPECint 2000, demonstrating significant impact on . Supporting these transformations are analysis passes that provide essential data without modifying the IR. Alias analysis disambiguates memory references to enable precise optimizations like global , using modular implementations such as basic alias analysis or scalar evolution analysis. Control dependence analysis, often via dominator trees, identifies reachable code paths to inform transformations like removal. Profile-guided optimization (PGO) incorporates runtime execution profiles to guide decisions, such as hot-cold code splitting or branch probability estimation, improving performance by up to 10-20% in profile-heavy workloads. For whole-program optimization, LLVM integrates link-time optimization (LTO) through ThinLTO, a scalable variant introduced in LLVM 3.9 that performs cross-module analysis without fully merging modules. ThinLTO compiles modules to bitcode with summary indices, merges these at link time for importing high-value functions (e.g., via inlining), and applies middle-end passes in parallel per module, reducing link times while enabling interprocedural optimizations like devirtualization. This approach supports incremental builds with caching, making it suitable for large projects.

Backends and Code Generation

The LLVM backend is responsible for transforming the optimized intermediate representation (IR) from the middle-end into target-specific machine code, enabling execution on diverse hardware platforms. This process involves lowering abstract instructions into concrete machine instructions while respecting architectural constraints such as register sets, instruction formats, and memory models. The backend operates in a modular fashion, separating target-independent phases—common across all architectures—from target-specific customizations, which facilitates maintenance and extension. Central to the target-independent code generation is the SelectionDAG (Directed Acyclic Graph) framework, which models computations as graphs for efficient transformation. Instruction selection employs TableGen, a domain-specific language that defines target descriptions in .td files, automatically generating C++ code for pattern matching and lowering IR operations to machine instructions. For instance, complex operations like floating-point multiply-add are matched via predefined patterns, minimizing manual implementation and enhancing portability. Register allocation follows, mapping an unbounded set of virtual registers to a finite physical set using algorithms such as the greedy allocator or Partitioned Boolean Quadratic Programming (PBQP), with spill code insertion for overflow management. Instruction scheduling then reorders the resulting machine instructions to optimize for latency, throughput, or resource usage, often using list scheduling on the DAG before converting to linear instruction sequences. These phases collectively produce assembly or object code via the Machine Code (MC) layer, which handles emission in formats like ELF or Mach-O. LLVM's backend design emphasizes portability, supporting over 20 architectures including x86, , , PowerPC, , , and AMDGPU, among others. WebAssembly support was integrated in 2015, enabling compilation to the WebAssembly binary format for web and embedded environments. This breadth is achieved through TableGen-driven descriptions that abstract hardware differences, allowing new targets to be added with minimal core modifications. The optimized IR from the middle-end serves as input, ensuring that backend transformations build on cross-target improvements without reintroducing architecture-specific biases. For just-in-time (JIT) compilation, LLVM provides MCJIT, introduced in 2013 as a memory-safe execution engine that dynamically loads and links machine code modules using the MC layer for object file handling. Building on this, the ORC (On-Request Compilation) JIT infrastructure, launched in 2015, offers a more flexible API for layered compilation, supporting lazy materialization and runtime code patching. Enhancements in the 2020s have extended ORC to hybrid ahead-of-time (AOT) and JIT scenarios, improving performance in dynamic language runtimes and embedded systems by enabling efficient object linking and relocation. Debugging support in the backend generates (Debugging With Attributed Record Formats) metadata alongside , embedding source-level information such as line numbers, variable locations, and call frames into object files. This format, standardized across architectures, allows tools like GDB to reconstruct program state during execution, with LLVM's MC layer ensuring consistent emission even for JIT-generated code.

Tools and Libraries

Linker and Runtime Support

LLVM's linker infrastructure is primarily embodied by LLD, a high-performance linker designed as a for traditional system linkers such as GNU ld and . Introduced in 2016, LLD supports multiple formats including , Mach-O, PE/COFF, and , enabling efficient production of executables across diverse platforms. Its architecture emphasizes speed through parallel processing and incremental linking capabilities, achieving over twice the performance of GNU on multicore systems for large-scale builds. For instance, LLD's moldable design allows it to handle complex linker scripts while maintaining a compact codebase of approximately 21,000 lines of C++ as of early implementations. Complementing LLD, LLVMgold serves as a GCC-compatible that integrates LLVM's link-time optimization (LTO) capabilities into the linker. This implements the gold plugin interface atop LLVM's libLTO library, allowing GCC users to leverage LLVM-based optimizations during the linking phase without switching compilers. It facilitates seamless interoperation with tools like and , enabling whole-program analysis and optimization for projects built with . LLVMgold has been a key enabler for hybrid workflows where LLVM enhancements augment existing toolchains. On the runtime side, LLVM provides essential libraries to support program execution, particularly for detection, , and analysis. Libunwind implements a lightweight stack unwinding mechanism critical for C++ , adhering to the ABI and supporting platforms like , , and AArch64. This library enables efficient traversal of call frames during exception propagation, integrating with LLVM's model that uses landing pads and invoke instructions in . For profiling, libprofile delivers runtime support for (PGO), collecting instrumentation data such as branch frequencies and function counters to inform subsequent compilation passes. It serializes profiles in formats compatible with LLVM's IRPGO, aiding in just-in-time adjustments for better code quality. Sanitizer runtimes form another cornerstone, with AddressSanitizer (ASan) introduced in 2012 as a fast memory error detector comprising compiler instrumentation and a . ASan employs shadow memory to track addressable regions, detecting issues like buffer overflows and use-after-free errors with low overhead—typically 2x runtime slowdown and 2-3x memory usage increase on supported architectures. Other sanitizers, such as ThreadSanitizer for race detection and MemorySanitizer for uninitialized reads, rely on analogous runtime components built into LLVM's compiler-rt project. These runtimes are dynamically linked or statically incorporated, ensuring portability across systems and Windows. In just-in-time (JIT) compilation scenarios, LLVM's runtime support extends to integration with dynamic loaders via components like the ORC JIT infrastructure and JITLink. This allows generated code to resolve symbols and relocations at runtime, mimicking the behavior of system dynamic linkers (e.g., ld.so on Linux) for loading modules on-demand. JITLink, in particular, handles object file loading and patching in memory, supporting formats like ELF and Mach-O to enable seamless execution in environments such as interpreters or embedded systems.

Standard Libraries

LLVM's standard libraries provide implementations for key runtime components required by C and C++ programs compiled with Clang and other compatible frontends. These libraries emphasize modularity, performance, and permissiveness under open-source licensing, enabling their use in diverse environments from embedded systems to high-performance computing. libc++ is LLVM's modular implementation of the C++ standard library, initially released in 2011 as a high-performance alternative to existing options. It targets C++11 and later standards, prioritizing correctness as defined by the ISO specifications, fast execution, minimal memory usage, and rapid compile times. Designed for portability across platforms including macOS, Linux, Windows, FreeBSD, Android, and embedded targets, libc++ factors out OS- and CPU-specific code to facilitate cross-compilation and maintenance. By LLVM 16 in 2023, it achieved full support for the C++20 standard, including features like the spaceship operator, coroutines, and modules, with ongoing enhancements for C++23 and C++26. Its modular architecture allows selective inclusion of components, reducing binary size in constrained environments, and it includes extensive unit tests to ensure conformance. libcxxabi serves as the (ABI) layer for libc++, implementing low-level support for C++ features such as exceptions and (RTTI). It provides implementations for the ABI—widely used on x86 and other architectures—and the ARM EABI, ensuring compatibility with diverse hardware targets. Key functionalities include mechanisms that enable cross-dynamic-library propagation of exceptions (e.g., defining destructors for standard classes like std::exception to maintain unique type_info instances) and RTTI support for type identification across module boundaries. Developed as a portable sublayer, libcxxabi is ABI-compatible with existing implementations on platforms like macOS and is dual-licensed under the and University of Illinois/NCSA Licenses, promoting broad adoption without restrictive terms. Compiler-RT (compiler ) is LLVM's for implementing intrinsic functions and low-level runtime support, replacing parts of traditional libraries like libgcc. It provides optimized implementations for mathematical operations (e.g., floating-point conversions like __floatundidf), atomic operations for thread-safe concurrency, and sanitizer runtimes for debugging tools such as AddressSanitizer and ThreadSanitizer. For instance, it handles builtins like __builtin_trap for generating traps in optimized code paths. Written and for performance, Compiler-RT supports multiple architectures including , , PowerPC, and , and operating systems like , Windows, and . Its design focuses on replacing vendor-specific runtimes with a unified, high-performance alternative, also dual-licensed under and UIUC terms. In comparison to GNU's libstdc++, which is tightly integrated with and licensed under GPLv2 with runtime exceptions (or LGPLv3), libc++ offers greater modularity through its factored design and a more permissive Apache 2.0 license with LLVM exceptions, avoiding restrictions that can complicate proprietary or mixed-license projects. While libstdc++ excels in certain areas like I/O performance on , libc++ often provides superior speed in string handling via short-string optimization and broader portability across non- compilers, making it the default for on Apple platforms and increasingly in and other ecosystems.

Specialized Analyzers and Optimizers

LLVM provides a suite of specialized analyzers and optimizers that extend its core capabilities for targeted and performance enhancement, particularly in domains like parallelism, , and . These tools operate as optional passes or libraries within the LLVM infrastructure, allowing developers to address specific challenges without relying solely on the general-purpose optimizer pipeline. By integrating advanced techniques such as polyhedral modeling and dialect-based representations, they enable precise interventions that improve code quality and efficiency in complex applications. Polly, introduced in 2011, is a high-level loop and data-locality optimizer that leverages the polyhedral model to analyze and transform LLVM intermediate representation (IR) code. It employs integer linear programming to model loop nests as polyhedra, facilitating aggressive optimizations like automatic parallelization, tiling for cache locality, and vectorization. For instance, Polly can detect independent loop iterations and generate OpenMP directives or SIMD instructions, significantly reducing execution time in compute-intensive kernels such as those in scientific simulations. Integrated as a set of LLVM passes, Polly extracts loop kernels from IR, applies polyhedral transformations, and reintegrates the optimized code, making it particularly valuable for high-performance computing workloads. The sanitizer tools in LLVM, including ThreadSanitizer and MemorySanitizer, provide runtime instrumentation for detecting concurrency and memory-related bugs. ThreadSanitizer identifies data races in multithreaded programs by instrumenting memory accesses and synchronizations, using a shadow memory mechanism to track thread states with minimal overhead—typically 2-5x slowdown in execution. It supports C, C++, and related languages, reporting races with stack traces for debugging. MemorySanitizer, conversely, detects uninitialized memory reads by shadowing each byte of memory and flagging uses of uninitialized values, aiding in the identification of subtle errors like buffer overruns or use-after-free issues. Both are compiler-based, linking with runtime libraries to enable fine-grained analysis in production-like environments, and are widely used in software verification pipelines. MLIR (Multi-Level Intermediate Representation), added to LLVM in late , offers a flexible, dialect-centric framework for representing computations at varying abstraction levels, ideal for heterogeneous systems like GPUs and accelerators. Unlike traditional single-level s, MLIR allows custom dialects—modular sets of operations and types—to model domain-specific semantics, such as tensor operations in ML frameworks or hardware-specific instructions. This enables progressive lowering from high-level constructs to LLVM , supporting optimizations like and tailored to accelerators. For example, MLIR's integration with projects like facilitates efficient code generation for diverse backends, improving performance in AI workloads by up to 2x through dialect-specific passes. Additional specialized tools include libFuzzer, a coverage-guided fuzzing engine that integrates with LLVM to test libraries by generating inputs that maximize , helping uncover crashes and security vulnerabilities in C/C++ code. It operates in-process, using LLVM's sanitizers for error detection and has been instrumental in finding bugs in open-source projects. The Static Analyzer, deeply integrated with LLVM's analysis framework, performs path-sensitive static analysis to detect defects like dereferences and resource leaks in C, C++, and programs. It models program symbolically, generating reports with exploratory paths to aid developers in verifying and fixing issues early in the development cycle.

Major Derivatives

Clang serves as the primary frontend for C, C++, , and related languages within the LLVM ecosystem, providing a modular that integrates seamlessly with LLVM's middle-end and backend components. Known for its rapid compilation speeds and minimal memory usage compared to predecessors like , Clang achieves this through efficient parsing and pipelines. It also excels in delivering expressive, context-aware diagnostics that highlight errors with precise source locations and suggested fixes, enhancing developer productivity. First officially released as part of LLVM 2.6 in October 2009, Clang reached production quality for C and at that time. On Apple platforms, Clang powers the , serving as the default for , macOS, and related software development. Swift, introduced by Apple in 2014, is a high-level, multi-paradigm programming language designed for safe and performant application development, particularly on Apple ecosystems. The Swift compiler leverages LLVM for its core optimization passes and code generation, transforming high-level Swift constructs into optimized machine code via LLVM's intermediate representation. This integration enables Swift to achieve near-native performance while benefiting from LLVM's cross-platform backend support. Apple open-sourced Swift in December 2015, allowing broader adoption and contributions from the community. Rust, initiated by in 2010 as a language emphasizing , concurrency, and performance without garbage collection, relies on LLVM as its primary backend for code generation since its early development phases. The compiler (rustc) generates LLVM from its own , enabling LLVM to handle target-specific optimizations and produce safe, efficient binaries that enforce Rust's borrow checker and model at . This backend choice has allowed to target diverse architectures while maintaining zero-cost abstractions. The language achieved its first stable release, version 1.0, in May 2015. Among other notable derivatives, Kotlin/Native, released by in April 2017 as a technology preview, compiles Kotlin code to native binaries using an LLVM-based backend, enabling platform-specific execution without a virtual machine. Zig, a general-purpose systems language launched in 2016, employs LLVM for its compiler toolchain to ensure robust, optimal code generation with a focus on simplicity and interoperability with C. Emscripten, an LLVM-to-WebAssembly toolchain, facilitates compiling C and C++ code to run in web browsers and environments, leveraging LLVM's WebAssembly backend for efficient, portable execution.

Integrations and Extensions

LLVM's modular design facilitates its integration into operating system , where it serves as a robust for compiling low-level code. supports /LLVM for building Windows kernel-mode drivers and select components since version 21H1 in 2021, leveraging LLVM's advanced optimizations, improved diagnostics, and support for modern C++ features in kernel-mode development. This has enabled enhancements in security and for certain Windows components, with LLVM handling code generation for x86 and architectures. Similarly, the has supported full builds with /LLVM since version 4.15 in 2017, allowing the entire kernel—including x86_64, , and other architectures—to be compiled, linked, and booted using the LLVM without relying on . This integration promotes toolchain diversity, with ongoing efforts to refine LLVM-specific kernel configurations for better compatibility and . LLVM's extensions for GPU and accelerator programming extend its reach into heterogeneous computing environments. The NVPTX backend, upstreamed by in 2012, generates (PTX) assembly for -enabled GPUs, supporting a of LLVM tailored for 's Fermi and later architectures. This backend enables developers to compile high-level code directly to GPU executables, integrating seamlessly with workflows for tasks. In 2016, introduced the AMDGPU backend as part of the platform launch, providing instruction selection and code generation for GPUs ranging from the R600 series to modern GCN and RDNA families. It supports features like wavefront execution and vector registers, allowing applications to target hardware efficiently. Complementing these, the SPIR-V backend translates LLVM to SPIR-V binaries for graphics and compute APIs, offering a vendor-neutral intermediate format that abstracts hardware specifics across diverse accelerators. Beyond kernels and GPUs, LLVM integrates with established tools and runtimes to augment their capabilities. Starting with 14 in 2024, the Compiler Collection uses LLVM tools for offload compilation in scenarios such as and OpenACC, enabling hybrid use of GCC frontends with LLVM's target-independent code generation layers for specific architectures. This partial integration improves modularity for multi-target builds while retaining GCC's mature optimization pipeline. Android's ART (), introduced in 4.4, employs an experimental LLVM backend alongside its primary compiler to transform DEX bytecode into optimized native code, particularly for portable optimizations across and x86 architectures. Although not the default, this backend enhances AOT compilation by applying LLVM's scalar and vector optimizations, reducing app startup times in resource-constrained environments. In research and polyglot ecosystems, LLVM's bitcode format enables innovative extensions for dynamic languages. GraalVM, released in version 1.0 in 2018, features an LLVM runtime that interprets and just-in-time compiles LLVM bitcode from languages like C/C++, , and , integrating them into GraalVM's polyglot framework for seamless interoperation with JVM-based languages. This backend leverages LLVM's for ahead-of-time analysis and runtime specialization, supporting native image generation and reducing overhead in mixed-language applications, such as embedding C libraries in or contexts. As of November 2025, ongoing developments in the LLVM ecosystem continue to expand its use, with recent updates in projects like (version 1.82) and (version 6.0) incorporating LLVM 21 enhancements for better performance and new target support.

References

  1. [1]
  2. [2]
    An Infrastructure for Multi-Stage Optimization - LLVM
    This thesis supercedes an older technical report. Published: "LLVM: An Infrastructure for Multi-Stage Optimization", Chris Lattner. Masters Thesis, Computer ...
  3. [3]
    ARCHIVED: Get to Know Intel's LLVM-Based oneAPI Compilers
    Jul 22, 2022 · The History of LLVM ... The LLVM project was started at the University of Illinois at Urbana-Champaign in 2000 by Vikram Adve and Chris Lattner.
  4. [4]
    Chris Lattner - The LLVM 1.0 Release is finally available!
    Oct 24, 2003 · Subject: The LLVM 1.0 Release is finally available! LLVM Compiler Infrastructure -- Release 1.0 http://llvm.cs.uiuc.edu (*) We are pleased to ...<|control11|><|separator|>
  5. [5]
    The LLVM Compiler Infrastructure Project
    This page is an incomplete list of the projects built with LLVM, sorted in reverse chronological order.
  6. [6]
    Evan Cheng - ACM Awards
    ACM Software System Award. USA - 2012. LLVM. citation. For designing and implementing LLVM, a persistent, language-independent program representation that ...
  7. [7]
    The Architecture of Open Source Applications (Volume 1)LLVM
    From its beginning in December 2000, LLVM was designed as a set of reusable libraries with well-defined interfaces [LA04]. At the time, open source programming ...<|control11|><|separator|>
  8. [8]
    Adve and Lattner Receive ACM Software System Award
    software engineer Evan Cheng have been named recipients of the ACM Software System Award for their work on LLVM. LLVM is an infrastructure designed to help ...
  9. [9]
    Chris Lattner - Modular AI | LinkedIn
    I completed my MS in 2002, and Ph.D. in 2005. My masters thesis was titled "LLVM: An Infrastructure for Multi-Stage Optimization", and my Ph.D. thesis was ...
  10. [10]
    [PDF] A Compilation Framework for Lifelong Program Analysis ... - LLVM
    This paper describes LLVM (Low Level Virtual Machine), a compiler framework designed to support transparent, life- long program analysis and transformation for ...Missing: origins DARPA IMPACT
  11. [11]
    [PDF] The LLVM Compiler Framework and Infrastructure
    Sep 22, 2004 · Funding: This work is sponsored by the NSF Next Generation Software program through grants EIA-0093426 (an NSF CAREER award) and EIA-0103756 ...
  12. [12]
    LLVM 1.0 Release Notes
    Dec 8, 2003 · In particular, we are providing a stable C compiler, beta C++ compiler, a C back-end, stable X86 and Sparc V9 static and JIT code generators, as ...
  13. [13]
    Clang and LLVM: A Comprehensive Guide to Their History ...
    Oct 30, 2024 · The LLVM project was started in 2000 at the University of Illinois at Urbana-Champaign by Chris Lattner as part of his master's thesis, with a ...
  14. [14]
    LLVM 2.0 Release Notes
    May 23, 2007 · This document contains the release notes for the LLVM compiler infrastructure, release 2.0. Here we describe the status of LLVM, including major improvements ...
  15. [15]
    Apple's Dominative LLVM, Clang Statistics - Phoronix
    Aug 15, 2012 · For LLVM with GitStats the history goes back to 6 June 2001. In the 4087 days, there's been LLVM commits on 3748 of those days (i.e. 91.7% of ...
  16. [16]
    LLVM 3.0 Release Notes
    Nov 30, 2011 · This document contains the release notes for the LLVM Compiler Infrastructure, release 3.0. Here we describe the status of LLVM, including major improvements ...Missing: ORC | Show results with:ORC
  17. [17]
    LLVM Foundation | llvm
    The LLVM Foundation's mission is to support education and advancement of the field of compilers and tools through educational events, grants and scholarships.Grants & Scholarships · Sponsors · Board of Directors · DocumentsMissing: 2015 | Show results with:2015
  18. [18]
    New "ORC" JIT API Land In LLVM - Phoronix
    Jan 24, 2015 · The new "ORC" Just-In-Time compilation APIs have landed within mainline LLVM. ORC is short for On-Request Compilation and its APIs are intended ...
  19. [19]
    Download LLVM releases
    LLVM releases are available via Git, with the latest version 21.1.0 released on 26 Aug 2025. Documentation is available in the source download.LLVM Download Page · LLVM 22.0.0git Release Notes · LLVM 7.0.0 Release Notes
  20. [20]
    LLVM Developer Policy — LLVM 22.0.0git documentation
    This document contains the LLVM Developer Policy which defines the project's policy towards developers and their contributions.
  21. [21]
    MLIR Release Notes
    LLVM 20 ¶ ... All the MLIR runners other than mlir-cpu-runner have been removed, as their functionality has been merged into it, and it has been renamed to mlir- ...
  22. [22]
    LLVM 10.0.0 Release Notes — LLVM 10 documentation
    ### Summary of LLVM 10.0.0 Release Notes
  23. [23]
    LLVM 18.1-rc1 Released For Enabling New Intel CPU Features ...
    Jan 29, 2024 · LLVM 18 is bringing early enablement around Intel Advanced Performance Extensions (APX), initial support for AMD GFX12 / RDNA4 GPUs, support for ...Missing: key | Show results with:key
  24. [24]
    LLVM Had Another Exciting Year With More Than 37k Commits ...
    Jan 4, 2025 · LLVM's growth by line count continues to grow quite a lot each year. LLVM ended out 2024 at 35.56 million lines. Those wanting to go through all ...
  25. [25]
    Special Issue: Federal Funding Academic Research
    Jul 23, 2025 · The research on LLVM and the development of the open source infrastructure were made possible by federal funding, especially from the National ...
  26. [26]
    2007 LLVM Developer's Meeting
    Jan 19, 2007 · All, I'm pleased to announce that we will be holding a 2007 LLVM Developer's Meeting in a few months. This is a great opportunity for ...
  27. [27]
    The LLVM Compiler Infrastructure Project
    The LLVM Compiler Infrastructure Site Map: Overview, Features, Documentation, Command Guide, FAQ, Publications, LLVM Projects, Open Projects, LLVM Users, Bug ...October 17-18, 2018 · April 8-9, 2019 · April 16-17, 2018 · October 18-19, 2017Missing: Linux | Show results with:Linux
  28. [28]
    llvm and clang installation on ubuntu
    Jun 17, 2013 · I'm trying to install Halide on my Ubuntu 12.04 (64bit). I need llvm-3.2 and clang to be installed. Running sudo apt-get install llvm-3.2 ends up with 'package ...How to install LLVM 12 for Ubuntu 16.04?How can I install clang 3.9 on Ubuntu 12.04More results from askubuntu.comMissing: integration | Show results with:integration
  29. [29]
    NDK Revision History | Android NDK - Android Developers
    This page provides information on changes in all released stable versions of the NDK. To download the latest stable version of the NDK or any currently ...
  30. [30]
    [PDF] A Compilation Framework for Lifelong Program Analysis ... - LLVM
    ABSTRACT. This paper describes LLVM (Low Level Virtual Machine), a compiler framework designed to support transparent, life- long program analysis and ...Missing: early | Show results with:early
  31. [31]
    A Compilation Framework for Lifelong Program Analysis ... - LLVM
    This paper describes LLVM (Low Level Virtual Machine), a compiler framework designed to support transparent, lifelong program analysis and transformation ...Missing: IMPACT research UIUC
  32. [32]
  33. [33]
    Writing an LLVM Pass — LLVM 22.0.0git documentation
    The LLVM pass framework is an important part of the LLVM system, because LLVM passes are where most of the interesting parts of the compiler exist.
  34. [34]
    The LLVM Target-Independent Code Generator
    The LLVM target-independent code generator is a framework that provides a suite of reusable components for translating the LLVM internal representation to the ...Missing: core objectives philosophy
  35. [35]
  36. [36]
    LLVM Language Reference Manual — LLVM 22.0.0git documentation
    This document is a reference manual for the LLVM assembly language. LLVM is a Static Single Assignment (SSA) based representation that provides type safety.Missing: philosophy | Show results with:philosophy
  37. [37]
  38. [38]
  39. [39]
  40. [40]
  41. [41]
  42. [42]
  43. [43]
  44. [44]
  45. [45]
  46. [46]
  47. [47]
  48. [48]
  49. [49]
    LLVM Atomic Instructions and Concurrency Guide
    The atomic instructions are designed specifically to provide readable IR and optimized code generation for the following: The C++ <atomic> header and C < ...
  50. [50]
    Exception Handling in LLVM — LLVM 22.0.0git documentation
    The term used to define the place where an invoke continues after an exception is called a landing pad. LLVM landing pads are conceptually alternative ...
  51. [51]
    My First Language Frontend with LLVM Tutorial
    Welcome to the “My First Language Frontend with LLVM” tutorial. Here we run through the implementation of a simple language, showing how fun and easy it can be.Code generation to LLVM IR · Implementing a Parser and AST · 1. Kaleidoscope
  52. [52]
    Clang C Language Family Frontend for LLVM
    ### Clang Development Summary
  53. [53]
    LLVM 3.1 Release Notes
    May 15, 2012 · This document contains the release notes for the LLVM Compiler Infrastructure, release 3.1. Here we describe the status of LLVM, including major improvements ...
  54. [54]
  55. [55]
    Swift Programming Language
    Swift is the powerful, flexible, multiplatform programming language. Fast. Expressive. Safe. Install Tools for Linux, macOS, and Windows.
  56. [56]
    The Julia Programming Language
    ### Summary of Julia Compiler Using LLVM and Start Year
  57. [57]
    “Clang” CFE Internals Manual — Clang 22.0.0git documentation
    This document describes some of the more important APIs and internal design decisions made in the Clang C front-end.Missing: challenges | Show results with:challenges
  58. [58]
    Using the New Pass Manager — LLVM 22.0.0git documentation
    LLVM currently contains two pass managers, the legacy PM and the new PM. The optimization pipeline (aka the middle-end) uses the new PM.
  59. [59]
    [PDF] LLVM: An Infrastructure for Multi-Stage Optimization
    LLVM: AN INFRASTRUCTURE FOR MULTI-STAGE OPTIMIZATION. BY. CHRIS ARTHUR LATTNER. B.S., University of Portland, 2000. THESIS. Submitted in partial fulfillment of ...
  60. [60]
    LLVM's Analysis and Transform Passes
    This document serves as a high-level summary of the optimization features that LLVM provides. Optimizations are implemented as Passes that traverse some ...Missing: stage | Show results with:stage
  61. [61]
    ThinLTO — Clang 22.0.0git documentation - LLVM
    ThinLTO compilation is a new type of LTO that is both scalable and incremental. LTO (Link Time Optimization) achieves better runtime performance.
  62. [62]
  63. [63]
    TableGen BackEnds — LLVM 22.0.0git documentation
    Purpose: This tablegen backend is responsible for emitting a description of a target register file for a code generator. It uses instances of the Register, ...
  64. [64]
    Architecture & Platform Information for Compiler Writers - LLVM
    AArch64 & ARM¶ · Itanium (ia64)¶ · Lanai¶ · MIPS¶ · PowerPC¶ · AMDGPU¶ · RISC-V¶ · C-SKY¶.
  65. [65]
    Writing an LLVM Backend — LLVM 22.0.0git documentation
    This document describes techniques for writing compiler backends that convert the LLVM Intermediate Representation (IR) to code for a specified machine or other ...
  66. [66]
    MCJIT Design and Implementation — LLVM 22.0.0git documentation
    MCJIT Design and Implementation¶. Introduction¶. This document describes the internal workings of the MCJIT execution engine and the RuntimeDyld component.
  67. [67]
    ORC Design and Implementation — LLVM 22.0.0git documentation
    This document aims to provide a high-level overview of the design and implementation of the ORC JIT APIs. Except where otherwise stated all discussion refers to ...Missing: 3.0 | Show results with:3.0
  68. [68]
    Source Level Debugging with LLVM — LLVM 22.0.0git documentation
    Debug information is designed to be agnostic about the target debugger and debugging information representation (e.g. DWARF/Stabs/etc).
  69. [69]
    Debugging JIT-ed Code — LLVM 22.0.0git documentation
    At a high level, whenever MCJIT generates new machine code, it does so in an in-memory object file that contains the debug information in DWARF format.
  70. [70]
    LLD - The LLVM Linker — lld 22.0.0git documentation
    Link-time optimization (LTO) is supported by default. Essentially, all you have to do to do LTO is to pass the -flto option to clang. Then clang creates object ...Windows support · The ELF, COFF and Wasm... · WebAssembly lld port · Partitions
  71. [71]
    LLD, LLVM's New Linker, Coming to LLVM 4 - InfoQ
    Feb 21, 2017 · LLD, which touts great performance improvements over GCC ld, will be included in LLVM 4 rc1 and enabled by default. Although the new linker ...
  72. [72]
    The LLVM gold plugin — LLVM 22.0.0git documentation
    The LLVM gold plugin implements the gold plugin interface on top of libLTO. The same plugin can also be used by other tools such as ar and nm.
  73. [73]
    AddressSanitizer — Clang 22.0.0git documentation - LLVM
    AddressSanitizer is fully functional on supported platforms starting from LLVM 3.1. The test suite is integrated into CMake build and can be run with make check ...
  74. [74]
    AddressSanitizer, a fast memory error detector
    AddressSanitizer is a fast memory error detector. It consists of a compiler instrumentation module and a run-time library.<|control11|><|separator|>
  75. [75]
    Adding a new target/object backend to LLVM JITLink
    Mar 28, 2023 · Although dynamic loading partially solves this issue, it has its drawbacks (discussed above) and lags far behind the static linking experience.<|control11|><|separator|>
  76. [76]
    [PDF] Polly - Polyhedral optimization in LLVM
    Polly is designed as a set of compiler internal analysis and optimization passes. They can be divided into front end, middle end and back end passes.
  77. [77]
    Polly - Polyhedral optimizations for LLVM
    Polly is a high-level loop and data-locality optimizer and optimization infrastructure for LLVM. It uses an abstract mathematical representation based on ...Get and Install · Publications · Polly 22.0.0git documentation · Performance
  78. [78]
    The Architecture — Polly 22.0.0git documentation - LLVM
    Polly is a loop optimizer for LLVM. Starting from LLVM-IR it detects and extracts interesting loop kernels. For each kernel a mathematical model is derived.Missing: polyhedral | Show results with:polyhedral
  79. [79]
    Documentation - Polly - LLVM
    Documentation · The Architecture of Polly · Use Polly in clang/clang++ · Inside Polly - How to manually use the individual pieces of Polly · A list of the LLVM ...Missing: optimizer | Show results with:optimizer
  80. [80]
    ThreadSanitizer — Clang 22.0.0git documentation - LLVM
    ThreadSanitizer is a tool that detects data races. It consists of a compiler instrumentation module and a run-time library.
  81. [81]
    MemorySanitizer — Clang 22.0.0git documentation - LLVM
    MemorySanitizer is a detector of uninitialized memory use. It consists of a compiler instrumentation module and a run-time library.
  82. [82]
    MLIR - LLVM
    Multi-Level Intermediate Representation Overview. The MLIR project is a novel approach to building reusable and extensible compiler infrastructure.LLVM IR Target · Code Documentation · 'llvm' Dialect · MLIR Reduce
  83. [83]
    MLIR Language Reference
    MLIR (Multi-Level IR) is a compiler intermediate representation with similarities to traditional three-address SSA representations (like LLVM IR or SIL).High-Level Structure ¶ · Notation ¶ · Regions ¶
  84. [84]
    [PDF] MLIR: A Compiler Infrastructure for the End of Moore's Law - arXiv
    Mar 1, 2020 · This work presents MLIR, a novel approach to building reusable and extensible compiler infrastructure. MLIR aims to address software ...
  85. [85]
    libFuzzer – a library for coverage-guided fuzz testing. - LLVM
    LibFuzzer is an in-process, coverage-guided, evolutionary fuzzing engine. LibFuzzer is linked with the library under test, and feeds fuzzed inputs to the ...
  86. [86]
    Clang Static Analyzer — Clang 22.0.0git documentation
    The Clang Static Analyzer is a source code analysis tool that finds bugs in C, C++, and Objective-C programs.
  87. [87]
    Clang Static Analyzer - LLVM
    To get started with the Clang Static Analyzer, visit the LLVM releases page for download and installation instructions. The official releases include both ...
  88. [88]
    Clang - Features and Goals - LLVM
    Clang - Features and Goals. This page describes the features and goals of Clang in more detail and gives a more broad explanation about what we mean.Missing: core philosophy
  89. [89]
  90. [90]
    LLVM 2.6 Release Notes
    Feb 11, 2010 · LLVM 2.6 is the first release to officially include Clang, and it provides a production quality C and Objective-C compiler.
  91. [91]
    C++ Language Support - Xcode - Apple Developer
    Apple supports C++ with the Apple Clang compiler (included in Xcode) and the libc++ C++ standard library runtime (included in SDKs and operating systems).
  92. [92]
    Get Started - Swift - Apple Developer
    Developed by Apple and announced at the Worldwide Developer Conference in 2014, Swift was designed to be a safe, approachable, high performance general purpose ...
  93. [93]
    Swift - Apple Developer
    From its earliest conception, Swift was built to be fast. Using the incredibly high-performance LLVM compiler technology, Swift code is transformed into ...Resources · Documentation · Swift Playgrounds · Swift ChartsMissing: 2014 | Show results with:2014
  94. [94]
    Apple Releases Swift as Open Source
    December 3, 2015 — Apple® today announced that its Swift™ programming language is now open source.
  95. [95]
    Announcing Rust 1.0 | Rust Blog
    May 15, 2015 · We are very proud to announce the 1.0 release of Rust, a new programming language aiming to make it easier to build reliable, efficient systems.
  96. [96]
    Kotlin/Native Tech Preview: Kotlin without a VM - The JetBrains Blog
    Apr 4, 2017 · The Kotlin/Native compiler produces standalone executables that can run without any virtual machine. It is not a fully functional release yet.
  97. [97]
    Kotlin/Native | Kotlin Documentation
    Aug 5, 2025 · Kotlin/Native includes an LLVM-based backend for the Kotlin compiler and a native implementation of the Kotlin standard library. Why Kotlin ...
  98. [98]
    Home Zig Programming Language
    Zig is a general-purpose programming language and toolchain for maintaining robust, optimal and reusable software.Devlog · 0.14.0 Release Notes · Overview · Download
  99. [99]
    Main — Emscripten 4.0.19-git (dev) documentation
    Emscripten is a complete compiler toolchain to WebAssembly, using LLVM, with a special focus on speed, size, and the Web platform.Building Emscripten from Source · Release Notes · Download and install · Porting
  100. [100]
    Building Linux with Clang/LLVM - The Linux Kernel documentation
    Building Linux with Clang/LLVM. This document covers how to build the Linux kernel with Clang and LLVM utilities.
  101. [101]
    [PATCH][RFC] NVPTX Backend - LLVM Discourse
    Apr 24, 2012 · Hi LLVMers, We at NVIDIA would like to contribute back to the LLVM open-source community by up-streaming the NVPTX back-end for LLVM.
  102. [102]
    ROCm/LLVM-AMDGPU-Assembler-Extra - GitHub
    Jan 26, 2024 · This repository contains the following useful items related to AMDGPU ISA assembler. At the time of this writing (February 2016), LLVM trunk build and latest ...
  103. [103]
    User Guide for SPIR-V Target — LLVM 22.0.0git documentation
    The SPIR-V backend can be invoked either from LLVM's Static Compiler (llc) or Clang, allowing developers to compile LLVM intermediate language (IL) files or ...
  104. [104]
    GCC 14 Release Series — Changes, New Features, and Fixes
    GCC 14 Release Series Changes, New Features, and Fixes. This page is a "brief" summary of some of the huge number of improvements in GCC 14.
  105. [105]
    Experimental LLVM backend for Android applications (HGraph IR-to ...
    LLVM Backend for the Android compiler (ART). Experimental backend for increasing the code transformation size of the default Android backend. Was used the below ...
  106. [106]
    GraalVM LLVM Runtime
    The GraalVM LLVM runtime can execute programming languages that can be transformed to LLVM bitcode. This includes languages like C/C++, Fortran and others.