From 1fc08f5e9ef733ef1ce6f363fecedc2260e78974 Mon Sep 17 00:00:00 2001 From: dim Date: Sat, 14 Apr 2012 13:54:10 +0000 Subject: Vendor import of llvm trunk r154661: http://llvm.org/svn/llvm-project/llvm/trunk@r154661 --- docs/ReleaseNotes.html | 1195 ++++++++++-------------------------------------- 1 file changed, 237 insertions(+), 958 deletions(-) (limited to 'docs/ReleaseNotes.html') diff --git a/docs/ReleaseNotes.html b/docs/ReleaseNotes.html index 56d0eb9..bcac293 100644 --- a/docs/ReleaseNotes.html +++ b/docs/ReleaseNotes.html @@ -4,20 +4,22 @@ - LLVM 3.0 Release Notes + LLVM 3.1 Release Notes -

LLVM 3.0 Release Notes

+

LLVM 3.1 Release Notes

-LLVM Dragon Logo +
+LLVM Dragon Logo +
  1. Introduction
  2. Sub-project Status Update
  3. -
  4. External Projects Using LLVM 3.0
  5. -
  6. What's New in LLVM 3.0?
  7. +
  8. External Projects Using LLVM 3.1
  9. +
  10. What's New in LLVM?
  11. Installation Instructions
  12. Known Problems
  13. Additional Information
  14. @@ -27,13 +29,11 @@

    Written by the LLVM Team

    -

    @@ -44,8 +44,9 @@ Release Notes.

    This document contains the release notes for the LLVM Compiler - Infrastructure, release 3.0. Here we describe the status of LLVM, including - major improvements from the previous release and significant known problems. + 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.

    @@ -61,16 +62,8 @@ Release Notes. releases page.

    - - - + +

    Sub-project Status Update @@ -79,9 +72,9 @@ Release Notes.

    -

    The LLVM 3.0 distribution currently consists of code from the core LLVM +

    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), the Clang repository and the llvm-gcc repository. In + 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.

    @@ -99,37 +92,18 @@ Release Notes. 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.0 time-frame, the Clang team has made many improvements:

    + (32- and 64-bit), and for Darwin/ARM targets.

    +

    In the LLVM 3.1 time-frame, the Clang team has made many improvements:

      -
    • Greatly improved support for building C++ applications, with greater - stability and better diagnostics.
    • - -
    • Improved support for - the C++ - 2011 standard, including implementations of non-static data member - initializers, alias templates, delegating constructors, the range-based - for loop, and implicitly-generated move constructors and move assignment - operators, among others.
    • - -
    • Implemented support for some features of the upcoming C1x standard, - including static assertions and generic selections.
    • - -
    • Better detection of include and linking paths for system headers and - libraries, especially for Linux distributions.
    • - -
    • Implemented support - for Automatic - Reference Counting for Objective-C.
    • - -
    • Implemented a number of optimizations in libclang, the Clang C - interface, to improve the performance of code completion and the mapping - from source locations to abstract syntax tree nodes.
    • +
    • ...
    - +

    For more details about the changes to Clang since the 2.9 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 @@ -145,19 +119,18 @@ Release Notes.

    DragonEgg is a gcc plugin that replaces GCC's - optimizers and code generators with LLVM's. Currently it requires a patched - version of gcc-4.5. The plugin can target the x86-32 and x86-64 processor - families and has been used successfully on the Darwin, FreeBSD and Linux - platforms. The Ada, C, C++ and Fortran languages work well. The plugin is - capable of compiling plenty of Obj-C, Obj-C++ and Java but it is not known - whether the compiled code actually works or not!

    + optimizers and code generators with LLVM's. It works with gcc-4.5 or gcc-4.6, + targets the x86-32 and x86-64 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.0 release has the following notable changes:

    +

    The 3.1 release has the following notable changes:

    + +
      + +
    • ...
    • -
        -
    @@ -178,7 +151,7 @@ Release Notes. implementations of this and other low-level routines (some are 3x faster than the equivalent libgcc routines).

    -

    In the LLVM 3.0 timeframe,

    +

    ....

    @@ -189,11 +162,12 @@ Release Notes.
    -

    LLDB has advanced by leaps and bounds in the 3.0 timeframe. It is - dramatically more stable and useful, and includes both a - new tutorial and - a side-by-side comparison with - GDB.

    +

    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.

    + +

    ...

    @@ -208,22 +182,7 @@ Release Notes. licensed under the MIT and UIUC license, allowing it to be used more permissively.

    - - - - -

    -LLBrowse: IR Browser -

    - -
    - -

    - LLBrowse is an interactive viewer for LLVM modules. It can load any LLVM - module and displays its contents as an expandable tree view, facilitating an - easy way to inspect types, functions, global variables, or metadata nodes. It - is fully cross-platform, being based on the popular wxWidgets GUI - toolkit.

    +

    ...

    @@ -234,39 +193,24 @@ Release Notes.
    -

    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. As of LLVM 3.0, VMKit now supports generational - garbage collectors. The garbage collectors are provided by the MMTk - framework, and VMKit can be configured to use one of the numerous implemented - collectors of MMTk.

    +

    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. -

    - - - - +

    - External Open Source Projects Using LLVM 3.0 + External Open Source Projects Using LLVM 3.1

    @@ -274,415 +218,15 @@ be used to verify some algorithms.

    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.0.

    - - -

    AddressSanitizer

    - -
    - -

    AddressSanitizer - uses compiler instrumentation and a specialized malloc library to find C/C++ - bugs such as use-after-free and out-of-bound accesses to heap, stack, and - globals. The key feature of the tool is speed: the average slowdown - introduced by AddressSanitizer is less than 2x.

    - -
    - - -

    ClamAV

    - -
    - -

    Clam AntiVirus is an open source (GPL) - anti-virus toolkit for UNIX, designed especially for e-mail scanning on mail - gateways.

    - -

    Since version 0.96 it - has bytecode - signatures that allow writing detections for complex malware.

    - -

    It uses LLVM's JIT to speed up the execution of bytecode on X86, X86-64, - PPC32/64, falling back to its own interpreter otherwise. The git version was - updated to work with LLVM 3.0.

    - -
    - - -

    clReflect

    - -
    - -

    clReflect is a C++ - parser that uses clang/LLVM to derive a light-weight reflection database - suitable for use in game development. It comes with a very simple runtime - library for loading and querying the database, requiring no external - dependencies (including CRT), and an additional utility library for object - management and serialisation.

    - -
    - - -

    Cling C++ Interpreter

    - -
    - -

    Cling is an interactive compiler interface - (aka C++ interpreter). It uses LLVM's JIT and clang; it currently supports - C++ and C. It has a prompt interface, runs source files, calls into shared - libraries, prints the value of expressions, even does runtime lookup of - identifiers (dynamic scopes). And it just behaves like one would expect from - an interpreter.

    - -
    - - - - - -

    Glasgow Haskell Compiler (GHC)

    - -
    - -

    GHC is an open source, state-of-the-art programming suite for Haskell, a - standard lazy functional programming language. It includes an optimizing - static compiler generating good code for a variety of platforms, together - with an interactive system for convenient, quick development.

    - -

    GHC 7.0 and onwards include an LLVM code generator, supporting LLVM 2.8 and - later. Since LLVM 2.9, GHC now includes experimental support for the ARM - platform with LLVM 3.0.

    - -
    - - -

    gwXscript

    - -
    - -

    gwXscript is an object oriented, - aspect oriented programming language which can create both executables (ELF, - EXE) and shared libraries (DLL, SO, DYNLIB). The compiler is implemented in - its own language and translates scripts into LLVM-IR which can be optimized - and translated into native code by the LLVM framework. Source code in - gwScript contains definitions that expand the namespaces. So you can build - your project and simply 'plug out' features by removing a file. The remaining - project does not leave scars since you directly separate concerns by the - 'template' feature of gwX. It is also possible to add new features to a - project by just adding files and without editing the original project. This - language is used for example to create games or content management systems - that should be extendable.

    - -

    gwXscript is strongly typed and offers comfort with its native types string, - hash and array. You can easily write new libraries in gwXscript or native - code. gwXscript is type safe and users should not be able to crash your - program or execute malicious code except code that is eating CPU time.

    - -
    - - -

    include-what-you-use

    - -
    - -

    include-what-you-use - is a tool to ensure that a file directly #includes - all .h files that provide a symbol that the file uses. It also - removes superfluous #includes from source files.

    - -
    - - -

    LanguageKit and Pragmatic Smalltalk

    - -
    - -

    LanguageKit is - a framework for implementing dynamic languages sharing an object model with - Objective-C. It provides static and JIT compilation using LLVM along with - its own interpreter. Pragmatic Smalltalk is a dialect of Smalltalk, built on - top of LanguageKit, that interfaces directly with Objective-C, sharing the - same object representation and message sending behaviour. These projects are - developed as part of the Étoié desktop environment.

    - -
    - - -

    LuaAV

    - -
    - -

    LuaAV is a real-time - audiovisual scripting environment based around the Lua language and a - collection of libraries for sound, graphics, and other media protocols. LuaAV - uses LLVM and Clang to JIT compile efficient user-defined audio synthesis - routines specified in a declarative syntax.

    - -
    - - -

    Mono

    - -
    - -

    An open source, cross-platform implementation of C# and the CLR that is - binary compatible with Microsoft.NET. Has an optional, dynamically-loaded - LLVM code generation backend in Mini, the JIT compiler.

    - -

    Note that we use a Git mirror of LLVM with some patches. See: - https://github.com/mono/llvm

    - -
    - - -

    Portable OpenCL (pocl)

    - -
    - -

    Portable OpenCL is an open source implementation of the OpenCL standard which - can be easily adapted for new targets. One of the goals of the project is - improving performance portability of OpenCL programs, avoiding the need for - target-dependent manual optimizations. A "native" target is included, which - allows running OpenCL kernels on the host (CPU).

    - -
    - - -

    Pure

    - -
    -

    Pure is an - algebraic/functional programming language based on term rewriting. Programs - are collections of equations which are used to evaluate expressions in a - symbolic fashion. The interpreter uses LLVM as a backend to JIT-compile Pure - programs to fast native code. Pure offers dynamic typing, eager and lazy - evaluation, lexical closures, a hygienic macro system (also based on term - rewriting), built-in list and matrix support (including list and matrix - comprehensions) and an easy-to-use interface to C and other programming - languages (including the ability to load LLVM bitcode modules, and inline C, - C++, Fortran and Faust code in Pure programs if the corresponding LLVM-enabled - compilers are installed).

    - -

    Pure version 0.48 has been tested and is known to work with LLVM 3.0 - (and continues to work with older LLVM releases >= 2.5).

    - -
    - - -

    Renderscript

    - -
    - -

    Renderscript - is Android's advanced 3D graphics rendering and compute API. It provides a - portable C99-based language with extensions to facilitate common use cases - for enhancing graphics and thread level parallelism. The Renderscript - compiler frontend is based on Clang/LLVM. It emits a portable bitcode format - for the actual compiled script code, as well as reflects a Java interface for - developers to control the execution of the compiled bitcode. Executable - machine code is then generated from this bitcode by an LLVM backend on the - device. Renderscript is thus able to provide a mechanism by which Android - developers can improve performance of their applications while retaining - portability.

    - -
    - - -

    SAFECode

    - -
    - -

    SAFECode is a memory safe C/C++ - compiler built using LLVM. It takes standard, unannotated C/C++ code, - analyzes the code to ensure that memory accesses and array indexing - operations are safe, and instruments the code with run-time checks when - safety cannot be proven statically. SAFECode can be used as a debugging aid - (like Valgrind) to find and repair memory safety bugs. It can also be used - to protect code from security attacks at run-time.

    - -
    - - -

    The Stupid D Compiler (SDC)

    - -
    - -

    The Stupid D Compiler is a - project seeking to write a self-hosting compiler for the D programming - language without using the frontend of the reference compiler (DMD).

    - -
    - - -

    TTA-based Co-design Environment (TCE)

    - -
    - -

    TCE is a toolset for designing application-specific processors (ASP) based on - the Transport triggered architecture (TTA). The toolset provides a complete - co-design flow from C/C++ programs down to synthesizable VHDL and parallel - program binaries. Processor customization points include the register files, - function units, supported operations, and the interconnection network.

    - -

    TCE uses Clang and LLVM for C/C++ language support, target independent - optimizations and also for parts of code generation. It generates new - LLVM-based code generators "on the fly" for the designed TTA processors and - loads them in to the compiler backend as runtime libraries to avoid - per-target recompilation of larger parts of the compiler chain.

    - -
    - - -

    Tart Programming Language

    - -
    - -

    Tart is a general-purpose, - strongly typed programming language designed for application - developers. Strongly inspired by Python and C#, Tart focuses on practical - solutions for the professional software developer, while avoiding the clutter - and boilerplate of legacy languages like Java and C++. Although Tart is still - in development, the current implementation supports many features expected of - a modern programming language, such as garbage collection, powerful - bidirectional type inference, a greatly simplified syntax for template - metaprogramming, closures and function literals, reflection, operator - overloading, explicit mutability and immutability, and much more. Tart is - flexible enough to accommodate a broad range of programming styles and - philosophies, while maintaining a strong commitment to simplicity, minimalism - and elegance in design.

    - -
    - - -

    ThreadSanitizer

    - -
    - -

    ThreadSanitizer is a - data race detector for (mostly) C and C++ code, available for Linux, Mac OS - and Windows. On different systems, we use binary instrumentation frameworks - (Valgrind and Pin) as frontends that generate the program events for the race - detection algorithm. On Linux, there's an option of using LLVM-based - compile-time instrumentation.

    - -
    - - -

    The ZooLib C++ Cross-Platform Application Framework

    - -
    - -

    ZooLib is Open Source under the MIT - License. It provides GUI, filesystem access, TCP networking, thread-safe - memory management, threading and locking for Mac OS X, Classic Mac OS, - Microsoft Windows, POSIX operating systems with X11, BeOS, Haiku, Apple's iOS - and Research in Motion's BlackBerry.

    - -

    My current work is to use CLang's static analyzer to improve ZooLib's code - quality. I also plan to set up LLVM compiles of the demo programs and test - programs using CLang and LLVM on all the platforms that CLang, LLVM and - ZooLib all support.

    - -
    - - - - - - - - - - - - - - - - -

    - What's New in LLVM 3.0? + What's New in LLVM 3.1?

    @@ -699,18 +243,38 @@ Faust compiler can now generate LLVM bitcode, and works with LLVM 2.7-3.0.

    -

    LLVM 3.0 includes several major new capabilities:

    + + + + +

    LLVM 3.1 includes several major changes and big features:

    - - + - +
    +

    LLVM IR and Core Improvements @@ -721,117 +285,15 @@ Faust compiler can now generate LLVM bitcode, and works with LLVM 2.7-3.0.

    LLVM IR has several new features for better support of new targets and that expose new optimization opportunities:

    -

    One of the biggest changes is that 3.0 has a new exception handling - system. The old system used LLVM intrinsics to convey the exception handling - information to the code generator. It worked in most cases, but not - all. Inlining was especially difficult to get right. Also, the intrinsics - could be moved away from the invoke instruction, making it hard - to recover that information.

    - -

    The new EH system makes exception handling a first-class member of the IR. It - adds two new instructions:

    - -
      -
    • landingpad — - this instruction defines a landing pad basic block. It contains all of the - information that's needed by the code generator. It's also required to be - the first non-PHI instruction in the landing pad. In addition, a landing - pad may be jumped to only by the unwind edge of an invoke - instruction.
    • - -
    • resume — this - instruction causes the current exception to resume traveling up the - stack. It replaces the @llvm.eh.resume intrinsic.
    • -
    - -

    Converting from the old EH API to the new EH API is rather simple, because a - lot of complexity has been removed. The two intrinsics, - @llvm.eh.exception and @llvm.eh.selector have been - superceded by the landingpad instruction. Instead of generating - a call to @llvm.eh.exception and @llvm.eh.selector: - -

    -
    -Function *ExcIntr = Intrinsic::getDeclaration(TheModule,
    -                                              Intrinsic::eh_exception);
    -Function *SlctrIntr = Intrinsic::getDeclaration(TheModule,
    -                                                Intrinsic::eh_selector);
    -
    -// The exception pointer.
    -Value *ExnPtr = Builder.CreateCall(ExcIntr, "exc_ptr");
    -
    -std::vector<Value*> Args;
    -Args.push_back(ExnPtr);
    -Args.push_back(Builder.CreateBitCast(Personality,
    -                                     Type::getInt8PtrTy(Context)));
    -
    -// Add selector clauses to Args.
    -
    -// The selector call.
    -Builder.CreateCall(SlctrIntr, Args, "exc_sel");
    -
    -
    - -

    You should instead generate a landingpad instruction, that - returns an exception object and selector value:

    - -
    -
    -LandingPadInst *LPadInst =
    -  Builder.CreateLandingPad(StructType::get(Int8PtrTy, Int32Ty, NULL),
    -                           Personality, 0);
    -
    -Value *LPadExn = Builder.CreateExtractValue(LPadInst, 0);
    -Builder.CreateStore(LPadExn, getExceptionSlot());
    -
    -Value *LPadSel = Builder.CreateExtractValue(LPadInst, 1);
    -Builder.CreateStore(LPadSel, getEHSelectorSlot());
    -
    -
    - -

    It's now trivial to add the individual clauses to the landingpad - instruction.

    - -
    -
    -// Adding a catch clause
    -Constant *TypeInfo = getTypeInfo();
    -LPadInst->addClause(TypeInfo);
    -
    -// Adding a C++ catch-all
    -LPadInst->addClause(Constant::getNullValue(Builder.getInt8PtrTy()));
    -
    -// Adding a cleanup
    -LPadInst->setCleanup(true);
    -
    -// Adding a filter clause
    -std::vector<Constant*> TypeInfos;
    -Constant *TypeInfo = getFilterTypeInfo();
    -TypeInfos.push_back(Builder.CreateBitCast(TypeInfo, Builder.getInt8PtrTy()));
    -
    -ArrayType *FilterTy = ArrayType::get(Int8PtrTy, TypeInfos.size());
    -LPadInst->addClause(ConstantArray::get(FilterTy, TypeInfos));
    -
    -
    - -

    Converting from using the @llvm.eh.resume intrinsic to - the resume instruction is trivial. It takes the exception - pointer and exception selector values returned by - the landingpad instruction:

    - -
    -
    -Type *UnwindDataTy = StructType::get(Builder.getInt8PtrTy(),
    -                                     Builder.getInt32Ty(), NULL);
    -Value *UnwindData = UndefValue::get(UnwindDataTy);
    -Value *ExcPtr = Builder.CreateLoad(getExceptionObjSlot());
    -Value *ExcSel = Builder.CreateLoad(getExceptionSelSlot());
    -UnwindData = Builder.CreateInsertValue(UnwindData, ExcPtr, 0, "exc_ptr");
    -UnwindData = Builder.CreateInsertValue(UnwindData, ExcSel, 1, "exc_sel");
    -Builder.CreateResume(UnwindData);
    -
    -
    - +
      +
    • IR support for half float
    • +
    • IR support for vectors of pointers, including vector GEPs.
    • +
    • Module flags have been introduced. They convey information about the + module as a whole to LLVM subsystems.
    • +
    • Loads can now have range metadata attached to them to describe the + possible values being loaded.
    • +
    • ....
    • +
    @@ -841,16 +303,12 @@ Builder.CreateResume(UnwindData);
    -

    In addition to a large array of minor performance tweaks and bug fixes, this +

    In addition to many minor performance tweaks and bug fixes, this release includes a few major enhancements and additions to the optimizers:

      - - - +
    • ....
    @@ -865,18 +323,14 @@ Builder.CreateResume(UnwindData);

    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.

    + in. For more information, please see + the Intro + to the LLVM MC Project Blog Post.

      - +
    • ....
    -

    For more information, please see - the Intro - to the LLVM MC Project Blog Post.

    - @@ -886,15 +340,39 @@ Builder.CreateResume(UnwindData);
    +

    We have changed the way that the Type Legalizer legalizes vectors. The type + legalizer now attempts to promote integer elements. This enabled the + implementation of vector-select. Additionally, we see a performance boost on + workloads which use vectors of chars and shorts, since they are now promoted + to 32-bit types, which are better supported by the SIMD instruction set. + Floating point types are still widened as before.

    + +

    We have put a significant amount of work into the code generator infrastructure, which allows us to implement more aggressive algorithms and 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.
    + +

    We added new TableGen infrastructure to support bundling for + Very Long Instruction Word (VLIW) architectures. TableGen can now + automatically generate a deterministic finite automaton from a VLIW + target's schedule description which can be queried to determine + legal groupings of instructions in a bundle.

    +
    @@ -907,13 +385,12 @@ Builder.CreateResume(UnwindData);

    New features and major changes in the X86 target include:

      - -
    • The CRC32 intrinsics have been renamed. The intrinsics were previously - @llvm.x86.sse42.crc32.[8|16|32] - and @llvm.x86.sse42.crc64.[8|64]. They have been renamed to - @llvm.x86.sse42.crc32.32.[8|16|32] and - @llvm.x86.sse42.crc32.64.[8|64].
    • - +
    • Bug fixes and improved support for AVX1
    • +
    • Support for AVX2 (still incomplete at this point)
    • +
    • 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.
    @@ -928,386 +405,188 @@ Builder.CreateResume(UnwindData);

    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. +
    - - - -

    -Other Target Specific Improvements -

    - -

    PPC32/ELF va_arg was implemented.

    -

    PPC32 initial support for .o file writing was implemented.

    +

    +ARM 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.

    -
      - -
    +

    Full support is included for Thumb1, Thumb2 and ARM modes, along with +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.

    +

    -Major Changes and Removed Features +MIPS Target Improvements

    -

    If you're already an LLVM user or developer with out-of-tree changes based on - LLVM 2.9, this section lists some "gotchas" that you may run into upgrading - from the previous release.

    +

    This release has seen major new work on just about every aspect of the MIPS + backend. Some of the major new features include:

      -
    • The LLVMC front end code was removed while separating - out language independence.
    • -
    • The LowerSetJmp pass wasn't used effectively by any - target and has been removed.
    • -
    • The old TailDup pass was not used in the standard pipeline - and was unable to update ssa form, so it has been removed. -
    • The syntax of volatile loads and stores in IR has been changed to - "load volatile"/"store volatile". The old - syntax ("volatile load"/"volatile store") - is still accepted, but is now considered deprecated.
    • -
    • The old atomic intrinscs (llvm.memory.barrier and - llvm.atomic.*) are now gone. Please use the new atomic - instructions, described in the atomics guide. +
    • ....
    - -

    Windows (32-bit)

    -
    - -
      -
    • On Win32(MinGW32 and MSVC), Windows 2000 will not be supported. - Windows XP or higher is required.
    • -
    - -
    -

    -Internal API Changes +Other Target Specific Improvements

    -

    In addition, many APIs have changed in this release. Some of the major - LLVM API changes are:

    -
      -
    • The biggest and most pervasive change is that llvm::Type's are no longer - returned or accepted as 'const' values. Instead, just pass around - non-const Type's.
    • - -
    • PHINode::reserveOperandSpace has been removed. Instead, you - must specify how many operands to reserve space for when you create the - PHINode, by passing an extra argument - into PHINode::Create.
    • - -
    • PHINodes no longer store their incoming BasicBlocks as operands. Instead, - the list of incoming BasicBlocks is stored separately, and can be accessed - with new functions PHINode::block_begin - and PHINode::block_end.
    • - -
    • Various functions now take an ArrayRef instead of either a - pair of pointers (or iterators) to the beginning and end of a range, or a - pointer and a length. Others now return an ArrayRef instead - of a reference to a SmallVector - or std::vector. These include: -
        - -
      • CallInst::Create
      • -
      • ComputeLinearIndex (in llvm/CodeGen/Analysis.h)
      • -
      • ConstantArray::get
      • -
      • ConstantExpr::getExtractElement
      • -
      • ConstantExpr::getGetElementPtr
      • -
      • ConstantExpr::getInBoundsGetElementPtr
      • -
      • ConstantExpr::getIndices
      • -
      • ConstantExpr::getInsertElement
      • -
      • ConstantExpr::getWithOperands
      • -
      • ConstantFoldCall (in llvm/Analysis/ConstantFolding.h)
      • -
      • ConstantFoldInstOperands (in llvm/Analysis/ConstantFolding.h)
      • -
      • ConstantVector::get
      • -
      • DIBuilder::createComplexVariable
      • -
      • DIBuilder::getOrCreateArray
      • -
      • ExtractValueInst::Create
      • -
      • ExtractValueInst::getIndexedType
      • -
      • ExtractValueInst::getIndices
      • -
      • FindInsertedValue (in llvm/Analysis/ValueTracking.h)
      • -
      • gep_type_begin (in llvm/Support/GetElementPtrTypeIterator.h)
      • -
      • gep_type_end (in llvm/Support/GetElementPtrTypeIterator.h)
      • -
      • GetElementPtrInst::Create
      • -
      • GetElementPtrInst::CreateInBounds
      • -
      • GetElementPtrInst::getIndexedType
      • -
      • InsertValueInst::Create
      • -
      • InsertValueInst::getIndices
      • -
      • InvokeInst::Create
      • -
      • IRBuilder::CreateCall
      • -
      • IRBuilder::CreateExtractValue
      • -
      • IRBuilder::CreateGEP
      • -
      • IRBuilder::CreateInBoundsGEP
      • -
      • IRBuilder::CreateInsertValue
      • -
      • IRBuilder::CreateInvoke
      • -
      • MDNode::get
      • -
      • MDNode::getIfExists
      • -
      • MDNode::getTemporary
      • -
      • MDNode::getWhenValsUnresolved
      • -
      • SimplifyGEPInst (in llvm/Analysis/InstructionSimplify.h)
      • -
      • TargetData::getIndexedOffset
      • -
    • - -
    • All forms of StringMap::getOrCreateValue have been remove - except for the one which takes a StringRef.
    • - -
    • The LLVMBuildUnwind function from the C API was removed. The - LLVM unwind instruction has been deprecated for a long time - and isn't used by the current front-ends. So this was removed during the - exception handling rewrite.
    • - -
    • The LLVMAddLowerSetJmpPass function from the C API was - removed because the LowerSetJmp pass was removed.
    • +
    • ....
    • -
    • The DIBuilder interface used by front ends to encode - debugging information in the LLVM IR now expects clients to - use DIBuilder::finalize() at the end of translation unit to - complete debugging information encoding.
    • -
    • The way the type system works has been - rewritten: PATypeHolder and OpaqueType are gone, - and all APIs deal with Type* instead of const - Type*. If you need to create recursive structures, then create a - named structure, and use setBody() when all its elements are - built. Type merging and refining is gone too: named structures are not - merged with other structures, even if their layout is identical. (of - course anonymous structures are still uniqued by layout).
    • - -
    • TargetSelect.h moved to Support/ from Target/
    • - -
    • UpgradeIntrinsicCall no longer upgrades pre-2.9 intrinsic calls (for - example llvm.memset.i32).
    • - -
    • It is mandatory to initialize all out-of-tree passes too and their dependencies now with - INITIALIZE_PASS{BEGIN,END,} - and INITIALIZE_{PASS,AG}_DEPENDENCY.
    • - -
    • The interface for MemDepResult in MemoryDependenceAnalysis has been - enhanced with new return types Unknown and NonFuncLocal, in addition to - the existing types Clobber, Def, and NonLocal.
    - - - -

    - Known Problems -

    - - -
    - -

    This section contains significant known problems with the LLVM system, listed - by component. If you run into a problem, please check - the LLVM bug database and submit a bug if - there isn't already one.

    - - +

    - Experimental features included with this release +Major Changes and Removed Features

    -

    The following components of this LLVM release are either untested, known to - be broken or unreliable, or are in early development. These components - should not be relied on, and bugs should not be filed against them, but they - may be useful to some people. In particular, if you would like to work on - one of these components, please contact us on - the LLVMdev - list.

    +

    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 + from the previous release.

      -
    • The Alpha, Blackfin, CellSPU, MicroBlaze, MSP430, MIPS, PTX, SystemZ and - XCore backends are experimental.
    • - -
    • llc "-filetype=obj" is experimental on all targets other - than darwin and ELF X86 systems.
    • +
    • 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.
    • +
    • ....
    - +

    - Known problems with the X86 back-end +Internal API Changes

    -
      -
    • The X86 backend does not yet support - all inline assembly that uses the X86 - floating point stack. It supports the 'f' and 't' constraints, but - not 'u'.
    • - -
    • The X86-64 backend does not yet support the LLVM IR instruction - va_arg. Currently, front-ends support variadic argument - constructs on X86-64 by lowering them manually.
    • - -
    • Windows x64 (aka Win64) code generator has a few issues. -
        -
      • llvm-gcc cannot build the mingw-w64 runtime currently due to lack of - support for the 'u' inline assembly constraint and for X87 floating - point inline assembly.
      • - -
      • On mingw-w64, you will see unresolved symbol __chkstk due - to Bug 8919. - It is fixed - in r128206.
      • - -
      • Miss-aligned MOVDQA might crash your program. It is due to - Bug 9483, lack - of handling aligned internal globals.
      • -
      -
    • - -
    - -
    - - -

    - Known problems with the PowerPC back-end -

    - -
    +

    In addition, many APIs have changed in this release. Some of the major + LLVM API changes are:

      -
    • The PPC32/ELF support lacks PIC support.
    • -
    - -
    - - -

    - Known problems with the ARM back-end -

    - -
    - +
  15. 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:
      -
    • Thumb mode works only on ARMv6 or higher processors. On sub-ARMv6 - processors, thumb programs can crash or produce wrong results - (PR1388).
    • - -
    • Compilation for ARM Linux OABI (old ABI) is supported but not fully - tested.
    • +
    • llvm::PrintMachineCode
    • +
    • llvm::NoFramePointerElim
    • +
    • llvm::NoFramePointerElimNonLeaf
    • +
    • llvm::DisableFramePointerElim(const MachineFunction &)
    • +
    • llvm::LessPreciseFPMADOption
    • +
    • llvm::LessPrecideFPMAD()
    • +
    • llvm::NoExcessFPPrecision
    • +
    • llvm::UnsafeFPMath
    • +
    • llvm::NoInfsFPMath
    • +
    • llvm::NoNaNsFPMath
    • +
    • llvm::HonorSignDependentRoundingFPMathOption
    • +
    • llvm::HonorSignDependentRoundingFPMath()
    • +
    • llvm::UseSoftFloat
    • +
    • llvm::FloatABIType
    • +
    • llvm::NoZerosInBSS
    • +
    • llvm::JITExceptionHandling
    • +
    • llvm::JITEmitDebugInfo
    • +
    • llvm::JITEmitDebugInfoToDisk
    • +
    • llvm::GuaranteedTailCallOpt
    • +
    • llvm::StackAlignmentOverride
    • +
    • llvm::RealignStack
    • +
    • llvm::DisableJumpTables
    • +
    • llvm::EnableFastISel
    • +
    • llvm::getTrapFunctionName()
    • +
    • llvm::EnableSegmentedStacks
    • +
  16. +
  17. ....
  18. - +

    - Known problems with the SPARC back-end +Tools Changes

    -
      -
    • The SPARC backend only supports the 32-bit SPARC ABI (-m32); it does not - support the 64-bit SPARC ABI (-m64).
    • -
    +

    In addition, some tools have changed in this release. Some of the changes + are:

    -
    - - -

    - Known problems with the MIPS back-end -

    - -
      -
    • 64-bit MIPS targets are not supported yet.
    • +
    • llvm-stress is a command line tool for generating random .ll files to fuzz + different LLVM components.
    • +
    • ....
    -
    - - -

    - Known problems with the Alpha back-end -

    - -
    -
      -
    • On 21164s, some rare FP arithmetic sequences which may trap do not have - the appropriate nops inserted to ensure restartability.
    • +
    • ....
    - -

    - Known problems with the C back-end -

    - -
    - -

    The C backend has numerous problems and is not being actively maintained. - Depending on it for anything serious is not advised.

    - - -
    - - -

    - Known problems with the llvm-gcc front-end -

    + +

    + Known Problems +

    +
    -

    LLVM 2.9 was the last release of llvm-gcc.

    +

    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.

    -

    llvm-gcc is generally very stable for the C family of languages. The only - major language feature of GCC not supported by llvm-gcc is the - __builtin_apply family of builtins. However, some extensions - are only supported on some targets. For example, trampolines are only - supported on some targets (these are used when you take the address of a - nested function).

    +

    Known problem areas include:

    -

    Fortran support generally works, but there are still several unresolved bugs - in Bugzilla. Please see the - tools/gfortran component for details. Note that llvm-gcc is missing major - Fortran performance work in the frontend and library that went into GCC after - 4.2. If you are interested in Fortran, we recommend that you consider using - dragonegg instead.

    - -

    The llvm-gcc 4.2 Ada compiler has basic functionality, but is no longer being - actively maintained. If you are interested in Ada, we recommend that you - consider using dragonegg instead.

    +
      +
    • The Alpha, Blackfin, CellSPU, MSP430, PTX, SystemZ and + XCore backends are experimental, and the Alpha, Blackfin and SystemZ + targets have already been removed from mainline.
    • + +
    • The integrated assembler, disassembler, and JIT is not supported by + several targets. If an integrated assembler is not supported, then a + system assembler is required. For more details, see the Target Features Matrix. +
    • -
    +
  19. The C backend has numerous problems and is not being actively maintained. + Depending on it for anything serious is not advised.
  20. +
    @@ -1342,7 +621,7 @@ Builder.CreateResume(UnwindData); src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"> LLVM Compiler Infrastructure
    - Last modified: $Date: 2011-11-01 05:51:35 +0100 (Tue, 01 Nov 2011) $ + Last modified: $Date: 2012-04-12 17:17:35 +0200 (Thu, 12 Apr 2012) $ -- cgit v1.1