From 58b69754af0cbff56b1cfce9be9392e4451f6628 Mon Sep 17 00:00:00 2001
From: Dimitry Andric Written by the LLVM Team 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. For more information about LLVM, including information about the latest
release, please check out the main LLVM web
@@ -66,10 +72,10 @@
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. 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: 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. The 3.1 release has the following notable changes: 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. The 3.2 release has the following notable changes:LLVM 3.1 Release Notes
+LLVM 3.2 Release Notes
These are in-progress notes for the upcoming LLVM 3.2
+release.
+
+You may prefer the
+LLVM 3.1
+Release Notes.
Introduction
@@ -38,11 +44,11 @@
-
-
-
__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:
+ +Within the LLVM 3.1 time-frame there were the following highlights:
+Within the LLVM 3.2 time-frame there were the following highlights:
<atomic> header is now passing all tests, when
- compiling with clang and linking against the support code from
- compiler-rt.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:
+ +Within the LLVM 3.1 time-frame there were the following highlights:
+Within the LLVM 3.2 time-frame there were the following highlights:
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.
@@ -426,13 +412,13 @@LLVM 3.1 includes several major changes and big features:
+LLVM 3.2 includes several major changes and big features:
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:
-unroll-runtime flag.-vectorize to run this pass along with some associated
- post-vectorization cleanup passes. For more information, see the EuroLLVM
- 2012 slides:
- Autovectorization with LLVM.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.
+ in. For more information, please see the + Intro + to the LLVM MC Project Blog Post.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.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.We added new TableGen infrastructure to support bundling for @@ -587,11 +529,14 @@
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.
__builtin_expect.
+
New features and major changes in the X86 target include:
New features of the ARM target include:
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.
-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.
+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.
TargetOptions class, which is local to each
- TargetMachine. As a consequence, the associated flags will
- no longer be accepted by clang -mllvm. This includes:
-llvm::PrintMachineCodellvm::NoFramePointerElimllvm::NoFramePointerElimNonLeafllvm::DisableFramePointerElim(const MachineFunction &)llvm::LessPreciseFPMADOptionllvm::LessPrecideFPMAD()llvm::NoExcessFPPrecisionllvm::UnsafeFPMathllvm::NoInfsFPMathllvm::NoNaNsFPMathllvm::HonorSignDependentRoundingFPMathOptionllvm::HonorSignDependentRoundingFPMath()llvm::UseSoftFloatllvm::FloatABITypellvm::NoZerosInBSSllvm::JITExceptionHandlingllvm::JITEmitDebugInfollvm::JITEmitDebugInfoToDiskllvm::GuaranteedTailCallOptllvm::StackAlignmentOverridellvm::RealignStackllvm::DisableJumpTablesllvm::EnableFastISelllvm::getTrapFunctionName()llvm::EnableSegmentedStacksMDBuilder class has been added to simplify the creation
- of metadata.In addition, some tools have changed in this release. Some of the changes are:
-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: +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.
-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:
@@ -851,7 +710,7 @@ bindings, please express your intent on IRC or the developers list.