LLVM Compiler Infrastructure

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies. Despite its name, LLVM has little to do with traditional virtual machines. LLVM began as a research project at the University of Illinois, with the goal of providing a modern, SSA-based compilation strategy capable of supporting both static and dynamic compilation of arbitrary programming languages. Since then, LLVM has grown to be an umbrella project consisting of a number of different subprojects, many of which are being used in production by a wide variety of commercial and open source projects as well as being widely used in academic research.

The primary sub-projects of LLVM are:

  • The LLVM Core libraries provide a modern source- and target-independent optimizer, along with code generation support for many popular CPUs. These libraries are built around a well specified code representation known as the LLVM intermediate representation ("LLVM IR").
  • Clang is an "LLVM native" C/C++/Objective-C compiler, which aims to deliver amazingly fast compiles, extremely useful error and warning messages and to provide a platform for building great source level tools. The Clang Static Analyzer is a clang-based tool that automatically finds bugs in your code.
  • The LLDB project builds on libraries provided by LLVM and Clang to provide a great native debugger on top of Clang and LLVM libraries.
  • The libc++ and libc++ ABI projects provide a standard conformant and high-performance implementation of the C++ Standard Library.
  • The MLIR subproject aims to address software fragmentation, compilation for heterogeneous hardware, significantly reduce the cost of building domain specific compilers, and aid in connecting existing compilers.
  • The lld project aims to be the built-in linker for clang/llvm. Currently, clang must invoke the system linker to produce executables.
  • In addition to official subprojects of LLVM, there are a broad variety of projects that use components of LLVM for various tasks.
lightbulb_outline View ideas list


  • llvm
  • clang
  • mlir


comment IRC Channel
email Mailing list
mail_outline Contact email

The LLVM Compiler Infrastructure 2020 Projects

  • Xing GUO
    Add DWARF Support for yaml2obj
    LLVM offers 2 useful YAML tools, yaml2obj and obj2yaml. The former one reads YAML files and emits object files, e.g., ELF, COFF and MachO. The latter...
  • Hideto Ueno
    Advanced Heuristics for Ordering Compiler Optimization Passes
    Selecting optimization passes for given application is very important but non-trivial problem because of the huge size of the compiler transformation...
  • Tarindu Jayatilaka
    Advanced Heuristics for Ordering Compiler Optimization Passes
    Compilers come with hundreds of optimization passes, making it difficult to select which passes to run and deciding the order in which to execute...
  • Luofan Chen
    Deduce attributes for non-exact functions
    A function that is non-exactly defined is a function that could be replaced at link time. Usually most of the non-inlining IPOs are inhibited. For...
  • Nithin V Rajendrakumar
    Find null smart pointer dereferences with the Static Analyzer
    The Clang Static Analyzer is used to find bugs in the program by analyzing source code without compiling and executing. It uses symbolic computations...
  • Gongyu Deng
    Implement the missing tab completions for LLDB's command line
    To implement the missing tab completions for LLDB's command line as the title goes, I dug out possible commands as targets and provided a list of...
  • Ruijie Fang
    Improve hot cold splitting to aggressively outline small blocks
    This project aims at enhancing the ability to detect and split small cold blocks (for example, __assert_rtn, throws) to the existing hot/cold...
  • Kuter Dinel
    Improve inter-procedural analyses and optimizations
    In this project we aim to improve the deduction capabilities of the Attributor framework.
  • Shinji Okumura
    Improve inter-procedural analyses and optimizations
    LLVM IR has some attributes which can be attached to function, argument, callsite, et cetera. These attributes guarantee a property corresponding to...
  • Vishal Chebrolu
    Improve MergeFunctions to incorporate MergeSimilarFunctions patches and ThinLTO Support
    The project aims at providing the MergeFunctions pass in LLVM to have feature parity with the MergeSimilarFunctions pass, which can merge functions...
  • Stefan Stipanovic
    Improve Parallelism-Aware Analyses and Optimizations
    Parallelism is used to improve performance. In sequential languages, parallelism is introduced with parallel constructs. However, it doesn’t come...
  • Hamilton Tobon Mosquera
    Latency Hiding for Host to Device Memory Transfers
    Given the increasing number of use cases for massively parallel devices (GPUs), solving the problems they bring have become an important research...
  • George Mitenkov
    SPIR-V to LLVM IR dialect conversion in MLIR
    MLIR is a novel compiler infrastructure that enables multi-level abstraction and therefore enhances reusability and extensibility. The core concept...
  • Shu Anzai
    Support autosuggestions in LLDB's command line
    Tab completion in LLDB is a very useful function for users. However, it is needed that users press [tab] key to confirm completion. If they can...
  • Rithik Sharma
    Unify ways to move code or check if code is safe to be moved
    LLVM transformation passes use code motion in different types of transformations. All these passes have some embedded code motion safety checks and...