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
  • clang


comment IRC Channel
email Mailing list
mail_outline Contact email

LLVM Compiler Infrastructure 2017 Projects

  • Yuka Takahashi
    Building bash-completion for clang
    Shell completion is a function which developers use everyday. Typing "ls -" and pressing [tab] will return a list of probable options, and typing...
  • Johannes Altmanninger
    Clang-based C/C++ diff tool
    I want to implement a structural diff tool atop of clang APIs that finds changes to the AST between two versions of a file. This would enable better...
  • Annanay Agarwal
    Enable Polyhedral Optimizations in XLA through LLVM/Polly
    TensorFlow is a popular machine learning and deep learning framework developed by Google. Despite its recent launch in late 2015, it has been widely...
  • Singapuram Sanjay S.V.
    Enabling Julia to target GPGPUs using Polly
    Polly can now automatically offload suitable kernels to GPUs in the form of Polly-ACC, saving a lot of developer time and effort. Julia, a modern...
  • Péter Szécsi
    Improved Loop Execution Modeling in Clang Static Analyzer
    The current implementation of modeling a loop is quite simple in the Clang Static Analyzer. This simple approach results a loss of coverage, which...
  • malhar1995
    ISL Memory Management Using Clang Static Analyzer
    Maintaining consistency while manual reference counting is very difficult. Languages like Java, C#, Go and other scripting languages employ garbage...
  • Charles Saternos
    ThinLTO Optimizations
    I would like to work on ThinLTO to improve and tune performance. This will require some analysis to determine what optimizations to add, as well as...
  • Xin Wang
    Warn if virtual calls are made from constructors or destructors
    In C++, virtual functions let instances of related classes have different behavior at run time. Pure function called from constructors and...