Note that if you are reading this file from a Subversion checkout or the main LLVM web page, this document applies to the next release, not the current one. To see the release notes for a specific release, please see the releases page .

For more information about LLVM, including information about the latest release, please check out the main LLVM web site . If you have questions or comments, the LLVM Developer's Mailing List is a good place to send them.

This document contains the release notes for the LLVM Compiler Infrastructure, release 3.1. Here we describe the status of LLVM, including major improvements from the previous release, improvements in various subprojects of LLVM, and some of the current users of the code. All LLVM releases may be downloaded from the LLVM releases web site .

The LLVM 3.1 distribution currently consists of code from the core LLVM repository (which roughly includes the LLVM optimizers, code generators and supporting tools), and the Clang repository. In addition to this code, the LLVM Project includes other sub-projects that are in development. Here we include updates on these subprojects.

Clang is an LLVM front end for the C, C++, and Objective-C languages. Clang aims to provide a better user experience through expressive diagnostics, a high level of conformance to language standards, fast compilation, and low memory use. Like LLVM, Clang provides a modular, library-based architecture that makes it suitable for creating or integrating with other development tools. Clang is considered a production-quality compiler for C, Objective-C, C++ and Objective-C++ on x86 (32- and 64-bit), and for Darwin/ARM targets. In the LLVM 3.1 time-frame, the Clang team has made many improvements. Highlights include: Greatly expanded C++11 support including lambdas, initializer lists, constexpr, user-defined literals, and atomics.

A new tooling library to ease building of clang-based standalone tools.

Extended support for literals in Objective C. For more details about the changes to Clang since the 3.0 release, see the Clang release notes. If Clang rejects your code but another compiler accepts it, please take a look at the language compatibility guide to make sure this is not intentional or a known issue.

DragonEgg is a gcc plugin that replaces GCC's optimizers and code generators with LLVM's. It works with gcc-4.5 and gcc-4.6 (and partially with gcc-4.7), can target the x86-32/x86-64 and ARM processor families, and has been successfully used on the Darwin, FreeBSD, KFreeBSD, Linux and OpenBSD platforms. It fully supports Ada, C, C++ and Fortran. It has partial support for Go, Java, Obj-C and Obj-C++. The 3.1 release has the following notable changes: Partial support for gcc-4.7. Ada support is poor, but other languages work fairly well.

Support for ARM processors. Some essential gcc headers that are needed to build DragonEgg for ARM are not installed by gcc. To work around this, copy the missing headers from the gcc source tree.

Better optimization for Fortran by exploiting the fact that Fortran scalar arguments have 'restrict' semantics.

Better optimization for all languages by passing information about type aliasing and type ranges to the LLVM optimizers.

A regression test-suite was added.

The new LLVM compiler-rt project is a simple library that provides an implementation of the low-level target-specific hooks required by code generation and other runtime components. For example, when compiling for a 32-bit target, converting a double to a 64-bit unsigned integer is compiled into a runtime call to the "__fixunsdfdi" function. The compiler-rt library provides highly optimized implementations of this and other low-level routines (some are 3x faster than the equivalent libgcc routines). As of 3.1, compiler-rt includes the helper functions for atomic operations, allowing atomic operations on arbitrary-sized quantities to work. These functions follow the specification defined by gcc and are used by clang.

LLDB is a ground-up implementation of a command line debugger, as well as a debugger API that can be used from other applications. LLDB makes use of the Clang parser to provide high-fidelity expression parsing (particularly for C++) and uses the LLVM JIT for target support.

Like compiler_rt, libc++ is now dual licensed under the MIT and UIUC license, allowing it to be used more permissively. Within the LLVM 3.1 time-frame there were the following highlights: The <atomic> header is now passing all tests, when compiling with clang and linking against the support code from compiler-rt.

header is now passing all tests, when compiling with clang and linking against the support code from compiler-rt. FreeBSD now includes libc++ as part of the base system.

libc++ has been ported to Solaris and, in combination with libcxxrt and clang, is working with a large body of existing code.

The VMKit project is an implementation of a Java Virtual Machine (Java VM or JVM) that uses LLVM for static and just-in-time compilation. In the LLVM 3.1 time-frame, VMKit has had significant improvements on both runtime and startup performance.