This document contains the release notes for the LLVM Compiler
- Infrastructure, release 3.1. Here we describe the status of LLVM, including
+ Infrastructure, release 3.2. 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.
+ 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
+
The LLVM 3.2 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.
@@ -94,20 +94,13 @@ Release Notes.
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.
+
In the LLVM 3.2 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.
For more details about the changes to Clang since the 3.0 release, see the
+
For more details about the changes to Clang since the 3.1 release, see the
Clang release
notes.
@@ -133,23 +126,10 @@ Release Notes.
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:
+
The 3.2 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.
+
...
@@ -166,13 +146,15 @@ Release Notes.
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).
+ __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).
+
+
The 3.2 release has the following notable changes:
-
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.
+
+
...
+
@@ -189,6 +171,12 @@ Release Notes.
expression parsing (particularly for C++) and uses the LLVM JIT for target
support.
+
The 3.2 release has the following notable changes:
+
+
+
...
+
+
@@ -202,15 +190,10 @@ Release Notes.
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:
+
Within the LLVM 3.2 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.
-
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.
+
...
@@ -226,8 +209,11 @@ Release Notes.
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.
+
The 3.2 release has the following notable changes:
+
+
+
...
+
@@ -245,16 +231,10 @@ Release Notes.
Work in the area of automatic SIMD and accelerator code generation was
started.
-
Within the LLVM 3.1 time-frame there were the following highlights:
+
Within the LLVM 3.2 time-frame there were the following highlights:
-
Polly became an official LLVM project
-
Polly can be loaded directly into clang (enabled by '-O3 -mllvm -polly')
-
An automatic scheduling optimizer (derived
- from Pluto) was
- integrated. It performs loop transformations to optimize for data-locality
- and parallelism. The transformations include, but are not limited to
- interchange, fusion, fission, skewing and tiling.
An exciting aspect of LLVM is that it is used as an enabling technology for
- a lot of other language and tools projects. This section lists some of the
- projects that have already been updated to work with LLVM 3.1.
+ a lot of other language and tools projects. This section lists some of the
+ projects that have already been updated to work with LLVM 3.2.
This release includes a huge number of bug fixes, performance tweaks and
- minor improvements. Some of the major improvements and new features are
+ minor improvements. Some of the major improvements and new features are
listed in this section.
@@ -476,19 +449,7 @@ Release Notes.
expose new optimization opportunities:
-
A new type representing 16 bit half floating point values has
- been added.
-
IR now supports vectors of pointers, including vector GEPs.
-
Module flags have been introduced. They convey information about the
- module as a whole to LLVM subsystems. This is currently used to encode
- Objective C ABI information.
-
Loads can now have range metadata attached to them to describe the
- possible values being loaded.
-
The llvm.ctlz and llvm.cttz intrinsics now have an
- additional argument which indicates whether the behavior of the intrinsic
- is undefined on a zero input. This can be used to generate more efficient
- code on platforms that only have instructions which don't return the type
- size when counting bits in 0.
+
...
@@ -500,22 +461,11 @@ Release Notes.
-
In addition to many minor performance tweaks and bug fixes, this
- release includes a few major enhancements and additions to the
- optimizers:
+
In addition to many minor performance tweaks and bug fixes, this release
+ includes a few major enhancements and additions to the optimizers:
-
The loop unroll pass now is able to unroll loops with run-time trip counts.
- This feature is turned off by default, and is enabled with the
- -unroll-runtime flag.
-
A new basic-block autovectorization pass is available. Pass
- -vectorize to run this pass along with some associated
- post-vectorization cleanup passes. For more information, see the EuroLLVM
- 2012 slides:
- Autovectorization with LLVM.
-
Inline cost heuristics have been completely overhauled and now closely
- model constant propagation through call sites, disregard trivially dead
- code costs, and can model C++ STL iterator patterns.
+
...
@@ -530,14 +480,12 @@ Release Notes.
The LLVM Machine Code (aka MC) subsystem was created to solve a number of
problems in the realm of assembly, disassembly, object file format handling,
and a number of other related areas that CPU instruction-set level tools work
- in. For more information, please see
- the Intro
- to the LLVM MC Project Blog Post.
The integrated assembler can optionally emit debug information when
- assembling a .s file. It can be enabled by passing the
- -g option to llvm-mc.
+
...
@@ -562,21 +510,7 @@ Release Notes.
make it run faster:
-
TableGen can now synthesize register classes that are only needed to
- represent combinations of constraints from instructions and sub-registers.
- The synthetic register classes inherit most of their properties form their
- closest user-defined super-class.
-
MachineRegisterInfo now allows the reserved registers to be
- frozen when register allocation starts. Target hooks should use the
- MRI->canReserveReg(FramePtr) method to avoid accidentally
- disabling frame pointer elimination during register allocation.
-
A new kind of MachineOperand provides a compact
- representation of large clobber lists on call instructions. The register
- mask operand references a bit mask of preserved registers. Everything else
- is clobbered.
A probability based block placement and code layout algorithm was added to
-LLVM's code generator. This layout pass supports probabilities derived from
-static heuristics as well as source code annotations such as
-__builtin_expect.
+ LLVM's code generator. This layout pass supports probabilities derived from
+ static heuristics as well as source code annotations such as
+ __builtin_expect.
+
@@ -610,14 +547,7 @@ static heuristics as well as source code annotations such as
New features and major changes in the X86 target include:
-
Greatly improved support for AVX2.
-
Lots of bug fixes and improvements for AVX1.
-
Support for the FMA4 and XOP instruction set extensions.
-
Call instructions use the new register mask operands for faster compile
- times and better support for different calling conventions. The old WINCALL
- instructions are no longer needed.
-
DW2 Exception Handling is enabled on Cygwin and MinGW.
-
Support for implicit TLS model used with MSVC runtime.
+
...
@@ -632,65 +562,45 @@ static heuristics as well as source code annotations such as
New features of the ARM target include:
-
The constant island pass now supports basic block and constant pool entry
- alignments greater than 4 bytes.
-
On Darwin, the ARM target now has a full-featured integrated assembler.
-
The ARM target now includes a full featured macro assembler, including
-direct-to-object module support for clang. The assembler is currently enabled
-by default for Darwin only pending testing and any additional necessary
-platform specific support for Linux.
+ direct-to-object module support for clang. The assembler is currently enabled
+ by default for Darwin only pending testing and any additional necessary
+ platform specific support for Linux.
Full support is included for Thumb1, Thumb2 and ARM modes, along with
-subtarget and CPU specific extensions for VFP2, VFP3 and NEON.
+ subtarget and CPU specific extensions for VFP2, VFP3 and NEON.
The assembler is Unified Syntax only (see ARM Architecural Reference Manual
-for details). While there is some, and growing, support for pre-unfied (divided)
-syntax, there are still significant gaps in that support.
-
+ for details). While there is some, and growing, support for pre-unfied
+ (divided) syntax, there are still significant gaps in that support.
-
-
-New features and major changes in the MIPS target include:
-
-
-
MIPS32 little-endian direct object code emission is functional.
-
MIPS64 little-endian code generation is largely functional for N64 ABI in assembly printing mode with the exception of handling of long double (f128) type.
-
Support for new instructions has been added, which includes swap-bytes
- instructions (WSBH and DSBH), floating point multiply-add/subtract and
- negative multiply-add/subtract instructions, and floating
- point load/store instructions with reg+reg addressing (LWXC1, etc.)
-
Various fixes to improve performance have been implemented.
-
Post-RA scheduling is now enabled at -O3.
-
Support for soft-float code generation has been added.
-
clang driver's support for MIPS 64-bits targets.
-
Support for MIPS floating point ABI option in clang driver.
An outstanding conditional inversion bug was fixed in this release.
+
New features and major changes in the MIPS target include:
-
NOTE: LLVM 3.1 marks the last release of the PTX back-end, in its
- current form. The back-end is currently being replaced by the NVPTX
- back-end, currently in SVN ToT.
+
+
...
+
@@ -702,7 +612,7 @@ New features and major changes in the MIPS target include:
-
Support for Qualcomm's Hexagon VLIW processor has been added.
+
...
@@ -715,25 +625,11 @@ New features and major changes in the MIPS target include:
If you're already an LLVM user or developer with out-of-tree changes based on
- LLVM 3.1, this section lists some "gotchas" that you may run into upgrading
+ LLVM 3.2, this section lists some "gotchas" that you may run into upgrading
from the previous release.
-
LLVM's build system now requires a python 2 interpreter to be present at
- build time. A perl interpreter is no longer required.
-
The C backend has been removed. It had numerous problems, to the point of
- not being able to compile any nontrivial program.
-
The Alpha, Blackfin and SystemZ targets have been removed due to lack of
- maintenance.
-
LLVM 3.1 removes support for reading LLVM 2.9 bitcode files. Going
- forward, we aim for all future versions of LLVM to read bitcode files and
- .ll files produced by LLVM 3.0 and later.
-
The unwind instruction is now gone. With the introduction of the
- new exception handling system in LLVM 3.0, the unwind instruction
- became obsolete.
-
LLVM 3.0 and earlier automatically added the returns_twice fo functions
- like setjmp based on the name. This functionality was removed in 3.1.
- This affects Clang users, if -ffreestanding is used.
+
...
@@ -749,40 +645,7 @@ New features and major changes in the MIPS target include:
LLVM API changes are:
-
Target specific options have been moved from global variables to members
- on the new TargetOptions class, which is local to each
- TargetMachine. As a consequence, the associated flags will
- no longer be accepted by clang -mllvm. This includes:
-
The MDBuilder class has been added to simplify the creation
- of metadata.
+
...
@@ -797,13 +660,8 @@ New features and major changes in the MIPS target include:
In addition, some tools have changed in this release. Some of the changes
are:
-
-
llvm-stress is a command line tool for generating random
- .ll files to fuzz different LLVM components.
-
The llvm-ld tool has been removed. The clang driver provides a
- more reliable solution for turning a set of bitcode files into a binary.
- To merge bitcode files llvm-link can be used instead.
+
...
@@ -817,19 +675,12 @@ New features and major changes in the MIPS target include:
Officially supported Python bindings have been added! Feature support is far
-from complete. The current bindings support interfaces to:
+ from complete. The current bindings support interfaces to:
+
-
Object File Interface
-
Disassembler
+
...
-
Using the Object File Interface, it is possible to inspect binary object files.
-Think of it as a Python version of readelf or llvm-objdump.
-
-
Support for additional features is currently being developed by community
-contributors. If you are interested in shaping the direction of the Python
-bindings, please express your intent on IRC or the developers list.
-
@@ -845,11 +696,11 @@ bindings, please express your intent on IRC or the developers list.
LLVM is generally a production quality compiler, and is used by a broad range
of applications and shipping in many products. That said, not every
subsystem is as mature as the aggregate, particularly the more obscure
- targets. If you run into a problem, please check the LLVM bug database and submit a bug if
- there isn't already one or ask on the LLVMdev
- list.
+ targets. If you run into a problem, please check
+ the LLVM bug database and submit a bug if
+ there isn't already one or ask on
+ the LLVMdev
+ list.
Known problem areas include:
@@ -857,7 +708,7 @@ bindings, please express your intent on IRC or the developers list.
The CellSPU, MSP430, PTX and XCore backends are experimental.
The integrated assembler, disassembler, and JIT is not supported by
- several targets. If an integrated assembler is not supported, then a
+ several targets. If an integrated assembler is not supported, then a
system assembler is required. For more details, see the Target Features Matrix.