The 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, though it does provide helpful libraries that can be used to build them.

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. Code in the LLVM project is licensed under the "UIUC" BSD-Style license.

Among the 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 (as well as some less common ones!) 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 polly project implements a suite of cache-locality optimizations as well as auto-parallelism and vectorization using a polyhedral model.

  • And many others!

In addition to official subprojects of LLVM, there are a broad variety of other projects that use components of LLVM for various tasks. A major strength of LLVM is its versatility, flexibility, and reusability, which is why it is being used for such a wide variety of different tasks: everything from doing light-weight JIT compiles of embedded languages like Lua to compiling Fortran code for massive super computers.

lightbulb_outline View ideas list

Technologies

  • c
  • c++
  • llvm
  • clang

Topics

comment IRC Channel
email Mailing list
mail_outline Contact email

The LLVM Compiler Infrastructure 2016 Projects

  • grievejia
    Better Alias Analysis By Default
    The cfl-aa pass implemented by Gerorge Burgess IV back in GSoC 2014 is a fast, precise and interprocedural analyses that overcomes many deficiencies...
  • CrisCristescu
    Enabling llvm’s self-hosted modules builds using libstdc++
    A Module System for C++ is on its way to the C++ standard. The current state of the Module System, although fairly stable, it has a few bugs for C++...
  • Teemperor
    Finding and analysing copy-pasted code with clang
    Copy-pasted code is dangerous because it introduced bugs and makes projects harder to maintain. This proposal is about creating tools for finding...
  • groman
    Improvement of vectorization process in Polly
    Polly can perform classical loop transformations, exploit OpenMP level parallelism, expose SIMDization opportunities. However, due to the lack of a...
  • Vivek Pandya
    Interprocedural Register Allocation in LLVM
    The objective of this project is to implement a simple interprocedural register allocation that attempts to minimize register spill code by...
  • Utpal
    Polly as an Analysis Pass in LLVM
    The Polyhedral framework provides an exact dependence analysis, which is more powerful than conventional dependence testing algorithms. Currently,...
  • Zhengyang Liu
    SAFECode’s Memory Policy Hardening
    Monolithic kernels, like linux, did not provide a hardening mechanism on the kernel modules’ memory access. Modules in Linux could do almost...
close

2016