The LLVM Compiler Infrastructure
Site Map:
Download!
Download now: LLVM 2.3

Try the
online demo

View the open-source
license

Search this Site


Status Updates
Developer Mtgs
Useful Links
Maintained by:
Chris Lattner
LLVM Overview

Low Level Virtual Machine (LLVM) is:

  1. A compilation strategy designed to enable effective program optimization across the entire lifetime of a program. LLVM supports effective optimization at compile time, link-time (particularly interprocedural), run-time and offline (i.e., after software is installed), while remaining transparent to developers and maintaining compatibility with existing build scripts.

  2. A virtual instruction set - LLVM is a low-level object code representation that uses simple RISC-like instructions, but provides rich, language-independent, type information and dataflow (SSA) information about operands. This combination enables sophisticated transformations on object code, while remaining light-weight enough to be attached to the executable. This combination is key to allowing link-time, run-time, and offline transformations.

  3. A compiler infrastructure - LLVM is also a collection of source code that implements the language and compilation strategy. The primary components of the LLVM infrastructure are a GCC-based C & C++ front-end, a link-time optimization framework with a growing set of global and interprocedural analyses and transformations, static back-ends for the X86, X86-64, PowerPC 32/64, ARM, Thumb, IA-64, Alpha, SPARC, MIPS and CellSPU architectures, a back-end which emits portable C code, and a Just-In-Time compiler for X86, X86-64, PowerPC 32/64 processors, and an emitter for MSIL.

  4. LLVM does not imply things that you would expect from a high-level virtual machine. It does not require garbage collection or run-time code generation (In fact, LLVM makes a great static compiler!). Note that optional LLVM components can be used to build high-level virtual machines and other systems that need these services.

LLVM is a robust system, particularly well suited for developing new mid-level language-independent analyses and optimizations of all sorts, including those that require extensive interprocedural analysis. LLVM is also a great target for front-end development for conventional or research programming languages, including those which require compile-time, link-time, or run-time optimization for effective implementation, proper tail calls or garbage collection. We have an incomplete list of projects which have used LLVM for various purposes, showing that you can get up-and-running quickly with LLVM, giving time to do interesting things, even if you only have a semester in a University course. We also have a list of ideas for projects in LLVM.

LLVM was started by the Lifelong Code Optimization Project, led by Vikram Adve at the University of Illinois, Urbana-Champaign. Since the first public release, LLVM has grown to include contributions from several other people! We welcome external contributions, so please send e-mail to llvmdev@cs.uiuc.edu if you are interested in contributing code to the LLVM infrastructure.

Want to learn more?

If you'd like to learn more about LLVM, take a look at the LLVM Tutorials and the extensive documentation for LLVM. In particular, all of the tools distributed with LLVM are described in the LLVM Command Guide. If you're interested in what source-language features and optimizations we support, please check out the LLVM demo page. If you'd like to browse through the source code, either check out doxygen or download the most recent release. Finally, if you're interested in LLVM, have questions, and can't find any answers, please ask on the LLVM Developer mailing list.

Latest LLVM Release!

June 9, 2008: LLVM 2.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 SVN that will appear in the next LLVM release. If you want them early, download LLVM through anonymous SVN.


Upcoming Releases

LLVM 2.4 release schedule:

  • Oct 6, 2008: Branch creation/Code Freeze (9PM PDT).
  • Oct 9, 2008: First round of pre-release testing begins.
  • Oct 19, 2008: Pre-release testing ends.
  • Oct 21, 2008: Second round of pre-release testing begins.
  • Oct 28, 2008: Pre-release testing ends.
  • Oct 30, 2008: 2.4 Released.

Upcoming Meeting

The 2008 LLVM Developer Meeting was a great success. For slides and video, please see its web page.


Try out LLVM in your browser

If you'd like to experiment with LLVM, but don't want to download it and compile it, we've got just the thing for you. You can now compile C and C++ in your browser, to see what the LLVM representation looks like, to see what various C/C++ constructs map to in LLVM, and try out some of the optimizers.


Neat uses and features of LLVM

Here is a random application or feature of LLVM:

The LLVA project is looking at novel microprocessor designs by exploiting the LLVM code representation as the native interface from software to the processor. This style of processor implementation allows the architects to freely change the ISA of the processor and exposes key high-level information to it as well.

If you have an addition, please send it in.

Funding

The initial research and development of LLVM was sponsored by the National Science Foundation (NSF) NSF Next Generation Software program through grants EIA-0093426 (an NSF CAREER award) and EIA-0103756. It was also supported in part by the University of Illinois, other NSF grants, the MARCO/DARPA Gigascale Systems Research Center (GSRC), and the Motorola University Partnerships in Research program.

LLVM has since "graduated" from research funding to largely industry funding. The continued development and support of LLVM is funded by Apple Inc., the NSF, the University of Illinois, AutoESL Design Technologies, Inc., and others. Please send us email if you would like your company added to this list. LLVM has also benefited greatly from numerous source code contributions from other individuals, listed here.


This web site is hosted by the Computer Science Department at the University of Illinois at Urbana-Champaign.