|
LLVM Overview
Low Level Virtual Machine (LLVM) is:
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.
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.
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.
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!
Feb 11, 2008: LLVM 2.2 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.3 release schedule:
- May 9, 2008: Branch creation/Code Freeze (9PM PDT).
- May 12, 2008: First round of pre-release testing begins.
- May 21, 2008: Pre-release testing ends.
- May 23, 2008: Second round of pre-release testing begins.
- May 30, 2008: Pre-release testing ends.
- June 2, 2008: 2.3 Released.
Upcoming Meeting
We are planning this year's developer meeting. Please provide input and let us know if you are interested in attending.
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:
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.
|