| ====================== |
| LLVM 3.3 Release Notes |
| ====================== |
| |
| .. contents:: |
| :local: |
| |
| Introduction |
| ============ |
| |
| This document contains the release notes for the LLVM Compiler Infrastructure, |
| release 3.3. 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 <http://llvm.org/releases/>`_. |
| |
| For more information about LLVM, including information about the latest |
| release, please check out the `main LLVM web site <http://llvm.org/>`_. If you |
| have questions or comments, the `LLVM Developer's Mailing List |
| <http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev>`_ is a good place to send |
| them. |
| |
| 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 <http://llvm.org/releases/>`_. |
| |
| Non-comprehensive list of changes in this release |
| ================================================= |
| |
| * The CellSPU port has been removed. It can still be found in older versions. |
| |
| * The IR-level extended linker APIs (for example, to link bitcode files out of |
| archives) have been removed. Any existing clients of these features should |
| move to using a linker with integrated LTO support. |
| |
| * LLVM and Clang's documentation has been migrated to the `Sphinx |
| <http://sphinx-doc.org/>`_ documentation generation system which uses |
| easy-to-write reStructuredText. See `llvm/docs/README.txt` for more |
| information. |
| |
| * TargetTransformInfo (TTI) is a new interface that can be used by IR-level |
| passes to obtain target-specific information, such as the costs of |
| instructions. Only "Lowering" passes such as LSR and the vectorizer are |
| allowed to use the TTI infrastructure. |
| |
| * We've improved the X86 and ARM cost model. |
| |
| * The Attributes classes have been completely rewritten and expanded. They now |
| support not only enumerated attributes and alignments, but "string" |
| attributes, which are useful for passing information to code generation. See |
| :doc:`HowToUseAttributes` for more details. |
| |
| * TableGen's syntax for instruction selection patterns has been simplified. |
| Instead of specifying types indirectly with register classes, you should now |
| specify types directly in the input patterns. See ``SparcInstrInfo.td`` for |
| examples of the new syntax. The old syntax using register classes still |
| works, but it will be removed in a future LLVM release. |
| |
| * MCJIT now supports exception handling. Support for it in the old jit will be |
| removed in the 3.4 release. |
| |
| * Command line options can now be grouped into categories which are shown in |
| the output of ``-help``. See :ref:`grouping options into categories`. |
| |
| * The appearance of command line options in ``-help`` that are inherited by |
| linking with libraries that use the LLVM Command line support library can now |
| be modified at runtime. See :ref:`cl::getRegisteredOptions`. |
| |
| AArch64 target |
| -------------- |
| |
| We've added support for AArch64, ARM's 64-bit architecture. Development is still |
| in fairly early stages, but we expect successful compilation when: |
| |
| - compiling standard compliant C99 and C++03 with Clang; |
| - using Linux as a target platform; |
| - where code + static data doesn't exceed 4GB in size (heap allocated data has |
| no limitation). |
| |
| Some additional functionality is also implemented, notably DWARF debugging, |
| GNU-style thread local storage and inline assembly. |
| |
| Hexagon Target |
| -------------- |
| |
| Removed support for legacy hexagonv2 and hexagonv3 processor architectures which |
| are no longer in use. Currently supported architectures are hexagonv4 and |
| hexagonv5. |
| |
| Mips target |
| -------------- |
| |
| New features and improvements: |
| |
| - Clang driver |
| - Support for Sourcery CodeBench Mips toolchain directories tree. |
| - Support for new command line options including: |
| - -mxgot/-mno-xgot |
| - -EL / -EB |
| - -mmicromips / -mno-micromips |
| - -msingle-float / -mdouble-float |
| - -mabi=32 (o32 abi) and -mabi=64 (n64 abi) |
| - Previously, options such as -mips16, -mmicromips, -mdsp and -mdspr2 were |
| not passed to the assembler. This issue has been fixed. |
| |
| - A number of changes have been made to improve the quality of DSP-ASE code |
| generation. |
| - Multiply and multiply-accumulate instructions can now use all four |
| accumulators. |
| - Instruction selection patterns have been added so that DSP instructions |
| are emitted without having to use builtins. |
| |
| - Delay slot filler pass can now search successor blocks for instructions to |
| fill delay slots (use option -disable-mips-df-succbb-search=false). |
| |
| PowerPC Target |
| -------------- |
| |
| New features and improvements: |
| |
| - PowerPC now supports an assembly parser. |
| - Support added for thread-local storage. 64-bit ELF subtarget only. |
| - Support added for medium and large code model (-mcmodel=medium,large). |
| Medium code model is now the default. 64-bit ELF subtarget only. |
| - Improved register allocation (fewer reserved registers). |
| - 64-bit atomic load and store are now supported. |
| - Improved code generation for unaligned memory accesses of scalar types. |
| - Improved performance of floating-point divide and square root |
| with -ffast-math. |
| - Support for predicated returns. |
| - Improved code generation for comparisons. |
| - Support added for inline setjmp and longjmp. |
| - Support added for many instructions introduced in PowerISA 2.04, 2.05, |
| and 2.06. |
| - Improved spill code for vector registers. |
| - Support added for -mno-altivec. |
| - ABI compatibility fixes for complex parameters, 128-bit integer parameters, |
| and varargs functions. 64-bit ELF subtarget only. |
| |
| Loop Vectorizer |
| --------------- |
| |
| We've continued the work on the loop vectorizer. The loop vectorizer now |
| has the following features: |
| |
| - Loops with unknown trip counts. |
| - Runtime checks of pointers. |
| - Reductions, Inductions. |
| - Min/Max reductions of integers. |
| - If Conversion. |
| - Pointer induction variables. |
| - Reverse iterators. |
| - Vectorization of mixed types. |
| - Vectorization of function calls. |
| - Partial unrolling during vectorization. |
| |
| The loop vectorizer is now enabled by default for -O3. |
| |
| SLP Vectorizer |
| -------------- |
| |
| LLVM now has a new SLP vectorizer. The new SLP vectorizer is not enabled by |
| default but can be enabled using the clang flag ``-fslp-vectorize``. The |
| BB-vectorizer can also be enabled using the command line flag |
| ``-fslp-vectorize-aggressive``. |
| |
| R600 Backend |
| ------------ |
| |
| The R600 backend was added in this release, it supports AMD GPUs (HD2XXX - |
| HD7XXX). This backend is used in AMD's Open Source graphics / compute drivers |
| which are developed as part of the `Mesa3D <http://www.mesa3d.org>`_ project. |
| |
| SystemZ/s390x Backend |
| --------------------- |
| |
| LLVM and clang now support IBM's z/Architecture. At present this support |
| is restricted to GNU/Linux (GNU triplet s390x-linux-gnu) and requires |
| z10 or greater. |
| |
| |
| Sub-project Status Update |
| ========================= |
| |
| In addition to the core LLVM 3.3 distribution of production-quality compiler |
| infrastructure, the LLVM project includes sub-projects that use the LLVM core |
| and share the same distribution license. This section provides updates on these |
| sub-projects. |
| |
| |
| DragonEgg: GCC front-ends, LLVM back-end |
| ---------------------------------------- |
| |
| `DragonEgg <http://dragonegg.llvm.org/>`_ is a |
| `GCC plugin <http://gcc.gnu.org/wiki/plugins>`_ that replaces GCC's optimizers |
| and code generators with LLVM's. It works with gcc-4.5, 4.6, 4.7 and 4.8, 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++. Note that gcc-4.6 is the best supported version, and that Ada in |
| particular doesn't work well with gcc-4.7 and newer. |
| |
| The `3.3 release <http://llvm.org/apt/>`_ has the following notable changes. |
| |
| - supports gcc-4.8 (requires gcc-4.8.1 or newer) |
| - object files can be written directly using LLVM's integrated assembler |
| - produces saner debug info |
| - bitfields can now contain arbitrary scalar types (useful for Ada) |
| |
| |
| LLDB: Low Level Debugger |
| ------------------------ |
| |
| `LLDB <http://lldb.llvm.org/>`_ is a ground-up implementation of a command-line |
| debugger, as well as a debugger API that can be used from scripts and other |
| applications. LLDB uses the following components of the LLVM core distribution |
| to support the latest language features and target support: |
| |
| - the Clang parser for high-quality parsing of C, C++ and Objective C |
| - the LLVM disassembler |
| - the LLVM JIT compiler (MCJIT) for expression evaluation |
| |
| The `3.3 release <http://lldb.llvm.org/download.html>`_ has the following notable changes. |
| |
| Features now supported on Linux: |
| |
| - Debugging multi-threaded programs |
| - Support for watchpoints |
| - Process list, attach and fork |
| - `vim integration <http://llvm.org/svn/llvm-project/lldb/branches/release_33/utils/vim-lldb/README>`_ for LLDB |
| |
| Portability: |
| |
| - Builds with cmake, ninja, auto-tools, clang 3.3 and gcc 4.6 |
| |
| Linux Improvements: |
| |
| - Improved register support including vector registers |
| - Basic debugging of i386 programs |
| - Bug fixes for expression evaluation |
| |
| |
| External Open Source Projects Using LLVM 3.3 |
| ============================================ |
| |
| 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.3. |
| |
| |
| Portable Computing Language (pocl) |
| ---------------------------------- |
| |
| In addition to producing an easily portable open source OpenCL implementation, |
| another major goal of `pocl <http://pocl.sourceforge.net/>`_ is improving |
| performance portability of OpenCL programs with compiler optimizations, reducing |
| the need for target-dependent manual optimizations. An important part of pocl is |
| a set of LLVM passes used to statically parallelize multiple work-items with the |
| kernel compiler, even in the presence of work-group barriers. This enables |
| static parallelization of the fine-grained static concurrency in the work groups |
| in multiple ways. |
| |
| TTA-based Co-design Environment (TCE) |
| ------------------------------------- |
| |
| `TCE <http://tce.cs.tut.fi/>`_ is a toolset for designing new processors based |
| on the Transport triggered architecture (TTA). The toolset provides a complete |
| co-design flow from C/C++ programs down to synthesizable VHDL/Verilog 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++/OpenCL 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. |
| |
| Just-in-time Adaptive Decoder Engine (Jade) |
| ------------------------------------------- |
| |
| `Jade <https://github.com/orcc/jade>`_ (Just-in-time Adaptive Decoder Engine) is |
| a generic video decoder engine using LLVM for just-in-time compilation of video |
| decoder configurations. Those configurations are designed by MPEG Reconfigurable |
| Video Coding (RVC) committee. MPEG RVC standard is built on a stream-based |
| dataflow representation of decoders. It is composed of a standard library of |
| coding tools written in RVC-CAL language and a dataflow configuration --- block |
| diagram --- of a decoder. |
| |
| Jade project is hosted as part of the Open RVC-CAL Compiler (`Orcc |
| <http://orcc.sf.net>`_) and requires it to translate the RVC-CAL standard |
| library of video coding tools into an LLVM assembly code. |
| |
| LDC - the LLVM-based D compiler |
| ------------------------------- |
| |
| `D <http://dlang.org>`_ is a language with C-like syntax and static typing. It |
| pragmatically combines efficiency, control, and modeling power, with safety and |
| programmer productivity. D supports powerful concepts like Compile-Time Function |
| Execution (CTFE) and Template Meta-Programming, provides an innovative approach |
| to concurrency and offers many classical paradigms. |
| |
| `LDC <http://wiki.dlang.org/LDC>`_ uses the frontend from the reference compiler |
| combined with LLVM as backend to produce efficient native code. LDC targets |
| x86/x86_64 systems like Linux, OS X and Windows and also Linux/PPC64. Ports to |
| other architectures like ARM are underway. |
| |
| |
| Additional Information |
| ====================== |
| |
| A wide variety of additional information is available on the `LLVM web page |
| <http://llvm.org/>`_, in particular in the `documentation |
| <http://llvm.org/docs/>`_ section. The web page also contains versions of the |
| API documentation which is up-to-date with the Subversion version of the source |
| code. You can access versions of these documents specific to this release by |
| going into the ``llvm/docs/`` directory in the LLVM tree. |
| |
| If you have any questions or comments about LLVM, please feel free to contact |
| us via the `mailing lists <http://llvm.org/docs/#maillist>`_. |
| |