Search this Site
The LLVM compiler system for C and C++ includes the
- Front-ends for C, C++, Objective-C, Fortran, etc based on the GCC 4.2
They support the ANSI-standard C and C++ languages to the same degree that
GCC supports them. Additionally, many GCC extensions are supported.
- A stable implementation of the LLVM instruction set, which serves
as both the online and offline code representation, together with assembly
(ASCII) and bytecode (binary) readers and writers, and a verifier.
- A powerful pass-management system that automatically sequences passes
(including analysis, transformation, and code-generation passes) based on
their dependences, and pipelines them for efficiency.
- A wide range of global scalar optimizations.
- A link-time interprocedural optimization framework with a rich set of
analyses and transformations, including sophisticated whole-program pointer
analysis, call graph construction, and support for profile-guided
- An easily retargettable code generator, which currently supports X86,
X86-64, PowerPC, PowerPC-64, ARM, Thumb, SPARC, Alpha, CellSPU, PIC16
MIPS, MSP430, SystemZ, and XCore.
- A Just-In-Time (JIT) code generation system, which currently supports
X86, X86-64, PowerPC and PowerPC-64.
- Support for generating DWARF debugging information.
- A C back-end useful for testing and for generating native code on targets
other than the ones listed above.
- A profiling system similar to gprof.
- A test framework with a number of benchmark codes and applications.
- APIs and debugging tools to simplify rapid development of LLVM
Strengths of the LLVM System
- LLVM uses a simple low-level language with
strictly defined semantics.
- It includes front-ends for C and
C++. Front-ends for
Java, Scheme, and other languages are in development.
- It includes an aggressive optimizer, including scalar, interprocedural,
profile-driven, and some simple loop optimizations.
- It supports a life-long
compilation model, including link-time, install-time, run-time, and
- LLVM has full support for accurate
- The LLVM code generator is relatively easy to retarget, and makes use of
a powerful target description language.
- LLVM has extensive documentation and has
hosted many projects of various sorts.
- Many third-party users have claimed that LLVM is easy to work with and
develop for. For example, the (now removed) Stacker front-end was written
in 4 days by someone who started knowing nothing about LLVM. Additionally,
LLVM has tools to make
- LLVM is under active development and is constantly being extended,
enhanced and improved. See the status updates on the left bar to see the rate
- LLVM is freely available under an OSI-approved "three-clause BSD" license.
- LLVM is currently used by several commercial entities, who contribute
many extensions and new features.
LLVM can be used in many different kinds of projects. You might be
interested in LLVM if you are:
- A compiler researcher interested in compile-time, link-time
(interprocedural), and runtime transformations for C and C++ programs.
- A virtual machine researcher/developer interested in a portable,
language-independent instruction set and compilation framework.
- An architecture researcher interested in compiler/hardware
- A security researcher interested in static analysis or
- An instructor or developer interested in a system for quick prototyping of
- An end-user who wants to get better performance out of your code.
Want to Know More?
You can browse the documentation online,
try LLVM in your web browser, or
download the source code.