LLVM.org is down
The LLVM Compiler Infrastructure Project








LLVM Overview



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.  The name
   "LLVM" itself is not an acronym; it is the full name of the project.

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
   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
   
   "Apache 2.0 License with LLVM exceptions"
   

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 (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").  The LLVM Core
    libraries are well documented, and it is particularly
    easy to invent your own language (or port an existing compiler) to use
    LLVM as an optimizer and code generator.


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 and
    clang-tidy are
    tools that automatically find bugs in your code, and are great examples of the
    sort of tools that can be built using the Clang frontend as a library to
    parse C/C++ code.

The LLDB project builds on
    libraries provided by LLVM and Clang to provide a great native debugger.
    It uses the Clang ASTs and expression parser, LLVM JIT, LLVM disassembler,
    etc so that it provides an experience that "just works".  It is also
    blazing fast and much more memory efficient than GDB at loading symbols.
    

The libc++ and
    libc++ ABI projects provide
    a standard conformant and high-performance implementation of the C++
    Standard Library, including full support for C++11 and C++14.

The compiler-rt project
    provides highly tuned implementations of the low-level code generator
    support routines like "__fixunsdfdi" and other calls generated when
    a target doesn't have a short sequence of native instructions to implement
    a core IR operation. It also provides implementations of run-time libraries
    for dynamic testing tools such as
    AddressSanitizer,
    ThreadSanitizer,
    MemorySanitizer,
    and
    DataFlowSanitizer.
    

The MLIR subproject is a novel
    approach to building reusable and extensible compiler infrastructure. MLIR
    aims to address software fragmentation, improve compilation for heterogeneous
    hardware, significantly reduce the cost of building domain specific compilers,
    and aid in connecting existing compilers together.
    

The OpenMP subproject
    provides an OpenMP runtime for use with the
    OpenMP implementation in Clang.

The polly project implements
    a suite of cache-locality optimizations as well as auto-parallelism and
    vectorization using a polyhedral model.

The libclc project aims to
    implement the OpenCL standard library.

The klee project implements a
    "symbolic virtual machine" which uses a theorem prover to try to evaluate
    all dynamic paths through a program in an effort to find bugs and to prove
    properties of functions.  A major feature of klee is that it can produce a
    testcase in the event that it detects a bug.

The LLD project is a new
    linker. That is a drop-in replacement for system linkers
    and runs much faster.

The 
    BOLT
    project is a post-link optimizer. It achieves the improvements by optimizing
    application's code layout based on execution profile gathered by sampling
    profiler.


In addition to official subprojects of LLVM, there are a broad variety of
other projects that use components
of LLVM for various tasks.  Through these external projects you can use
LLVM to compile Ruby, Python, Haskell, Rust, D, PHP, Pure, Lua, Julia, and a number of
other languages. 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.

As much as everything else, LLVM has a broad and friendly community of people
who are interested in building great low-level tools.  If you are interested in
getting involved, a
good first place is to skim the LLVM Blog and join LLVM Discourse.  For information on how to send in a patch, get commit access, and
copyright and license topics, please see the
LLVM Developer Policy.











Latest LLVM Release!

30 Oct 2024: LLVM 19.1.3 is now available
  for download!  LLVM is publicly available under an open source License.  Also, you might want to
  check out the new
  features in Git that will appear in the next LLVM release.  If
  you want them early, download LLVM through
  anonymous Git.


Upcoming Events

October 22-24 - 2024 LLVM Dev Mtg



ACM Software System Award!

LLVM has been awarded the 2012 ACM Software System Award!
     This award is given by ACM to one software system worldwide
   every year.
   
     LLVM is 
     in highly distinguished company!
     Click on any of the individual recipients' names on that page for
     the detailed citation describing the award.
  

Upcoming Releases



LLVM Release Schedule:

   19.1.x
    
      Jul 23rd: release/19.x branch created
      Jul 26th: 19.1.0-rc1 was released
      Aug  6th: 19.1.0-rc2 was released
      Aug 20th: 19.1.0-rc3 was released
      Sep  3rd: 19.1.0-rc4 was released
      Sep 17th: 19.1.0 was released
      Oct  1st: 19.1.1 was released
      Oct 15th: 19.1.2 was released
      Oct 30th: 19.1.3 was released
      Nov 12th: 19.1.4
      Nov 26th: 19.1.5
      Dec 10th: 19.1.6 (if necessary)
    
  




Developer Meetings


Upcoming:

October 22-24 - 2024 LLVM Dev Mtg

Proceedings from past meetings:

April 10-11, 2024
October 9-11, 2023
May 10-11, 2023
November 8-9, 2022
May 10-11, 2022
November 16-19, 2021
October 6-8, 2020
October 22-23, 2019
April 8-9, 2019
October 17-18, 2018
April 16-17, 2018
October 18-19, 2017
March 27-28, 2017
November 3-4, 2016
March 17-18, 2016
October 29-30, 2015
April 13-14, 2015
October 28-29, 2014
April 7-8, 2014
Nov 6-7, 2013
April 29-30, 2013
November 7-8, 2012
April 12, 2012
November 18, 2011
September 2011
November 2010
October 2009
August 2008
May 2007






        
    



