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 polly project implements a suite of cache-locality optimizations as well as auto-parallelism and vectorization using a polyhedral model.
  • 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 other projects that use components of LLVM for various tasks.

lightbulb_outline View ideas list


  • llvm


comment IRC Channel
email Mailing list
mail_outline Contact email

LLVM Compiler Infrastructure 2018 Projects

  • Réka Nikolett Kovács
    A checker for dangling string pointers in C++
    The C++ std::string class provides a c_str() method that returns a raw pointer to a string's inner character buffer. When a std::string is destroyed,...
  • Paul Semel
    Command line replacements for GNU Binutils
    A lot of GNU binutils have their equivalent in the LLVM project. As the majority of people are already accustomed to the GNU ones, it would be great...
  • Piotr Padlewski
    Devirtualization v2
    In this project I would like to implement proposal “RFC: C++ Devirtualization v2” that I was working on for a quite some time with help from other...
  • Chijun Sima
    Implement a single updater class for Dominators
    Dominance relationship is used widely in many compiler analyses and optimizations. The current API provided by LLVM to update the dominator tree and...
  • gramanas
    Improve Debugging of Optimized Code
    Measure DebugInfo loss statistics. Find the cause. Fix the culprit transformations starting from the most used areas of the compiler.
  • Reshabh Sharma
    Move the apt.llvm.org CI to OBS
    LLVM uses a Jenkins instance and Jenkins-Debian-Glue to build LLVM, Clang, clang extra tools, compiler-rt, polly, LLDB and LLD packages for the...
  • Alexander Polyakov
    Re-implement lldb-mi on top of the LLDB public API
    The project goal is to re-implement lldb-mi to avoid using of HandleCommand and regular expressions to parse commands results.
  • Mikhail Y R Gadelha
    Using the Z3 SMT Solver to Validate Bugs Reported by the Clang Static Analyzer
    The goal of this project is to provide a new option in the clang static analyzer to validate (or refute) reported bugs, by using an SMT solver. The...